diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-10-07 12:50:59 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-10-07 12:50:59 -0700 |
commit | ddfe969d6cbc8d23326cb9a3ca9a265d4e9d3e45 (patch) | |
tree | 16a6d739c06375c6531673f65f4b0a401bb047e1 /fever | |
parent | 98206059fc55e68b3b0f8c95b74c331dd56da84c (diff) |
Improve Fever API performances when marking a feed or group as read
Diffstat (limited to 'fever')
-rw-r--r-- | fever/fever.go | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/fever/fever.go b/fever/fever.go index b754a89..b7c8bc8 100644 --- a/fever/fever.go +++ b/fever/fever.go @@ -530,81 +530,53 @@ func (c *Controller) handleWriteItems(w http.ResponseWriter, r *http.Request) { } /* - mark=? where ? is replaced with feed or group + mark=feed as=read id=? where ? is replaced with the id of the feed or group to modify before=? where ? is replaced with the Unix timestamp of the the local client’s most recent items API request */ func (c *Controller) handleWriteFeeds(w http.ResponseWriter, r *http.Request) { userID := request.UserID(r) - logger.Debug("[Fever] Receiving mark=feed call for userID=%d", userID) - feedID := request.FormInt64Value(r, "id") - if feedID <= 0 { - return - } + before := time.Unix(request.FormInt64Value(r, "before"), 0) - builder := c.store.NewEntryQueryBuilder(userID) - builder.WithStatus(model.EntryStatusUnread) - builder.WithFeedID(feedID) - - before := request.FormInt64Value(r, "before") - if before > 0 { - t := time.Unix(before, 0) - builder.BeforeDate(t) - } + logger.Debug("[Fever] mark=feed, userID=%d, feedID=%d, before=%v", userID, feedID, before) - entryIDs, err := builder.GetEntryIDs() - if err != nil { - json.ServerError(w, err) + if feedID <= 0 { return } - err = c.store.SetEntriesStatus(userID, entryIDs, model.EntryStatusRead) - if err != nil { - json.ServerError(w, err) - return - } + go func() { + if err := c.store.MarkFeedAsRead(userID, feedID, before); err != nil { + logger.Error("[Fever] MarkFeedAsRead failed: %v", err) + } + }() json.OK(w, r, newBaseResponse()) } /* - mark=? where ? is replaced with feed or group + mark=group as=read id=? where ? is replaced with the id of the feed or group to modify before=? where ? is replaced with the Unix timestamp of the the local client’s most recent items API request */ func (c *Controller) handleWriteGroups(w http.ResponseWriter, r *http.Request) { userID := request.UserID(r) - logger.Debug("[Fever] Receiving mark=group call for userID=%d", userID) - groupID := request.FormInt64Value(r, "id") - if groupID < 0 { - return - } + before := time.Unix(request.FormInt64Value(r, "before"), 0) - builder := c.store.NewEntryQueryBuilder(userID) - builder.WithStatus(model.EntryStatusUnread) - builder.WithCategoryID(groupID) - - before := request.FormInt64Value(r, "before") - if before > 0 { - t := time.Unix(before, 0) - builder.BeforeDate(t) - } + logger.Debug("[Fever] mark=group, userID=%d, groupID=%d, before=%v", userID, groupID, before) - entryIDs, err := builder.GetEntryIDs() - if err != nil { - json.ServerError(w, err) + if groupID < 0 { return } - err = c.store.SetEntriesStatus(userID, entryIDs, model.EntryStatusRead) - if err != nil { - json.ServerError(w, err) - return - } + go func() { + if err := c.store.MarkCategoryAsRead(userID, groupID, before); err != nil { + logger.Error("[Fever] MarkCategoryAsRead failed: %v", err) + } + }() json.OK(w, r, newBaseResponse()) } |