diff options
Diffstat (limited to 'vendor/github.com/miniflux/miniflux-go/client.go')
-rw-r--r-- | vendor/github.com/miniflux/miniflux-go/client.go | 75 |
1 files changed, 49 insertions, 26 deletions
diff --git a/vendor/github.com/miniflux/miniflux-go/client.go b/vendor/github.com/miniflux/miniflux-go/client.go index 6a5f678..b43b8a9 100644 --- a/vendor/github.com/miniflux/miniflux-go/client.go +++ b/vendor/github.com/miniflux/miniflux-go/client.go @@ -196,7 +196,7 @@ func (c *Client) Feeds() (Feeds, error) { return feeds, nil } -// Feed gets a new feed. +// Feed gets a feed. func (c *Client) Feed(feedID int64) (*Feed, error) { body, err := c.request.Get(fmt.Sprintf("/v1/feeds/%d", feedID)) if err != nil { @@ -291,35 +291,28 @@ func (c *Client) Entry(feedID, entryID int64) (*Entry, error) { return entry, nil } -// Entries gets feed entries. -func (c *Client) Entries(feedID int64, filter *Filter) (*EntryResultSet, error) { - path := fmt.Sprintf("/v1/feeds/%d/entries", feedID) +// Entries fetch entries. +func (c *Client) Entries(filter *Filter) (*EntryResultSet, error) { + path := buildFilterQueryString("/v1/entries", filter) - if filter != nil { - values := url.Values{} - - if filter.Status != "" { - values.Set("status", filter.Status) - } - - if filter.Direction != "" { - values.Set("direction", filter.Direction) - } - - if filter.Order != "" { - values.Set("order", filter.Order) - } + body, err := c.request.Get(path) + if err != nil { + return nil, err + } + defer body.Close() - if filter.Limit != 0 { - values.Set("limit", strconv.Itoa(filter.Limit)) - } + var result EntryResultSet + decoder := json.NewDecoder(body) + if err := decoder.Decode(&result); err != nil { + return nil, fmt.Errorf("miniflux: response error (%v)", err) + } - if filter.Offset != 0 { - values.Set("offset", strconv.Itoa(filter.Offset)) - } + return &result, nil +} - path = fmt.Sprintf("%s?%s", path, values.Encode()) - } +// FeedEntries fetch feed entries. +func (c *Client) FeedEntries(feedID int64, filter *Filter) (*EntryResultSet, error) { + path := buildFilterQueryString(fmt.Sprintf("/v1/feeds/%d/entries", feedID), filter) body, err := c.request.Get(path) if err != nil { @@ -356,3 +349,33 @@ func (c *Client) UpdateEntries(entryIDs []int64, status string) error { func NewClient(endpoint, username, password string) *Client { return &Client{request: &request{endpoint: endpoint, username: username, password: password}} } + +func buildFilterQueryString(path string, filter *Filter) string { + if filter != nil { + values := url.Values{} + + if filter.Status != "" { + values.Set("status", filter.Status) + } + + if filter.Direction != "" { + values.Set("direction", filter.Direction) + } + + if filter.Order != "" { + values.Set("order", filter.Order) + } + + if filter.Limit >= 0 { + values.Set("limit", strconv.Itoa(filter.Limit)) + } + + if filter.Offset >= 0 { + values.Set("offset", strconv.Itoa(filter.Offset)) + } + + path = fmt.Sprintf("%s?%s", path, values.Encode()) + } + + return path +} |