From fdedfd54c702c8d91649cea401d65d4a34daf73a Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 5 Jan 2022 18:58:02 +0100 Subject: [PATCH] Moodbar: Disable moodbar loader for CUE songs --- src/moodbar/moodbarcontroller.cpp | 2 +- src/moodbar/moodbaritemdelegate.cpp | 9 +++++---- src/moodbar/moodbaritemdelegate.h | 2 +- src/moodbar/moodbarloader.cpp | 4 ++-- src/moodbar/moodbarloader.h | 2 +- src/playlist/playlist.cpp | 5 +++++ src/playlist/playlist.h | 1 + src/playlist/playlistview.cpp | 1 + 8 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/moodbar/moodbarcontroller.cpp b/src/moodbar/moodbarcontroller.cpp index ec01fab0..5191bc28 100644 --- a/src/moodbar/moodbarcontroller.cpp +++ b/src/moodbar/moodbarcontroller.cpp @@ -59,7 +59,7 @@ void MoodbarController::CurrentSongChanged(const Song &song) { QByteArray data; MoodbarPipeline *pipeline = nullptr; - const MoodbarLoader::Result result = app_->moodbar_loader()->Load(song.url(), &data, &pipeline); + const MoodbarLoader::Result result = app_->moodbar_loader()->Load(song.url(), song.has_cue(), &data, &pipeline); switch (result) { case MoodbarLoader::CannotLoad: diff --git a/src/moodbar/moodbaritemdelegate.cpp b/src/moodbar/moodbaritemdelegate.cpp index 27db3e14..c2eb33b9 100644 --- a/src/moodbar/moodbaritemdelegate.cpp +++ b/src/moodbar/moodbaritemdelegate.cpp @@ -102,6 +102,7 @@ QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize // Pixmaps are keyed off URL. const QUrl url = idx.sibling(idx.row(), Playlist::Column_Filename).data().toUrl(); + const bool has_cue = idx.sibling(idx.row(), Playlist::Column_HasCUE).data().toBool(); Data *data = nullptr; if (data_.contains(url)) { @@ -135,20 +136,20 @@ QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize } // We have to start loading the data from scratch. - StartLoadingData(url, data); + StartLoadingData(url, has_cue, data); return QPixmap(); } -void MoodbarItemDelegate::StartLoadingData(const QUrl &url, Data *data) { +void MoodbarItemDelegate::StartLoadingData(const QUrl &url, const bool has_cue, Data *data) { data->state_ = Data::State_LoadingData; // Load a mood file for this song and generate some colors from it QByteArray bytes; MoodbarPipeline *pipeline = nullptr; - switch (app_->moodbar_loader()->Load(url, &bytes, &pipeline)) { + switch (app_->moodbar_loader()->Load(url, has_cue, &bytes, &pipeline)) { case MoodbarLoader::CannotLoad: data->state_ = Data::State_CannotLoad; break; @@ -183,7 +184,7 @@ void MoodbarItemDelegate::ReloadAllColors() { Data *data = data_[url]; if (data->state_ == Data::State_Loaded) { - StartLoadingData(url, data); + StartLoadingData(url, false, data); } } diff --git a/src/moodbar/moodbaritemdelegate.h b/src/moodbar/moodbaritemdelegate.h index 3fd530a2..ef2186ed 100644 --- a/src/moodbar/moodbaritemdelegate.h +++ b/src/moodbar/moodbaritemdelegate.h @@ -77,7 +77,7 @@ class MoodbarItemDelegate : public QItemDelegate { private: QPixmap PixmapForIndex(const QModelIndex &idx, const QSize size); - void StartLoadingData(const QUrl &url, Data *data); + void StartLoadingData(const QUrl &url, const bool has_cue, Data *data); void StartLoadingColors(const QUrl &url, const QByteArray &bytes, Data *data); void StartLoadingImage(const QUrl &url, Data *data); diff --git a/src/moodbar/moodbarloader.cpp b/src/moodbar/moodbarloader.cpp index b3f6a985..52dd6aa0 100644 --- a/src/moodbar/moodbarloader.cpp +++ b/src/moodbar/moodbarloader.cpp @@ -93,9 +93,9 @@ QStringList MoodbarLoader::MoodFilenames(const QString &song_filename) { } -MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, QByteArray *data, MoodbarPipeline **async_pipeline) { +MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, const bool has_cue, QByteArray *data, MoodbarPipeline **async_pipeline) { - if (url.scheme() != "file") { + if (!url.isLocalFile() || has_cue) { return CannotLoad; } diff --git a/src/moodbar/moodbarloader.h b/src/moodbar/moodbarloader.h index e8fd7a61..6d5ee2e1 100644 --- a/src/moodbar/moodbarloader.h +++ b/src/moodbar/moodbarloader.h @@ -52,7 +52,7 @@ class MoodbarLoader : public QObject { WillLoadAsync }; - Result Load(const QUrl &url, QByteArray *data, MoodbarPipeline **async_pipeline); + Result Load(const QUrl &url, const bool has_cue, QByteArray *data, MoodbarPipeline **async_pipeline); private slots: void ReloadSettings(); diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 7cd19b90..882b4528 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -336,6 +336,8 @@ QVariant Playlist::data(const QModelIndex &idx, int role) const { case Column_Rating: return song.rating(); + case Column_HasCUE: return song.has_cue(); + } return QVariant(); @@ -1310,6 +1312,8 @@ bool Playlist::CompareItems(const int column, const Qt::SortOrder order, std::sh case Column_Rating: cmp(rating); + case Column_HasCUE: cmp(has_cue); + default: qLog(Error) << "No such column" << column; } @@ -1368,6 +1372,7 @@ QString Playlist::column_name(Column column) { case Column_Source: return tr("Source"); case Column_Mood: return tr("Mood"); case Column_Rating: return tr("Rating"); + case Column_HasCUE: return tr("CUE"); default: qLog(Error) << "No such column" << column;; } return ""; diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 08448fdc..a550b126 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -131,6 +131,7 @@ class Playlist : public QAbstractListModel { Column_Source, Column_Mood, Column_Rating, + Column_HasCUE, ColumnCount }; diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index ebf26064..a5e003f0 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -397,6 +397,7 @@ void PlaylistView::RestoreHeaderState() { header_->HideSection(Playlist::Column_Grouping); header_->HideSection(Playlist::Column_Mood); header_->HideSection(Playlist::Column_Rating); + header_->HideSection(Playlist::Column_HasCUE); header_->moveSection(header_->visualIndex(Playlist::Column_Track), 0);