package main import ( e "codeberg.org/pebbe/errors" "encoding/xml" "fmt" "os" "strings" "time" ) type Item struct { XMLName xml.Name `xml:"item"` UnixTime int64 `xml:"unixTime"` } var ( x = e.ExitErr data = make(map[string][]string) location *time.Location ) func main() { var err error location, err = time.LoadLocation("Europe/Amsterdam") x(err) files, err := os.ReadDir("..") x(err) for _, file := range files { filename := file.Name() if strings.HasSuffix(filename, ".xml") { doXml(filename) } } files, err = os.ReadDir("xml") x(err) for _, file := range files { filename := file.Name() if !strings.HasSuffix(filename, ".xml") { continue } aa := strings.Split(filename, ".") base := strings.Join(aa[1:len(aa)-2], ".") b, err := os.ReadFile("xml/" + filename) x(err) s := string(b) i := strings.Index(s, "\n \n")) for _, m := range data[base] { x(fp.WriteString(" " + m + "\n")) } x(fp.WriteString(" \n ")) x(fp.WriteString(stripMeta(s[i:]))) x(fp.Close()) x(os.Rename("xml/"+filename+".tmp", "xml/"+filename)) } } func doXml(filename string) { base := filename[:len(filename)-4] if _, ok := data[base]; !ok { data[base] = make([]string, 0) } b, err := os.ReadFile("../" + filename) x(err) var item Item x(xml.Unmarshal(b, &item)) t := time.Unix(item.UnixTime, 0).In(location) data[base] = append(data[base], fmt.Sprintf(``, t.Year(), int(t.Month()), t.Day())) } func stripMeta(s string) string { i1 := strings.Index(s, "") if i1 < 0 { return s } i2 := i1 + strings.Index(s[i1:], "") + 11 return s[:i1] + strings.TrimLeft(s[i2:], " \t\r\n") }