feat: pagination, back/forward nav, context menu, artist fav, image fix

**Artist portrait**
- Fix CDN URL: images.portrait.{hash,format} →
  https://static.qobuz.com/images/artists/covers/large/{hash}.{format}

**Section alignment**
- Qt::ToolButtonTextOnly on all section toggles so text is truly left-aligned

**Auth 401 race condition**
- qobuz_backend_set_token now uses blocking_lock() instead of spawning an
  async task, guaranteeing the token is set before any subsequent API call

**Pagination (infinite scroll)**
- Release sections load 50 at a time (was 500)
- ArtistSection tracks has_more + loaded count; scrolling to the bottom
  emits loadMoreRequested → ArtistView calls getArtistReleases(offset=N)
- AlbumListView gains addAlbums() for append; setReleases routes to
  setAlbums (offset=0) or appendAlbums (offset>0)

**Back/Forward navigation**
- MainToolBar exposes Back/Forward QActions (go-previous/go-next icons)
- MainWindow keeps a NavPage vector + index; pushNav() on every album/artist
  navigation; goBack/goForward re-navigate without pushing history

**Context menu on now-playing label**
- Right-click on track label in toolbar → "Go to Album" / "Go to Artist"
- MainToolBar stores current track; emits albumRequested/artistRequested
  signals wired to MainWindow's existing handlers

**Artist favourites button**
- ♡ Favourite / ♥ Favourited toggle in artist header
- Calls new addFavArtist / removeFavArtist (Rust + Qt backend wiring)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
joren
2026-03-25 18:25:12 +01:00
parent 963c9ad232
commit 3e96b6d7a8
157 changed files with 64124 additions and 84 deletions

View File

@@ -0,0 +1,87 @@
{
"BUILD_DIR" : "/home/joren/dev/qobuz-qt/build-viz/qobuz-qt_autogen",
"CMAKE_BINARY_DIR" : "/home/joren/dev/qobuz-qt/build-viz",
"CMAKE_CURRENT_BINARY_DIR" : "/home/joren/dev/qobuz-qt/build-viz",
"CMAKE_CURRENT_SOURCE_DIR" : "/home/joren/dev/qobuz-qt",
"CMAKE_SOURCE_DIR" : "/home/joren/dev/qobuz-qt",
"CROSS_CONFIG" : false,
"GENERATOR" : "Unix Makefiles",
"INCLUDE_DIR" : "/home/joren/dev/qobuz-qt/build-viz/qobuz-qt_autogen/include",
"INPUTS" :
[
"/home/joren/dev/qobuz-qt/res/icons/window.svg",
"/home/joren/dev/qobuz-qt/res/icons/document-preview.svg",
"/home/joren/dev/qobuz-qt/res/icons/help-about.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-media-lyrics.svg",
"/home/joren/dev/qobuz-qt/res/icons/window-close.svg",
"/home/joren/dev/qobuz-qt/res/icons/folder-temp.svg",
"/home/joren/dev/qobuz-qt/res/icons/data-information.svg",
"/home/joren/dev/qobuz-qt/res/icons/document-edit.svg",
"/home/joren/dev/qobuz-qt/res/icons/go-up.svg",
"/home/joren/dev/qobuz-qt/res/icons/edit-undo.svg",
"/home/joren/dev/qobuz-qt/res/icons/configure.svg",
"/home/joren/dev/qobuz-qt/res/icons/data-warning.svg",
"/home/joren/dev/qobuz-qt/res/icons/document-properties.svg",
"/home/joren/dev/qobuz-qt/res/icons/audio-volume-medium.svg",
"/home/joren/dev/qobuz-qt/res/icons/folder-txt.svg",
"/home/joren/dev/qobuz-qt/res/icons/visibility.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-track-show-active.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-refresh.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-skip-backward.svg",
"/home/joren/dev/qobuz-qt/res/icons/audio-volume-low.svg",
"/home/joren/dev/qobuz-qt/res/icons/go-previous.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-skip-forward.svg",
"/home/joren/dev/qobuz-qt/res/icons/window-maximize.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-calendar.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-sort-ascending.svg",
"/home/joren/dev/qobuz-qt/res/icons/headphones.svg",
"/home/joren/dev/qobuz-qt/res/icons/application-menu.svg",
"/home/joren/dev/qobuz-qt/res/icons/application-exit.svg",
"/home/joren/dev/qobuz-qt/res/icons/document-share.svg",
"/home/joren/dev/qobuz-qt/res/icons/exception.svg",
"/home/joren/dev/qobuz-qt/res/icons/description.svg",
"/home/joren/dev/qobuz-qt/res/icons/audio-volume-high.svg",
"/home/joren/dev/qobuz-qt/res/icons/im-user-away.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playback-pause.svg",
"/home/joren/dev/qobuz-qt/res/icons/document-save.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playlist-repeat-song.svg",
"/home/joren/dev/qobuz-qt/res/icons/hint.svg",
"/home/joren/dev/qobuz-qt/res/icons/list-remove.svg",
"/home/joren/dev/qobuz-qt/res/icons/edit-copy.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playlist-repeat.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-media-artist.svg",
"/home/joren/dev/qobuz-qt/res/icons/dialog-ok.svg",
"/home/joren/dev/qobuz-qt/res/icons/window-restore.svg",
"/home/joren/dev/qobuz-qt/res/icons/window-minimize.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playlist-append.svg",
"/home/joren/dev/qobuz-qt/res/icons/speaker.svg",
"/home/joren/dev/qobuz-qt/res/icons/starred-symbolic.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-optical-audio.svg",
"/home/joren/dev/qobuz-qt/res/icons/draw-donut.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-media-playlist.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playlist-shuffle.svg",
"/home/joren/dev/qobuz-qt/res/icons/edit-find.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-media-album-cover.svg",
"/home/joren/dev/qobuz-qt/res/icons/media-playback-start.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-media-track.svg",
"/home/joren/dev/qobuz-qt/res/icons/view-statistics.svg",
"/home/joren/dev/qobuz-qt/res/icons/list-add.svg",
"/home/joren/dev/qobuz-qt/res/icons/download.svg",
"/home/joren/dev/qobuz-qt/res/icons/data-error.svg",
"/home/joren/dev/qobuz-qt/res/icons/dialog-cancel.svg",
"/home/joren/dev/qobuz-qt/res/icons/draw-brush.svg",
"/home/joren/dev/qobuz-qt/res/icons/go-down.svg",
"/home/joren/dev/qobuz-qt/res/icons/non-starred-symbolic.svg"
],
"LOCK_FILE" : "/home/joren/dev/qobuz-qt/build-viz/CMakeFiles/qobuz-qt_autogen.dir/AutoRcc_res_EWIEGA46WW_Lock.lock",
"MULTI_CONFIG" : false,
"OPTIONS" : [ "-name", "res" ],
"OUTPUT_CHECKSUM" : "EWIEGA46WW",
"OUTPUT_NAME" : "qrc_res.cpp",
"RCC_EXECUTABLE" : "/usr/lib/qt6/libexec/rcc",
"RCC_LIST_OPTIONS" : [ "--list" ],
"SETTINGS_FILE" : "/home/joren/dev/qobuz-qt/build-viz/CMakeFiles/qobuz-qt_autogen.dir/AutoRcc_res_EWIEGA46WW_Used.txt",
"SOURCE" : "/home/joren/dev/qobuz-qt/res.qrc",
"USE_BETTER_GRAPH" : true,
"VERBOSITY" : 0
}