commit 7c7ea7f9141daa006b244c73e99071e3e4152b4a Author: Jannik Beyerstedt Date: Sun Nov 18 00:25:38 2018 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e90fc39 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +schedule.xml diff --git a/main.go b/main.go new file mode 100644 index 0000000..c1640e7 --- /dev/null +++ b/main.go @@ -0,0 +1,133 @@ +// TODO: docstring + +package main + +import ( + "encoding/csv" + "fmt" + "log" + "os" + "text/template" +) + +type frabSchedule struct { + Conf conference + Days []day +} + +type conference struct { + Title string + Start string // date (yyyy-mm-dd) + End string // date (yyyy-mm-dd) + Days int +} + +type day struct { + Index int + Date string // date (yyyy-mm-dd) + Start string // timedate (RFC3339) + End string // timedate (RFC3339) + Rooms []room +} + +type room struct { + Name string + Events []event +} + +type event struct { + ID int + GUID string // here: $dayIndex-$eventID + + Room string + Title string + Date string // timedate (RFC3339) + Start string // time (hh:mm) + Duration string // time (hh:mm) + + Persons []person +} + +type person struct { + ID int + Name string +} + +func main() { + fmt.Println("Conference Schedule CSV to Frab (Infobeamer) Converter") + + /* + * Data Input + */ + // read CSV contents + csvFile, err := os.Open("schedule.csv") + if err != nil { + log.Fatal("Error opening CSV file:\n", err) + } + + records, err := csv.NewReader(csvFile).ReadAll() + if err != nil { + log.Fatal("Error reading CSV file:\n", err) + } + + // omit title row + csvRecords := records[1:] + + fmt.Println(csvRecords) // TODO + + /* + * Data Conversion + */ + // new conference + conf := conference{"Test Conference", "2018-11-20", "2018-11-24", 4} + + // gather all rooms + // TODO + + // TODO: make room and day structs + + // sort by room and day into structure + // TODO + + // assign the conference and days to the schedule + day1Room1Event1 := event{123, "1-123", "Room", "Title", "2018-11-20", "10:00", "1:00", nil} + day1Room1Event2 := event{123, "1-123", "Room", "Title", "2018-11-20", "10:00", "0:30", nil} + day1Room1Events := []event{day1Room1Event1, day1Room1Event2} + + day1Room1 := room{"Room 1", day1Room1Events} + day1Rooms := []room{day1Room1} + + day1 := day{1, "2018-11-20", "2018-11-20T08:00", "2018-11-20T20:00", day1Rooms} + + days := []day{day1} + sched := frabSchedule{conf, days} + + /* + * Data Export + */ + fmt.Println(sched) + + // open output file + xmlOutput, err := os.Create("schedule.xml") + defer xmlOutput.Close() + if err != nil { + log.Fatal("Error opening XML file for output:\n", err) + } + + t := template.New("Frab XML Template") + t, err = t.ParseFiles("tmpl/schedule.xml") + if err != nil { + log.Fatal("Error parsing XML template:\n", err) + } + err = t.ExecuteTemplate(xmlOutput, "schedule.xml", sched) + if err != nil { + log.Println("Error executing XML template:\n", err) + } + + /* + * Print Summary + */ + // TODO + + fmt.Println("done") +} diff --git a/schedule.csv b/schedule.csv new file mode 100644 index 0000000..3d4afa5 --- /dev/null +++ b/schedule.csv @@ -0,0 +1,3 @@ +Titel, Raum, Von, Bis, Speaker +Very good talk, Holzhafen, 19.11.2018 12:00, 19.11.2018 13:00:00, +Keynote, Heuckenlock Ebbe, 19.11.2018 12:00, 19.11.2018 13:00:00, diff --git a/tmpl/schedule.xml b/tmpl/schedule.xml new file mode 100644 index 0000000..923ed39 --- /dev/null +++ b/tmpl/schedule.xml @@ -0,0 +1,39 @@ + +{{with .Conf}} + {{.Title}} + {{.Start}} + {{.End}} + {{.Days}} + 0:05 + +{{end}} + +{{range .Days}} + + {{range .Rooms}} + + {{range .Events}} + + {{.Room}} + {{.Title}} + {{.Date}} + {{.Start}} + {{.Duration}} + + {{range .Persons}}{{.Name}}{{end}} + + + + + + false + + + + + {{end}} + + {{end}} + +{{end}} + \ No newline at end of file