Count new chapters for the Updated tab badge

The tab strip needs to say how many series have an unread chapter without
the user opening the tab to find out, so listView carries the number
alongside the filtered items.

The count is taken over the whole reading set rather than the rendered
items, so it means the same thing on every tab instead of collapsing to
len(Items) on Updated and 0 everywhere else. Archived and finished are
excluded, matching what the Updated tab itself shows.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 09:32:58 +07:00
parent 1dc5b2ab65
commit 4d69e54c24
+9 -2
View File
@@ -38,6 +38,11 @@ type listView struct {
Tab string // "all", "fav", or "new"
Recent []Bookmark
Items []Bookmark
// NewCount is the badge on the Updated tab: how many series being read
// have a chapter out that has not been read. It is counted over the whole
// reading set, not the active tab, so the badge does not change meaning as
// the user moves between tabs.
NewCount int
}
// Initial is the monogram the templates show in place of a cover when the
@@ -178,12 +183,14 @@ func (h *webHandler) buildListView(tab string) (listView, error) {
recent = recent[:recentCount]
}
withNew := filterBookmarks(reading, func(b Bookmark) bool { return b.HasNewChapter() })
var items []Bookmark
switch tab {
case "fav":
items = filterBookmarks(reading, func(b Bookmark) bool { return b.Favorite })
case "new":
items = filterBookmarks(reading, func(b Bookmark) bool { return b.HasNewChapter() })
items = withNew
case "archived":
items = filterBookmarks(all, func(b Bookmark) bool { return b.Status == statusArchived })
case "finished":
@@ -192,7 +199,7 @@ func (h *webHandler) buildListView(tab string) (listView, error) {
tab = "all"
items = reading
}
return listView{Tab: tab, Recent: recent, Items: items}, nil
return listView{Tab: tab, Recent: recent, Items: items, NewCount: len(withNew)}, nil
}
func (h *webHandler) uiList(w http.ResponseWriter, r *http.Request) {