feat: add playlist browse/search discovery and follow controls
Some checks failed
Build for Windows / build-windows (push) Has been cancelled

This commit is contained in:
joren
2026-03-31 00:23:56 +02:00
parent 07d6c8a88d
commit 96bb21adff
13 changed files with 833 additions and 26 deletions

View File

@@ -4,8 +4,14 @@
#include "albumlistview.hpp"
#include <QComboBox>
#include <QLabel>
#include <QLineEdit>
#include <QJsonArray>
#include <QJsonObject>
#include <QSet>
#include <QPushButton>
#include <QStackedWidget>
#include <QTreeWidget>
#include <QWidget>
class GenreBrowserView : public QWidget
@@ -13,24 +19,57 @@ class GenreBrowserView : public QWidget
Q_OBJECT
public:
enum class BrowseMode {
Genres,
PlaylistSearch,
};
explicit GenreBrowserView(QobuzBackend *backend, QWidget *parent = nullptr);
void ensureGenresLoaded();
void setBrowseMode(BrowseMode mode);
signals:
void albumSelected(const QString &albumId);
void artistSelected(qint64 artistId);
void playlistSelected(qint64 playlistId);
private slots:
void onGenresLoaded(const QJsonObject &result);
void onFeaturedAlbumsLoaded(const QJsonObject &result);
void onFeaturedPlaylistsLoaded(const QJsonObject &result);
void onDiscoverPlaylistsLoaded(const QJsonObject &result);
void onPlaylistSearchLoaded(const QJsonObject &result);
void onSelectionChanged();
void onAlbumContextMenu(const QPoint &pos);
void onPlaylistActivated(QTreeWidgetItem *item, int column);
void onPlaylistContextMenu(const QPoint &pos);
private:
QobuzBackend *m_backend = nullptr;
QLabel *m_browseLabel = nullptr;
QLabel *m_genreLabel = nullptr;
QLabel *m_typeLabel = nullptr;
QLabel *m_playlistSearchLabel = nullptr;
QWidget *m_gapAfterKind = nullptr;
QWidget *m_gapAfterGenre = nullptr;
QComboBox *m_kindCombo = nullptr;
QComboBox *m_genreCombo = nullptr;
QComboBox *m_typeCombo = nullptr;
QLineEdit *m_playlistSearchBox = nullptr;
QPushButton *m_playlistSearchBtn = nullptr;
QStackedWidget *m_resultsStack = nullptr;
AlbumListView *m_albumList = nullptr;
QTreeWidget *m_playlistList = nullptr;
BrowseMode m_mode = BrowseMode::Genres;
bool m_genresLoaded = false;
int m_lastGenreComboIndex = 0;
QSet<qint64> m_multiGenreIds;
void refreshModeUi();
void refreshGenreTypeChoices();
QString currentGenreIds() const;
bool chooseMultiGenres();
void updateMultiGenreLabel();
void setPlaylistItems(const QJsonArray &items);
};