// Copyright (C) 2017 Marius Schellenberger package main import ( "encoding/json" "fmt" "os" ) type Dump struct { Articles []DumpArticle `json:"articles"` Snippets []Snippet `json:"snippets"` Users []User `json:"users"` } 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 verboseLog(prefix, title string, v bool) { if v { fmt.Fprintln(os.Stderr, prefix, title) } } func dump(path string, v bool) (err error) { i, err := NewDumpIndex(path) if err != nil { return } defer i.Close() bs, err := NewBoltStore() if err != nil { return } art, err := i.Get(false, indexName) if err != nil { return } var dump Dump titles, err := i.Dump() if err != nil { return } for _, title := range titles { art, err = i.Get(false, title) if err != nil { return } verboseLog("dump:", art.Title, v) dump.Articles = append(dump.Articles, DumpArticle{ Title: art.Title, LinkTitle: art.LinkTitle, MD: art.MD, Created: art.Created, Updated: art.Updated, Public: art.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 Dump 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 }