aboutsummaryrefslogtreecommitdiffhomepage
path: root/fever
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-10-07 12:50:59 -0700
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-10-07 12:50:59 -0700
commitddfe969d6cbc8d23326cb9a3ca9a265d4e9d3e45 (patch)
tree16a6d739c06375c6531673f65f4b0a401bb047e1 /fever
parent98206059fc55e68b3b0f8c95b74c331dd56da84c (diff)
Improve Fever API performances when marking a feed or group as read
Diffstat (limited to 'fever')
-rw-r--r--fever/fever.go64
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())
}