/* 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) } }