hydroxide-push/protonmail/calendar.go

102 lines
2.1 KiB
Go
Raw Normal View History

package protonmail
import (
"net/http"
"net/url"
"strconv"
)
const calendarPath = "/calendar/v1"
type CalendarFlags int
type Calendar struct {
ID string
Name string
Description string
Color string
Display int
Flags CalendarFlags
}
type CalendarEventPermissions int
type CalendarEvent struct {
ID string
CalendarID string
CalendarKeyPacket string
2020-09-14 13:09:50 +03:00
CreateTime Timestamp
LastEditTime Timestamp
Author string
Permissions CalendarEventPermissions
SharedKeyPacket string
SharedEvents []CalendarEventCard
CalendarEvents interface{}
PersonalEvent []CalendarEventCard
}
type CalendarEventCardType int
type CalendarEventCard struct {
Type CalendarEventCardType
Data string
Signature string
MemberID string
}
func (c *Client) ListCalendars(page, pageSize int) ([]*Calendar, error) {
v := url.Values{}
v.Set("Page", strconv.Itoa(page))
if pageSize > 0 {
v.Set("PageSize", strconv.Itoa(pageSize))
}
req, err := c.newRequest(http.MethodGet, calendarPath+"?"+v.Encode(), nil)
if err != nil {
return nil, err
}
var respData struct {
resp
Calendars []*Calendar
}
if err := c.doJSON(req, &respData); err != nil {
return nil, err
}
return respData.Calendars, nil
}
type CalendarEventFilter struct {
Start, End int64
Timezone string
Page, PageSize int
}
func (c *Client) ListCalendarEvents(calendarID string, filter *CalendarEventFilter) ([]*CalendarEvent, error) {
v := url.Values{}
v.Set("Start", strconv.FormatInt(filter.Start, 10))
v.Set("End", strconv.FormatInt(filter.End, 10))
v.Set("Timezone", filter.Timezone)
v.Set("Page", strconv.Itoa(filter.Page))
if filter.PageSize > 0 {
v.Set("PageSize", strconv.Itoa(filter.PageSize))
}
req, err := c.newRequest(http.MethodGet, calendarPath+"/"+calendarID+"/events?"+v.Encode(), nil)
if err != nil {
return nil, err
}
var respData struct {
resp
Events []*CalendarEvent
}
if err := c.doJSON(req, &respData); err != nil {
return nil, err
}
return respData.Events, nil
}