Show total unread articles count in category names #36

Closed
opened 2026-06-30 13:55:59 -07:00 by serrebi · 2 comments
Owner

Currently, BlindRSS displays the number of unread articles at the end of each feed (channel) name.

It is desirable to extend this behavior to categories: the category name should show the sum of unread articles across all feeds within that category. The count must be calculated recursively, including all nested subcategories. This will enable users to quickly see the total number of unread items in a category, regardless of its depth in the hierarchy.

Expected Behavior

  • For each category, calculate the total unread count as:
    total_unread = sum(unread_count of all direct feeds) + sum(total_unread of all child categories)
  • Display this total at the end of the category name, e.g. Technology (15) where 15 is the aggregated unread count.
  • The count should update automatically when:
    • A user marks an article as read/unread.
    • Feeds are added or removed from a category.
    • Categories are moved or nested/unnested.
  • Handle the following edge cases:
    • Deeply nested category structures (ensure recursion does not cause performance issues).
    • Categories with no direct feeds but containing subcategories with unread items.

Current Behavior

Only individual feeds show their unread count (e.g., Hacker News (3)). Categories do not display any aggregated unread counts.

Acceptance Criteria

  • Each category displays the correct total unread count, including all nested levels.
  • The count updates promptly (either in real time or on refresh) after any change affecting unread status or category structure.
  • Performance remains acceptable even with large numbers of feeds and deep category nesting (e.g., 1000+ feeds, 10+ levels of nesting).
  • UI formatting aligns with the existing style for feed unread counts (e.g., same font, color, and use of parentheses).

Additional Notes

  • It is suggested to consider caching the aggregated counts if real-time calculation becomes a performance bottleneck, with appropriate invalidation logic on relevant updates.
  • The solution should be consistent across all views where categories are displayed.
Currently, BlindRSS displays the number of unread articles at the end of each feed (channel) name. It is desirable to extend this behavior to categories: the category name should show the sum of unread articles across all feeds within that category. The count must be calculated recursively, including all nested subcategories. This will enable users to quickly see the total number of unread items in a category, regardless of its depth in the hierarchy. #### Expected Behavior - For each category, calculate the total unread count as: `total_unread = sum(unread_count of all direct feeds) + sum(total_unread of all child categories)` - Display this total at the end of the category name, e.g. `Technology (15)` where `15` is the aggregated unread count. - The count should update automatically when: - A user marks an article as read/unread. - Feeds are added or removed from a category. - Categories are moved or nested/unnested. - Handle the following edge cases: - Deeply nested category structures (ensure recursion does not cause performance issues). - Categories with no direct feeds but containing subcategories with unread items. #### Current Behavior Only individual feeds show their unread count (e.g., `Hacker News (3)`). Categories do not display any aggregated unread counts. #### Acceptance Criteria - [ ] Each category displays the correct total unread count, including all nested levels. - [ ] The count updates promptly (either in real time or on refresh) after any change affecting unread status or category structure. - [ ] Performance remains acceptable even with large numbers of feeds and deep category nesting (e.g., 1000+ feeds, 10+ levels of nesting). - [ ] UI formatting aligns with the existing style for feed unread counts (e.g., same font, color, and use of parentheses). #### Additional Notes - It is suggested to consider caching the aggregated counts if real-time calculation becomes a performance bottleneck, with appropriate invalidation logic on relevant updates. - The solution should be consistent across all views where categories are displayed. <!-- forgejo-github-sync: issue github=serrebidev/BlindRSS#34 -->
Author
Owner

Implemented and released in v1.72.0: https://github.com/serrebidev/BlindRSS/releases/tag/v1.72.0

Category names now show the recursive unread total (direct feeds + all nested subcategories), same (N) style as feeds, and it stays correct after marking articles read/unread, adding/removing feeds, and moving/nesting categories — no need to manually refresh.

This release also adds live status bar updates so screen readers can hear what BlindRSS is currently doing (which feed is being checked, which episode is downloading).

Implemented and released in v1.72.0: https://github.com/serrebidev/BlindRSS/releases/tag/v1.72.0 Category names now show the recursive unread total (direct feeds + all nested subcategories), same `(N)` style as feeds, and it stays correct after marking articles read/unread, adding/removing feeds, and moving/nesting categories — no need to manually refresh. This release also adds live status bar updates so screen readers can hear what BlindRSS is currently doing (which feed is being checked, which episode is downloading). <!-- forgejo-github-sync: comment github=serrebidev/BlindRSS#34/4848038641 -->
Author
Owner

Thanks! The issue is resolved and I’m closing it now.

Thanks! The issue is resolved and I’m closing it now. <!-- forgejo-github-sync: comment github=serrebidev/BlindRSS#34/4854632542 -->
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
serrebi/BlindRSS#36
No description provided.