diff options
Diffstat (limited to 'converter/main.go')
-rw-r--r-- | converter/main.go | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/converter/main.go b/converter/main.go new file mode 100644 index 0000000..a863b2c --- /dev/null +++ b/converter/main.go @@ -0,0 +1,127 @@ +/* +Sample code to convert an old tasks.gob file to a newer format +This is scrpited and dangerous, keep backups!!! +*/ +package main + +import ( + "encoding/gob" + "fmt" + "os" + "time" + + ws "git.spacehb.net/ws.git" +) + +func main() { + + TasksDoneConv := []ws.TaskDone{} + TasksConv := []ws.Task{} + TagsConv := []ws.Tag{} + + // Get old gobdata + f, err := os.Open("tasks.gob") + if err != nil { + panic(err) + } + + dec := gob.NewDecoder(f) + // old data format + Tasks := []string{} + TasksDone := []struct { + Text string + Date time.Time + }{} + err = dec.Decode(&TasksDone) + if err != nil { + panic(err) + } + err = dec.Decode(&Tasks) + if err != nil { + panic(err) + } + + // Get current gobdata + f, err = os.Open(ws.GetGobdataPath()) + if err != nil { + panic(err) + } + dec = gob.NewDecoder(f) + err = dec.Decode(&TasksConv) + if err != nil { + panic(err) + } + err = dec.Decode(&TasksDoneConv) + if err != nil { + panic(err) + } + err = dec.Decode(&TagsConv) + if err != nil { + panic(err) + } + + for _, v := range Tasks { + start := false + var tag []byte + var text []byte + for i := 0; i < len(v); i++ { + if v[i] == '{' { + start = true + i++ + } + if v[i] == '}' { + start = false + i++ + } + if start == true { + tag = append(tag, v[i]) + } + if start == false { + text = append(text, v[i]) + } + } + + tagstr := ws.Tag(tag) + if len(TagsConv) == 0 { + TagsConv = append(TagsConv, tagstr) + } + found := false + for _, v := range TagsConv { + if tagstr == v { + found = true + break + } + } + if !found { + TagsConv = append(TagsConv, ws.Tag(tag)) + } + + textstr := string(text[1:]) + + TasksConv = append(TasksConv, ws.Task{Text: textstr, Tag: tagstr}) + // fmt.Printf("tag: '%s' | text: '%s'\n", tag, text) + } + fmt.Printf("TagsConv: %#v\n", TagsConv) + for i, v := range TasksConv { + fmt.Printf("%2d. %s\n", i+1, v) + } + + // Save data to gobdata + f, err = os.Create(ws.GetGobdataPath()) + if err != nil { + panic(err) + } + enc := gob.NewEncoder(f) + err = enc.Encode(TasksConv) + if err != nil { + panic(err) + } + err = enc.Encode(TasksDoneConv) + if err != nil { + panic(err) + } + err = enc.Encode(TagsConv) + if err != nil { + panic(err) + } +} |