From 4dddd3607374d8988a7653adff1b4c50147e19e1 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Wed, 27 May 2026 08:03:56 -0600 Subject: [PATCH] feat(slint): per-context genre filter + favorites genre filtering Make genre_filter.rs selection per-context (HashMap keyed by "discover" / "favorites" + a current context the popup edits), so favorites filters independently from Discover. Discover keeps its server-side path unchanged (reads filter_ids("discover") explicitly; its genre buttons set the "discover" context on open). Favorites get a genre button in both toolbars that opens the shared popup in the "favorites" context, plus the popup overlay; derive_tracks / derive_albums filter client-side by the selected genre NAMES (selected_names expands parents to descendants). on_toggle / on_clear branch on the current context to re-derive favorites instead of re-fetching Discover. AlbumSummary gains an optional `genre` (favorites track album objects carry it; TrackItem can't, so a track id->genre map backs the tracks filter). Persisted per-context (legacy flat selection migrates to "discover"). cc --- crates/qbz-models/src/types.rs | 2 + crates/qbz-slint/src/favorites.rs | 63 +++++- crates/qbz-slint/src/genre_filter.rs | 203 ++++++++++++------ crates/qbz-slint/src/main.rs | 56 ++++- .../ui/discover/DiscoverBrowseView.slint | 3 +- crates/qbz-slint/ui/discover/HomeView.slint | 3 +- .../ui/favorites/FavoritesView.slint | 70 ++++++ crates/qbz-slint/ui/state.slint | 3 + 8 files changed, 327 insertions(+), 76 deletions(-) diff --git a/crates/qbz-models/src/types.rs b/crates/qbz-models/src/types.rs index 4643b036d..d42a67660 100644 --- a/crates/qbz-models/src/types.rs +++ b/crates/qbz-models/src/types.rs @@ -248,6 +248,8 @@ pub struct AlbumSummary { pub image: ImageSet, /// Label (if returned in track response) pub label: Option