Skip to content

fix(googlereader): fix incorrect read/starred toggling#4277

Merged
fguillot merged 1 commit into
miniflux:mainfrom
NatsuCamellia:natsucamellia
May 2, 2026
Merged

fix(googlereader): fix incorrect read/starred toggling#4277
fguillot merged 1 commit into
miniflux:mainfrom
NatsuCamellia:natsucamellia

Conversation

@NatsuCamellia

Copy link
Copy Markdown
Contributor

Have you followed these guidelines?

Problem

When using the Google Reader API to mark an entry as read or starred, if the entry was already in the target state, the handler would incorrectly toggle it to the opposite state instead of leaving it unchanged.

For example, calling the API to mark an already-read entry as read would result in it being marked as unread.

The root cause is a missing !read (and !starred) guard in the else if branch:

// Before (buggy)
if read && entry.Status == model.EntryStatusUnread {
    readEntryIDs = append(readEntryIDs, entry.ID)
} else if entry.Status == model.EntryStatusRead {
    unreadEntryIDs = append(unreadEntryIDs, entry.ID)
}

// After (fixed)
if read && entry.Status == model.EntryStatusUnread {
    readEntryIDs = append(readEntryIDs, entry.ID)
} else if !read && entry.Status == model.EntryStatusRead {
    unreadEntryIDs = append(unreadEntryIDs, entry.ID)
}

Without the !read check, the condition only tests the current state of the entry, not whether the requested state differs from it, causing idempotent API calls to have unintended side effects.

Changes

  • Fix read state toggling: add !read guard to the else if branch
    in the stream tag handler so that already-read entries are not
    re-queued as unread.
  • Apply the same fix to the starred state handler for consistency.

Example

When clicking "Mark all as read" in Read You to mark at least one articles as read, Read You tries to mark every article as read, including read articles.

Experiment steps:

  1. Every article is read initially
  2. Mark some articles as unread
  3. Mark all articles as read
  4. Check if any article becomes unread again

Before Change

Unread articles are marked as read, but read articles become unread again.

before.mp4

After Change

All articles become read.

after.mp4

Add a !read / !starred guard to the else-if branch so that the handler
only toggles the state when the requested value differs from the
current one.
@fguillot fguillot merged commit e433895 into miniflux:main May 2, 2026
11 checks passed
dsh2dsh added a commit to dsh2dsh/miniflux that referenced this pull request May 3, 2026
dsh2dsh added a commit to dsh2dsh/miniflux that referenced this pull request May 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants