GODT-35: New pmapi client and manager using resty

This commit is contained in:
James Houlahan
2021-02-22 18:23:51 +01:00
committed by Jakub
parent 1d538e8540
commit 2284e9ede1
163 changed files with 3333 additions and 8124 deletions

View File

@ -18,9 +18,11 @@
package pmapi
import (
"context"
"encoding/json"
"net/http"
"net/mail"
"github.com/go-resty/resty/v2"
)
// Event represents changes since the last check.
@ -137,7 +139,7 @@ type EventMessageUpdated struct {
ID string
Subject *string
Unread *int
Unread *Boolean
Flags *int64
Sender *mail.Address
ToList *[]*mail.Address
@ -163,62 +165,28 @@ type EventAddress struct {
Address *Address
}
type EventRes struct {
Res
*Event
}
type LatestEventRes struct {
Res
*Event
}
// GetEvent returns a summary of events that occurred since last. To get the latest event,
// provide an empty last value. The latest event is always empty.
func (c *client) GetEvent(last string) (event *Event, err error) {
return c.getEvent(last, 1)
}
func (c *client) getEvent(last string, numberOfMergedEvents int) (event *Event, err error) {
var req *http.Request
if last == "" {
req, err = c.NewRequest("GET", "/events/latest", nil)
if err != nil {
return
}
var res LatestEventRes
if err = c.DoJSON(req, &res); err != nil {
return
}
event, err = res.Event, res.Err()
} else {
req, err = c.NewRequest("GET", "/events/"+last, nil)
if err != nil {
return
}
var res EventRes
if err = c.DoJSON(req, &res); err != nil {
return
}
event, err = res.Event, res.Err()
if err != nil {
return
}
if event.More == 1 && numberOfMergedEvents < maxNumberOfMergedEvents {
var moreEvents *Event
if moreEvents, err = c.getEvent(event.EventID, numberOfMergedEvents+1); err != nil {
return
}
event = mergeEvents(event, moreEvents)
}
func (c *client) GetEvent(ctx context.Context, eventID string) (event *Event, err error) {
if eventID == "" {
eventID = "latest"
}
return event, err
var res struct {
*Event
More int
}
if _, err := c.do(ctx, func(r *resty.Request) (*resty.Response, error) {
return r.SetResult(&res).Get("/events/" + eventID)
}); err != nil {
return nil, err
}
// FIXME(conman): use mergeEvents() function.
return res.Event, nil
}
// mergeEvents combines an old events and a new events object.