Просмотр исходного кода

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 23 часов назад
Родитель
Сommit
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("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)
 			return
 		}
@@ -464,7 +468,11 @@ func (h *feverHandler) handleWriteItems(w http.ResponseWriter, r *http.Request)
 			slog.Int64("user_id", userID),
 			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)
 			return
 		}