56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package website
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.handmade.network/hmn/hmn/src/calendar"
|
|
"git.handmade.network/hmn/hmn/src/config"
|
|
"git.handmade.network/hmn/hmn/src/hmnurl"
|
|
"git.handmade.network/hmn/hmn/src/templates"
|
|
)
|
|
|
|
func CalendarIndex(c *RequestContext) ResponseData {
|
|
type CalData struct {
|
|
templates.BaseData
|
|
Calendars []string
|
|
Events []templates.CalendarEvent
|
|
BaseICalUrl string
|
|
}
|
|
events := calendar.GetFutureEvents()
|
|
|
|
templateEvents := make([]templates.CalendarEvent, 0, len(events))
|
|
for _, ev := range events {
|
|
templateEvents = append(templateEvents, templates.CalendarEventToTemplate(&ev))
|
|
}
|
|
|
|
calNames := []string{}
|
|
for _, c := range config.Config.Calendars {
|
|
calNames = append(calNames, c.Name)
|
|
}
|
|
|
|
calendarData := CalData{
|
|
BaseData: getBaseDataAutocrumb(c, "Calendar"),
|
|
Calendars: calNames,
|
|
Events: templateEvents,
|
|
BaseICalUrl: hmnurl.BuildCalendarICal(),
|
|
}
|
|
var res ResponseData
|
|
res.MustWriteTemplate("calendar_index.html", calendarData, c.Perf)
|
|
return res
|
|
}
|
|
|
|
func CalendarICal(c *RequestContext) ResponseData {
|
|
query := c.Req.URL.Query()
|
|
cals := make([]string, 0, len(query))
|
|
for key := range query {
|
|
cals = append(cals, key)
|
|
}
|
|
calBytes, err := calendar.GetICal(cals)
|
|
if err != nil {
|
|
return c.ErrorResponse(http.StatusInternalServerError, err)
|
|
}
|
|
var res ResponseData
|
|
res.Write(calBytes)
|
|
return res
|
|
}
|