Files
remark42/app/migrator/migrator.go
T
2018-01-31 03:12:25 -06:00

61 lines
1.5 KiB
Go

// Package migrator provides import/export functionality. It defines Importer and Exporter interfaces
// amd implements for disqus (importer only) and "native" remark (both importer and exporter).
// Also implements AutoBackup scheduler running exports as backups and saving them locally.
package migrator
import (
"io"
"log"
"os"
"github.com/pkg/errors"
"github.com/umputun/remark/app/store"
)
// Importer defines interface to convert posts from external sources
type Importer interface {
Import(r io.Reader, siteID string) error
}
// Exporter defines interface to export comments from internal store
type Exporter interface {
Export(w io.Writer, siteID string) error
}
// ImportParams defines everything needed to run import
type ImportParams struct {
DataStore store.Interface
InputFile string
Provider string
SiteID string
}
// ImportComments imports from given provider format and saves to store
func ImportComments(p ImportParams) error {
log.Printf("[INFO] import from %s (%s) to %s", p.InputFile, p.Provider, p.SiteID)
var importer Importer
switch p.Provider {
case "disqus":
importer = &Disqus{DataStore: p.DataStore}
case "native":
importer = &Remark{DataStore: p.DataStore}
default:
return errors.Errorf("unsupported import provider %s", p.Provider)
}
fh, err := os.Open(p.InputFile)
if err != nil {
return errors.Wrapf(err, "can't open import file %s", p.InputFile)
}
defer func() {
if err = fh.Close(); err != nil {
log.Printf("[WARN] can't close %s, %s", p.InputFile, err)
}
}()
return importer.Import(fh, p.SiteID)
}