More whereing and whening

cat-town
Dan Buch 7 years ago
parent 460a0200d4
commit 355e07cf53
Signed by: meatballhat
GPG Key ID: 9685130D8B763EA7

@ -36,6 +36,10 @@ var (
} }
) )
const (
dateFmt = "2006-01-02"
)
func main() { func main() {
flag.Parse() flag.Parse()
@ -72,27 +76,44 @@ func main() {
log.Fatalf("Unable to retrieve next %d events. %v", maxResults, err) log.Fatalf("Unable to retrieve next %d events. %v", maxResults, err)
} }
// days := generateDays(startT, endT) log.Printf("found %d events", len(events.Items))
found := []*miniEvent{} log.Printf("generating days between %v and %v", startT, endT)
days := generateDays(startT, endT)
foundEvents := []*lilEvent{}
defaultLocation := *defaultLocationFlag defaultLocation := *defaultLocationFlag
log.Printf("generated %d days between %v and %v", len(days), startT, endT)
if len(events.Items) > 0 { if len(events.Items) > 0 {
for _, i := range events.Items { for _, i := range events.Items {
var ( var (
startTime string startDate string
endTime string endDate string
) )
if i.Start.DateTime != "" { if i.Start.DateTime != "" {
startTime = i.Start.DateTime startT, err := time.Parse(time.RFC3339, i.Start.DateTime)
endTime = i.End.DateTime if err != nil {
log.Printf("error parsing start date: %v", err)
continue
}
endT, err := time.Parse(time.RFC3339, i.End.DateTime)
if err != nil {
log.Printf("error parsing end date: %v", err)
continue
}
startDate = startT.Format(dateFmt)
endDate = endT.Format(dateFmt)
} else { } else {
startTime = i.Start.Date startDate = i.Start.Date
endTime = i.End.Date endDate = i.End.Date
} }
evt := &miniEvent{ evt := &lilEvent{
Start: startTime, Start: startDate,
End: endTime, End: endDate,
Location: defaultLocation, Location: defaultLocation,
Summary: strings.ToLower(strings.TrimSpace(i.Summary)), Summary: strings.ToLower(strings.TrimSpace(i.Summary)),
} }
@ -115,21 +136,33 @@ func main() {
} }
evt.Location = loc evt.Location = loc
found = append(found, evt) if evt.Start == evt.End {
log.Printf("skipping same-day event on %s", evt.Start)
continue
}
foundEvents = append(foundEvents, evt)
} }
} else { } else {
fmt.Fprintf(os.Stderr, "No events found.\n") log.Println("No events found")
} }
// TODO: sort found events for _, day := range days {
log.Printf("working on date %v", day)
for _, evt := range foundEvents {
log.Printf("checking if %s is in range %s %s", day.Date, evt.Start, evt.End)
if evt.HasDate(day.Date) {
day.Location = evt.Location
}
}
}
for _, evt := range found { for _, day := range days {
asJson, err := json.Marshal(evt) asJson, err := json.Marshal(day)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) log.Printf("ERROR: %v", err)
continue continue
} }
fmt.Printf("%s\n", string(asJson)) fmt.Println(string(asJson))
} }
} }
@ -195,15 +228,69 @@ func saveToken(file string, token *oauth2.Token) {
json.NewEncoder(f).Encode(token) json.NewEncoder(f).Encode(token)
} }
type miniEvent struct { type lilEvent struct {
Start string `json:"start"` Start string `json:"start"`
StartDate string `json:"start_date"` End string `json:"end"`
End string `json:"end"` Location string `json:"loc"`
EndDate string `json:"end_date"` Summary string `json:"summ"`
Location string `json:"loc"` }
Summary string `json:"summ"`
func (e *lilEvent) HasDate(d string) bool {
if e.Start == d || e.End == d {
log.Printf("match for %s in %s or %s", d, e.Start, e.End)
return true
}
dT, err := time.Parse(dateFmt, d)
if err != nil {
log.Printf("ERROR: %v", err)
return false
}
dr := e.dateRange()
return dr[0].Before(dT) && dr[1].After(dT)
}
func (e *lilEvent) dateRange() []time.Time {
ret := []time.Time{}
for _, t := range []string{e.Start, e.End} {
parsedDate, err := time.Parse(dateFmt, t)
if err != nil {
log.Printf("ERROR: %v", err)
ret = append(ret, time.Time{})
continue
}
ret = append(ret, parsedDate)
}
return ret
}
type lilDay struct {
Date string `json:"date"`
Location string `json:"loc"`
} }
func generateDays(startT, endT time.Time) []string { func generateDays(startT, endT time.Time) []*lilDay {
return []string{} defaultLocation := *defaultLocationFlag
days := []*lilDay{
{
Date: startT.Format(dateFmt),
Location: defaultLocation,
},
}
curT := startT
for {
if curT.After(endT) {
return days
}
days = append(days, &lilDay{
Date: curT.Format(dateFmt),
Location: defaultLocation,
})
curT = curT.Add(24 * time.Hour)
}
} }

Loading…
Cancel
Save