feat(labels): follow / unfollow labels (mirrors Follow Artist)

Adds the same follow flow we already have for artists, applied to
labels. Confirmed against the inferred OpenAPI spec
(qbz-nix-docs/qobuz-api-inferred-openapi-v9.7.0.3.yaml) — the
existing /favorite/create, /favorite/delete and
/favorite/getUserFavorites endpoints already accept fav_type='label'
and label_ids, so no new Qobuz endpoints were needed.

Backend
- favorites_cache: new favorite_labels SQLite table + add / remove /
  sync / get methods alongside the artist counterparts. clear_all
  drops the new table on logout.
- commands_v2::favorites: 4 new commands —
  v2_get_cached_favorite_labels, v2_sync_cached_favorite_labels,
  v2_cache_favorite_label, v2_uncache_favorite_label. Same wiring as
  the artist commands.
- lib.rs invoke_handler registers the four new commands.

Frontend
- src/lib/stores/labelFavoritesStore.ts: clone of
  artistFavoritesStore — same in-memory Set, same isLoaded flag,
  toggle calls /favorite/create with fav_type=label, sync paginates
  /favorite/getUserFavorites?type=labels.
- routes/+page.svelte: loadLabelFavorites() called alongside the
  other three after login is confirmed.
- LabelView.svelte: heart-shape Follow button in the label header
  info column, mirroring ArtistDetailView's .artist-actions
  treatment. Reactive to the store via labelFavoritesVersion bump
  so any future Favorites view that toggles a label will keep this
  view in sync.
- i18n: label.follow / label.unfollow in all five locales.

cc
This commit is contained in:
vicrodh committed 2026-04-14 09:00:11 -06:00
1 parent b9a1f9be70
commit a9a9ba5050
11 files changed
+457 -5

No files matched your search

+3 -1
View File
@@ -138,7 +138,9 @@
"readLess": "WENIGER",
"seeAll": "Alle anzeigen",
"showMore": "Mehr anzeigen",
"showLess": "Weniger anzeigen"
"showLess": "Weniger anzeigen",
"follow": "Label folgen",
"unfollow": "Nicht mehr folgen"
},
"labelReleases": {
"albumCount": "{count} Alben",