Page MenuHomeMusing Studio

No OneTemporary

diff --git a/cmd/wfimport/main.go b/cmd/wfimport/main.go
index c0eaa1a..50c53d6 100644
--- a/cmd/wfimport/main.go
+++ b/cmd/wfimport/main.go
@@ -1,135 +1,152 @@
package main
import (
"encoding/json"
"flag"
"fmt"
"github.com/howeyc/gopass"
"github.com/writeas/go-writeas"
"github.com/writeas/wf-migrate"
"io/ioutil"
"os"
)
func main() {
// Get parameters
u := flag.String("u", "", "WriteFreely username")
host := flag.String("h", "write.as", "WriteFreely host")
flag.Parse()
// Validate parameters
args := flag.Args()
if *u == "" || len(args) == 0 {
fmt.Fprintf(os.Stderr, "usage: wfimport -u username [-h example.com] file1\n")
os.Exit(1)
}
fn := args[0]
// Get password
fmt.Print("Password: ")
pass, err := gopass.GetPasswdMasked()
if err != nil {
fmt.Fprintf(os.Stderr, "error reading pass: %v\n", err)
os.Exit(1)
}
// Validate password
if len(pass) == 0 {
fmt.Fprintf(os.Stderr, "Please enter your password.\n")
os.Exit(1)
}
// Create Write.as client
cl := writeas.NewClientWith(writeas.Config{
URL: "https://" + *host + "/api",
})
// Log user in
fmt.Printf("Logging in to %s...", *host)
_, err = cl.LogIn(*u, string(pass))
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
fmt.Print("OK\n")
defer func() {
fmt.Print("Logging out...")
cl.LogOut()
fmt.Print("OK\n")
}()
+ // Get user's current collections
+ fmt.Print("Getting your collections...")
+ colls, err := cl.GetUserCollections()
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "error %s: %v\n", fn, err)
+ os.Exit(1)
+ }
+ fmt.Print("OK\n")
+ userColls := map[string]bool{}
+ for _, c := range *colls {
+ userColls[c.Alias] = true
+ }
+
// Read file contents
// TODO: validate
fmt.Print("Reading file...")
content, err := ioutil.ReadFile(fn)
if err != nil {
fmt.Fprintf(os.Stderr, "error %s: %v\n", fn, err)
os.Exit(1)
}
fmt.Print("OK\n")
imp := wfmigrate.Import{}
fmt.Print("Parsing file...")
err = json.Unmarshal(content, &imp)
if err != nil {
fmt.Fprintf(os.Stderr, "error %s: %v\n", fn, err)
os.Exit(1)
}
fmt.Print("OK\n")
fmtln("Read user %s export.", imp.User.Username)
fmtln("Found %d collection(s).", len(imp.Collections))
fmtln("Found %d draft post(s).", len(imp.Posts))
// Create collections and their posts
for _, coll := range imp.Collections {
fmt.Printf("%s has %d post(s). ", coll.Alias, len(*coll.Posts))
if len(*coll.Posts) == 0 {
fmt.Print("Skipping.\n")
continue
}
fmt.Print("\n")
- fmt.Printf("Creating collection %s...", coll.Alias)
- _, err = cl.CreateCollection(&writeas.CollectionParams{
- Alias: coll.Alias,
- Title: coll.Title,
- Description: coll.Description,
- // TODO:
- //Stylesheet: coll.Stylesheet,
- //Public: coll.Public,
- })
- if err != nil {
- // TODO: handle alias collisions
- // TODO: handle hitting collection allowance limit
- fmt.Fprintf(os.Stderr, "error: %v\n", err)
- continue
+ if _, ok := userColls[coll.Alias]; ok {
+ fmtln("Adding to your existing collection %s.", coll.Alias)
+ } else {
+ fmt.Printf("Creating collection %s...", coll.Alias)
+ _, err = cl.CreateCollection(&writeas.CollectionParams{
+ Alias: coll.Alias,
+ Title: coll.Title,
+ Description: coll.Description,
+ // TODO:
+ //Stylesheet: coll.Stylesheet,
+ //Public: coll.Public,
+ })
+ if err != nil {
+ // TODO: handle alias collisions
+ // TODO: handle hitting collection allowance limit
+ fmt.Fprintf(os.Stderr, "error: %v\n", err)
+ continue
+ }
+ fmt.Print("OK\n")
}
- fmt.Print("OK\n")
// Create posts
for _, p := range *coll.Posts {
fmt.Printf("Creating post %s...", p.Slug)
_, err = wfmigrate.CreatePost(cl, p, coll.Alias)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
continue
}
fmt.Print("OK\n")
}
}
// Create anonymous / draft posts
for _, p := range imp.Posts {
fmt.Printf("Creating draft post from %s...", p.ID)
_, err = wfmigrate.CreatePost(cl, p, "")
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
continue
}
fmt.Print("OK\n")
}
}
func fmtln(s string, v ...interface{}) {
fmt.Printf(s+"\n", v...)
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Nov 25, 2:38 AM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3104708

Event Timeline