Преглед изворни кода

fix(fever): set the starred state instead of toggling it

The mark=item handler toggled the starred flag for both as=saved and
as=unsaved. Saving an entry that was already starred unstarred it, and
unsaving an entry that was not starred starred it, which happens when a
client retries or resyncs.

The handler now sets the requested state and does nothing when the
entry is already in that state. Entries are only sent to integrations
when they become starred, not on every repeated save.
Frédéric Guillot пре 1 дан
родитељ
комит
a0cc2e441e
1 измењених фајлова са 10 додато и 2 уклоњено
  1. 10 2
      internal/fever/handler.go

+ 10 - 2
internal/fever/handler.go

@@ -445,7 +445,11 @@ func (h *feverHandler) handleWriteItems(w http.ResponseWriter, r *http.Request)
 			slog.Int64("user_id", userID),
 			slog.Int64("user_id", userID),
 			slog.Int64("entry_id", entryID),
 			slog.Int64("entry_id", entryID),
 		)
 		)
-		if err := h.store.ToggleStarred(userID, entryID); err != nil {
+		if entry.Starred {
+			break
+		}
+
+		if err := h.store.SetEntriesStarredState(userID, []int64{entryID}, true); err != nil {
 			response.JSONServerError(w, r, err)
 			response.JSONServerError(w, r, err)
 			return
 			return
 		}
 		}
@@ -464,7 +468,11 @@ func (h *feverHandler) handleWriteItems(w http.ResponseWriter, r *http.Request)
 			slog.Int64("user_id", userID),
 			slog.Int64("user_id", userID),
 			slog.Int64("entry_id", entryID),
 			slog.Int64("entry_id", entryID),
 		)
 		)
-		if err := h.store.ToggleStarred(userID, entryID); err != nil {
+		if !entry.Starred {
+			break
+		}
+
+		if err := h.store.SetEntriesStarredState(userID, []int64{entryID}, false); err != nil {
 			response.JSONServerError(w, r, err)
 			response.JSONServerError(w, r, err)
 			return
 			return
 		}
 		}