aboutsummaryrefslogtreecommitdiff
path: root/converter/main.go
blob: a863b2c62dcbfc23c6fd560ec04de20ceacd846d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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)
	}
}