93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
// Copyright (C) 2017 Marius Schellenberger
|
|
|
|
package db
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
|
|
"git.giftfish.de/ston1th/gowiki/pkg/core"
|
|
)
|
|
|
|
type DBDump struct {
|
|
Pages []DumpPage `json:"pages"`
|
|
Snippets []Snippet `json:"snippets"`
|
|
Users []User `json:"users"`
|
|
}
|
|
|
|
type DumpPage 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 verboseLog(prefix, title string, v bool) {
|
|
if v {
|
|
fmt.Fprintln(os.Stderr, prefix, title)
|
|
}
|
|
}
|
|
|
|
func Dump(path string, v bool) (err error) {
|
|
bs, err := NewBoltStore()
|
|
if err != nil {
|
|
return
|
|
}
|
|
var dump DBDump
|
|
//TODO bs.GetAllPages
|
|
var pages []*core.Page
|
|
for _, p := range pages {
|
|
if err != nil {
|
|
return
|
|
}
|
|
verboseLog("dump:", p.Title, v)
|
|
dump.Pages = append(dump.Pages, DumpPage{
|
|
Title: p.Title,
|
|
LinkTitle: p.LinkTitle,
|
|
MD: p.MD,
|
|
Created: p.Created,
|
|
Updated: p.Updated,
|
|
Public: p.Public,
|
|
})
|
|
}
|
|
//TODO snippets
|
|
//verboseLog("dump:", "snippets", v)
|
|
verboseLog("dump:", "users", v)
|
|
dump.Users, err = bs.DumpUsers()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return json.NewEncoder(os.Stdout).Encode(dump)
|
|
}
|
|
|
|
func Restore(path string, v bool) (err error) {
|
|
i, err := NewIndex(path)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer i.Close()
|
|
bs, err := NewBoltStore()
|
|
if err != nil {
|
|
return
|
|
}
|
|
var dump DBDump
|
|
err = json.NewDecoder(os.Stdin).Decode(&dump)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for _, art := range dump.Articles {
|
|
verboseLog("restore:", art.Title, v)
|
|
err = i.Restore(&art)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
//TODO snippets
|
|
//verboseLog("restore:", "snippets", v)
|
|
verboseLog("restore:", "users", v)
|
|
err = bs.RestoreUsers(dump.Users)
|
|
return
|
|
}
|