gowiki/dump.go

76 lines
1.5 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"github.com/blevesearch/bleve"
)
type DumpArticle struct {
Title string `json:"title"`
LinkTitle string `json:"link_title"`
MD string `json:"md"`
Created string `json:"created"`
Updated string `json:"updated"`
Public bool `json:"public"`
}
func dumpWiki() error {
index, err := bleve.OpenUsing(bleveStore, map[string]interface{}{"read_only": true})
if err != nil {
return err
}
engine = NewEngine(index)
art, err := engine.Get(false, indexName)
if err != nil {
return err
}
var arts []DumpArticle
titles, err := engine.Dump()
if err != nil {
return err
}
for _, title := range titles {
art, err = engine.Get(false, title)
if err != nil {
return err
}
fmt.Fprintln(os.Stderr, "dump:", art.Title)
arts = append(arts, DumpArticle{
Title: art.Title,
LinkTitle: art.LinkTitle,
MD: art.MD,
Created: art.Created,
Updated: art.Updated,
Public: art.Public,
})
}
return json.NewEncoder(os.Stdout).Encode(arts)
}
func restoreWiki() (err error) {
index, err := bleve.Open(bleveStore)
if err != nil {
mapping := bleve.NewIndexMapping()
index, err = bleve.New(bleveStore, mapping)
if err != nil {
return
}
}
engine = NewEngine(index)
var arts []DumpArticle
err = json.NewDecoder(os.Stdin).Decode(&arts)
if err != nil {
return
}
for _, art := range arts {
fmt.Fprintln(os.Stderr, "restore:", art.Title)
err = engine.Restore(art)
if err != nil {
return
}
}
return
}