From dd72fb4ca590062cfe886c88ad098adc91deb161 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 18 Feb 2023 14:09:27 +0100 Subject: [PATCH] Use C++11 enum class --- ext/libstrawberry-tagreader/tagreadergme.h | 16 +- src/analyzer/analyzerbase.cpp | 4 +- src/analyzer/boomanalyzer.cpp | 2 +- src/analyzer/sonogram.cpp | 2 +- src/collection/collection.cpp | 8 +- src/collection/collectionbackend.cpp | 4 +- src/collection/collectionbackend.h | 2 +- src/collection/collectionfilteroptions.cpp | 2 +- src/collection/collectionfilteroptions.h | 10 +- src/collection/collectionfilterwidget.cpp | 45 +- src/collection/collectionfilterwidget.h | 2 +- src/collection/collectionmodel.cpp | 356 +++++------ src/collection/collectionmodel.h | 50 +- src/collection/collectionplaylistitem.cpp | 10 +- src/collection/collectionplaylistitem.h | 2 +- src/collection/collectionquery.cpp | 4 +- src/collection/collectionview.cpp | 2 +- src/collection/collectionwatcher.cpp | 6 +- src/collection/groupbydialog.cpp | 40 +- src/collection/savedgroupingmanager.cpp | 44 +- src/context/contextview.cpp | 22 +- src/core/commandlineoptions.cpp | 78 +-- src/core/commandlineoptions.h | 34 +- src/core/mainwindow.cpp | 173 +++-- src/core/mainwindow.h | 2 +- src/core/metatypes.cpp | 50 +- src/core/mpris2.cpp | 32 +- src/core/musicstorage.h | 6 +- src/core/networkproxyfactory.cpp | 10 +- src/core/networkproxyfactory.h | 6 +- src/core/player.cpp | 128 ++-- src/core/player.h | 4 +- src/core/song.cpp | 590 +++++++++--------- src/core/song.h | 96 +-- src/core/songloader.cpp | 100 +-- src/core/songloader.h | 11 +- src/core/thread.cpp | 2 +- src/core/thread.h | 2 +- src/core/urlhandler.cpp | 2 +- src/core/urlhandler.h | 4 +- .../albumcoverchoicecontroller.cpp | 52 +- src/covermanager/albumcoverchoicecontroller.h | 2 +- src/covermanager/albumcoverexport.cpp | 12 +- src/covermanager/albumcoverexport.h | 10 +- src/covermanager/albumcoverfetcher.h | 2 +- src/covermanager/albumcoverloader.cpp | 40 +- src/covermanager/albumcoverloader.h | 2 +- src/covermanager/albumcovermanager.cpp | 38 +- src/covermanager/albumcovermanager.h | 10 +- src/covermanager/coverexportrunnable.cpp | 10 +- src/covermanager/discogscoverprovider.cpp | 8 +- src/covermanager/discogscoverprovider.h | 8 +- src/covermanager/lastfmcoverprovider.h | 2 +- src/device/cddasongloader.cpp | 8 +- src/device/connecteddevice.cpp | 7 +- src/device/connecteddevice.h | 2 +- src/device/devicedatabasebackend.cpp | 8 +- src/device/deviceinfo.h | 8 +- src/device/devicemanager.cpp | 4 +- src/device/deviceproperties.cpp | 18 +- src/device/deviceview.cpp | 2 +- src/device/filesystemdevice.cpp | 4 +- src/device/filesystemdevice.h | 2 +- src/device/gpoddevice.cpp | 4 +- src/device/gpodloader.cpp | 6 +- src/device/mtpconnection.cpp | 18 +- src/device/mtpdevice.cpp | 20 +- src/device/mtploader.cpp | 2 +- src/dialogs/edittagdialog.cpp | 86 +-- src/dialogs/edittagdialog.h | 20 +- src/engine/engine_fwd.h | 13 +- src/engine/enginebase.cpp | 4 +- src/engine/enginebase.h | 11 +- src/engine/enginetype.cpp | 22 +- src/engine/enginetype.h | 2 +- src/engine/gstengine.cpp | 46 +- src/engine/gstenginepipeline.cpp | 2 +- src/engine/vlcengine.cpp | 22 +- .../globalshortcutsbackend-gnome.cpp | 2 +- .../globalshortcutsbackend-kde.cpp | 2 +- .../globalshortcutsbackend-macos.mm | 2 +- .../globalshortcutsbackend-mate.cpp | 2 +- .../globalshortcutsbackend-win.cpp | 2 +- .../globalshortcutsbackend-x11.cpp | 2 +- .../globalshortcutsbackend.cpp | 14 +- src/globalshortcuts/globalshortcutsbackend.h | 16 +- .../globalshortcutsmanager.cpp | 12 +- src/internet/internetplaylistitem.cpp | 4 +- src/internet/internetsearchmodel.cpp | 52 +- src/internet/internetsearchview.cpp | 24 +- src/internet/internetsearchview.h | 8 +- src/moodbar/moodbarcontroller.cpp | 12 +- src/moodbar/moodbaritemdelegate.cpp | 38 +- src/moodbar/moodbaritemdelegate.h | 14 +- src/moodbar/moodbarloader.cpp | 10 +- src/moodbar/moodbarloader.h | 2 +- src/moodbar/moodbarpipeline.cpp | 2 +- src/moodbar/moodbarproxystyle.cpp | 40 +- src/moodbar/moodbarproxystyle.h | 7 +- src/moodbar/moodbarrenderer.cpp | 20 +- src/moodbar/moodbarrenderer.h | 12 +- src/musicbrainz/musicbrainzclient.cpp | 6 +- src/musicbrainz/musicbrainzclient.h | 28 +- src/organize/organize.cpp | 24 +- src/organize/organizedialog.cpp | 4 +- src/organize/organizeerrordialog.cpp | 13 +- src/organize/organizeerrordialog.h | 10 +- src/osd/osdbase.cpp | 76 +-- src/osd/osdbase.h | 10 +- src/osd/osdpretty.cpp | 18 +- src/osd/osdpretty.h | 6 +- src/playlist/playlist.cpp | 110 ++-- src/playlist/playlist.h | 24 +- src/playlist/playlistbackend.cpp | 26 +- src/playlist/playlistbackend.h | 6 +- src/playlist/playlistcontainer.cpp | 2 +- src/playlist/playlistfilterparser.cpp | 12 +- src/playlist/playlistfilterparser.h | 4 +- src/playlist/playlistitem.cpp | 46 +- src/playlist/playlistitem.h | 8 +- src/playlist/playlistitemmimedata.h | 6 +- src/playlist/playlistmanager.cpp | 16 +- src/playlist/playlistsaveoptionsdialog.cpp | 8 +- src/playlist/playlistsequence.cpp | 88 +-- src/playlist/playlistsequence.h | 24 +- src/playlist/playlistundocommands.cpp | 8 +- src/playlist/playlistundocommands.h | 16 +- src/playlist/playlistview.cpp | 40 +- src/playlist/playlistview.h | 2 +- src/playlist/songloaderinserter.cpp | 8 +- src/playlistparsers/asxiniparser.h | 2 +- src/playlistparsers/asxparser.cpp | 2 +- src/playlistparsers/asxparser.h | 2 +- src/playlistparsers/cueparser.h | 2 +- src/playlistparsers/m3uparser.cpp | 6 +- src/playlistparsers/m3uparser.h | 4 +- src/playlistparsers/parserbase.cpp | 10 +- src/playlistparsers/parserbase.h | 2 +- src/playlistparsers/playlistparser.cpp | 12 +- src/playlistparsers/playlistparser.h | 6 +- src/playlistparsers/plsparser.h | 2 +- src/playlistparsers/wplparser.h | 2 +- src/playlistparsers/xspfparser.cpp | 2 +- src/playlistparsers/xspfparser.h | 2 +- src/qobuz/qobuzbaserequest.h | 18 +- src/qobuz/qobuzfavoriterequest.cpp | 52 +- src/qobuz/qobuzfavoriterequest.h | 9 +- src/qobuz/qobuzrequest.cpp | 84 +-- src/qobuz/qobuzrequest.h | 8 +- src/qobuz/qobuzservice.cpp | 36 +- src/qobuz/qobuzstreamurlrequest.cpp | 8 +- src/qobuz/qobuzurlhandler.cpp | 8 +- src/radios/radiobackend.cpp | 2 +- src/radios/radiochannel.cpp | 2 +- src/radios/radiochannel.h | 3 +- src/radios/radioitem.h | 2 +- src/radios/radiomodel.cpp | 2 +- src/radios/radiomodel.h | 2 +- src/radios/radioparadiseservice.cpp | 2 +- src/radios/radioplaylistitem.cpp | 4 +- src/radios/somafmservice.cpp | 2 +- src/scrobbler/audioscrobbler.cpp | 24 +- src/scrobbler/scrobblingapi20.cpp | 11 +- src/scrobbler/scrobblingapi20.h | 2 +- src/scrobbler/subsonicscrobbler.cpp | 4 +- src/settings/appearancesettingspage.cpp | 43 +- src/settings/appearancesettingspage.h | 24 +- src/settings/backendsettingspage.cpp | 87 ++- src/settings/backendsettingspage.h | 17 +- src/settings/behavioursettingspage.cpp | 87 ++- src/settings/behavioursettingspage.h | 42 +- src/settings/collectionsettingspage.cpp | 87 ++- src/settings/collectionsettingspage.h | 24 +- src/settings/contextsettingspage.cpp | 18 +- src/settings/contextsettingspage.h | 6 +- src/settings/coverssettingspage.cpp | 12 +- src/settings/lyricssettingspage.cpp | 12 +- src/settings/moodbarsettingspage.cpp | 2 +- src/settings/networkproxysettingspage.cpp | 19 +- src/settings/notificationssettingspage.cpp | 30 +- src/settings/playlistsettingspage.cpp | 20 +- src/settings/playlistsettingspage.h | 10 +- src/settings/qobuzsettingspage.cpp | 6 +- src/settings/scrobblersettingspage.cpp | 56 +- src/settings/settingsdialog.cpp | 36 +- src/settings/settingsdialog.h | 38 +- src/settings/subsonicsettingspage.cpp | 12 +- src/settings/subsonicsettingspage.h | 6 +- src/settings/tidalsettingspage.cpp | 25 +- src/settings/tidalsettingspage.h | 8 +- src/smartplaylists/playlistgenerator.h | 14 +- .../playlistgeneratorinserter.cpp | 12 +- .../playlistgeneratorinserter.h | 2 +- src/smartplaylists/playlistquerygenerator.cpp | 8 +- src/smartplaylists/playlistquerygenerator.h | 6 +- .../smartplaylistquerywizardplugin.cpp | 14 +- .../smartplaylistquerywizardplugin.h | 2 +- src/smartplaylists/smartplaylistsearch.cpp | 18 +- src/smartplaylists/smartplaylistsearch.h | 12 +- .../smartplaylistsearchpreview.cpp | 14 +- .../smartplaylistsearchterm.cpp | 324 +++++----- src/smartplaylists/smartplaylistsearchterm.h | 118 ++-- .../smartplaylistsearchtermwidget.cpp | 54 +- src/smartplaylists/smartplaylistsitem.h | 4 +- src/smartplaylists/smartplaylistsmodel.cpp | 32 +- src/smartplaylists/smartplaylistwizard.cpp | 2 +- src/subsonic/subsonicbaserequest.cpp | 2 +- src/subsonic/subsonicrequest.cpp | 14 +- src/subsonic/subsonicservice.cpp | 14 +- src/subsonic/subsonicurlhandler.cpp | 6 +- src/tidal/tidalbaserequest.h | 18 +- src/tidal/tidalfavoriterequest.cpp | 52 +- src/tidal/tidalfavoriterequest.h | 13 +- src/tidal/tidalrequest.cpp | 76 +-- src/tidal/tidalrequest.h | 8 +- src/tidal/tidalservice.cpp | 40 +- src/tidal/tidalstreamurlrequest.cpp | 22 +- src/tidal/tidalurlhandler.cpp | 8 +- src/transcoder/transcoder.cpp | 60 +- src/transcoder/transcoder.h | 4 +- src/transcoder/transcoderoptionsdialog.cpp | 18 +- src/utilities/threadutils.cpp | 4 +- src/utilities/threadutils.h | 2 +- src/widgets/fancytabwidget.cpp | 42 +- src/widgets/fancytabwidget.h | 14 +- src/widgets/fileview.cpp | 4 +- src/widgets/loginstatewidget.cpp | 16 +- src/widgets/loginstatewidget.h | 6 +- src/widgets/playingwidget.cpp | 32 +- src/widgets/playingwidget.h | 14 +- src/widgets/prettyslider.cpp | 4 +- src/widgets/prettyslider.h | 6 +- tests/src/collectionbackend_test.cpp | 12 +- tests/src/collectionmodel_test.cpp | 26 +- tests/src/metatypes_env.h | 8 +- tests/src/mock_playlistitem.cpp | 2 +- tests/src/playlist_test.cpp | 56 +- 237 files changed, 2915 insertions(+), 2840 deletions(-) diff --git a/ext/libstrawberry-tagreader/tagreadergme.h b/ext/libstrawberry-tagreader/tagreadergme.h index c55b45b7a..035a74b91 100644 --- a/ext/libstrawberry-tagreader/tagreadergme.h +++ b/ext/libstrawberry-tagreader/tagreadergme.h @@ -55,14 +55,22 @@ constexpr int XID6_OFFSET = (0x101C0 + 64); constexpr int NANO_PER_MS = 1000000; -enum xID6_STATUS { +enum class xID6_STATUS { ON = 0x26, - OFF = 0x27, + OFF = 0x27 }; -enum xID6_ID { SongName = 0x01, GameName = 0x02, ArtistName = 0x03 }; +enum class xID6_ID { + SongName = 0x01, + GameName = 0x02, + ArtistName = 0x03 +}; -enum xID6_TYPE { Length = 0x0, String = 0x1, Integer = 0x4 }; +enum class xID6_TYPE { + Length = 0x0, + String = 0x1, + Integer = 0x4 +}; void Read(const QFileInfo &file_info, spb::tagreader::SongMetadata *song_info); qint16 GetNextMemAddressAlign32bit(qint16 input); diff --git a/src/analyzer/analyzerbase.cpp b/src/analyzer/analyzerbase.cpp index 60d10054d..e89f76d03 100644 --- a/src/analyzer/analyzerbase.cpp +++ b/src/analyzer/analyzerbase.cpp @@ -108,7 +108,7 @@ void Analyzer::Base::paintEvent(QPaintEvent *e) { p.fillRect(e->rect(), palette().color(QPalette::Window)); switch (engine_->state()) { - case Engine::Playing: { + case Engine::State::Playing: { const Engine::Scope &thescope = engine_->scope(timeout_); int i = 0; @@ -126,7 +126,7 @@ void Analyzer::Base::paintEvent(QPaintEvent *e) { break; } - case Engine::Paused: + case Engine::State::Paused: is_playing_ = false; analyze(p, lastscope_, new_frame_); break; diff --git a/src/analyzer/boomanalyzer.cpp b/src/analyzer/boomanalyzer.cpp index fd3d21276..f7e2abca0 100644 --- a/src/analyzer/boomanalyzer.cpp +++ b/src/analyzer/boomanalyzer.cpp @@ -110,7 +110,7 @@ void BoomAnalyzer::transform(Scope &s) { void BoomAnalyzer::analyze(QPainter &p, const Scope &scope, const bool new_frame) { - if (!new_frame || engine_->state() == Engine::Paused) { + if (!new_frame || engine_->state() == Engine::State::Paused) { p.drawPixmap(0, 0, canvas_); return; } diff --git a/src/analyzer/sonogram.cpp b/src/analyzer/sonogram.cpp index 1b8b3acf9..bffd7c95a 100644 --- a/src/analyzer/sonogram.cpp +++ b/src/analyzer/sonogram.cpp @@ -44,7 +44,7 @@ void Sonogram::resizeEvent(QResizeEvent *e) { void Sonogram::analyze(QPainter &p, const Analyzer::Scope &s, bool new_frame) { - if (!new_frame || engine_->state() == Engine::Paused) { + if (!new_frame || engine_->state() == Engine::State::Paused) { p.drawPixmap(0, 0, canvas_); return; } diff --git a/src/collection/collection.cpp b/src/collection/collection.cpp index ac584e7f1..eaa29656c 100644 --- a/src/collection/collection.cpp +++ b/src/collection/collection.cpp @@ -69,7 +69,7 @@ SCollection::SCollection(Application *app, QObject *parent) backend()->moveToThread(app->database()->thread()); qLog(Debug) << backend_ << "moved to thread" << app->database()->thread(); - backend_->Init(app->database(), app->task_manager(), Song::Source_Collection, kSongsTable, kFtsTable, kDirsTable, kSubdirsTable); + backend_->Init(app->database(), app->task_manager(), Song::Source::Collection, kSongsTable, kFtsTable, kDirsTable, kSubdirsTable); model_ = new CollectionModel(backend_, app_, this); @@ -93,7 +93,7 @@ SCollection::~SCollection() { void SCollection::Init() { - watcher_ = new CollectionWatcher(Song::Source_Collection); + watcher_ = new CollectionWatcher(Song::Source::Collection); watcher_thread_ = new Thread(this); #ifndef Q_OS_WIN32 @@ -104,7 +104,7 @@ void SCollection::Init() { watcher_->moveToThread(watcher_thread_); - qLog(Debug) << watcher_ << "moved to thread" << watcher_thread_ << "with I/O priority" << io_priority_ << "and thread priority" << thread_priority_; + qLog(Debug) << watcher_ << "moved to thread" << watcher_thread_ << "with I/O priority" << static_cast(io_priority_) << "and thread priority" << thread_priority_; watcher_thread_->start(thread_priority_); @@ -184,7 +184,7 @@ void SCollection::ReloadSettings() { QSettings s; s.beginGroup(CollectionSettingsPage::kSettingsGroup); - io_priority_ = static_cast(s.value("io_priority", Utilities::IOPRIO_CLASS_IDLE).toInt()); + io_priority_ = static_cast(s.value("io_priority", static_cast(Utilities::IoPriority::IOPRIO_CLASS_IDLE)).toInt()); thread_priority_ = static_cast(s.value("thread_priority", QThread::Priority::IdlePriority).toInt()); save_playcounts_to_files_ = s.value("save_playcounts", false).toBool(); save_ratings_to_files_ = s.value("save_ratings", false).toBool(); diff --git a/src/collection/collectionbackend.cpp b/src/collection/collectionbackend.cpp index c1acc76f9..0b899eb29 100644 --- a/src/collection/collectionbackend.cpp +++ b/src/collection/collectionbackend.cpp @@ -60,7 +60,7 @@ CollectionBackend::CollectionBackend(QObject *parent) : CollectionBackendInterface(parent), db_(nullptr), task_manager_(nullptr), - source_(Song::Source_Unknown), + source_(Song::Source::Unknown), original_thread_(nullptr) { original_thread_ = thread(); @@ -1864,7 +1864,7 @@ SongList CollectionBackend::SmartPlaylistsFindSongs(const SmartPlaylistSearch &s SongList CollectionBackend::SmartPlaylistsGetAllSongs() { // Get all the songs! - return SmartPlaylistsFindSongs(SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_FieldAsc, SmartPlaylistSearchTerm::Field_Artist, -1)); + return SmartPlaylistsFindSongs(SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldAsc, SmartPlaylistSearchTerm::Field::Artist, -1)); } diff --git a/src/collection/collectionbackend.h b/src/collection/collectionbackend.h index 8ad165e9d..0ae2049db 100644 --- a/src/collection/collectionbackend.h +++ b/src/collection/collectionbackend.h @@ -54,7 +54,7 @@ class CollectionBackendInterface : public QObject { explicit CollectionBackendInterface(QObject *parent = nullptr) : QObject(parent) {} struct Album { - Album() : filetype(Song::FileType_Unknown) {} + Album() : filetype(Song::FileType::Unknown) {} Album(const QString &_album_artist, const QString &_album, const QUrl &_art_automatic, const QUrl &_art_manual, const QList &_urls, const Song::FileType _filetype, const QString &_cue_path) : album_artist(_album_artist), album(_album), diff --git a/src/collection/collectionfilteroptions.cpp b/src/collection/collectionfilteroptions.cpp index 2a19478ea..5bc8f546e 100644 --- a/src/collection/collectionfilteroptions.cpp +++ b/src/collection/collectionfilteroptions.cpp @@ -24,7 +24,7 @@ #include "collectionfilteroptions.h" -CollectionFilterOptions::CollectionFilterOptions() : filter_mode_(FilterMode_All), max_age_(-1) {} +CollectionFilterOptions::CollectionFilterOptions() : filter_mode_(FilterMode::All), max_age_(-1) {} bool CollectionFilterOptions::Matches(const Song &song) const { diff --git a/src/collection/collectionfilteroptions.h b/src/collection/collectionfilteroptions.h index 973535323..9960907cb 100644 --- a/src/collection/collectionfilteroptions.h +++ b/src/collection/collectionfilteroptions.h @@ -34,10 +34,10 @@ class CollectionFilterOptions { // - use the duplicated songs view; by duplicated we mean those songs for which the (artist, album, title) tuple is found more than once in the songs table // - use the untagged songs view; by untagged we mean those for which at least one of the (artist, album, title) tags is empty // Please note that additional filtering based on FTS table (the filter attribute) won't work in Duplicates and Untagged modes. - enum FilterMode { - FilterMode_All, - FilterMode_Duplicates, - FilterMode_Untagged + enum class FilterMode { + All, + Duplicates, + Untagged }; FilterMode filter_mode() const { return filter_mode_; } @@ -50,7 +50,7 @@ class CollectionFilterOptions { } void set_max_age(const int max_age) { max_age_ = max_age; } void set_filter_text(const QString &filter_text) { - filter_mode_ = FilterMode_All; + filter_mode_ = FilterMode::All; filter_text_ = filter_text; } diff --git a/src/collection/collectionfilterwidget.cpp b/src/collection/collectionfilterwidget.cpp index 475267a12..9aab5c6af 100644 --- a/src/collection/collectionfilterwidget.cpp +++ b/src/collection/collectionfilterwidget.cpp @@ -68,7 +68,7 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent) group_by_group_(nullptr), filter_delay_(new QTimer(this)), filter_applies_to_model_(true), - delay_behaviour_(DelayedOnLargeLibraries) { + delay_behaviour_(DelayBehaviour::DelayedOnLargeLibraries) { ui_->setupUi(this); @@ -178,12 +178,13 @@ void CollectionFilterWidget::Init(CollectionModel *model) { if (s.contains(group_by_version())) version = s.value(group_by_version(), 0).toInt(); if (version == 1) { model_->SetGroupBy(CollectionModel::Grouping( - CollectionModel::GroupBy(s.value(group_by_key(1), static_cast(CollectionModel::GroupBy_AlbumArtist)).toInt()), - CollectionModel::GroupBy(s.value(group_by_key(2), static_cast(CollectionModel::GroupBy_AlbumDisc)).toInt()), - CollectionModel::GroupBy(s.value(group_by_key(3), static_cast(CollectionModel::GroupBy_None)).toInt())), s.value(separate_albums_by_grouping_key(), false).toBool()); + static_cast(s.value(group_by_key(1), static_cast(CollectionModel::GroupBy::AlbumArtist)).toInt()), + static_cast(s.value(group_by_key(2), static_cast(CollectionModel::GroupBy::AlbumDisc)).toInt()), + static_cast(s.value(group_by_key(3), static_cast(CollectionModel::GroupBy::None)).toInt())), + s.value(separate_albums_by_grouping_key(), false).toBool()); } else { - model_->SetGroupBy(CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_AlbumDisc, CollectionModel::GroupBy_None), false); + model_->SetGroupBy(CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::AlbumDisc, CollectionModel::GroupBy::None), false); } s.endGroup(); } @@ -272,24 +273,24 @@ QActionGroup *CollectionFilterWidget::CreateGroupByActions(const QString &saved_ QActionGroup *ret = new QActionGroup(parent); - ret->addAction(CreateGroupByAction(tr("Group by Album artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_Album))); - ret->addAction(CreateGroupByAction(tr("Group by Album artist/Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_AlbumDisc))); - ret->addAction(CreateGroupByAction(tr("Group by Album artist/Year - Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_YearAlbum))); - ret->addAction(CreateGroupByAction(tr("Group by Album artist/Year - Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_YearAlbumDisc))); + ret->addAction(CreateGroupByAction(tr("Group by Album artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::Album))); + ret->addAction(CreateGroupByAction(tr("Group by Album artist/Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::AlbumDisc))); + ret->addAction(CreateGroupByAction(tr("Group by Album artist/Year - Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::YearAlbum))); + ret->addAction(CreateGroupByAction(tr("Group by Album artist/Year - Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::YearAlbumDisc))); - ret->addAction(CreateGroupByAction(tr("Group by Artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Artist, CollectionModel::GroupBy_Album))); - ret->addAction(CreateGroupByAction(tr("Group by Artist/Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Artist, CollectionModel::GroupBy_AlbumDisc))); - ret->addAction(CreateGroupByAction(tr("Group by Artist/Year - Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Artist, CollectionModel::GroupBy_YearAlbum))); - ret->addAction(CreateGroupByAction(tr("Group by Artist/Year - Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Artist, CollectionModel::GroupBy_YearAlbumDisc))); + ret->addAction(CreateGroupByAction(tr("Group by Artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Artist, CollectionModel::GroupBy::Album))); + ret->addAction(CreateGroupByAction(tr("Group by Artist/Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Artist, CollectionModel::GroupBy::AlbumDisc))); + ret->addAction(CreateGroupByAction(tr("Group by Artist/Year - Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Artist, CollectionModel::GroupBy::YearAlbum))); + ret->addAction(CreateGroupByAction(tr("Group by Artist/Year - Album - Disc"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Artist, CollectionModel::GroupBy::YearAlbumDisc))); - ret->addAction(CreateGroupByAction(tr("Group by Genre/Album artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Genre, CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_Album))); - ret->addAction(CreateGroupByAction(tr("Group by Genre/Artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Genre, CollectionModel::GroupBy_Artist, CollectionModel::GroupBy_Album))); + ret->addAction(CreateGroupByAction(tr("Group by Genre/Album artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Genre, CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::Album))); + ret->addAction(CreateGroupByAction(tr("Group by Genre/Artist/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Genre, CollectionModel::GroupBy::Artist, CollectionModel::GroupBy::Album))); - ret->addAction(CreateGroupByAction(tr("Group by Album Artist"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist))); - ret->addAction(CreateGroupByAction(tr("Group by Artist"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Artist))); + ret->addAction(CreateGroupByAction(tr("Group by Album Artist"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist))); + ret->addAction(CreateGroupByAction(tr("Group by Artist"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Artist))); - ret->addAction(CreateGroupByAction(tr("Group by Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Album))); - ret->addAction(CreateGroupByAction(tr("Group by Genre/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy_Genre, CollectionModel::GroupBy_Album))); + ret->addAction(CreateGroupByAction(tr("Group by Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Album))); + ret->addAction(CreateGroupByAction(tr("Group by Genre/Album"), parent, CollectionModel::Grouping(CollectionModel::GroupBy::Genre, CollectionModel::GroupBy::Album))); QAction *sep1 = new QAction(parent); sep1->setSeparator(true); @@ -334,7 +335,7 @@ QAction *CollectionFilterWidget::CreateGroupByAction(const QString &text, QObjec QAction *ret = new QAction(text, parent); ret->setCheckable(true); - if (grouping.first != CollectionModel::GroupBy_None) { + if (grouping.first != CollectionModel::GroupBy::None) { ret->setProperty("group_by", QVariant::fromValue(grouping)); } @@ -459,7 +460,7 @@ void CollectionFilterWidget::SetFilterHint(const QString &hint) { void CollectionFilterWidget::SetFilterMode(CollectionFilterOptions::FilterMode filter_mode) { ui_->search_field->clear(); - ui_->search_field->setEnabled(filter_mode == CollectionFilterOptions::FilterMode_All); + ui_->search_field->setEnabled(filter_mode == CollectionFilterOptions::FilterMode::All); model_->SetFilterMode(filter_mode); @@ -509,7 +510,7 @@ void CollectionFilterWidget::FilterTextChanged(const QString &text) { // Searching with one or two characters can be very expensive on the database even with FTS, // so if there are a large number of songs in the database introduce a small delay before actually filtering the model, // so if the user is typing the first few characters of something it will be quicker. - const bool delay = (delay_behaviour_ == AlwaysDelayed) || (delay_behaviour_ == DelayedOnLargeLibraries && !text.isEmpty() && text.length() < 3 && model_->total_song_count() >= 100000); + const bool delay = (delay_behaviour_ == DelayBehaviour::AlwaysDelayed) || (delay_behaviour_ == DelayBehaviour::DelayedOnLargeLibraries && !text.isEmpty() && text.length() < 3 && model_->total_song_count() >= 100000); if (delay) { filter_delay_->start(); diff --git a/src/collection/collectionfilterwidget.h b/src/collection/collectionfilterwidget.h index 5cb786106..3ea3db8ff 100644 --- a/src/collection/collectionfilterwidget.h +++ b/src/collection/collectionfilterwidget.h @@ -54,7 +54,7 @@ class CollectionFilterWidget : public QWidget { static const int kFilterDelay = 500; // msec - enum DelayBehaviour { + enum class DelayBehaviour { AlwaysInstant, DelayedOnLargeLibraries, AlwaysDelayed, diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index 2bd6a584c..42989f572 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -98,9 +98,9 @@ CollectionModel::CollectionModel(CollectionBackend *backend, Application *app, Q root_->lazy_loaded = true; - group_by_[0] = GroupBy_AlbumArtist; - group_by_[1] = GroupBy_AlbumDisc; - group_by_[2] = GroupBy_None; + group_by_[0] = GroupBy::AlbumArtist; + group_by_[1] = GroupBy::AlbumDisc; + group_by_[2] = GroupBy::None; cover_loader_options_.get_image_data_ = false; cover_loader_options_.get_image_ = true; @@ -226,7 +226,7 @@ void CollectionModel::SongsDiscovered(const SongList &songs) { QString key; for (int i = 0; i < 3; ++i) { GroupBy group_by = group_by_[i]; - if (group_by == GroupBy_None) break; + if (group_by == GroupBy::None) break; if (!key.isEmpty()) key.append("-"); @@ -260,7 +260,7 @@ void CollectionModel::SongsDiscovered(const SongList &songs) { if (!container->lazy_loaded && use_lazy_loading_) continue; // We've gone all the way down to the deepest level and everything was already lazy loaded, so now we have to create the song in the container. - song_nodes_.insert(song.id(), ItemFromSong(GroupBy_None, separate_albums_by_grouping_, true, false, container, song, -1)); + song_nodes_.insert(song.id(), ItemFromSong(GroupBy::None, separate_albums_by_grouping_, true, false, container, song, -1)); } } @@ -302,76 +302,76 @@ QString CollectionModel::ContainerKey(const GroupBy group_by, const bool separat QString key; switch (group_by) { - case GroupBy_AlbumArtist: + case GroupBy::AlbumArtist: key = TextOrUnknown(song.effective_albumartist()); break; - case GroupBy_Artist: + case GroupBy::Artist: key = TextOrUnknown(song.artist()); break; - case GroupBy_Album: + case GroupBy::Album: key = TextOrUnknown(song.album()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_AlbumDisc: + case GroupBy::AlbumDisc: key = PrettyAlbumDisc(song.album(), song.disc()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_YearAlbum: + case GroupBy::YearAlbum: key = PrettyYearAlbum(song.year(), song.album()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_YearAlbumDisc: + case GroupBy::YearAlbumDisc: key = PrettyYearAlbumDisc(song.year(), song.album(), song.disc()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_OriginalYearAlbum: + case GroupBy::OriginalYearAlbum: key = PrettyYearAlbum(song.effective_originalyear(), song.album()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_OriginalYearAlbumDisc: + case GroupBy::OriginalYearAlbumDisc: key = PrettyYearAlbumDisc(song.effective_originalyear(), song.album(), song.disc()); if (!song.album_id().isEmpty()) key.append("-" + song.album_id()); if (separate_albums_by_grouping && !song.grouping().isEmpty()) key.append("-" + song.grouping()); break; - case GroupBy_Disc: + case GroupBy::Disc: key = PrettyDisc(song.disc()); break; - case GroupBy_Year: + case GroupBy::Year: key = QString::number(qMax(0, song.year())); break; - case GroupBy_OriginalYear: + case GroupBy::OriginalYear: key = QString::number(qMax(0, song.effective_originalyear())); break; - case GroupBy_Genre: + case GroupBy::Genre: key = TextOrUnknown(song.genre()); break; - case GroupBy_Composer: + case GroupBy::Composer: key = TextOrUnknown(song.composer()); break; - case GroupBy_Performer: + case GroupBy::Performer: key = TextOrUnknown(song.performer()); break; - case GroupBy_Grouping: + case GroupBy::Grouping: key = TextOrUnknown(song.grouping()); break; - case GroupBy_FileType: + case GroupBy::FileType: key = song.TextForFiletype(); break; - case GroupBy_Samplerate: + case GroupBy::Samplerate: key = QString::number(qMax(0, song.samplerate())); break; - case GroupBy_Bitdepth: + case GroupBy::Bitdepth: key = QString::number(qMax(0, song.bitdepth())); break; - case GroupBy_Bitrate: + case GroupBy::Bitrate: key = QString::number(qMax(0, song.bitrate())); break; - case GroupBy_Format: + case GroupBy::Format: if (song.samplerate() <= 0) { key = song.TextForFiletype(); } @@ -384,9 +384,9 @@ QString CollectionModel::ContainerKey(const GroupBy group_by, const bool separat } } break; - case GroupBy_None: - case GroupByCount: - qLog(Error) << "GroupBy_None"; + case GroupBy::None: + case GroupBy::GroupByCount: + qLog(Error) << "GroupBy::None"; break; } @@ -401,17 +401,17 @@ QString CollectionModel::DividerKey(const GroupBy group_by, CollectionItem *item if (item->sort_text.isEmpty()) return QString(); switch (group_by) { - case GroupBy_AlbumArtist: - case GroupBy_Artist: - case GroupBy_Album: - case GroupBy_AlbumDisc: - case GroupBy_Composer: - case GroupBy_Performer: - case GroupBy_Grouping: - case GroupBy_Disc: - case GroupBy_Genre: - case GroupBy_Format: - case GroupBy_FileType: { + case GroupBy::AlbumArtist: + case GroupBy::Artist: + case GroupBy::Album: + case GroupBy::AlbumDisc: + case GroupBy::Composer: + case GroupBy::Performer: + case GroupBy::Grouping: + case GroupBy::Disc: + case GroupBy::Genre: + case GroupBy::Format: + case GroupBy::FileType: { QChar c = item->sort_text[0]; if (c.isDigit()) return "0"; if (c == ' ') return QString(); @@ -422,29 +422,29 @@ QString CollectionModel::DividerKey(const GroupBy group_by, CollectionItem *item return c; } - case GroupBy_Year: - case GroupBy_OriginalYear: + case GroupBy::Year: + case GroupBy::OriginalYear: return SortTextForNumber(item->sort_text.toInt() / 10 * 10); - case GroupBy_YearAlbum: - case GroupBy_YearAlbumDisc: + case GroupBy::YearAlbum: + case GroupBy::YearAlbumDisc: return SortTextForNumber(item->metadata.year()); - case GroupBy_OriginalYearAlbum: - case GroupBy_OriginalYearAlbumDisc: + case GroupBy::OriginalYearAlbum: + case GroupBy::OriginalYearAlbumDisc: return SortTextForNumber(item->metadata.effective_originalyear()); - case GroupBy_Samplerate: + case GroupBy::Samplerate: return SortTextForNumber(item->metadata.samplerate()); - case GroupBy_Bitdepth: + case GroupBy::Bitdepth: return SortTextForNumber(item->metadata.bitdepth()); - case GroupBy_Bitrate: + case GroupBy::Bitrate: return SortTextForNumber(item->metadata.bitrate()); - case GroupBy_None: - case GroupByCount: + case GroupBy::None: + case GroupBy::GroupByCount: return QString(); } qLog(Error) << "Unknown GroupBy" << group_by << "for item" << item->display_text; @@ -457,46 +457,46 @@ QString CollectionModel::DividerDisplayText(const GroupBy group_by, const QStrin // Pretty display text for the dividers. switch (group_by) { - case GroupBy_AlbumArtist: - case GroupBy_Artist: - case GroupBy_Album: - case GroupBy_AlbumDisc: - case GroupBy_Composer: - case GroupBy_Performer: - case GroupBy_Disc: - case GroupBy_Grouping: - case GroupBy_Genre: - case GroupBy_FileType: - case GroupBy_Format: + case GroupBy::AlbumArtist: + case GroupBy::Artist: + case GroupBy::Album: + case GroupBy::AlbumDisc: + case GroupBy::Composer: + case GroupBy::Performer: + case GroupBy::Disc: + case GroupBy::Grouping: + case GroupBy::Genre: + case GroupBy::FileType: + case GroupBy::Format: if (key == "0") return "0-9"; return key.toUpper(); - case GroupBy_YearAlbum: - case GroupBy_YearAlbumDisc: - case GroupBy_OriginalYearAlbum: - case GroupBy_OriginalYearAlbumDisc: + case GroupBy::YearAlbum: + case GroupBy::YearAlbumDisc: + case GroupBy::OriginalYearAlbum: + case GroupBy::OriginalYearAlbumDisc: if (key == "0000") return tr("Unknown"); return key.toUpper(); - case GroupBy_Year: - case GroupBy_OriginalYear: + case GroupBy::Year: + case GroupBy::OriginalYear: if (key == "0000") return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s - case GroupBy_Samplerate: + case GroupBy::Samplerate: if (key == "000") return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s - case GroupBy_Bitdepth: + case GroupBy::Bitdepth: if (key == "000") return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s - case GroupBy_Bitrate: + case GroupBy::Bitrate: if (key == "000") return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s - case GroupBy_None: - case GroupByCount: + case GroupBy::None: + case GroupBy::GroupByCount: break; } qLog(Error) << "Unknown GroupBy" << group_by << "for divider key" << key; @@ -727,7 +727,7 @@ QVariant CollectionModel::data(const QModelIndex &idx, const int role) const { QVariant CollectionModel::data(const CollectionItem *item, const int role) const { - GroupBy container_group_by = item->type == CollectionItem::Type_Container ? group_by_[item->container_level] : GroupBy_None; + GroupBy container_group_by = item->type == CollectionItem::Type_Container ? group_by_[item->container_level] : GroupBy::None; switch (role) { case Qt::DisplayRole: @@ -738,15 +738,15 @@ QVariant CollectionModel::data(const CollectionItem *item, const int role) const switch (item->type) { case CollectionItem::Type_Container: switch (container_group_by) { - case GroupBy_Album: - case GroupBy_AlbumDisc: - case GroupBy_YearAlbum: - case GroupBy_YearAlbumDisc: - case GroupBy_OriginalYearAlbum: - case GroupBy_OriginalYearAlbumDisc: + case GroupBy::Album: + case GroupBy::AlbumDisc: + case GroupBy::YearAlbum: + case GroupBy::YearAlbumDisc: + case GroupBy::OriginalYearAlbum: + case GroupBy::OriginalYearAlbumDisc: return album_icon_; - case GroupBy_Artist: - case GroupBy_AlbumArtist: + case GroupBy::Artist: + case GroupBy::AlbumArtist: return artist_icon_; default: break; @@ -764,7 +764,7 @@ QVariant CollectionModel::data(const CollectionItem *item, const int role) const return item->type == CollectionItem::Type_Divider; case Role_ContainerType: - return container_group_by; + return static_cast(container_group_by); case Role_Key: return item->key; @@ -830,7 +830,7 @@ CollectionQueryOptions CollectionModel::PrepareQuery(CollectionItem *parent) { // Information about what we want the children to be const int child_level = parent == root_ ? 0 : parent->container_level + 1; - const GroupBy child_group_by = child_level >= 3 ? GroupBy_None : group_by_[child_level]; + const GroupBy child_group_by = child_level >= 3 ? GroupBy::None : group_by_[child_level]; CollectionQueryOptions query_options; @@ -894,7 +894,7 @@ void CollectionModel::PostQuery(CollectionItem *parent, const CollectionModel::Q // Information about what we want the children to be int child_level = parent == root_ ? 0 : parent->container_level + 1; - GroupBy child_group_by = child_level >= 3 ? GroupBy_None : group_by_[child_level]; + GroupBy child_group_by = child_level >= 3 ? GroupBy::None : group_by_[child_level]; if (result.create_va && parent->compilation_artist_node_ == nullptr) { CreateCompilationArtistNode(signal, parent); @@ -906,7 +906,7 @@ void CollectionModel::PostQuery(CollectionItem *parent, const CollectionModel::Q CollectionItem *item = ItemFromQuery(child_group_by, separate_albums_by_grouping_, signal, child_level == 0, parent, row, child_level); // Save a pointer to it for later - if (child_group_by == GroupBy_None) { + if (child_group_by == GroupBy::None) { song_nodes_.insert(item->metadata.id(), item); } else { @@ -997,86 +997,86 @@ void CollectionModel::SetQueryColumnSpec(const GroupBy group_by, const bool sepa // Say what group_by of thing we want to get back from the database. switch (group_by) { - case GroupBy_AlbumArtist: + case GroupBy::AlbumArtist: query_options->set_column_spec("DISTINCT effective_albumartist"); break; - case GroupBy_Artist: + case GroupBy::Artist: query_options->set_column_spec("DISTINCT artist"); break; - case GroupBy_Album:{ + case GroupBy::Album:{ QString query("DISTINCT album, album_id"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_AlbumDisc:{ + case GroupBy::AlbumDisc:{ QString query("DISTINCT album, album_id, disc"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_YearAlbum:{ + case GroupBy::YearAlbum:{ QString query("DISTINCT year, album, album_id"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_YearAlbumDisc:{ + case GroupBy::YearAlbumDisc:{ QString query("DISTINCT year, album, album_id, disc"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_OriginalYearAlbum:{ + case GroupBy::OriginalYearAlbum:{ QString query("DISTINCT year, originalyear, album, album_id"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_OriginalYearAlbumDisc:{ + case GroupBy::OriginalYearAlbumDisc:{ QString query("DISTINCT year, originalyear, album, album_id, disc"); if (separate_albums_by_grouping) query.append(", grouping"); query_options->set_column_spec(query); break; } - case GroupBy_Disc: + case GroupBy::Disc: query_options->set_column_spec("DISTINCT disc"); break; - case GroupBy_Year: + case GroupBy::Year: query_options->set_column_spec("DISTINCT year"); break; - case GroupBy_OriginalYear: + case GroupBy::OriginalYear: query_options->set_column_spec("DISTINCT effective_originalyear"); break; - case GroupBy_Genre: + case GroupBy::Genre: query_options->set_column_spec("DISTINCT genre"); break; - case GroupBy_Composer: + case GroupBy::Composer: query_options->set_column_spec("DISTINCT composer"); break; - case GroupBy_Performer: + case GroupBy::Performer: query_options->set_column_spec("DISTINCT performer"); break; - case GroupBy_Grouping: + case GroupBy::Grouping: query_options->set_column_spec("DISTINCT grouping"); break; - case GroupBy_FileType: + case GroupBy::FileType: query_options->set_column_spec("DISTINCT filetype"); break; - case GroupBy_Format: + case GroupBy::Format: query_options->set_column_spec("DISTINCT filetype, samplerate, bitdepth"); break; - case GroupBy_Samplerate: + case GroupBy::Samplerate: query_options->set_column_spec("DISTINCT samplerate"); break; - case GroupBy_Bitdepth: + case GroupBy::Bitdepth: query_options->set_column_spec("DISTINCT bitdepth"); break; - case GroupBy_Bitrate: + case GroupBy::Bitrate: query_options->set_column_spec("DISTINCT bitrate"); break; - case GroupBy_None: - case GroupByCount: + case GroupBy::None: + case GroupBy::GroupByCount: query_options->set_column_spec("%songs_table.ROWID, " + Song::kColumnSpec); break; } @@ -1088,7 +1088,7 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_ // Say how we want the query to be filtered. This is done once for each parent going up the tree. switch (group_by) { - case GroupBy_AlbumArtist: + case GroupBy::AlbumArtist: if (IsCompilationArtistNode(item)) { query_options->set_compilation_requirement(true); } @@ -1098,7 +1098,7 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_ query_options->AddWhere("effective_albumartist", item->metadata.effective_albumartist()); } break; - case GroupBy_Artist: + case GroupBy::Artist: if (IsCompilationArtistNode(item)) { query_options->set_compilation_requirement(true); } @@ -1108,38 +1108,38 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_ query_options->AddWhere("artist", item->metadata.artist()); } break; - case GroupBy_Album: + case GroupBy::Album: query_options->AddWhere("album", item->metadata.album()); query_options->AddWhere("album_id", item->metadata.album_id()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_AlbumDisc: + case GroupBy::AlbumDisc: query_options->AddWhere("album", item->metadata.album()); query_options->AddWhere("album_id", item->metadata.album_id()); query_options->AddWhere("disc", item->metadata.disc()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_YearAlbum: + case GroupBy::YearAlbum: query_options->AddWhere("year", item->metadata.year()); query_options->AddWhere("album", item->metadata.album()); query_options->AddWhere("album_id", item->metadata.album_id()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_YearAlbumDisc: + case GroupBy::YearAlbumDisc: query_options->AddWhere("year", item->metadata.year()); query_options->AddWhere("album", item->metadata.album()); query_options->AddWhere("album_id", item->metadata.album_id()); query_options->AddWhere("disc", item->metadata.disc()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_OriginalYearAlbum: + case GroupBy::OriginalYearAlbum: query_options->AddWhere("year", item->metadata.year()); query_options->AddWhere("originalyear", item->metadata.originalyear()); query_options->AddWhere("album", item->metadata.album()); query_options->AddWhere("album_id", item->metadata.album_id()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_OriginalYearAlbumDisc: + case GroupBy::OriginalYearAlbumDisc: query_options->AddWhere("year", item->metadata.year()); query_options->AddWhere("originalyear", item->metadata.originalyear()); query_options->AddWhere("album", item->metadata.album()); @@ -1147,46 +1147,46 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_ query_options->AddWhere("disc", item->metadata.disc()); if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_Disc: + case GroupBy::Disc: query_options->AddWhere("disc", item->metadata.disc()); break; - case GroupBy_Year: + case GroupBy::Year: query_options->AddWhere("year", item->metadata.year()); break; - case GroupBy_OriginalYear: + case GroupBy::OriginalYear: query_options->AddWhere("effective_originalyear", item->metadata.effective_originalyear()); break; - case GroupBy_Genre: + case GroupBy::Genre: query_options->AddWhere("genre", item->metadata.genre()); break; - case GroupBy_Composer: + case GroupBy::Composer: query_options->AddWhere("composer", item->metadata.composer()); break; - case GroupBy_Performer: + case GroupBy::Performer: query_options->AddWhere("performer", item->metadata.performer()); break; - case GroupBy_Grouping: + case GroupBy::Grouping: query_options->AddWhere("grouping", item->metadata.grouping()); break; - case GroupBy_FileType: - query_options->AddWhere("filetype", item->metadata.filetype()); + case GroupBy::FileType: + query_options->AddWhere("filetype", static_cast(item->metadata.filetype())); break; - case GroupBy_Format: - query_options->AddWhere("filetype", item->metadata.filetype()); + case GroupBy::Format: + query_options->AddWhere("filetype", static_cast(item->metadata.filetype())); query_options->AddWhere("samplerate", item->metadata.samplerate()); query_options->AddWhere("bitdepth", item->metadata.bitdepth()); break; - case GroupBy_Samplerate: + case GroupBy::Samplerate: query_options->AddWhere("samplerate", item->metadata.samplerate()); break; - case GroupBy_Bitdepth: + case GroupBy::Bitdepth: query_options->AddWhere("bitdepth", item->metadata.bitdepth()); break; - case GroupBy_Bitrate: + case GroupBy::Bitrate: query_options->AddWhere("bitrate", item->metadata.bitrate()); break; - case GroupBy_None: - case GroupByCount: + case GroupBy::None: + case GroupBy::GroupByCount: qLog(Error) << "Unknown GroupBy" << group_by << "used in filter"; break; } @@ -1195,7 +1195,7 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_ CollectionItem *CollectionModel::InitItem(const GroupBy group_by, const bool signal, CollectionItem *parent, const int container_level) { - CollectionItem::Type item_type = group_by == GroupBy_None ? CollectionItem::Type_Song : CollectionItem::Type_Container; + CollectionItem::Type item_type = group_by == GroupBy::None ? CollectionItem::Type_Song : CollectionItem::Type_Container; if (signal) beginInsertRows(ItemToIndex(parent), static_cast(parent->children.count()), static_cast(parent->children.count())); @@ -1217,21 +1217,21 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo } switch (group_by) { - case GroupBy_AlbumArtist:{ + case GroupBy::AlbumArtist:{ item->metadata.set_albumartist(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.albumartist()); item->sort_text = SortTextForArtist(item->metadata.albumartist()); break; } - case GroupBy_Artist:{ + case GroupBy::Artist:{ item->metadata.set_artist(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.artist()); item->sort_text = SortTextForArtist(item->metadata.artist()); break; } - case GroupBy_Album:{ + case GroupBy::Album:{ item->metadata.set_album(row.value(0).toString()); item->metadata.set_album_id(row.value(1).toString()); item->metadata.set_grouping(row.value(2).toString()); @@ -1240,7 +1240,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForArtist(item->metadata.album()); break; } - case GroupBy_AlbumDisc:{ + case GroupBy::AlbumDisc:{ item->metadata.set_album(row.value(0).toString()); item->metadata.set_album_id(row.value(1).toString()); item->metadata.set_disc(row.value(2).toInt()); @@ -1250,7 +1250,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc())); break; } - case GroupBy_YearAlbum:{ + case GroupBy::YearAlbum:{ item->metadata.set_year(row.value(0).toInt()); item->metadata.set_album(row.value(1).toString()); item->metadata.set_album_id(row.value(2).toString()); @@ -1260,7 +1260,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.grouping() + item->metadata.album(); break; } - case GroupBy_YearAlbumDisc:{ + case GroupBy::YearAlbumDisc:{ item->metadata.set_year(row.value(0).toInt()); item->metadata.set_album(row.value(1).toString()); item->metadata.set_album_id(row.value(2).toString()); @@ -1271,7 +1271,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc())); break; } - case GroupBy_OriginalYearAlbum:{ + case GroupBy::OriginalYearAlbum:{ item->metadata.set_year(row.value(0).toInt()); item->metadata.set_originalyear(row.value(1).toInt()); item->metadata.set_album(row.value(2).toString()); @@ -1282,7 +1282,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.grouping() + item->metadata.album(); break; } - case GroupBy_OriginalYearAlbumDisc:{ + case GroupBy::OriginalYearAlbumDisc:{ item->metadata.set_year(row.value(0).toInt()); item->metadata.set_originalyear(row.value(1).toInt()); item->metadata.set_album(row.value(2).toString()); @@ -1294,7 +1294,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc())); break; } - case GroupBy_Disc:{ + case GroupBy::Disc:{ item->metadata.set_disc(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int disc = qMax(0, row.value(0).toInt()); @@ -1302,7 +1302,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(disc); break; } - case GroupBy_Year:{ + case GroupBy::Year:{ item->metadata.set_year(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int year = qMax(0, item->metadata.year()); @@ -1310,7 +1310,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(year) + " "; break; } - case GroupBy_OriginalYear:{ + case GroupBy::OriginalYear:{ item->metadata.set_originalyear(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int year = qMax(0, item->metadata.originalyear()); @@ -1318,42 +1318,42 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(year) + " "; break; } - case GroupBy_Genre:{ + case GroupBy::Genre:{ item->metadata.set_genre(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.genre()); item->sort_text = SortTextForArtist(item->metadata.genre()); break; } - case GroupBy_Composer:{ + case GroupBy::Composer:{ item->metadata.set_composer(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.composer()); item->sort_text = SortTextForArtist(item->metadata.composer()); break; } - case GroupBy_Performer:{ + case GroupBy::Performer:{ item->metadata.set_performer(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.performer()); item->sort_text = SortTextForArtist(item->metadata.performer()); break; } - case GroupBy_Grouping:{ + case GroupBy::Grouping:{ item->metadata.set_grouping(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.grouping()); item->sort_text = SortTextForArtist(item->metadata.grouping()); break; } - case GroupBy_FileType:{ + case GroupBy::FileType:{ item->metadata.set_filetype(static_cast(row.value(0).toInt())); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = item->metadata.TextForFiletype(); item->sort_text = item->metadata.TextForFiletype(); break; } - case GroupBy_Format:{ + case GroupBy::Format:{ item->metadata.set_filetype(static_cast(row.value(0).toInt())); item->metadata.set_samplerate(row.value(1).toInt()); item->metadata.set_bitdepth(row.value(2).toInt()); @@ -1363,7 +1363,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = key; break; } - case GroupBy_Samplerate:{ + case GroupBy::Samplerate:{ item->metadata.set_samplerate(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int samplerate = qMax(0, item->metadata.samplerate()); @@ -1371,7 +1371,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(samplerate) + " "; break; } - case GroupBy_Bitdepth:{ + case GroupBy::Bitdepth:{ item->metadata.set_bitdepth(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int bitdepth = qMax(0, item->metadata.bitdepth()); @@ -1379,7 +1379,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(bitdepth) + " "; break; } - case GroupBy_Bitrate:{ + case GroupBy::Bitrate:{ item->metadata.set_bitrate(row.value(0).toInt()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); const int bitrate = qMax(0, item->metadata.bitrate()); @@ -1387,8 +1387,8 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->sort_text = SortTextForNumber(bitrate) + " "; break; } - case GroupBy_None: - case GroupByCount: + case GroupBy::None: + case GroupBy::GroupByCount: item->metadata.InitFromQuery(row, true); item->key.append(TextOrUnknown(item->metadata.title())); item->display_text = item->metadata.TitleWithCompilationArtist(); @@ -1416,21 +1416,21 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool } switch (group_by) { - case GroupBy_AlbumArtist:{ + case GroupBy::AlbumArtist:{ item->metadata.set_albumartist(s.effective_albumartist()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.effective_albumartist()); item->sort_text = SortTextForArtist(s.effective_albumartist()); break; } - case GroupBy_Artist:{ + case GroupBy::Artist:{ item->metadata.set_artist(s.artist()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.artist()); item->sort_text = SortTextForArtist(s.artist()); break; } - case GroupBy_Album:{ + case GroupBy::Album:{ item->metadata.set_album(s.album()); item->metadata.set_album_id(s.album_id()); item->metadata.set_grouping(s.grouping()); @@ -1439,7 +1439,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForArtist(s.album()); break; } - case GroupBy_AlbumDisc:{ + case GroupBy::AlbumDisc:{ item->metadata.set_album(s.album()); item->metadata.set_album_id(s.album_id()); item->metadata.set_disc(s.disc()); @@ -1449,7 +1449,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = s.album() + SortTextForNumber(qMax(0, s.disc())); break; } - case GroupBy_YearAlbum:{ + case GroupBy::YearAlbum:{ item->metadata.set_year(s.year()); item->metadata.set_album(s.album()); item->metadata.set_album_id(s.album_id()); @@ -1459,7 +1459,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.grouping() + s.album(); break; } - case GroupBy_YearAlbumDisc:{ + case GroupBy::YearAlbumDisc:{ item->metadata.set_year(s.year()); item->metadata.set_album(s.album()); item->metadata.set_album_id(s.album_id()); @@ -1470,7 +1470,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.album() + SortTextForNumber(qMax(0, s.disc())); break; } - case GroupBy_OriginalYearAlbum:{ + case GroupBy::OriginalYearAlbum:{ item->metadata.set_year(s.year()); item->metadata.set_originalyear(s.originalyear()); item->metadata.set_album(s.album()); @@ -1481,7 +1481,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.grouping() + s.album(); break; } - case GroupBy_OriginalYearAlbumDisc:{ + case GroupBy::OriginalYearAlbumDisc:{ item->metadata.set_year(s.year()); item->metadata.set_originalyear(s.originalyear()); item->metadata.set_album(s.album()); @@ -1493,7 +1493,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.album() + SortTextForNumber(qMax(0, s.disc())); break; } - case GroupBy_Disc:{ + case GroupBy::Disc:{ item->metadata.set_disc(s.disc()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int disc = qMax(0, s.disc()); @@ -1501,7 +1501,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(disc); break; } - case GroupBy_Year:{ + case GroupBy::Year:{ item->metadata.set_year(s.year()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int year = qMax(0, s.year()); @@ -1509,7 +1509,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(year) + " "; break; } - case GroupBy_OriginalYear:{ + case GroupBy::OriginalYear:{ item->metadata.set_originalyear(s.effective_originalyear()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int year = qMax(0, s.effective_originalyear()); @@ -1517,42 +1517,42 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(year) + " "; break; } - case GroupBy_Genre:{ + case GroupBy::Genre:{ item->metadata.set_genre(s.genre()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.genre()); item->sort_text = SortTextForArtist(s.genre()); break; } - case GroupBy_Composer:{ + case GroupBy::Composer:{ item->metadata.set_composer(s.composer()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.composer()); item->sort_text = SortTextForArtist(s.composer()); break; } - case GroupBy_Performer:{ + case GroupBy::Performer:{ item->metadata.set_performer(s.performer()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.performer()); item->sort_text = SortTextForArtist(s.performer()); break; } - case GroupBy_Grouping:{ + case GroupBy::Grouping:{ item->metadata.set_grouping(s.grouping()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.grouping()); item->sort_text = SortTextForArtist(s.grouping()); break; } - case GroupBy_FileType:{ + case GroupBy::FileType:{ item->metadata.set_filetype(s.filetype()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = s.TextForFiletype(); item->sort_text = s.TextForFiletype(); break; } - case GroupBy_Format:{ + case GroupBy::Format:{ item->metadata.set_filetype(s.filetype()); item->metadata.set_samplerate(s.samplerate()); item->metadata.set_bitdepth(s.bitdepth()); @@ -1562,7 +1562,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = key; break; } - case GroupBy_Samplerate:{ + case GroupBy::Samplerate:{ item->metadata.set_samplerate(s.samplerate()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int samplerate = qMax(0, s.samplerate()); @@ -1570,7 +1570,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(samplerate) + " "; break; } - case GroupBy_Bitdepth:{ + case GroupBy::Bitdepth:{ item->metadata.set_bitdepth(s.bitdepth()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int bitdepth = qMax(0, s.bitdepth()); @@ -1578,7 +1578,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(bitdepth) + " "; break; } - case GroupBy_Bitrate:{ + case GroupBy::Bitrate:{ item->metadata.set_bitrate(s.bitrate()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); const int bitrate = qMax(0, s.bitrate()); @@ -1586,8 +1586,8 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->sort_text = SortTextForNumber(bitrate) + " "; break; } - case GroupBy_None: - case GroupByCount:{ + case GroupBy::None: + case GroupBy::GroupByCount:{ item->metadata = s; item->key.append(TextOrUnknown(s.title())); item->display_text = s.TitleWithCompilationArtist(); @@ -1610,7 +1610,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool void CollectionModel::FinishItem(const GroupBy group_by, const bool signal, const bool create_divider, CollectionItem *parent, CollectionItem *item) { - if (group_by == GroupBy_None) item->lazy_loaded = true; + if (group_by == GroupBy::None) item->lazy_loaded = true; if (signal) { endInsertRows(); @@ -1801,7 +1801,7 @@ bool CollectionModel::CompareItems(const CollectionItem *a, const CollectionItem qint64 CollectionModel::MaximumCacheSize(QSettings *s, const char *size_id, const char *size_unit_id, const qint64 cache_size_default) { qint64 size = s->value(size_id, cache_size_default).toInt(); - int unit = s->value(size_unit_id, CollectionSettingsPage::CacheSizeUnit::CacheSizeUnit_MB).toInt() + 1; + int unit = s->value(size_unit_id, static_cast(CollectionSettingsPage::CacheSizeUnit::MB)).toInt() + 1; do { size *= 1024; diff --git a/src/collection/collectionmodel.h b/src/collection/collectionmodel.h index 9f8097fd7..65fa4dbde 100644 --- a/src/collection/collectionmodel.h +++ b/src/collection/collectionmodel.h @@ -83,34 +83,34 @@ class CollectionModel : public SimpleTreeModel { }; // These values get saved in QSettings - don't change them - enum GroupBy { - GroupBy_None = 0, - GroupBy_AlbumArtist = 1, - GroupBy_Artist = 2, - GroupBy_Album = 3, - GroupBy_AlbumDisc = 4, - GroupBy_YearAlbum = 5, - GroupBy_YearAlbumDisc = 6, - GroupBy_OriginalYearAlbum = 7, - GroupBy_OriginalYearAlbumDisc = 8, - GroupBy_Disc = 9, - GroupBy_Year = 10, - GroupBy_OriginalYear = 11, - GroupBy_Genre = 12, - GroupBy_Composer = 13, - GroupBy_Performer = 14, - GroupBy_Grouping = 15, - GroupBy_FileType = 16, - GroupBy_Format = 17, - GroupBy_Samplerate = 18, - GroupBy_Bitdepth = 19, - GroupBy_Bitrate = 20, + enum class GroupBy { + None = 0, + AlbumArtist = 1, + Artist = 2, + Album = 3, + AlbumDisc = 4, + YearAlbum = 5, + YearAlbumDisc = 6, + OriginalYearAlbum = 7, + OriginalYearAlbumDisc = 8, + Disc = 9, + Year = 10, + OriginalYear = 11, + Genre = 12, + Composer = 13, + Performer = 14, + Grouping = 15, + FileType = 16, + Format = 17, + Samplerate = 18, + Bitdepth = 19, + Bitrate = 20, GroupByCount = 21, }; Q_ENUM(GroupBy) struct Grouping { - explicit Grouping(GroupBy f = GroupBy_None, GroupBy s = GroupBy_None, GroupBy t = GroupBy_None) + explicit Grouping(GroupBy f = GroupBy::None, GroupBy s = GroupBy::None, GroupBy t = GroupBy::None) : first(f), second(s), third(t) {} GroupBy first; @@ -181,9 +181,9 @@ class CollectionModel : public SimpleTreeModel { quint64 icon_cache_disk_size() { return sIconCache->cacheSize(); } static bool IsArtistGroupBy(const GroupBy group_by) { - return group_by == CollectionModel::GroupBy_Artist || group_by == CollectionModel::GroupBy_AlbumArtist; + return group_by == CollectionModel::GroupBy::Artist || group_by == CollectionModel::GroupBy::AlbumArtist; } - static bool IsAlbumGroupBy(const GroupBy group_by) { return group_by == GroupBy_Album || group_by == GroupBy_YearAlbum || group_by == GroupBy_AlbumDisc || group_by == GroupBy_YearAlbumDisc || group_by == GroupBy_OriginalYearAlbum || group_by == GroupBy_OriginalYearAlbumDisc; } + static bool IsAlbumGroupBy(const GroupBy group_by) { return group_by == GroupBy::Album || group_by == GroupBy::YearAlbum || group_by == GroupBy::AlbumDisc || group_by == GroupBy::YearAlbumDisc || group_by == GroupBy::OriginalYearAlbum || group_by == GroupBy::OriginalYearAlbumDisc; } void set_use_lazy_loading(const bool value) { use_lazy_loading_ = value; } diff --git a/src/collection/collectionplaylistitem.cpp b/src/collection/collectionplaylistitem.cpp index a216abfef..90e612d34 100644 --- a/src/collection/collectionplaylistitem.cpp +++ b/src/collection/collectionplaylistitem.cpp @@ -29,12 +29,12 @@ class SqlRow; -CollectionPlaylistItem::CollectionPlaylistItem() : PlaylistItem(Song::Source_Collection) { - song_.set_source(Song::Source_Collection); +CollectionPlaylistItem::CollectionPlaylistItem() : PlaylistItem(Song::Source::Collection) { + song_.set_source(Song::Source::Collection); } -CollectionPlaylistItem::CollectionPlaylistItem(const Song &song) : PlaylistItem(Song::Source_Collection), song_(song) { - song_.set_source(Song::Source_Collection); +CollectionPlaylistItem::CollectionPlaylistItem(const Song &song) : PlaylistItem(Song::Source::Collection), song_(song) { + song_.set_source(Song::Source::Collection); } QUrl CollectionPlaylistItem::Url() const { return song_.url(); } @@ -50,7 +50,7 @@ bool CollectionPlaylistItem::InitFromQuery(const SqlRow &query) { // Rows from the songs tables come first song_.InitFromQuery(query, true); - song_.set_source(Song::Source_Collection); + song_.set_source(Song::Source::Collection); return song_.is_valid(); } diff --git a/src/collection/collectionplaylistitem.h b/src/collection/collectionplaylistitem.h index f64c84874..908a29cfd 100644 --- a/src/collection/collectionplaylistitem.h +++ b/src/collection/collectionplaylistitem.h @@ -52,7 +52,7 @@ class CollectionPlaylistItem : public PlaylistItem { protected: QVariant DatabaseValue(DatabaseColumn column) const override; - Song DatabaseSongMetadata() const override { return Song(Song::Source_Collection); } + Song DatabaseSongMetadata() const override { return Song(Song::Source::Collection); } protected: Song song_; diff --git a/src/collection/collectionquery.cpp b/src/collection/collectionquery.cpp index 5af8f15f5..14458cc8b 100644 --- a/src/collection/collectionquery.cpp +++ b/src/collection/collectionquery.cpp @@ -113,9 +113,9 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta // Untagged mode could work with additional filtering but I'm disabling it just to be consistent // this way filtering is available only in the All mode. // Remember though that when you fix the Duplicates + FTS cooperation, enable the filtering in both Duplicates and Untagged modes. - duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode_Duplicates; + duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Duplicates; - if (filter_options.filter_mode() == CollectionFilterOptions::FilterMode_Untagged) { + if (filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Untagged) { where_clauses_ << "(artist = '' OR album = '' OR title ='')"; } diff --git a/src/collection/collectionview.cpp b/src/collection/collectionview.cpp index cda3cab3b..06a9de8ad 100644 --- a/src/collection/collectionview.cpp +++ b/src/collection/collectionview.cpp @@ -699,7 +699,7 @@ void CollectionView::DeleteFilesFinished(const SongList &songs_with_errors) { if (songs_with_errors.isEmpty()) return; OrganizeErrorDialog *dialog = new OrganizeErrorDialog(this); - dialog->Show(OrganizeErrorDialog::Type_Delete, songs_with_errors); + dialog->Show(OrganizeErrorDialog::OperationType::Delete, songs_with_errors); // It deletes itself when the user closes it } diff --git a/src/collection/collectionwatcher.cpp b/src/collection/collectionwatcher.cpp index 4abb576b8..952ccece2 100644 --- a/src/collection/collectionwatcher.cpp +++ b/src/collection/collectionwatcher.cpp @@ -78,7 +78,7 @@ CollectionWatcher::CollectionWatcher(Song::Source source, QObject *parent) scan_on_startup_(true), monitor_(true), song_tracking_(false), - mark_songs_unavailable_(source_ == Song::Source_Collection), + mark_songs_unavailable_(source_ == Song::Source::Collection), expire_unavailable_songs_days_(60), overwrite_playcount_(false), overwrite_rating_(false), @@ -143,7 +143,7 @@ void CollectionWatcher::ReloadSettings() { scan_on_startup_ = s.value("startup_scan", true).toBool(); monitor_ = s.value("monitor", true).toBool(); QStringList filters = s.value("cover_art_patterns", QStringList() << "front" << "cover").toStringList(); - if (source_ == Song::Source_Collection) { + if (source_ == Song::Source::Collection) { song_tracking_ = s.value("song_tracking", false).toBool(); mark_songs_unavailable_ = song_tracking_ ? true : s.value("mark_songs_unavailable", true).toBool(); } @@ -239,7 +239,7 @@ void CollectionWatcher::ScanTransaction::AddToProgressMax(const quint64 n) { void CollectionWatcher::ScanTransaction::CommitNewOrUpdatedSongs() { if (!deleted_songs.isEmpty()) { - if (mark_songs_unavailable_ && watcher_->source() == Song::Source_Collection) { + if (mark_songs_unavailable_ && watcher_->source() == Song::Source::Collection) { emit watcher_->SongsUnavailable(deleted_songs); } else { diff --git a/src/collection/groupbydialog.cpp b/src/collection/groupbydialog.cpp index 59e13c335..282e2ca07 100644 --- a/src/collection/groupbydialog.cpp +++ b/src/collection/groupbydialog.cpp @@ -74,26 +74,26 @@ GroupByDialog::GroupByDialog(QWidget *parent) : QDialog(parent), ui_(new Ui_Grou ui_->setupUi(this); Reset(); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_None, 0)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Artist, 1)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_AlbumArtist, 2)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Album, 3)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_AlbumDisc, 4)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Disc, 5)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Format, 6)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Genre, 7)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Year, 8)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_YearAlbum, 9)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_YearAlbumDisc, 10)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_OriginalYear, 11)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_OriginalYearAlbum, 12)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Composer, 13)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Performer, 14)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Grouping, 15)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_FileType, 16)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Samplerate, 17)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Bitdepth, 18)); - p_->mapping_.insert(Mapping(CollectionModel::GroupBy_Bitrate, 19)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::None, 0)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Artist, 1)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::AlbumArtist, 2)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Album, 3)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::AlbumDisc, 4)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Disc, 5)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Format, 6)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Genre, 7)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Year, 8)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::YearAlbum, 9)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::YearAlbumDisc, 10)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::OriginalYear, 11)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::OriginalYearAlbum, 12)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Composer, 13)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Performer, 14)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Grouping, 15)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::FileType, 16)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Samplerate, 17)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Bitdepth, 18)); + p_->mapping_.insert(Mapping(CollectionModel::GroupBy::Bitrate, 19)); QObject::connect(ui_->buttonbox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &GroupByDialog::Reset); diff --git a/src/collection/savedgroupingmanager.cpp b/src/collection/savedgroupingmanager.cpp index a17f76a7c..214d494dd 100644 --- a/src/collection/savedgroupingmanager.cpp +++ b/src/collection/savedgroupingmanager.cpp @@ -83,68 +83,68 @@ QString SavedGroupingManager::GetSavedGroupingsSettingsGroup(const QString &sett QString SavedGroupingManager::GroupByToString(const CollectionModel::GroupBy g) { switch (g) { - case CollectionModel::GroupBy_None: - case CollectionModel::GroupByCount: { + case CollectionModel::GroupBy::None: + case CollectionModel::GroupBy::GroupByCount: { return tr("None"); } - case CollectionModel::GroupBy_AlbumArtist: { + case CollectionModel::GroupBy::AlbumArtist: { return tr("Album artist"); } - case CollectionModel::GroupBy_Artist: { + case CollectionModel::GroupBy::Artist: { return tr("Artist"); } - case CollectionModel::GroupBy_Album: { + case CollectionModel::GroupBy::Album: { return tr("Album"); } - case CollectionModel::GroupBy_AlbumDisc: { + case CollectionModel::GroupBy::AlbumDisc: { return tr("Album - Disc"); } - case CollectionModel::GroupBy_YearAlbum: { + case CollectionModel::GroupBy::YearAlbum: { return tr("Year - Album"); } - case CollectionModel::GroupBy_YearAlbumDisc: { + case CollectionModel::GroupBy::YearAlbumDisc: { return tr("Year - Album - Disc"); } - case CollectionModel::GroupBy_OriginalYearAlbum: { + case CollectionModel::GroupBy::OriginalYearAlbum: { return tr("Original year - Album"); } - case CollectionModel::GroupBy_OriginalYearAlbumDisc: { + case CollectionModel::GroupBy::OriginalYearAlbumDisc: { return tr("Original year - Album - Disc"); } - case CollectionModel::GroupBy_Disc: { + case CollectionModel::GroupBy::Disc: { return tr("Disc"); } - case CollectionModel::GroupBy_Year: { + case CollectionModel::GroupBy::Year: { return tr("Year"); } - case CollectionModel::GroupBy_OriginalYear: { + case CollectionModel::GroupBy::OriginalYear: { return tr("Original year"); } - case CollectionModel::GroupBy_Genre: { + case CollectionModel::GroupBy::Genre: { return tr("Genre"); } - case CollectionModel::GroupBy_Composer: { + case CollectionModel::GroupBy::Composer: { return tr("Composer"); } - case CollectionModel::GroupBy_Performer: { + case CollectionModel::GroupBy::Performer: { return tr("Performer"); } - case CollectionModel::GroupBy_Grouping: { + case CollectionModel::GroupBy::Grouping: { return tr("Grouping"); } - case CollectionModel::GroupBy_FileType: { + case CollectionModel::GroupBy::FileType: { return tr("File type"); } - case CollectionModel::GroupBy_Format: { + case CollectionModel::GroupBy::Format: { return tr("Format"); } - case CollectionModel::GroupBy_Samplerate: { + case CollectionModel::GroupBy::Samplerate: { return tr("Sample rate"); } - case CollectionModel::GroupBy_Bitdepth: { + case CollectionModel::GroupBy::Bitdepth: { return tr("Bit depth"); } - case CollectionModel::GroupBy_Bitrate: { + case CollectionModel::GroupBy::Bitrate: { return tr("Bitrate"); } } diff --git a/src/context/contextview.cpp b/src/context/contextview.cpp index 9ff687ed5..b40f91b81 100644 --- a/src/context/contextview.cpp +++ b/src/context/contextview.cpp @@ -338,11 +338,11 @@ void ContextView::ReloadSettings() { s.beginGroup(ContextSettingsPage::kSettingsGroup); title_fmt_ = s.value(ContextSettingsPage::kSettingsTitleFmt, "%title% - %artist%").toString(); summary_fmt_ = s.value(ContextSettingsPage::kSettingsSummaryFmt, "%album%").toString(); - action_show_album_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::ALBUM], true).toBool()); - action_show_data_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA], false).toBool()); - action_show_output_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::ENGINE_AND_DEVICE], false).toBool()); - action_show_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS], true).toBool()); - action_search_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::SEARCH_LYRICS], true).toBool()); + action_show_album_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::ALBUM)], true).toBool()); + action_show_data_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA)], false).toBool()); + action_show_output_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::ENGINE_AND_DEVICE)], false).toBool()); + action_show_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS)], true).toBool()); + action_search_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::SEARCH_LYRICS)], true).toBool()); font_headline_ = s.value("font_headline", font().family()).toString(); font_normal_ = s.value("font_normal", font().family()).toString(); font_size_headline_ = s.value("font_size_headline", ContextSettingsPage::kDefaultFontSizeHeadline).toReal(); @@ -544,7 +544,7 @@ void ContextView::SetSong() { if (action_show_output_->isChecked()) { widget_play_output_->show(); - Engine::EngineType enginetype(Engine::None); + Engine::EngineType enginetype(Engine::EngineType::None); if (app_->player()->engine()) enginetype = app_->player()->engine()->type(); QIcon icon_engine = IconLoader::Load(EngineName(enginetype), true, 32); @@ -739,7 +739,7 @@ void ContextView::ActionShowAlbum() { QSettings s; s.beginGroup(ContextSettingsPage::kSettingsGroup); - s.setValue(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::ALBUM], action_show_album_->isChecked()); + s.setValue(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::ALBUM)], action_show_album_->isChecked()); s.endGroup(); if (song_playing_.is_valid()) SetSong(); @@ -749,7 +749,7 @@ void ContextView::ActionShowData() { QSettings s; s.beginGroup(ContextSettingsPage::kSettingsGroup); - s.setValue(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA], action_show_data_->isChecked()); + s.setValue(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA)], action_show_data_->isChecked()); s.endGroup(); if (song_playing_.is_valid()) SetSong(); @@ -759,7 +759,7 @@ void ContextView::ActionShowOutput() { QSettings s; s.beginGroup(ContextSettingsPage::kSettingsGroup); - s.setValue(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::ENGINE_AND_DEVICE], action_show_output_->isChecked()); + s.setValue(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::ENGINE_AND_DEVICE)], action_show_output_->isChecked()); s.endGroup(); if (song_playing_.is_valid()) SetSong(); @@ -769,7 +769,7 @@ void ContextView::ActionShowLyrics() { QSettings s; s.beginGroup(ContextSettingsPage::kSettingsGroup); - s.setValue(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS], action_show_lyrics_->isChecked()); + s.setValue(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS)], action_show_lyrics_->isChecked()); s.endGroup(); if (song_playing_.is_valid()) SetSong(); @@ -782,7 +782,7 @@ void ContextView::ActionSearchLyrics() { QSettings s; s.beginGroup(ContextSettingsPage::kSettingsGroup); - s.setValue(ContextSettingsPage::kSettingsGroupEnable[ContextSettingsPage::ContextSettingsOrder::SEARCH_LYRICS], action_search_lyrics_->isChecked()); + s.setValue(ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsPage::ContextSettingsOrder::SEARCH_LYRICS)], action_search_lyrics_->isChecked()); s.endGroup(); if (song_playing_.is_valid()) SetSong(); diff --git a/src/core/commandlineoptions.cpp b/src/core/commandlineoptions.cpp index bc7f47313..2b9b9f0b0 100644 --- a/src/core/commandlineoptions.cpp +++ b/src/core/commandlineoptions.cpp @@ -81,8 +81,8 @@ const char *CommandlineOptions::kVersionText = "Strawberry %1"; CommandlineOptions::CommandlineOptions(int argc, char **argv) : argc_(argc), argv_(argv), - url_list_action_(UrlList_None), - player_action_(Player_None), + url_list_action_(UrlListAction::None), + player_action_(PlayerAction::None), set_volume_(-1), volume_modifier_(0), seek_to_(-1), @@ -128,13 +128,13 @@ bool CommandlineOptions::Parse() { {"previous", no_argument, nullptr, 'r'}, {"next", no_argument, nullptr, 'f'}, {"volume", required_argument, nullptr, 'v'}, - {"volume-up", no_argument, nullptr, VolumeUp}, - {"volume-down", no_argument, nullptr, VolumeDown}, - {"volume-increase-by", required_argument, nullptr, VolumeIncreaseBy}, - {"volume-decrease-by", required_argument, nullptr, VolumeDecreaseBy}, - {"seek-to", required_argument, nullptr, SeekTo}, - {"seek-by", required_argument, nullptr, SeekBy}, - {"restart-or-previous", no_argument, nullptr, RestartOrPrevious}, + {"volume-up", no_argument, nullptr, LongOptions::VolumeUp}, + {"volume-down", no_argument, nullptr, LongOptions::VolumeDown}, + {"volume-increase-by", required_argument, nullptr, LongOptions::VolumeIncreaseBy}, + {"volume-decrease-by", required_argument, nullptr, LongOptions::VolumeDecreaseBy}, + {"seek-to", required_argument, nullptr, LongOptions::SeekTo}, + {"seek-by", required_argument, nullptr, LongOptions::SeekBy}, + {"restart-or-previous", no_argument, nullptr, LongOptions::RestartOrPrevious}, {"create", required_argument, nullptr, 'c'}, {"append", no_argument, nullptr, 'a'}, {"load", no_argument, nullptr, 'l'}, @@ -144,10 +144,10 @@ bool CommandlineOptions::Parse() { {"toggle-pretty-osd", no_argument, nullptr, 'y'}, {"language", required_argument, nullptr, 'g'}, {"resize-window", required_argument, nullptr, 'w'}, - {"quiet", no_argument, nullptr, Quiet}, - {"verbose", no_argument, nullptr, Verbose}, - {"log-levels", required_argument, nullptr, LogLevels}, - {"version", no_argument, nullptr, Version}, + {"quiet", no_argument, nullptr, LongOptions::Quiet}, + {"verbose", no_argument, nullptr, LongOptions::Verbose}, + {"log-levels", required_argument, nullptr, LongOptions::LogLevels}, + {"version", no_argument, nullptr, LongOptions::Version}, {nullptr, 0, nullptr, 0}}; // Parse the arguments @@ -198,39 +198,39 @@ bool CommandlineOptions::Parse() { } case 'p': - player_action_ = Player_Play; + player_action_ = PlayerAction::Play; break; case 't': - player_action_ = Player_PlayPause; + player_action_ = PlayerAction::PlayPause; break; case 'u': - player_action_ = Player_Pause; + player_action_ = PlayerAction::Pause; break; case 's': - player_action_ = Player_Stop; + player_action_ = PlayerAction::Stop; break; case 'q': - player_action_ = Player_StopAfterCurrent; + player_action_ = PlayerAction::StopAfterCurrent; break; case 'r': - player_action_ = Player_Previous; + player_action_ = PlayerAction::Previous; break; case 'f': - player_action_ = Player_Next; + player_action_ = PlayerAction::Next; break; case 'i': - player_action_ = Player_PlayPlaylist; + player_action_ = PlayerAction::PlayPlaylist; playlist_name_ = QString(optarg); break; case 'c': - url_list_action_ = UrlList_CreateNew; + url_list_action_ = UrlListAction::CreateNew; playlist_name_ = QString(optarg); break; case 'a': - url_list_action_ = UrlList_Append; + url_list_action_ = UrlListAction::Append; break; case 'l': - url_list_action_ = UrlList_Load; + url_list_action_ = UrlListAction::Load; break; case 'o': show_osd_ = true; @@ -241,22 +241,22 @@ bool CommandlineOptions::Parse() { case 'g': language_ = QString(optarg); break; - case VolumeUp: + case LongOptions::VolumeUp: volume_modifier_ = +4; break; - case VolumeDown: + case LongOptions::VolumeDown: volume_modifier_ = -4; break; - case Quiet: + case LongOptions::Quiet: log_levels_ = "1"; break; - case Verbose: + case LongOptions::Verbose: log_levels_ = "3"; break; - case LogLevels: + case LongOptions::LogLevels: log_levels_ = QString(optarg); break; - case Version: { + case LongOptions::Version: { QString version_text = QString(kVersionText).arg(STRAWBERRY_VERSION_DISPLAY); std::cout << version_text.toLocal8Bit().constData() << std::endl; std::exit(0); @@ -266,28 +266,28 @@ bool CommandlineOptions::Parse() { if (!ok) set_volume_ = -1; break; - case VolumeIncreaseBy: + case LongOptions::VolumeIncreaseBy: volume_modifier_ = QString(optarg).toInt(&ok); if (!ok) volume_modifier_ = 0; break; - case VolumeDecreaseBy: + case LongOptions::VolumeDecreaseBy: volume_modifier_ = -QString(optarg).toInt(&ok); if (!ok) volume_modifier_ = 0; break; - case SeekTo: + case LongOptions::SeekTo: seek_to_ = QString(optarg).toInt(&ok); if (!ok) seek_to_ = -1; break; - case SeekBy: + case LongOptions::SeekBy: seek_by_ = QString(optarg).toInt(&ok); if (!ok) seek_by_ = 0; break; - case RestartOrPrevious: - player_action_ = Player_RestartOrPrevious; + case LongOptions::RestartOrPrevious: + player_action_ = PlayerAction::RestartOrPrevious; break; case 'k': @@ -297,7 +297,7 @@ bool CommandlineOptions::Parse() { case 'w': window_size_ = QString(optarg); - player_action_ = Player_ResizeWindow; + player_action_ = PlayerAction::ResizeWindow; break; case '?': @@ -323,7 +323,7 @@ bool CommandlineOptions::Parse() { } bool CommandlineOptions::is_empty() const { - return player_action_ == Player_None && + return player_action_ == PlayerAction::None && set_volume_ == -1 && volume_modifier_ == 0 && seek_to_ == -1 && @@ -335,7 +335,7 @@ bool CommandlineOptions::is_empty() const { } bool CommandlineOptions::contains_play_options() const { - return player_action_ != Player_None || play_track_at_ != -1 || !urls_.isEmpty(); + return player_action_ != PlayerAction::None || play_track_at_ != -1 || !urls_.isEmpty(); } QByteArray CommandlineOptions::Serialize() const { diff --git a/src/core/commandlineoptions.h b/src/core/commandlineoptions.h index 9dd494cd2..73ad040b6 100644 --- a/src/core/commandlineoptions.h +++ b/src/core/commandlineoptions.h @@ -41,24 +41,24 @@ class CommandlineOptions { // Don't change the values or order, these get serialised and sent to // possibly a different version of Strawberry - enum UrlListAction { - UrlList_Append = 0, - UrlList_Load = 1, - UrlList_None = 2, - UrlList_CreateNew = 3, + enum class UrlListAction { + Append = 0, + Load = 1, + None = 2, + CreateNew = 3 }; - enum PlayerAction { - Player_None = 0, - Player_Play = 1, - Player_PlayPause = 2, - Player_Pause = 3, - Player_Stop = 4, - Player_Previous = 5, - Player_Next = 6, - Player_RestartOrPrevious = 7, - Player_StopAfterCurrent = 8, - Player_PlayPlaylist = 9, - Player_ResizeWindow = 10 + enum class PlayerAction { + None = 0, + Play = 1, + PlayPause = 2, + Pause = 3, + Stop = 4, + Previous = 5, + Next = 6, + RestartOrPrevious = 7, + StopAfterCurrent = 8, + PlayPlaylist = 9, + ResizeWindow = 10 }; bool Parse(); diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 2443bde02..2ec312ac9 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -293,13 +293,13 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic }), smartplaylists_view_(new SmartPlaylistsViewContainer(app, this)), #ifdef HAVE_SUBSONIC - subsonic_view_(new InternetSongsView(app_, app->internet_services()->ServiceBySource(Song::Source_Subsonic), SubsonicSettingsPage::kSettingsGroup, SettingsDialog::Page_Subsonic, this)), + subsonic_view_(new InternetSongsView(app_, app->internet_services()->ServiceBySource(Song::Source::Subsonic), SubsonicSettingsPage::kSettingsGroup, SettingsDialog::Page::Subsonic, this)), #endif #ifdef HAVE_TIDAL - tidal_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source_Tidal), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, this)), + tidal_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source::Tidal), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page::Tidal, this)), #endif #ifdef HAVE_QOBUZ - qobuz_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source_Qobuz), QobuzSettingsPage::kSettingsGroup, SettingsDialog::Page_Qobuz, this)), + qobuz_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source::Qobuz), QobuzSettingsPage::kSettingsGroup, SettingsDialog::Page::Qobuz, this)), #endif radio_view_(new RadioViewContainer(this)), lastfm_import_dialog_(new LastFMImportDialog(app_->lastfm_import(), this)), @@ -331,10 +331,10 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic track_slider_timer_(new QTimer(this)), keep_running_(false), playing_widget_(true), - doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour_Append), - doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour_Never), - doubleclick_playlist_addmode_(BehaviourSettingsPage::PlaylistAddBehaviour_Play), - menu_playmode_(BehaviourSettingsPage::PlayBehaviour_Never), + doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour::Append), + doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour::Never), + doubleclick_playlist_addmode_(BehaviourSettingsPage::PlaylistAddBehaviour::Play), + menu_playmode_(BehaviourSettingsPage::PlayBehaviour::Never), initialized_(false), was_maximized_(true), was_minimized_(false), @@ -700,7 +700,7 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic QObject::connect(tidal_view_->albums_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist); QObject::connect(tidal_view_->songs_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist); QObject::connect(tidal_view_->search_view(), &InternetSearchView::AddToPlaylist, this, &MainWindow::AddToPlaylist); - if (TidalService *tidalservice = qobject_cast(app_->internet_services()->ServiceBySource(Song::Source_Tidal))) { + if (TidalService *tidalservice = qobject_cast(app_->internet_services()->ServiceBySource(Song::Source::Tidal))) { QObject::connect(this, &MainWindow::AuthorizationUrlReceived, tidalservice, &TidalService::AuthorizationUrlReceived); } #endif @@ -920,10 +920,9 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic } ui_->tabs->setCurrentIndex(settings_.value("current_tab", 1).toInt()); - FancyTabWidget::Mode default_mode = FancyTabWidget::Mode_LargeSidebar; - int tab_mode_int = settings_.value("tab_mode", default_mode).toInt(); - FancyTabWidget::Mode tab_mode = static_cast(tab_mode_int); - if (tab_mode == FancyTabWidget::Mode_None) tab_mode = default_mode; + FancyTabWidget::Mode default_mode = FancyTabWidget::Mode::LargeSidebar; + FancyTabWidget::Mode tab_mode = static_cast(settings_.value("tab_mode", static_cast(default_mode)).toInt()); + if (tab_mode == FancyTabWidget::Mode::None) tab_mode = default_mode; ui_->tabs->SetMode(tab_mode); TabSwitched(); @@ -946,26 +945,26 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic #else QSettings s; s.beginGroup(BehaviourSettingsPage::kSettingsGroup); - BehaviourSettingsPage::StartupBehaviour behaviour = BehaviourSettingsPage::StartupBehaviour(s.value("startupbehaviour", BehaviourSettingsPage::Startup_Remember).toInt()); + const BehaviourSettingsPage::StartupBehaviour startupbehaviour = static_cast(s.value("startupbehaviour", static_cast(BehaviourSettingsPage::StartupBehaviour::Remember)).toInt()); s.endGroup(); - switch (behaviour) { - case BehaviourSettingsPage::Startup_Show: + switch (startupbehaviour) { + case BehaviourSettingsPage::StartupBehaviour::Show: show(); break; - case BehaviourSettingsPage::Startup_ShowMaximized: + case BehaviourSettingsPage::StartupBehaviour::ShowMaximized: setWindowState(windowState() | Qt::WindowMaximized); show(); break; - case BehaviourSettingsPage::Startup_ShowMinimized: + case BehaviourSettingsPage::StartupBehaviour::ShowMinimized: setWindowState(windowState() | Qt::WindowMinimized); show(); break; - case BehaviourSettingsPage::Startup_Hide: + case BehaviourSettingsPage::StartupBehaviour::Hide: if (tray_icon_->IsSystemTrayAvailable() && tray_icon_->isVisible()) { break; } [[fallthrough]]; - case BehaviourSettingsPage::Startup_Remember: + case BehaviourSettingsPage::StartupBehaviour::Remember: default: { was_maximized_ = settings_.value("maximized", true).toBool(); @@ -1067,10 +1066,10 @@ void MainWindow::ReloadSettings() { playing_widget_ = s.value("playing_widget", true).toBool(); bool trayicon_progress = s.value("trayicon_progress", false).toBool(); if (playing_widget_ != ui_->widget_playing->IsEnabled()) TabSwitched(); - doubleclick_addmode_ = BehaviourSettingsPage::AddBehaviour(s.value("doubleclick_addmode", BehaviourSettingsPage::AddBehaviour_Append).toInt()); - doubleclick_playmode_ = BehaviourSettingsPage::PlayBehaviour(s.value("doubleclick_playmode", BehaviourSettingsPage::PlayBehaviour_Never).toInt()); - doubleclick_playlist_addmode_ = BehaviourSettingsPage::PlaylistAddBehaviour(s.value("doubleclick_playlist_addmode", BehaviourSettingsPage::PlayBehaviour_Never).toInt()); - menu_playmode_ = BehaviourSettingsPage::PlayBehaviour(s.value("menu_playmode", BehaviourSettingsPage::PlayBehaviour_Never).toInt()); + doubleclick_addmode_ = static_cast(s.value("doubleclick_addmode", static_cast(BehaviourSettingsPage::AddBehaviour::Append)).toInt()); + doubleclick_playmode_ = static_cast(s.value("doubleclick_playmode", static_cast(BehaviourSettingsPage::PlayBehaviour::Never)).toInt()); + doubleclick_playlist_addmode_ = static_cast(s.value("doubleclick_playlist_addmode", static_cast(BehaviourSettingsPage::PlayBehaviour::Never)).toInt()); + menu_playmode_ = static_cast(s.value("menu_playmode", static_cast(BehaviourSettingsPage::PlayBehaviour::Never)).toInt()); s.endGroup(); s.beginGroup(AppearanceSettingsPage::kSettingsGroup); @@ -1224,7 +1223,7 @@ void MainWindow::Exit() { if (app_->player()->engine()->is_fadeout_enabled()) { // To shut down the application when fadeout will be finished QObject::connect(app_->player()->engine(), &EngineBase::FadeoutFinishedSignal, this, &MainWindow::DoExit); - if (app_->player()->GetState() == Engine::Playing) { + if (app_->player()->GetState() == Engine::State::Playing) { app_->player()->Stop(); ignore_close_ = true; close(); @@ -1322,8 +1321,8 @@ void MainWindow::MediaPlaying() { PlaylistItemPtr item(app_->player()->GetCurrentItem()); if (item) { - enable_play_pause = !(item->options() & PlaylistItem::PauseDisabled); - can_seek = !(item->options() & PlaylistItem::SeekDisabled); + enable_play_pause = !(item->options() & PlaylistItem::Option::PauseDisabled); + can_seek = !(item->options() & PlaylistItem::Option::SeekDisabled); } ui_->action_play_pause->setEnabled(enable_play_pause); ui_->track_slider->SetCanSeek(can_seek); @@ -1437,8 +1436,8 @@ void MainWindow::SavePlaybackStatus() { QSettings s; s.beginGroup(Player::kSettingsGroup); - s.setValue("playback_state", app_->player()->GetState()); - if (app_->player()->GetState() == Engine::Playing || app_->player()->GetState() == Engine::Paused) { + s.setValue("playback_state", static_cast(app_->player()->GetState())); + if (app_->player()->GetState() == Engine::State::Playing || app_->player()->GetState() == Engine::State::Paused) { s.setValue("playback_playlist", app_->playlist_manager()->active()->id()); s.setValue("playback_position", app_->player()->engine()->position_nanosec() / kNsecPerSec); } @@ -1456,14 +1455,14 @@ void MainWindow::LoadPlaybackStatus() { QSettings s; s.beginGroup(BehaviourSettingsPage::kSettingsGroup); - bool resume_playback = s.value("resumeplayback", false).toBool(); + const bool resume_playback = s.value("resumeplayback", false).toBool(); s.endGroup(); s.beginGroup(Player::kSettingsGroup); - Engine::State playback_state = static_cast(s.value("playback_state", Engine::Empty).toInt()); + const Engine::State playback_state = static_cast(s.value("playback_state", static_cast(Engine::State::Empty)).toInt()); s.endGroup(); - if (resume_playback && playback_state != Engine::Empty && playback_state != Engine::Idle) { + if (resume_playback && playback_state != Engine::State::Empty && playback_state != Engine::State::Idle) { std::shared_ptr connection = std::make_shared(); *connection = QObject::connect(app_->playlist_manager(), &PlaylistManager::AllPlaylistsLoaded, this, [this, connection]() { QObject::disconnect(*connection); @@ -1479,7 +1478,7 @@ void MainWindow::ResumePlayback() { QSettings s; s.beginGroup(Player::kSettingsGroup); - Engine::State playback_state = static_cast(s.value("playback_state", Engine::Empty).toInt()); + const Engine::State playback_state = static_cast(s.value("playback_state", static_cast(Engine::State::Empty)).toInt()); int playback_playlist = s.value("playback_playlist", -1).toInt(); int playback_position = s.value("playback_position", 0).toInt(); s.endGroup(); @@ -1487,7 +1486,7 @@ void MainWindow::ResumePlayback() { if (playback_playlist == app_->playlist_manager()->current()->id()) { // Set active to current to resume playback on correct playlist. app_->playlist_manager()->SetActiveToCurrent(); - if (playback_state == Engine::Paused) { + if (playback_state == Engine::State::Paused) { std::shared_ptr connection = std::make_shared(); *connection = QObject::connect(app_->player(), &Player::Playing, app_->player(), [this, connection]() { QObject::disconnect(*connection); @@ -1499,7 +1498,7 @@ void MainWindow::ResumePlayback() { // Reset saved playback status so we don't resume again from the same position. s.beginGroup(Player::kSettingsGroup); - s.setValue("playback_state", Engine::Empty); + s.setValue("playback_state", static_cast(Engine::State::Empty)); s.setValue("playback_playlist", -1); s.setValue("playback_position", 0); s.endGroup(); @@ -1517,7 +1516,7 @@ void MainWindow::PlayIndex(const QModelIndex &idx, Playlist::AutoScroll autoscro } app_->playlist_manager()->SetActiveToCurrent(); - app_->player()->PlayAt(row, 0, Engine::Manual, autoscroll, true); + app_->player()->PlayAt(row, 0, Engine::TrackChangeType::Manual, autoscroll, true); } @@ -1532,16 +1531,16 @@ void MainWindow::PlaylistDoubleClick(const QModelIndex &idx) { } switch (doubleclick_playlist_addmode_) { - case BehaviourSettingsPage::PlaylistAddBehaviour_Play: + case BehaviourSettingsPage::PlaylistAddBehaviour::Play: app_->playlist_manager()->SetActiveToCurrent(); - app_->player()->PlayAt(source_idx.row(), 0, Engine::Manual, Playlist::AutoScroll_Never, true, true); + app_->player()->PlayAt(source_idx.row(), 0, Engine::TrackChangeType::Manual, Playlist::AutoScroll::Never, true, true); break; - case BehaviourSettingsPage::PlaylistAddBehaviour_Enqueue: + case BehaviourSettingsPage::PlaylistAddBehaviour::Enqueue: app_->playlist_manager()->current()->queue()->ToggleTracks(QModelIndexList() << source_idx); - if (app_->player()->GetState() != Engine::Playing) { + if (app_->player()->GetState() != Engine::State::Playing) { app_->playlist_manager()->SetActiveToCurrent(); - app_->player()->PlayAt(app_->playlist_manager()->current()->queue()->TakeNext(), 0, Engine::Manual, Playlist::AutoScroll_Never, true); + app_->player()->PlayAt(app_->playlist_manager()->current()->queue()->TakeNext(), 0, Engine::TrackChangeType::Manual, Playlist::AutoScroll::Never, true); } break; } @@ -1694,22 +1693,22 @@ void MainWindow::UpdateTrackSliderPosition() { void MainWindow::ApplyAddBehaviour(const BehaviourSettingsPage::AddBehaviour b, MimeData *mimedata) { switch (b) { - case BehaviourSettingsPage::AddBehaviour_Append: + case BehaviourSettingsPage::AddBehaviour::Append: mimedata->clear_first_ = false; mimedata->enqueue_now_ = false; break; - case BehaviourSettingsPage::AddBehaviour_Enqueue: + case BehaviourSettingsPage::AddBehaviour::Enqueue: mimedata->clear_first_ = false; mimedata->enqueue_now_ = true; break; - case BehaviourSettingsPage::AddBehaviour_Load: + case BehaviourSettingsPage::AddBehaviour::Load: mimedata->clear_first_ = true; mimedata->enqueue_now_ = false; break; - case BehaviourSettingsPage::AddBehaviour_OpenInNew: + case BehaviourSettingsPage::AddBehaviour::OpenInNew: mimedata->open_in_new_playlist_ = true; break; } @@ -1718,16 +1717,16 @@ void MainWindow::ApplyAddBehaviour(const BehaviourSettingsPage::AddBehaviour b, void MainWindow::ApplyPlayBehaviour(const BehaviourSettingsPage::PlayBehaviour b, MimeData *mimedata) const { switch (b) { - case BehaviourSettingsPage::PlayBehaviour_Always: + case BehaviourSettingsPage::PlayBehaviour::Always: mimedata->play_now_ = true; break; - case BehaviourSettingsPage::PlayBehaviour_Never: + case BehaviourSettingsPage::PlayBehaviour::Never: mimedata->play_now_ = false; break; - case BehaviourSettingsPage::PlayBehaviour_IfStopped: - mimedata->play_now_ = !(app_->player()->GetState() == Engine::Playing); + case BehaviourSettingsPage::PlayBehaviour::IfStopped: + mimedata->play_now_ = !(app_->player()->GetState() == Engine::State::Playing); break; } } @@ -1762,7 +1761,7 @@ void MainWindow::AddToPlaylist(QMimeData *q_mimedata) { void MainWindow::AddToPlaylistFromAction(QAction *action) { const int destination = action->data().toInt(); - PlaylistItemList items; + PlaylistItemPtrList items; SongList songs; // Get the selected playlist items @@ -1813,7 +1812,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex & playlist_menu_index_ = source_index; // Is this song currently playing? - if (app_->playlist_manager()->current()->current_row() == source_index.row() && app_->player()->GetState() == Engine::Playing) { + if (app_->playlist_manager()->current()->current_row() == source_index.row() && app_->player()->GetState() == Engine::State::Playing) { playlist_play_pause_->setText(tr("Pause")); playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause")); } @@ -1824,7 +1823,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex & // Are we allowed to pause? if (source_index.isValid()) { - playlist_play_pause_->setEnabled(app_->playlist_manager()->current()->current_row() != source_index.row() || !(app_->playlist_manager()->current()->item_at(source_index.row())->options() & PlaylistItem::PauseDisabled)); + playlist_play_pause_->setEnabled(app_->playlist_manager()->current()->current_row() != source_index.row() || !(app_->playlist_manager()->current()->item_at(source_index.row())->options() & PlaylistItem::Option::PauseDisabled)); } else { playlist_play_pause_->setEnabled(false); @@ -1853,7 +1852,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex & if (!item) continue; if (item->Metadata().url().isLocalFile()) ++local_songs; - if (item->Metadata().source() == Song::Source_Collection) ++collection_songs; + if (item->Metadata().source() == Song::Source::Collection) ++collection_songs; if (item->Metadata().has_cue()) { cue_selected = true; @@ -2033,10 +2032,10 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex & void MainWindow::PlaylistPlay() { if (app_->playlist_manager()->current()->current_row() == playlist_menu_index_.row()) { - app_->player()->PlayPause(Playlist::AutoScroll_Never); + app_->player()->PlayPause(0, Playlist::AutoScroll::Never); } else { - PlayIndex(playlist_menu_index_, Playlist::AutoScroll_Never); + PlayIndex(playlist_menu_index_, Playlist::AutoScroll::Never); } } @@ -2057,7 +2056,7 @@ void MainWindow::RescanSongs() { if (item->IsLocalCollectionItem()) { songs << item->Metadata(); } - else if (item->Metadata().source() == Song::Source_LocalFile) { + else if (item->Metadata().source() == Song::Source::LocalFile) { QPersistentModelIndex persistent_index = QPersistentModelIndex(source_index); app_->playlist_manager()->current()->ItemReload(persistent_index, item->OriginalMetadata(), false); } @@ -2072,7 +2071,7 @@ void MainWindow::RescanSongs() { void MainWindow::EditTracks() { SongList songs; - PlaylistItemList items; + PlaylistItemPtrList items; for (const QModelIndex &proxy_index : ui_->playlist->view()->selectionModel()->selectedRows()) { const QModelIndex source_index = app_->playlist_manager()->current()->filter()->mapToSource(proxy_index); @@ -2164,7 +2163,7 @@ void MainWindow::SelectionSetValue() { QPersistentModelIndex persistent_index = QPersistentModelIndex(source_index); QObject::connect(reply, &TagReaderReply::Finished, this, [this, reply, persistent_index]() { SongSaveComplete(reply, persistent_index); }, Qt::QueuedConnection); } - else if (song.source() == Song::Source_Stream) { + else if (song.source() == Song::Source::Stream) { app_->playlist_manager()->current()->setData(source_index, column_value, 0); } } @@ -2199,7 +2198,7 @@ void MainWindow::AddFile() { PlaylistParser parser(app_->collection_backend()); // Show dialog - QStringList file_names = QFileDialog::getOpenFileNames(this, tr("Add file"), directory, QString("%1 (%2);;%3;;%4").arg(tr("Music"), FileView::kFileFilter, parser.filters(PlaylistParser::Type_Load), tr(kAllFilesFilterSpec))); + QStringList file_names = QFileDialog::getOpenFileNames(this, tr("Add file"), directory, QString("%1 (%2);;%3;;%4").arg(tr("Music"), FileView::kFileFilter, parser.filters(PlaylistParser::Type::Load), tr(kAllFilesFilterSpec))); if (file_names.isEmpty()) return; @@ -2335,30 +2334,30 @@ void MainWindow::CommandlineOptionsReceived(const quint32 instanceId, const QByt void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { switch (options.player_action()) { - case CommandlineOptions::Player_Play: + case CommandlineOptions::PlayerAction::Play: if (options.urls().empty()) { app_->player()->Play(); } break; - case CommandlineOptions::Player_PlayPause: - app_->player()->PlayPause(Playlist::AutoScroll_Maybe); + case CommandlineOptions::PlayerAction::PlayPause: + app_->player()->PlayPause(0, Playlist::AutoScroll::Maybe); break; - case CommandlineOptions::Player_Pause: + case CommandlineOptions::PlayerAction::Pause: app_->player()->Pause(); break; - case CommandlineOptions::Player_Stop: + case CommandlineOptions::PlayerAction::Stop: app_->player()->Stop(); break; - case CommandlineOptions::Player_StopAfterCurrent: + case CommandlineOptions::PlayerAction::StopAfterCurrent: app_->player()->StopAfterCurrent(); break; - case CommandlineOptions::Player_Previous: + case CommandlineOptions::PlayerAction::Previous: app_->player()->Previous(); break; - case CommandlineOptions::Player_Next: + case CommandlineOptions::PlayerAction::Next: app_->player()->Next(); break; - case CommandlineOptions::Player_PlayPlaylist: + case CommandlineOptions::PlayerAction::PlayPlaylist: if (options.playlist_name().isEmpty()) { qLog(Error) << "ERROR: playlist name missing"; } @@ -2366,11 +2365,11 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { app_->player()->PlayPlaylist(options.playlist_name()); } break; - case CommandlineOptions::Player_RestartOrPrevious: + case CommandlineOptions::PlayerAction::RestartOrPrevious: app_->player()->RestartOrPrevious(); break; - case CommandlineOptions::Player_ResizeWindow:{ + case CommandlineOptions::PlayerAction::ResizeWindow:{ if (options.window_size().contains('x') && options.window_size().length() >= 4) { QString str_w = options.window_size().left(options.window_size().indexOf('x')); QString str_h = options.window_size().right(options.window_size().length() - options.window_size().indexOf('x') - 1); @@ -2407,7 +2406,7 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { break; } - case CommandlineOptions::Player_None: + case CommandlineOptions::PlayerAction::None: break; } @@ -2427,22 +2426,22 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { // Behaviour depends on command line options, so set it here mimedata->override_user_settings_ = true; - if (options.player_action() == CommandlineOptions::Player_Play) mimedata->play_now_ = true; + if (options.player_action() == CommandlineOptions::PlayerAction::Play) mimedata->play_now_ = true; else ApplyPlayBehaviour(doubleclick_playmode_, mimedata); switch (options.url_list_action()) { - case CommandlineOptions::UrlList_Load: + case CommandlineOptions::UrlListAction::Load: mimedata->clear_first_ = true; break; - case CommandlineOptions::UrlList_Append: + case CommandlineOptions::UrlListAction::Append: // Nothing to do break; - case CommandlineOptions::UrlList_None: + case CommandlineOptions::UrlListAction::None: ApplyAddBehaviour(doubleclick_addmode_, mimedata); break; - case CommandlineOptions::UrlList_CreateNew: + case CommandlineOptions::UrlListAction::CreateNew: mimedata->name_for_new_playlist_ = options.playlist_name(); - ApplyAddBehaviour(BehaviourSettingsPage::AddBehaviour_OpenInNew, mimedata); + ApplyAddBehaviour(BehaviourSettingsPage::AddBehaviour::OpenInNew, mimedata); break; } @@ -2462,7 +2461,7 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { app_->player()->SeekTo(app_->player()->engine()->position_nanosec() / kNsecPerSec + options.seek_by()); } - if (options.play_track_at() != -1) app_->player()->PlayAt(options.play_track_at(), 0, Engine::Manual, Playlist::AutoScroll_Maybe, true); + if (options.play_track_at() != -1) app_->player()->PlayAt(options.play_track_at(), 0, Engine::TrackChangeType::Manual, Playlist::AutoScroll::Maybe, true); if (options.show_osd()) app_->player()->ShowOSD(); @@ -2540,7 +2539,7 @@ void MainWindow::AddFilesToTranscoder() { } void MainWindow::ShowCollectionConfig() { - settings_dialog_->OpenAtPage(SettingsDialog::Page_Collection); + settings_dialog_->OpenAtPage(SettingsDialog::Page::Collection); } void MainWindow::TaskCountChanged(const int count) { @@ -2610,7 +2609,7 @@ void MainWindow::EditFileTags(const QList &urls) { Song song; song.set_url(url); song.set_valid(true); - song.set_filetype(Song::FileType_MPEG); + song.set_filetype(Song::FileType::MPEG); songs << song; } @@ -2755,13 +2754,13 @@ void MainWindow::PlaylistCopyToDevice() { void MainWindow::ChangeCollectionFilterMode(QAction *action) { if (action == collection_show_duplicates_) { - collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode_Duplicates); + collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode::Duplicates); } else if (action == collection_show_untagged_) { - collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode_Untagged); + collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode::Untagged); } else { - collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode_All); + collection_view_->filter_widget()->SetFilterMode(CollectionFilterOptions::FilterMode::All); } } @@ -2972,7 +2971,7 @@ void MainWindow::HandleNotificationPreview(const OSDBase::Behaviour type, const else { qLog(Debug) << "The current playlist is empty, showing a fake song"; // Create a fake song - Song fake(Song::Source_LocalFile); + Song fake(Song::Source::LocalFile); fake.Init("Title", "Artist", "Album", 123); fake.set_genre("Classical"); fake.set_composer("Anonymous"); @@ -2996,7 +2995,7 @@ void MainWindow::ShowConsole() { void MainWindow::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Space) { - app_->player()->PlayPause(Playlist::AutoScroll_Never); + app_->player()->PlayPause(0, Playlist::AutoScroll::Never); e->accept(); } else if (e->key() == Qt::Key_Left) { @@ -3159,17 +3158,17 @@ void MainWindow::PlaylistDelete() { if (DeleteConfirmationDialog::warning(files) != QDialogButtonBox::Yes) return; - if (app_->player()->GetState() == Engine::Playing && app_->playlist_manager()->current()->rowCount() == selected_songs.count()) { + if (app_->player()->GetState() == Engine::State::Playing && app_->playlist_manager()->current()->rowCount() == selected_songs.count()) { app_->player()->Stop(); } ui_->playlist->view()->RemoveSelected(); - if (app_->player()->GetState() == Engine::Playing && is_current_item) { + if (app_->player()->GetState() == Engine::State::Playing && is_current_item) { app_->player()->Next(); } - std::shared_ptr storage = std::make_shared(Song::Source_LocalFile, "/"); + std::shared_ptr storage = std::make_shared(Song::Source::LocalFile, "/"); DeleteFiles *delete_files = new DeleteFiles(app_->task_manager(), storage, true); //QObject::connect(delete_files, &DeleteFiles::Finished, this, &MainWindow::DeleteFinished); delete_files->Start(selected_songs); diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 7451cff98..3848ca2a6 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -331,7 +331,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { std::unique_ptr tag_fetcher_; #endif std::unique_ptr track_selection_dialog_; - PlaylistItemList autocomplete_tag_items_; + PlaylistItemPtrList autocomplete_tag_items_; SmartPlaylistsViewContainer *smartplaylists_view_; diff --git a/src/core/metatypes.cpp b/src/core/metatypes.cpp index a7043086c..a15882f30 100644 --- a/src/core/metatypes.cpp +++ b/src/core/metatypes.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #ifdef HAVE_DBUS @@ -78,17 +77,18 @@ # include "device/mtpconnection.h" #endif +#include "settings/playlistsettingspage.h" + +#include "smartplaylists/smartplaylistsearchterm.h" +#include "smartplaylists/smartplaylistsitem.h" + void RegisterMetaTypes() { qRegisterMetaType("const char*"); qRegisterMetaType>("QList"); - qRegisterMetaType>("QList"); qRegisterMetaType>("QVector"); + qRegisterMetaType>("QList"); qRegisterMetaType("QFileInfo"); - qRegisterMetaType(); - qRegisterMetaType("QAbstractSocket::SocketState"); - qRegisterMetaType("QNetworkCookie"); - qRegisterMetaType>("QList"); qRegisterMetaType("QNetworkReply*"); qRegisterMetaType("QNetworkReply**"); qRegisterMetaType("QItemSelection"); @@ -98,16 +98,12 @@ void RegisterMetaTypes() { qRegisterMetaTypeStreamOperators>("ColumnAlignmentMap"); qRegisterMetaTypeStreamOperators>("ColumnAlignmentIntMap"); #endif - qRegisterMetaType("Directory"); - qRegisterMetaType("DirectoryList"); - qRegisterMetaType("Subdirectory"); - qRegisterMetaType("SubdirectoryList"); qRegisterMetaType("Song"); qRegisterMetaType("SongList"); qRegisterMetaType("SongMap"); - qRegisterMetaType>("QList"); - qRegisterMetaType>("QMap"); - qRegisterMetaType("EngineType"); + qRegisterMetaType("Song::Source"); + qRegisterMetaType("Song::FileType"); + qRegisterMetaType("Engine::EngineType"); qRegisterMetaType("Engine::SimpleMetaBundle"); qRegisterMetaType("Engine::State"); qRegisterMetaType("Engine::TrackChangeFlags"); @@ -117,23 +113,29 @@ void RegisterMetaTypes() { qRegisterMetaType("GstElement*"); qRegisterMetaType("GstEnginePipeline*"); #endif + qRegisterMetaType("CollectionDirectory"); + qRegisterMetaType("CollectionDirectoryList"); + qRegisterMetaType("CollectionSubdirectory"); + qRegisterMetaType("CollectionSubdirectoryList"); + qRegisterMetaType("CollectionModel::Grouping"); qRegisterMetaType("PlaylistItemPtr"); - qRegisterMetaType("PlaylistItemList"); - qRegisterMetaType>("QList"); + qRegisterMetaType("PlaylistItemPtrList"); qRegisterMetaType("PlaylistSequence::RepeatMode"); qRegisterMetaType("PlaylistSequence::ShuffleMode"); qRegisterMetaType("AlbumCoverLoaderResult"); qRegisterMetaType("AlbumCoverLoaderResult::Type"); qRegisterMetaType("CoverProviderSearchResult"); - qRegisterMetaType("CoverSearchStatistics"); - qRegisterMetaType>("QList"); qRegisterMetaType("CoverProviderSearchResults"); + qRegisterMetaType("CoverSearchStatistics"); + qRegisterMetaType("Equalizer::Params"); + #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) qRegisterMetaTypeStreamOperators("Equalizer::Params"); #endif + #ifdef HAVE_DBUS - qDBusRegisterMetaType>(); + qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); @@ -144,15 +146,21 @@ void RegisterMetaTypes() { qDBusRegisterMetaType(); #endif - qRegisterMetaType("InternetSearchView::ResultList"); qRegisterMetaType("InternetSearchView::Result"); + qRegisterMetaType("InternetSearchView::ResultList"); - qRegisterMetaType("PlaylistGeneratorPtr"); - + qRegisterMetaType("RadioChannel"); qRegisterMetaType("RadioChannelList"); #ifdef HAVE_LIBMTP qRegisterMetaType("MtpConnection*"); #endif + qRegisterMetaType("PlaylistSettingsPage::PathType"); + + qRegisterMetaType("PlaylistGeneratorPtr"); + qRegisterMetaType("SmartPlaylistSearchTerm::Operator"); + qRegisterMetaType("SmartPlaylistSearchTerm::OperatorList"); + qRegisterMetaType("SmartPlaylistsItem::Type"); + } diff --git a/src/core/mpris2.cpp b/src/core/mpris2.cpp index 50e5e6791..19b304ea5 100644 --- a/src/core/mpris2.cpp +++ b/src/core/mpris2.cpp @@ -164,7 +164,7 @@ void Mpris2::PlaylistManagerInitialized() { void Mpris2::EngineStateChanged(Engine::State newState) { - if (newState != Engine::Playing && newState != Engine::Paused) { + if (newState != Engine::State::Playing && newState != Engine::State::Paused) { last_metadata_ = QVariantMap(); EmitNotification("Metadata"); } @@ -172,7 +172,7 @@ void Mpris2::EngineStateChanged(Engine::State newState) { EmitNotification("CanPlay"); EmitNotification("CanPause"); EmitNotification("PlaybackStatus", PlaybackStatus(newState)); - if (newState == Engine::Playing) EmitNotification("CanSeek", CanSeek(newState)); + if (newState == Engine::State::Playing) EmitNotification("CanSeek", CanSeek(newState)); } @@ -307,8 +307,8 @@ QString Mpris2::PlaybackStatus() const { QString Mpris2::PlaybackStatus(Engine::State state) const { switch (state) { - case Engine::Playing: return "Playing"; - case Engine::Paused: return "Paused"; + case Engine::State::Playing: return "Playing"; + case Engine::State::Paused: return "Paused"; default: return "Stopped"; } @@ -321,9 +321,9 @@ QString Mpris2::LoopStatus() const { } switch (app_->playlist_manager()->sequence()->repeat_mode()) { - case PlaylistSequence::Repeat_Album: - case PlaylistSequence::Repeat_Playlist: return "Playlist"; - case PlaylistSequence::Repeat_Track: return "Track"; + case PlaylistSequence::RepeatMode::Album: + case PlaylistSequence::RepeatMode::Playlist: return "Playlist"; + case PlaylistSequence::RepeatMode::Track: return "Track"; default: return "None"; } @@ -331,16 +331,16 @@ QString Mpris2::LoopStatus() const { void Mpris2::SetLoopStatus(const QString &value) { - PlaylistSequence::RepeatMode mode = PlaylistSequence::Repeat_Off; + PlaylistSequence::RepeatMode mode = PlaylistSequence::RepeatMode::Off; if (value == "None") { - mode = PlaylistSequence::Repeat_Off; + mode = PlaylistSequence::RepeatMode::Off; } else if (value == "Track") { - mode = PlaylistSequence::Repeat_Track; + mode = PlaylistSequence::RepeatMode::Track; } else if (value == "Playlist") { - mode = PlaylistSequence::Repeat_Playlist; + mode = PlaylistSequence::RepeatMode::Playlist; } app_->playlist_manager()->active()->sequence()->SetRepeatMode(mode); @@ -359,12 +359,12 @@ void Mpris2::SetRate(double rate) { bool Mpris2::Shuffle() const { - return app_->playlist_manager()->sequence()->shuffle_mode() != PlaylistSequence::Shuffle_Off; + return app_->playlist_manager()->sequence()->shuffle_mode() != PlaylistSequence::ShuffleMode::Off; } void Mpris2::SetShuffle(bool enable) { - app_->playlist_manager()->active()->sequence()->SetShuffleMode(enable ? PlaylistSequence::Shuffle_All : PlaylistSequence::Shuffle_Off); + app_->playlist_manager()->active()->sequence()->SetShuffleMode(enable ? PlaylistSequence::ShuffleMode::All : PlaylistSequence::ShuffleMode::Off); } QVariantMap Mpris2::Metadata() const { return last_metadata_; } @@ -447,13 +447,13 @@ bool Mpris2::CanPlay() const { // This one's a bit different than MPRIS 1 - we want this to be true even when the song is already paused or stopped. bool Mpris2::CanPause() const { - return (app_->player()->GetCurrentItem() && app_->player()->GetState() == Engine::Playing && !(app_->player()->GetCurrentItem()->options() & PlaylistItem::PauseDisabled)) || PlaybackStatus() == "Paused" || PlaybackStatus() == "Stopped"; + return (app_->player()->GetCurrentItem() && app_->player()->GetState() == Engine::State::Playing && !(app_->player()->GetCurrentItem()->options() & PlaylistItem::Option::PauseDisabled)) || PlaybackStatus() == "Paused" || PlaybackStatus() == "Stopped"; } bool Mpris2::CanSeek() const { return CanSeek(app_->player()->GetState()); } bool Mpris2::CanSeek(Engine::State state) const { - return app_->player()->GetCurrentItem() && state != Engine::Empty && !app_->player()->GetCurrentItem()->Metadata().is_stream(); + return app_->player()->GetCurrentItem() && state != Engine::State::Empty && !app_->player()->GetCurrentItem()->Metadata().is_stream(); } bool Mpris2::CanControl() const { return true; } @@ -471,7 +471,7 @@ void Mpris2::Previous() { } void Mpris2::Pause() { - if (CanPause() && app_->player()->GetState() != Engine::Paused) { + if (CanPause() && app_->player()->GetState() != Engine::State::Paused) { app_->player()->Pause(); } } diff --git a/src/core/musicstorage.h b/src/core/musicstorage.h index c2d7b4456..edb4fa5fc 100644 --- a/src/core/musicstorage.h +++ b/src/core/musicstorage.h @@ -50,7 +50,7 @@ class MusicStorage { }; // Values are saved in the database - don't change - enum TranscodeMode { + enum class TranscodeMode { Transcode_Always = 1, Transcode_Never = 2, Transcode_Unsupported = 3, @@ -83,8 +83,8 @@ class MusicStorage { virtual QString LocalPath() const { return QString(); } virtual std::optional collection_directory_id() const { return std::optional(); } - virtual TranscodeMode GetTranscodeMode() const { return Transcode_Never; } - virtual Song::FileType GetTranscodeFormat() const { return Song::FileType_Unknown; } + virtual TranscodeMode GetTranscodeMode() const { return TranscodeMode::Transcode_Never; } + virtual Song::FileType GetTranscodeFormat() const { return Song::FileType::Unknown; } virtual bool GetSupportedFiletypes(QList *ret) { Q_UNUSED(ret); return true; } virtual bool StartCopy(QList *supported_types) { Q_UNUSED(supported_types); return true; } diff --git a/src/core/networkproxyfactory.cpp b/src/core/networkproxyfactory.cpp index 8b6620c38..316f6b0d6 100644 --- a/src/core/networkproxyfactory.cpp +++ b/src/core/networkproxyfactory.cpp @@ -35,7 +35,7 @@ NetworkProxyFactory *NetworkProxyFactory::sInstance = nullptr; const char *NetworkProxyFactory::kSettingsGroup = "NetworkProxy"; NetworkProxyFactory::NetworkProxyFactory() - : mode_(Mode_System), + : mode_(Mode::System), type_(QNetworkProxy::HttpProxy), port_(8080), use_authentication_(false) { @@ -81,7 +81,7 @@ void NetworkProxyFactory::ReloadSettings() { QSettings s; s.beginGroup(kSettingsGroup); - mode_ = Mode(s.value("mode", Mode_System).toInt()); + mode_ = static_cast(s.value("mode", static_cast(Mode::System)).toInt()); type_ = QNetworkProxy::ProxyType(s.value("type", QNetworkProxy::HttpProxy).toInt()); hostname_ = s.value("hostname").toString(); port_ = s.value("port", 8080).toInt(); @@ -100,7 +100,7 @@ QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &q QNetworkProxy ret; switch (mode_) { - case Mode_System: + case Mode::System: #ifdef Q_OS_LINUX Q_UNUSED(query); @@ -125,11 +125,11 @@ QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &q return systemProxyForQuery(query); #endif - case Mode_Direct: + case Mode::Direct: ret.setType(QNetworkProxy::NoProxy); break; - case Mode_Manual: + case Mode::Manual: ret.setType(type_); ret.setHostName(hostname_); ret.setPort(port_); diff --git a/src/core/networkproxyfactory.h b/src/core/networkproxyfactory.h index 437357f6b..a8888f874 100644 --- a/src/core/networkproxyfactory.h +++ b/src/core/networkproxyfactory.h @@ -34,7 +34,11 @@ class NetworkProxyFactory : public QNetworkProxyFactory { public: // These values are persisted - enum Mode { Mode_System = 0, Mode_Direct = 1, Mode_Manual = 2, }; + enum class Mode { + System = 0, + Direct = 1, + Manual = 2 + }; static NetworkProxyFactory *Instance(); static const char *kSettingsGroup; diff --git a/src/core/player.cpp b/src/core/player.cpp index b44d71d8c..6fc550f69 100644 --- a/src/core/player.cpp +++ b/src/core/player.cpp @@ -79,22 +79,22 @@ Player::Player(Application *app, QObject *parent) #endif analyzer_(nullptr), equalizer_(nullptr), - stream_change_type_(Engine::First), - autoscroll_(Playlist::AutoScroll_Maybe), - last_state_(Engine::Empty), + stream_change_type_(Engine::TrackChangeType::First), + autoscroll_(Playlist::AutoScroll::Maybe), + last_state_(Engine::State::Empty), nb_errors_received_(0), volume_(100), volume_before_mute_(100), last_pressed_previous_(QDateTime::currentDateTime()), continue_on_error_(false), greyout_(true), - menu_previousmode_(BehaviourSettingsPage::PreviousBehaviour_DontRestart), + menu_previousmode_(BehaviourSettingsPage::PreviousBehaviour::DontRestart), seek_step_sec_(10), play_offset_nanosec_(0) { QSettings s; s.beginGroup(BackendSettingsPage::kSettingsGroup); - Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::GStreamer)).toString().toLower()); + Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::EngineType::GStreamer)).toString().toLower()); s.endGroup(); CreateEngine(enginetype); @@ -103,14 +103,14 @@ Player::Player(Application *app, QObject *parent) Engine::EngineType Player::CreateEngine(Engine::EngineType enginetype) { - Engine::EngineType use_enginetype(Engine::None); + Engine::EngineType use_enginetype(Engine::EngineType::None); - for (int i = 0; use_enginetype == Engine::None; i++) { + for (int i = 0; use_enginetype == Engine::EngineType::None; i++) { switch (enginetype) { - case Engine::None: + case Engine::EngineType::None: #ifdef HAVE_GSTREAMER - case Engine::GStreamer:{ - use_enginetype=Engine::GStreamer; + case Engine::EngineType::GStreamer:{ + use_enginetype=Engine::EngineType::GStreamer; std::unique_ptr gst_engine(new GstEngine(app_->task_manager())); gst_engine->SetStartup(gst_startup_); engine_.reset(gst_engine.release()); @@ -118,8 +118,8 @@ Engine::EngineType Player::CreateEngine(Engine::EngineType enginetype) { } #endif #ifdef HAVE_VLC - case Engine::VLC: - use_enginetype = Engine::VLC; + case Engine::EngineType::VLC: + use_enginetype = Engine::EngineType::VLC; engine_ = std::make_shared(app_->task_manager()); break; #endif @@ -127,7 +127,7 @@ Engine::EngineType Player::CreateEngine(Engine::EngineType enginetype) { if (i > 0) { qFatal("No engine available!"); } - enginetype = Engine::None; + enginetype = Engine::EngineType::None; break; } } @@ -157,7 +157,7 @@ void Player::Init() { if (!engine_) { s.beginGroup(BackendSettingsPage::kSettingsGroup); - Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::GStreamer)).toString().toLower()); + Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::EngineType::GStreamer)).toString().toLower()); s.endGroup(); CreateEngine(enginetype); } @@ -205,7 +205,7 @@ void Player::ReloadSettings() { s.endGroup(); s.beginGroup(BehaviourSettingsPage::kSettingsGroup); - menu_previousmode_ = BehaviourSettingsPage::PreviousBehaviour(s.value("menu_previousmode", BehaviourSettingsPage::PreviousBehaviour_DontRestart).toInt()); + menu_previousmode_ = static_cast(s.value("menu_previousmode", static_cast(BehaviourSettingsPage::PreviousBehaviour::DontRestart)).toInt()); seek_step_sec_ = s.value("seek_step_sec", 10).toInt(); s.endGroup(); @@ -230,7 +230,7 @@ void Player::SaveVolume() { s.beginGroup(kSettingsGroup); s.setValue("volume", volume_); s.endGroup(); - + } void Player::HandleLoadResult(const UrlHandler::LoadResult &result) { @@ -265,19 +265,19 @@ void Player::HandleLoadResult(const UrlHandler::LoadResult &result) { } switch (result.type_) { - case UrlHandler::LoadResult::Error: + case UrlHandler::LoadResult::Type::Error: if (is_current) { InvalidSongRequested(result.original_url_); } emit Error(result.error_); break; - case UrlHandler::LoadResult::NoMoreTracks: + case UrlHandler::LoadResult::Type::NoMoreTracks: qLog(Debug) << "URL handler for" << result.original_url_ << "said no more tracks" << is_current; if (is_current) NextItem(stream_change_type_, autoscroll_); break; - case UrlHandler::LoadResult::TrackAvailable: { + case UrlHandler::LoadResult::Type::TrackAvailable: { qLog(Debug) << "URL handler for" << result.original_url_ << "returned" << result.stream_url_; @@ -300,9 +300,9 @@ void Player::HandleLoadResult(const UrlHandler::LoadResult &result) { // If there was no filetype in the song's metadata, use the one provided by URL handler, if there is one. if ( - (song.filetype() == Song::FileType_Unknown && result.filetype_ != Song::FileType_Unknown) + (song.filetype() == Song::FileType::Unknown && result.filetype_ != Song::FileType::Unknown) || - (song.filetype() == Song::FileType_Stream && result.filetype_ != Song::FileType_Stream) + (song.filetype() == Song::FileType::Stream && result.filetype_ != Song::FileType::Stream) ) { song.set_filetype(result.filetype_); @@ -353,7 +353,7 @@ void Player::HandleLoadResult(const UrlHandler::LoadResult &result) { break; } - case UrlHandler::LoadResult::WillLoadAsynchronously: + case UrlHandler::LoadResult::Type::WillLoadAsynchronously: qLog(Debug) << "URL handler for" << result.original_url_ << "is loading asynchronously"; // We'll get called again later with either NoMoreTracks or TrackAvailable @@ -363,7 +363,7 @@ void Player::HandleLoadResult(const UrlHandler::LoadResult &result) { } -void Player::Next() { NextInternal(Engine::Manual, Playlist::AutoScroll_Always); } +void Player::Next() { NextInternal(Engine::TrackChangeType::Manual, Playlist::AutoScroll::Always); } void Player::NextInternal(const Engine::TrackChangeFlags change, const Playlist::AutoScroll autoscroll) { @@ -384,10 +384,10 @@ void Player::NextItem(const Engine::TrackChangeFlags change, const Playlist::Aut Playlist *active_playlist = app_->playlist_manager()->active(); // If we received too many errors in auto change, with repeat enabled, we stop - if (change == Engine::Auto) { + if (change == Engine::TrackChangeType::Auto) { const PlaylistSequence::RepeatMode repeat_mode = active_playlist->sequence()->repeat_mode(); - if (repeat_mode != PlaylistSequence::Repeat_Off) { - if ((repeat_mode == PlaylistSequence::Repeat_Track && nb_errors_received_ >= 3) || (nb_errors_received_ >= app_->playlist_manager()->active()->filter()->rowCount())) { + if (repeat_mode != PlaylistSequence::RepeatMode::Off) { + if ((repeat_mode == PlaylistSequence::RepeatMode::Track && nb_errors_received_ >= 3) || (nb_errors_received_ >= app_->playlist_manager()->active()->filter()->rowCount())) { // We received too many "Error" state changes: probably looping over a playlist which contains only unavailable elements: stop now. nb_errors_received_ = 0; Stop(); @@ -397,7 +397,7 @@ void Player::NextItem(const Engine::TrackChangeFlags change, const Playlist::Aut } // Manual track changes override "Repeat track" - const bool ignore_repeat_track = change & Engine::Manual; + const bool ignore_repeat_track = change & Engine::TrackChangeType::Manual; int i = active_playlist->next_row(ignore_repeat_track); if (i == -1) { @@ -413,7 +413,7 @@ void Player::NextItem(const Engine::TrackChangeFlags change, const Playlist::Aut } void Player::PlayPlaylist(const QString &playlist_name) { - PlayPlaylistInternal(Engine::Manual, Playlist::AutoScroll_Always, playlist_name); + PlayPlaylistInternal(Engine::TrackChangeType::Manual, Playlist::AutoScroll::Always, playlist_name); } void Player::PlayPlaylistInternal(const Engine::TrackChangeFlags change, const Playlist::AutoScroll autoscroll, const QString &playlist_name) { @@ -472,22 +472,22 @@ void Player::TrackEnded() { app_->playlist_manager()->collection_backend()->IncrementPlayCountAsync(current_item_->Metadata().id()); } - if (HandleStopAfter(Playlist::AutoScroll_Maybe)) return; + if (HandleStopAfter(Playlist::AutoScroll::Maybe)) return; - NextInternal(Engine::Auto, Playlist::AutoScroll_Maybe); + NextInternal(Engine::TrackChangeType::Auto, Playlist::AutoScroll::Maybe); } void Player::PlayPause(const quint64 offset_nanosec, const Playlist::AutoScroll autoscroll) { switch (engine_->state()) { - case Engine::Paused: + case Engine::State::Paused: UnPause(); emit Resumed(); break; - case Engine::Playing: { - if (current_item_->options() & PlaylistItem::PauseDisabled) { + case Engine::State::Playing: { + if (current_item_->options() & PlaylistItem::Option::PauseDisabled) { Stop(); } else { @@ -498,9 +498,9 @@ void Player::PlayPause(const quint64 offset_nanosec, const Playlist::AutoScroll break; } - case Engine::Empty: - case Engine::Error: - case Engine::Idle: { + case Engine::State::Empty: + case Engine::State::Error: + case Engine::State::Idle: { pause_time_ = QDateTime(); play_offset_nanosec_ = offset_nanosec; app_->playlist_manager()->SetActivePlaylist(app_->playlist_manager()->current_id()); @@ -508,7 +508,7 @@ void Player::PlayPause(const quint64 offset_nanosec, const Playlist::AutoScroll int i = app_->playlist_manager()->active()->current_row(); if (i == -1) i = app_->playlist_manager()->active()->last_played_row(); if (i == -1) i = 0; - PlayAt(i, offset_nanosec, Engine::First, autoscroll, true); + PlayAt(i, offset_nanosec, Engine::TrackChangeType::First, autoscroll, true); break; } } @@ -568,45 +568,45 @@ void Player::StopAfterCurrent() { bool Player::PreviousWouldRestartTrack() const { // Check if it has been over two seconds since previous button was pressed - return menu_previousmode_ == BehaviourSettingsPage::PreviousBehaviour_Restart && last_pressed_previous_.isValid() && last_pressed_previous_.secsTo(QDateTime::currentDateTime()) >= 2; + return menu_previousmode_ == BehaviourSettingsPage::PreviousBehaviour::Restart && last_pressed_previous_.isValid() && last_pressed_previous_.secsTo(QDateTime::currentDateTime()) >= 2; } -void Player::Previous() { PreviousItem(Engine::Manual); } +void Player::Previous() { PreviousItem(Engine::TrackChangeType::Manual); } void Player::PreviousItem(const Engine::TrackChangeFlags change) { pause_time_ = QDateTime(); play_offset_nanosec_ = 0; - const bool ignore_repeat_track = change & Engine::Manual; + const bool ignore_repeat_track = change & Engine::TrackChangeType::Manual; - if (menu_previousmode_ == BehaviourSettingsPage::PreviousBehaviour_Restart) { + if (menu_previousmode_ == BehaviourSettingsPage::PreviousBehaviour::Restart) { // Check if it has been over two seconds since previous button was pressed QDateTime now = QDateTime::currentDateTime(); if (last_pressed_previous_.isValid() && last_pressed_previous_.secsTo(now) >= 2) { last_pressed_previous_ = now; - PlayAt(app_->playlist_manager()->active()->current_row(), 0, change, Playlist::AutoScroll_Always, false, true); + PlayAt(app_->playlist_manager()->active()->current_row(), 0, change, Playlist::AutoScroll::Always, false, true); return; } last_pressed_previous_ = now; } int i = app_->playlist_manager()->active()->previous_row(ignore_repeat_track); - app_->playlist_manager()->active()->set_current_row(i, Playlist::AutoScroll_Always, false); + app_->playlist_manager()->active()->set_current_row(i, Playlist::AutoScroll::Always, false); if (i == -1) { Stop(); - PlayAt(i, 0, change, Playlist::AutoScroll_Always, true); + PlayAt(i, 0, change, Playlist::AutoScroll::Always, true); return; } - PlayAt(i, 0, change, Playlist::AutoScroll_Always, false); + PlayAt(i, 0, change, Playlist::AutoScroll::Always, false); } void Player::EngineStateChanged(const Engine::State state) { - if (state == Engine::Error) { + if (state == Engine::State::Error) { nb_errors_received_++; } else { @@ -614,21 +614,21 @@ void Player::EngineStateChanged(const Engine::State state) { } switch (state) { - case Engine::Paused: + case Engine::State::Paused: pause_time_ = QDateTime::currentDateTime(); play_offset_nanosec_ = engine_->position_nanosec(); emit Paused(); break; - case Engine::Playing: + case Engine::State::Playing: pause_time_ = QDateTime(); play_offset_nanosec_ = 0; emit Playing(); break; - case Engine::Error: + case Engine::State::Error: emit Error(); [[fallthrough]]; - case Engine::Empty: - case Engine::Idle: + case Engine::State::Empty: + case Engine::State::Idle: pause_time_ = QDateTime(); play_offset_nanosec_ = 0; emit Stopped(); @@ -700,12 +700,12 @@ void Player::PlayAt(const int index, const quint64 offset_nanosec, Engine::Track pause_time_ = QDateTime(); play_offset_nanosec_ = offset_nanosec; - if (current_item_ && change == Engine::Manual && engine_->position_nanosec() != engine_->length_nanosec()) { + if (current_item_ && change == Engine::TrackChangeType::Manual && engine_->position_nanosec() != engine_->length_nanosec()) { emit TrackSkipped(current_item_); } if (current_item_ && app_->playlist_manager()->active()->has_item_at(index) && current_item_->Metadata().IsOnSameAlbum(app_->playlist_manager()->active()->item_at(index)->Metadata())) { - change |= Engine::SameAlbum; + change |= Engine::TrackChangeType::SameAlbum; } if (reshuffle) app_->playlist_manager()->active()->ReshuffleIndices(); @@ -761,7 +761,7 @@ void Player::SeekTo(const quint64 seconds) { emit Seeked(nanosec / 1000); if (seconds == 0) { - app_->playlist_manager()->active()->InformOfCurrentSongChange(Playlist::AutoScroll_Maybe, false); + app_->playlist_manager()->active()->InformOfCurrentSongChange(Playlist::AutoScroll::Maybe, false); } } @@ -776,7 +776,7 @@ void Player::SeekBackward() { void Player::EngineMetadataReceived(const Engine::SimpleMetaBundle &bundle) { - if (bundle.type == Engine::SimpleMetaBundle::Type_Any || bundle.type == Engine::SimpleMetaBundle::Type_Current) { + if (bundle.type == Engine::SimpleMetaBundle::Type::Any || bundle.type == Engine::SimpleMetaBundle::Type::Current) { PlaylistItemPtr item = app_->playlist_manager()->active()->current_item(); if (item && bundle.url == item->Url()) { Song song = item->Metadata(); @@ -786,7 +786,7 @@ void Player::EngineMetadataReceived(const Engine::SimpleMetaBundle &bundle) { } } - if (bundle.type == Engine::SimpleMetaBundle::Type_Any || bundle.type == Engine::SimpleMetaBundle::Type_Next) { + if (bundle.type == Engine::SimpleMetaBundle::Type::Any || bundle.type == Engine::SimpleMetaBundle::Type::Next) { int next_row = app_->playlist_manager()->active()->next_row(); if (next_row != -1) { PlaylistItemPtr next_item = app_->playlist_manager()->active()->item_at(next_row); @@ -828,10 +828,10 @@ void Player::Pause() { engine_->Pause(); } void Player::Play(const quint64 offset_nanosec) { switch (GetState()) { - case Engine::Playing: + case Engine::State::Playing: SeekTo(offset_nanosec); break; - case Engine::Paused: + case Engine::State::Paused: UnPause(); break; default: @@ -880,18 +880,18 @@ void Player::TrackAboutToEnd() { // Get the actual track URL rather than the stream URL. if (url_handlers_.contains(url.scheme())) { if (loading_async_.contains(url)) return; - autoscroll_ = Playlist::AutoScroll_Maybe; + autoscroll_ = Playlist::AutoScroll::Maybe; UrlHandler::LoadResult result = url_handlers_[url.scheme()]->StartLoading(url); switch (result.type_) { - case UrlHandler::LoadResult::Error: + case UrlHandler::LoadResult::Type::Error: emit Error(result.error_); return; - case UrlHandler::LoadResult::NoMoreTracks: + case UrlHandler::LoadResult::Type::NoMoreTracks: return; - case UrlHandler::LoadResult::WillLoadAsynchronously: + case UrlHandler::LoadResult::Type::WillLoadAsynchronously: loading_async_ << url; return; - case UrlHandler::LoadResult::TrackAvailable: + case UrlHandler::LoadResult::Type::TrackAvailable: qLog(Debug) << "URL handler for" << result.original_url_ << "returned" << result.stream_url_; url = result.stream_url_; Song song = next_item->Metadata(); @@ -929,7 +929,7 @@ void Player::InvalidSongRequested(const QUrl &url) { return; } - NextItem(Engine::Auto, Playlist::AutoScroll_Maybe); + NextItem(Engine::TrackChangeType::Auto, Playlist::AutoScroll::Maybe); } diff --git a/src/core/player.h b/src/core/player.h index 9f8dc8c4b..932b03871 100644 --- a/src/core/player.h +++ b/src/core/player.h @@ -77,7 +77,7 @@ class PlayerInterface : public QObject { virtual void PlayAt(const int index, const quint64 offset_nanosec, Engine::TrackChangeFlags change, const Playlist::AutoScroll autoscroll, const bool reshuffle, const bool force_inform = false) = 0; // If there's currently a song playing, pause it, otherwise play the track that was playing last, or the first one on the playlist - virtual void PlayPause(const quint64 offset_nanosec = 0, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll_Always) = 0; + virtual void PlayPause(const quint64 offset_nanosec = 0, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll::Always) = 0; virtual void PlayPauseHelper() = 0; virtual void RestartOrPrevious() = 0; @@ -164,7 +164,7 @@ class Player : public PlayerInterface { void SaveVolume() override; void PlayAt(const int index, const quint64 offset_nanosec, Engine::TrackChangeFlags change, const Playlist::AutoScroll autoscroll, const bool reshuffle, const bool force_inform = false) override; - void PlayPause(const quint64 offset_nanosec = 0, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll_Always) override; + void PlayPause(const quint64 offset_nanosec = 0, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll::Always) override; void PlayPauseHelper() override { PlayPause(play_offset_nanosec_); } void RestartOrPrevious() override; void Next() override; diff --git a/src/core/song.cpp b/src/core/song.cpp index 675aecd0c..a9f4a44c4 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -158,7 +158,7 @@ const QStringList Song::kAcceptedExtensions = QStringList() << "wav" << "flac" < struct Song::Private : public QSharedData { - explicit Private(Source source = Source_Unknown); + explicit Private(Source source = Source::Unknown); bool valid_; int id_; @@ -229,7 +229,7 @@ struct Song::Private : public QSharedData { }; -Song::Private::Private(Song::Source source) +Song::Private::Private(const Source source) : valid_(false), id_(-1), @@ -248,7 +248,7 @@ Song::Private::Private(Song::Source source) source_(source), directory_id_(-1), - filetype_(FileType_Unknown), + filetype_(FileType::Unknown), filesize_(-1), mtime_(-1), ctime_(-1), @@ -270,7 +270,7 @@ Song::Private::Private(Song::Source source) {} -Song::Song(Song::Source source) : d(new Private(source)) {} +Song::Song(const Source source) : d(new Private(source)) {} Song::Song(const Song &other) = default; Song::~Song() = default; @@ -353,16 +353,16 @@ void Song::clear_art_automatic() { d->art_automatic_.clear(); } void Song::clear_art_manual() { d->art_manual_.clear(); } bool Song::additional_tags_supported() const { - return d->filetype_ == FileType_FLAC || - d->filetype_ == FileType_WavPack || - d->filetype_ == FileType_OggFlac || - d->filetype_ == FileType_OggVorbis || - d->filetype_ == FileType_OggOpus || - d->filetype_ == FileType_OggSpeex || - d->filetype_ == FileType_MPEG || - d->filetype_ == FileType_MP4 || - d->filetype_ == FileType_MPC || - d->filetype_ == FileType_APE; + return d->filetype_ == FileType::FLAC || + d->filetype_ == FileType::WavPack || + d->filetype_ == FileType::OggFlac || + d->filetype_ == FileType::OggVorbis || + d->filetype_ == FileType::OggOpus || + d->filetype_ == FileType::OggSpeex || + d->filetype_ == FileType::MPEG || + d->filetype_ == FileType::MP4 || + d->filetype_ == FileType::MPC || + d->filetype_ == FileType::APE; } bool Song::albumartist_supported() const { @@ -374,15 +374,15 @@ bool Song::composer_supported() const { } bool Song::performer_supported() const { - return d->filetype_ == FileType_FLAC || - d->filetype_ == FileType_WavPack || - d->filetype_ == FileType_OggFlac || - d->filetype_ == FileType_OggVorbis || - d->filetype_ == FileType_OggOpus || - d->filetype_ == FileType_OggSpeex || - d->filetype_ == FileType_MPEG || - d->filetype_ == FileType_MPC || - d->filetype_ == FileType_APE; + return d->filetype_ == FileType::FLAC || + d->filetype_ == FileType::WavPack || + d->filetype_ == FileType::OggFlac || + d->filetype_ == FileType::OggVorbis || + d->filetype_ == FileType::OggOpus || + d->filetype_ == FileType::OggSpeex || + d->filetype_ == FileType::MPEG || + d->filetype_ == FileType::MPC || + d->filetype_ == FileType::APE; } bool Song::grouping_supported() const { @@ -398,17 +398,17 @@ bool Song::compilation_supported() const { } bool Song::rating_supported() const { - return d->filetype_ == FileType_FLAC || - d->filetype_ == FileType_WavPack || - d->filetype_ == FileType_OggFlac || - d->filetype_ == FileType_OggVorbis || - d->filetype_ == FileType_OggOpus || - d->filetype_ == FileType_OggSpeex || - d->filetype_ == FileType_MPEG || - d->filetype_ == FileType_MP4 || - d->filetype_ == FileType_ASF || - d->filetype_ == FileType_MPC || - d->filetype_ == FileType_APE; + return d->filetype_ == FileType::FLAC || + d->filetype_ == FileType::WavPack || + d->filetype_ == FileType::OggFlac || + d->filetype_ == FileType::OggVorbis || + d->filetype_ == FileType::OggOpus || + d->filetype_ == FileType::OggSpeex || + d->filetype_ == FileType::MPEG || + d->filetype_ == FileType::MP4 || + d->filetype_ == FileType::ASF || + d->filetype_ == FileType::MPC || + d->filetype_ == FileType::APE; } bool Song::comment_supported() const { @@ -421,11 +421,11 @@ bool Song::lyrics_supported() const { bool Song::save_embedded_cover_supported(const FileType filetype) { - return filetype == FileType_FLAC || - filetype == FileType_OggVorbis || - filetype == FileType_OggOpus || - filetype == FileType_MPEG || - filetype == FileType_MP4; + return filetype == FileType::FLAC || + filetype == FileType::OggVorbis || + filetype == FileType::OggOpus || + filetype == FileType::MPEG || + filetype == FileType::MP4; } @@ -438,14 +438,14 @@ bool Song::has_cue() const { return !d->cue_path_.isEmpty(); } float Song::rating() const { return d->rating_; } -bool Song::is_collection_song() const { return d->source_ == Source_Collection; } +bool Song::is_collection_song() const { return d->source_ == Source::Collection; } bool Song::is_metadata_good() const { return !d->url_.isEmpty() && !d->artist_.isEmpty() && !d->title_.isEmpty(); } -bool Song::is_stream() const { return is_radio() || d->source_ == Source_Tidal || d->source_ == Source_Subsonic || d->source_ == Source_Qobuz; } -bool Song::is_radio() const { return d->source_ == Source_Stream || d->source_ == Source_SomaFM || d->source_ == Source_RadioParadise; } -bool Song::is_cdda() const { return d->source_ == Source_CDDA; } +bool Song::is_stream() const { return is_radio() || d->source_ == Source::Tidal || d->source_ == Source::Subsonic || d->source_ == Source::Qobuz; } +bool Song::is_radio() const { return d->source_ == Source::Stream || d->source_ == Source::SomaFM || d->source_ == Source::RadioParadise; } +bool Song::is_cdda() const { return d->source_ == Source::CDDA; } bool Song::is_compilation() const { return (d->compilation_ || d->compilation_detected_ || d->compilation_on_) && !d->compilation_off_; } -bool Song::stream_url_can_expire() const { return d->source_ == Song::Source_Tidal || d->source_ == Song::Source_Qobuz; } -bool Song::is_module_music() const { return d->filetype_ == Song::FileType_MOD || d->filetype_ == Song::FileType_S3M || d->filetype_ == Song::FileType_XM || d->filetype_ == Song::FileType_IT; } +bool Song::stream_url_can_expire() const { return d->source_ == Source::Tidal || d->source_ == Source::Qobuz; } +bool Song::is_module_music() const { return d->filetype_ == FileType::MOD || d->filetype_ == FileType::S3M || d->filetype_ == FileType::XM || d->filetype_ == FileType::IT; } bool Song::art_automatic_is_valid() const { return !d->art_automatic_.isEmpty() && @@ -551,55 +551,55 @@ QString Song::JoinSpec(const QString &table) { Song::Source Song::SourceFromURL(const QUrl &url) { - if (url.isLocalFile()) return Source_LocalFile; - else if (url.scheme() == "cdda") return Source_CDDA; - else if (url.scheme() == "tidal") return Source_Tidal; - else if (url.scheme() == "subsonic") return Source_Subsonic; - else if (url.scheme() == "qobuz") return Source_Qobuz; + if (url.isLocalFile()) return Source::LocalFile; + else if (url.scheme() == "cdda") return Source::CDDA; + else if (url.scheme() == "tidal") return Source::Tidal; + else if (url.scheme() == "subsonic") return Source::Subsonic; + else if (url.scheme() == "qobuz") return Source::Qobuz; else if (url.scheme() == "http" || url.scheme() == "https" || url.scheme() == "rtsp") { - if (url.host().endsWith("tidal.com", Qt::CaseInsensitive)) { return Source_Tidal; } - if (url.host().endsWith("qobuz.com", Qt::CaseInsensitive)) { return Source_Qobuz; } - if (url.host().endsWith("somafm.com", Qt::CaseInsensitive)) { return Source_SomaFM; } - if (url.host().endsWith("radioparadise.com", Qt::CaseInsensitive)) { return Source_RadioParadise; } - return Source_Stream; + if (url.host().endsWith("tidal.com", Qt::CaseInsensitive)) { return Source::Tidal; } + if (url.host().endsWith("qobuz.com", Qt::CaseInsensitive)) { return Source::Qobuz; } + if (url.host().endsWith("somafm.com", Qt::CaseInsensitive)) { return Source::SomaFM; } + if (url.host().endsWith("radioparadise.com", Qt::CaseInsensitive)) { return Source::RadioParadise; } + return Source::Stream; } - else return Source_Unknown; + else return Source::Unknown; } -QString Song::TextForSource(Source source) { +QString Song::TextForSource(const Source source) { switch (source) { - case Song::Source_LocalFile: return "file"; - case Song::Source_Collection: return "collection"; - case Song::Source_CDDA: return "cd"; - case Song::Source_Device: return "device"; - case Song::Source_Stream: return "stream"; - case Song::Source_Tidal: return "tidal"; - case Song::Source_Subsonic: return "subsonic"; - case Song::Source_Qobuz: return "qobuz"; - case Song::Source_SomaFM: return "somafm"; - case Song::Source_RadioParadise: return "radioparadise"; - case Song::Source_Unknown: return "unknown"; + case Source::LocalFile: return "file"; + case Source::Collection: return "collection"; + case Source::CDDA: return "cd"; + case Source::Device: return "device"; + case Source::Stream: return "stream"; + case Source::Tidal: return "tidal"; + case Source::Subsonic: return "subsonic"; + case Source::Qobuz: return "qobuz"; + case Source::SomaFM: return "somafm"; + case Source::RadioParadise: return "radioparadise"; + case Source::Unknown: return "unknown"; } return "unknown"; } -QString Song::DescriptionForSource(Source source) { +QString Song::DescriptionForSource(const Source source) { switch (source) { - case Song::Source_LocalFile: return "File"; - case Song::Source_Collection: return "Collection"; - case Song::Source_CDDA: return "CD"; - case Song::Source_Device: return "Device"; - case Song::Source_Stream: return "Stream"; - case Song::Source_Tidal: return "Tidal"; - case Song::Source_Subsonic: return "Subsonic"; - case Song::Source_Qobuz: return "Qobuz"; - case Song::Source_SomaFM: return "SomaFM"; - case Song::Source_RadioParadise: return "Radio Paradise"; - case Song::Source_Unknown: return "Unknown"; + case Source::LocalFile: return "File"; + case Source::Collection: return "Collection"; + case Source::CDDA: return "CD"; + case Source::Device: return "Device"; + case Source::Stream: return "Stream"; + case Source::Tidal: return "Tidal"; + case Source::Subsonic: return "Subsonic"; + case Source::Qobuz: return "Qobuz"; + case Source::SomaFM: return "SomaFM"; + case Source::RadioParadise: return "Radio Paradise"; + case Source::Unknown: return "Unknown"; } return "unknown"; @@ -607,132 +607,132 @@ QString Song::DescriptionForSource(Source source) { Song::Source Song::SourceFromText(const QString &source) { - if (source.compare("file", Qt::CaseInsensitive) == 0) return Source_LocalFile; - if (source.compare("collection", Qt::CaseInsensitive) == 0) return Source_Collection; - if (source.compare("cd", Qt::CaseInsensitive) == 0) return Source_CDDA; - if (source.compare("device", Qt::CaseInsensitive) == 0) return Source_Device; - if (source.compare("stream", Qt::CaseInsensitive) == 0) return Source_Stream; - if (source.compare("tidal", Qt::CaseInsensitive) == 0) return Source_Tidal; - if (source.compare("subsonic", Qt::CaseInsensitive) == 0) return Source_Subsonic; - if (source.compare("qobuz", Qt::CaseInsensitive) == 0) return Source_Qobuz; - if (source.compare("somafm", Qt::CaseInsensitive) == 0) return Source_SomaFM; - if (source.compare("radioparadise", Qt::CaseInsensitive) == 0) return Source_RadioParadise; + if (source.compare("file", Qt::CaseInsensitive) == 0) return Source::LocalFile; + if (source.compare("collection", Qt::CaseInsensitive) == 0) return Source::Collection; + if (source.compare("cd", Qt::CaseInsensitive) == 0) return Source::CDDA; + if (source.compare("device", Qt::CaseInsensitive) == 0) return Source::Device; + if (source.compare("stream", Qt::CaseInsensitive) == 0) return Source::Stream; + if (source.compare("tidal", Qt::CaseInsensitive) == 0) return Source::Tidal; + if (source.compare("subsonic", Qt::CaseInsensitive) == 0) return Source::Subsonic; + if (source.compare("qobuz", Qt::CaseInsensitive) == 0) return Source::Qobuz; + if (source.compare("somafm", Qt::CaseInsensitive) == 0) return Source::SomaFM; + if (source.compare("radioparadise", Qt::CaseInsensitive) == 0) return Source::RadioParadise; - return Source_Unknown; + return Source::Unknown; } -QIcon Song::IconForSource(Source source) { +QIcon Song::IconForSource(const Source source) { switch (source) { - case Song::Source_LocalFile: return IconLoader::Load("folder-sound"); - case Song::Source_Collection: return IconLoader::Load("library-music"); - case Song::Source_CDDA: return IconLoader::Load("media-optical"); - case Song::Source_Device: return IconLoader::Load("device"); - case Song::Source_Stream: return IconLoader::Load("applications-internet"); - case Song::Source_Tidal: return IconLoader::Load("tidal"); - case Song::Source_Subsonic: return IconLoader::Load("subsonic"); - case Song::Source_Qobuz: return IconLoader::Load("qobuz"); - case Song::Source_SomaFM: return IconLoader::Load("somafm"); - case Song::Source_RadioParadise: return IconLoader::Load("radioparadise"); - case Song::Source_Unknown: return IconLoader::Load("edit-delete"); + case Source::LocalFile: return IconLoader::Load("folder-sound"); + case Source::Collection: return IconLoader::Load("library-music"); + case Source::CDDA: return IconLoader::Load("media-optical"); + case Source::Device: return IconLoader::Load("device"); + case Source::Stream: return IconLoader::Load("applications-internet"); + case Source::Tidal: return IconLoader::Load("tidal"); + case Source::Subsonic: return IconLoader::Load("subsonic"); + case Source::Qobuz: return IconLoader::Load("qobuz"); + case Source::SomaFM: return IconLoader::Load("somafm"); + case Source::RadioParadise: return IconLoader::Load("radioparadise"); + case Source::Unknown: return IconLoader::Load("edit-delete"); } return IconLoader::Load("edit-delete"); } -QString Song::TextForFiletype(FileType filetype) { +QString Song::TextForFiletype(const FileType filetype) { switch (filetype) { - case Song::FileType_WAV: return "Wav"; - case Song::FileType_FLAC: return "FLAC"; - case Song::FileType_WavPack: return "WavPack"; - case Song::FileType_OggFlac: return "Ogg FLAC"; - case Song::FileType_OggVorbis: return "Ogg Vorbis"; - case Song::FileType_OggOpus: return "Ogg Opus"; - case Song::FileType_OggSpeex: return "Ogg Speex"; - case Song::FileType_MPEG: return "MP3"; - case Song::FileType_MP4: return "MP4 AAC"; - case Song::FileType_ASF: return "Windows Media audio"; - case Song::FileType_AIFF: return "AIFF"; - case Song::FileType_MPC: return "MPC"; - case Song::FileType_TrueAudio: return "TrueAudio"; - case Song::FileType_DSF: return "DSF"; - case Song::FileType_DSDIFF: return "DSDIFF"; - case Song::FileType_PCM: return "PCM"; - case Song::FileType_APE: return "Monkey's Audio"; - case Song::FileType_MOD: return "Module Music Format"; - case Song::FileType_S3M: return "Module Music Format"; - case Song::FileType_XM: return "Module Music Format"; - case Song::FileType_IT: return "Module Music Format"; - case Song::FileType_CDDA: return "CDDA"; - case Song::FileType_SPC: return "SNES SPC700"; - case Song::FileType_VGM: return "VGM"; - case Song::FileType_Stream: return "Stream"; - case Song::FileType_Unknown: + case FileType::WAV: return "Wav"; + case FileType::FLAC: return "FLAC"; + case FileType::WavPack: return "WavPack"; + case FileType::OggFlac: return "Ogg FLAC"; + case FileType::OggVorbis: return "Ogg Vorbis"; + case FileType::OggOpus: return "Ogg Opus"; + case FileType::OggSpeex: return "Ogg Speex"; + case FileType::MPEG: return "MP3"; + case FileType::MP4: return "MP4 AAC"; + case FileType::ASF: return "Windows Media audio"; + case FileType::AIFF: return "AIFF"; + case FileType::MPC: return "MPC"; + case FileType::TrueAudio: return "TrueAudio"; + case FileType::DSF: return "DSF"; + case FileType::DSDIFF: return "DSDIFF"; + case FileType::PCM: return "PCM"; + case FileType::APE: return "Monkey's Audio"; + case FileType::MOD: return "Module Music Format"; + case FileType::S3M: return "Module Music Format"; + case FileType::XM: return "Module Music Format"; + case FileType::IT: return "Module Music Format"; + case FileType::CDDA: return "CDDA"; + case FileType::SPC: return "SNES SPC700"; + case FileType::VGM: return "VGM"; + case FileType::Stream: return "Stream"; + case FileType::Unknown: default: return QObject::tr("Unknown"); } } -QString Song::ExtensionForFiletype(FileType filetype) { +QString Song::ExtensionForFiletype(const FileType filetype) { switch (filetype) { - case Song::FileType_WAV: return "wav"; - case Song::FileType_FLAC: return "flac"; - case Song::FileType_WavPack: return "wv"; - case Song::FileType_OggFlac: return "flac"; - case Song::FileType_OggVorbis: return "ogg"; - case Song::FileType_OggOpus: return "opus"; - case Song::FileType_OggSpeex: return "spx"; - case Song::FileType_MPEG: return "mp3"; - case Song::FileType_MP4: return "mp4"; - case Song::FileType_ASF: return "wma"; - case Song::FileType_AIFF: return "aiff"; - case Song::FileType_MPC: return "mpc"; - case Song::FileType_TrueAudio: return "tta"; - case Song::FileType_DSF: return "dsf"; - case Song::FileType_DSDIFF: return "dsd"; - case Song::FileType_APE: return "ape"; - case Song::FileType_MOD: return "mod"; - case Song::FileType_S3M: return "s3m"; - case Song::FileType_XM: return "xm"; - case Song::FileType_IT: return "it"; - case Song::FileType_SPC: return "spc"; - case Song::FileType_VGM: return "vgm"; - case Song::FileType_Unknown: + case FileType::WAV: return "wav"; + case FileType::FLAC: return "flac"; + case FileType::WavPack: return "wv"; + case FileType::OggFlac: return "flac"; + case FileType::OggVorbis: return "ogg"; + case FileType::OggOpus: return "opus"; + case FileType::OggSpeex: return "spx"; + case FileType::MPEG: return "mp3"; + case FileType::MP4: return "mp4"; + case FileType::ASF: return "wma"; + case FileType::AIFF: return "aiff"; + case FileType::MPC: return "mpc"; + case FileType::TrueAudio: return "tta"; + case FileType::DSF: return "dsf"; + case FileType::DSDIFF: return "dsd"; + case FileType::APE: return "ape"; + case FileType::MOD: return "mod"; + case FileType::S3M: return "s3m"; + case FileType::XM: return "xm"; + case FileType::IT: return "it"; + case FileType::SPC: return "spc"; + case FileType::VGM: return "vgm"; + case FileType::Unknown: default: return "dat"; } } -QIcon Song::IconForFiletype(FileType filetype) { +QIcon Song::IconForFiletype(const FileType filetype) { switch (filetype) { - case Song::FileType_WAV: return IconLoader::Load("wav"); - case Song::FileType_FLAC: return IconLoader::Load("flac"); - case Song::FileType_WavPack: return IconLoader::Load("wavpack"); - case Song::FileType_OggFlac: return IconLoader::Load("flac"); - case Song::FileType_OggVorbis: return IconLoader::Load("vorbis"); - case Song::FileType_OggOpus: return IconLoader::Load("opus"); - case Song::FileType_OggSpeex: return IconLoader::Load("speex"); - case Song::FileType_MPEG: return IconLoader::Load("mp3"); - case Song::FileType_MP4: return IconLoader::Load("mp4"); - case Song::FileType_ASF: return IconLoader::Load("wma"); - case Song::FileType_AIFF: return IconLoader::Load("aiff"); - case Song::FileType_MPC: return IconLoader::Load("mpc"); - case Song::FileType_TrueAudio: return IconLoader::Load("trueaudio"); - case Song::FileType_DSF: return IconLoader::Load("dsf"); - case Song::FileType_DSDIFF: return IconLoader::Load("dsd"); - case Song::FileType_PCM: return IconLoader::Load("pcm"); - case Song::FileType_APE: return IconLoader::Load("ape"); - case Song::FileType_MOD: return IconLoader::Load("mod"); - case Song::FileType_S3M: return IconLoader::Load("s3m"); - case Song::FileType_XM: return IconLoader::Load("xm"); - case Song::FileType_IT: return IconLoader::Load("it"); - case Song::FileType_CDDA: return IconLoader::Load("cd"); - case Song::FileType_Stream: return IconLoader::Load("applications-internet"); - case Song::FileType_Unknown: + case FileType::WAV: return IconLoader::Load("wav"); + case FileType::FLAC: return IconLoader::Load("flac"); + case FileType::WavPack: return IconLoader::Load("wavpack"); + case FileType::OggFlac: return IconLoader::Load("flac"); + case FileType::OggVorbis: return IconLoader::Load("vorbis"); + case FileType::OggOpus: return IconLoader::Load("opus"); + case FileType::OggSpeex: return IconLoader::Load("speex"); + case FileType::MPEG: return IconLoader::Load("mp3"); + case FileType::MP4: return IconLoader::Load("mp4"); + case FileType::ASF: return IconLoader::Load("wma"); + case FileType::AIFF: return IconLoader::Load("aiff"); + case FileType::MPC: return IconLoader::Load("mpc"); + case FileType::TrueAudio: return IconLoader::Load("trueaudio"); + case FileType::DSF: return IconLoader::Load("dsf"); + case FileType::DSDIFF: return IconLoader::Load("dsd"); + case FileType::PCM: return IconLoader::Load("pcm"); + case FileType::APE: return IconLoader::Load("ape"); + case FileType::MOD: return IconLoader::Load("mod"); + case FileType::S3M: return IconLoader::Load("s3m"); + case FileType::XM: return IconLoader::Load("xm"); + case FileType::IT: return IconLoader::Load("it"); + case FileType::CDDA: return IconLoader::Load("cd"); + case FileType::Stream: return IconLoader::Load("applications-internet"); + case FileType::Unknown: default: return IconLoader::Load("edit-delete"); } @@ -740,17 +740,17 @@ QIcon Song::IconForFiletype(FileType filetype) { bool Song::IsFileLossless() const { switch (filetype()) { - case Song::FileType_WAV: - case Song::FileType_FLAC: - case Song::FileType_OggFlac: - case Song::FileType_WavPack: - case Song::FileType_AIFF: - case Song::FileType_DSF: - case Song::FileType_DSDIFF: - case Song::FileType_APE: - case Song::FileType_TrueAudio: - case Song::FileType_PCM: - case Song::FileType_CDDA: + case FileType::WAV: + case FileType::FLAC: + case FileType::OggFlac: + case FileType::WavPack: + case FileType::AIFF: + case FileType::DSF: + case FileType::DSDIFF: + case FileType::APE: + case FileType::TrueAudio: + case FileType::PCM: + case FileType::CDDA: return true; default: return false; @@ -759,103 +759,103 @@ bool Song::IsFileLossless() const { Song::FileType Song::FiletypeByMimetype(const QString &mimetype) { - if (mimetype.compare("audio/wav", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-wav", Qt::CaseInsensitive) == 0) return Song::FileType_WAV; - else if (mimetype.compare("audio/x-flac", Qt::CaseInsensitive) == 0) return Song::FileType_FLAC; - else if (mimetype.compare("audio/x-wavpack", Qt::CaseInsensitive) == 0) return Song::FileType_WavPack; - else if (mimetype.compare("audio/x-vorbis", Qt::CaseInsensitive) == 0) return Song::FileType_OggVorbis; - else if (mimetype.compare("audio/x-opus", Qt::CaseInsensitive) == 0) return Song::FileType_OggOpus; - else if (mimetype.compare("audio/x-speex", Qt::CaseInsensitive) == 0) return Song::FileType_OggSpeex; + if (mimetype.compare("audio/wav", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-wav", Qt::CaseInsensitive) == 0) return FileType::WAV; + else if (mimetype.compare("audio/x-flac", Qt::CaseInsensitive) == 0) return FileType::FLAC; + else if (mimetype.compare("audio/x-wavpack", Qt::CaseInsensitive) == 0) return FileType::WavPack; + else if (mimetype.compare("audio/x-vorbis", Qt::CaseInsensitive) == 0) return FileType::OggVorbis; + else if (mimetype.compare("audio/x-opus", Qt::CaseInsensitive) == 0) return FileType::OggOpus; + else if (mimetype.compare("audio/x-speex", Qt::CaseInsensitive) == 0) return FileType::OggSpeex; // Gstreamer returns audio/mpeg for both MP3 and MP4/AAC. - // else if (mimetype.compare("audio/mpeg", Qt::CaseInsensitive) == 0) return Song::FileType_MPEG; - else if (mimetype.compare("audio/aac", Qt::CaseInsensitive) == 0) return Song::FileType_MP4; - else if (mimetype.compare("audio/x-wma", Qt::CaseInsensitive) == 0) return Song::FileType_ASF; - else if (mimetype.compare("audio/aiff", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-aiff", Qt::CaseInsensitive) == 0) return Song::FileType_AIFF; - else if (mimetype.compare("application/x-project", Qt::CaseInsensitive) == 0) return Song::FileType_MPC; - else if (mimetype.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; - else if (mimetype.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; - else if (mimetype.compare("audio/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("application/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; - else if (mimetype.compare("audio/x-mod", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; - else if (mimetype.compare("audio/x-s3m", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; - else if (mimetype.compare("audio/x-spc", Qt::CaseInsensitive) == 0) return Song::FileType_SPC; - else if (mimetype.compare("audio/x-vgm", Qt::CaseInsensitive) == 0) return Song::FileType_VGM; + // else if (mimetype.compare("audio/mpeg", Qt::CaseInsensitive) == 0) return FileType::MPEG; + else if (mimetype.compare("audio/aac", Qt::CaseInsensitive) == 0) return FileType::MP4; + else if (mimetype.compare("audio/x-wma", Qt::CaseInsensitive) == 0) return FileType::ASF; + else if (mimetype.compare("audio/aiff", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-aiff", Qt::CaseInsensitive) == 0) return FileType::AIFF; + else if (mimetype.compare("application/x-project", Qt::CaseInsensitive) == 0) return FileType::MPC; + else if (mimetype.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return FileType::DSF; + else if (mimetype.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + else if (mimetype.compare("audio/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("application/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return FileType::APE; + else if (mimetype.compare("audio/x-mod", Qt::CaseInsensitive) == 0) return FileType::MOD; + else if (mimetype.compare("audio/x-s3m", Qt::CaseInsensitive) == 0) return FileType::S3M; + else if (mimetype.compare("audio/x-spc", Qt::CaseInsensitive) == 0) return FileType::SPC; + else if (mimetype.compare("audio/x-vgm", Qt::CaseInsensitive) == 0) return FileType::VGM; - else return Song::FileType_Unknown; + else return FileType::Unknown; } Song::FileType Song::FiletypeByDescription(const QString &text) { - if (text.compare("WAV", Qt::CaseInsensitive) == 0) return Song::FileType_WAV; - else if (text.compare("Free Lossless Audio Codec (FLAC)", Qt::CaseInsensitive) == 0) return Song::FileType_FLAC; - else if (text.compare("Wavpack", Qt::CaseInsensitive) == 0) return Song::FileType_WavPack; - else if (text.compare("Vorbis", Qt::CaseInsensitive) == 0) return Song::FileType_OggVorbis; - else if (text.compare("Opus", Qt::CaseInsensitive) == 0) return Song::FileType_OggOpus; - else if (text.compare("Speex", Qt::CaseInsensitive) == 0) return Song::FileType_OggSpeex; - else if (text.compare("MPEG-1 Layer 3 (MP3)", Qt::CaseInsensitive) == 0) return Song::FileType_MPEG; - else if (text.compare("MPEG-4 AAC", Qt::CaseInsensitive) == 0) return Song::FileType_MP4; - else if (text.compare("WMA", Qt::CaseInsensitive) == 0) return Song::FileType_ASF; - else if (text.compare("Audio Interchange File Format", Qt::CaseInsensitive) == 0) return Song::FileType_AIFF; - else if (text.compare("MPC", Qt::CaseInsensitive) == 0) return Song::FileType_MPC; - else if (text.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; - else if (text.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; - else if (text.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; - else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; - else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; - else if (text.compare("SNES SPC700", Qt::CaseInsensitive) == 0) return Song::FileType_SPC; - else if (text.compare("VGM", Qt::CaseInsensitive) == 0) return Song::FileType_VGM; - else return Song::FileType_Unknown; + if (text.compare("WAV", Qt::CaseInsensitive) == 0) return FileType::WAV; + else if (text.compare("Free Lossless Audio Codec (FLAC)", Qt::CaseInsensitive) == 0) return FileType::FLAC; + else if (text.compare("Wavpack", Qt::CaseInsensitive) == 0) return FileType::WavPack; + else if (text.compare("Vorbis", Qt::CaseInsensitive) == 0) return FileType::OggVorbis; + else if (text.compare("Opus", Qt::CaseInsensitive) == 0) return FileType::OggOpus; + else if (text.compare("Speex", Qt::CaseInsensitive) == 0) return FileType::OggSpeex; + else if (text.compare("MPEG-1 Layer 3 (MP3)", Qt::CaseInsensitive) == 0) return FileType::MPEG; + else if (text.compare("MPEG-4 AAC", Qt::CaseInsensitive) == 0) return FileType::MP4; + else if (text.compare("WMA", Qt::CaseInsensitive) == 0) return FileType::ASF; + else if (text.compare("Audio Interchange File Format", Qt::CaseInsensitive) == 0) return FileType::AIFF; + else if (text.compare("MPC", Qt::CaseInsensitive) == 0) return FileType::MPC; + else if (text.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return FileType::DSF; + else if (text.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + else if (text.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return FileType::APE; + else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return FileType::MOD; + else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return FileType::S3M; + else if (text.compare("SNES SPC700", Qt::CaseInsensitive) == 0) return FileType::SPC; + else if (text.compare("VGM", Qt::CaseInsensitive) == 0) return FileType::VGM; + else return FileType::Unknown; } Song::FileType Song::FiletypeByExtension(const QString &ext) { - if (ext.compare("wav", Qt::CaseInsensitive) == 0 || ext.compare("wave", Qt::CaseInsensitive) == 0) return Song::FileType_WAV; - else if (ext.compare("flac", Qt::CaseInsensitive) == 0) return Song::FileType_FLAC; - else if (ext.compare("wavpack", Qt::CaseInsensitive) == 0 || ext.compare("wv", Qt::CaseInsensitive) == 0) return Song::FileType_WavPack; - else if (ext.compare("ogg", Qt::CaseInsensitive) == 0 || ext.compare("oga", Qt::CaseInsensitive) == 0) return Song::FileType_OggVorbis; - else if (ext.compare("opus", Qt::CaseInsensitive) == 0) return Song::FileType_OggOpus; - else if (ext.compare("speex", Qt::CaseInsensitive) == 0 || ext.compare("spx", Qt::CaseInsensitive) == 0) return Song::FileType_OggSpeex; - else if (ext.compare("mp3", Qt::CaseInsensitive) == 0) return Song::FileType_MPEG; - else if (ext.compare("mp4", Qt::CaseInsensitive) == 0 || ext.compare("m4a", Qt::CaseInsensitive) == 0 || ext.compare("aac", Qt::CaseInsensitive) == 0) return Song::FileType_MP4; - else if (ext.compare("asf", Qt::CaseInsensitive) == 0 || ext.compare("wma", Qt::CaseInsensitive) == 0) return Song::FileType_ASF; - else if (ext.compare("aiff", Qt::CaseInsensitive) == 0 || ext.compare("aif", Qt::CaseInsensitive) == 0 || ext.compare("aifc", Qt::CaseInsensitive) == 0) return Song::FileType_AIFF; - else if (ext.compare("mpc", Qt::CaseInsensitive) == 0 || ext.compare("mp+", Qt::CaseInsensitive) == 0 || ext.compare("mpp", Qt::CaseInsensitive) == 0) return Song::FileType_MPC; - else if (ext.compare("dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; - else if (ext.compare("dsd", Qt::CaseInsensitive) == 0 || ext.compare("dff", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; - else if (ext.compare("ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; + if (ext.compare("wav", Qt::CaseInsensitive) == 0 || ext.compare("wave", Qt::CaseInsensitive) == 0) return FileType::WAV; + else if (ext.compare("flac", Qt::CaseInsensitive) == 0) return FileType::FLAC; + else if (ext.compare("wavpack", Qt::CaseInsensitive) == 0 || ext.compare("wv", Qt::CaseInsensitive) == 0) return FileType::WavPack; + else if (ext.compare("ogg", Qt::CaseInsensitive) == 0 || ext.compare("oga", Qt::CaseInsensitive) == 0) return FileType::OggVorbis; + else if (ext.compare("opus", Qt::CaseInsensitive) == 0) return FileType::OggOpus; + else if (ext.compare("speex", Qt::CaseInsensitive) == 0 || ext.compare("spx", Qt::CaseInsensitive) == 0) return FileType::OggSpeex; + else if (ext.compare("mp3", Qt::CaseInsensitive) == 0) return FileType::MPEG; + else if (ext.compare("mp4", Qt::CaseInsensitive) == 0 || ext.compare("m4a", Qt::CaseInsensitive) == 0 || ext.compare("aac", Qt::CaseInsensitive) == 0) return FileType::MP4; + else if (ext.compare("asf", Qt::CaseInsensitive) == 0 || ext.compare("wma", Qt::CaseInsensitive) == 0) return FileType::ASF; + else if (ext.compare("aiff", Qt::CaseInsensitive) == 0 || ext.compare("aif", Qt::CaseInsensitive) == 0 || ext.compare("aifc", Qt::CaseInsensitive) == 0) return FileType::AIFF; + else if (ext.compare("mpc", Qt::CaseInsensitive) == 0 || ext.compare("mp+", Qt::CaseInsensitive) == 0 || ext.compare("mpp", Qt::CaseInsensitive) == 0) return FileType::MPC; + else if (ext.compare("dsf", Qt::CaseInsensitive) == 0) return FileType::DSF; + else if (ext.compare("dsd", Qt::CaseInsensitive) == 0 || ext.compare("dff", Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + else if (ext.compare("ape", Qt::CaseInsensitive) == 0) return FileType::APE; else if (ext.compare("mod", Qt::CaseInsensitive) == 0 || ext.compare("module", Qt::CaseInsensitive) == 0 || ext.compare("nst", Qt::CaseInsensitive) == 0|| - ext.compare("wow", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; - else if (ext.compare("s3m", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; - else if (ext.compare("xm", Qt::CaseInsensitive) == 0) return Song::FileType_XM; - else if (ext.compare("it", Qt::CaseInsensitive) == 0) return Song::FileType_IT; - else if (ext.compare("spc", Qt::CaseInsensitive) == 0) return Song::FileType_SPC; - else if (ext.compare("vgm", Qt::CaseInsensitive) == 0) return Song::FileType_VGM; + ext.compare("wow", Qt::CaseInsensitive) == 0) return FileType::MOD; + else if (ext.compare("s3m", Qt::CaseInsensitive) == 0) return FileType::S3M; + else if (ext.compare("xm", Qt::CaseInsensitive) == 0) return FileType::XM; + else if (ext.compare("it", Qt::CaseInsensitive) == 0) return FileType::IT; + else if (ext.compare("spc", Qt::CaseInsensitive) == 0) return FileType::SPC; + else if (ext.compare("vgm", Qt::CaseInsensitive) == 0) return FileType::VGM; - else return Song::FileType_Unknown; + else return FileType::Unknown; } -QString Song::ImageCacheDir(const Song::Source source) { +QString Song::ImageCacheDir(const Source source) { switch (source) { - case Song::Source_Collection: + case Source::Collection: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/collectionalbumcovers"; - case Song::Source_Subsonic: + case Source::Subsonic: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/subsonicalbumcovers"; - case Song::Source_Tidal: + case Source::Tidal: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/tidalalbumcovers"; - case Song::Source_Qobuz: + case Source::Qobuz: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/qobuzalbumcovers"; - case Song::Source_Device: + case Source::Device: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/devicealbumcovers"; - case Song::Source_LocalFile: - case Song::Source_CDDA: - case Song::Source_Stream: - case Song::Source_SomaFM: - case Song::Source_RadioParadise: - case Song::Source_Unknown: + case Source::LocalFile: + case Source::CDDA: + case Source::Stream: + case Source::SomaFM: + case Source::RadioParadise: + case Source::Unknown: return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/albumcovers"; } @@ -899,7 +899,7 @@ void Song::Init(const QString &title, const QString &artist, const QString &albu void Song::InitFromProtobuf(const spb::tagreader::SongMetadata &pb) { - if (d->source_ == Source_Unknown) d->source_ = Source_LocalFile; + if (d->source_ == Source::Unknown) d->source_ = Source::LocalFile; d->init_from_file_ = true; d->valid_ = pb.valid(); @@ -1068,7 +1068,7 @@ void Song::InitFromFilePartial(const QString &filename, const QFileInfo &fileinf set_url(QUrl::fromLocalFile(filename)); d->valid_ = true; - d->source_ = Source_LocalFile; + d->source_ = Source::LocalFile; d->filetype_ = FiletypeByExtension(fileinfo.suffix()); d->basefilename_ = fileinfo.fileName(); d->title_ = fileinfo.fileName(); @@ -1091,7 +1091,7 @@ void Song::InitArtManual() { void Song::InitArtAutomatic() { - if (d->source_ == Source_LocalFile && d->url_.isLocalFile() && d->art_automatic_.isEmpty()) { + if (d->source_ == Source::LocalFile && d->url_.isLocalFile() && d->art_automatic_.isEmpty()) { // Pick the first image file in the album directory. QFileInfo file(d->url_.toLocalFile()); QDir dir(file.path()); @@ -1127,7 +1127,7 @@ void Song::InitFromItdb(Itdb_Track *track, const QString &prefix) { d->samplerate_ = track->samplerate; d->bitdepth_ = -1; //track->bitdepth; - d->source_ = Source_Device; + d->source_ = Source::Device; QString filename = QString::fromLocal8Bit(track->ipod_path); filename.replace(':', '/'); if (prefix.contains("://")) { @@ -1138,7 +1138,7 @@ void Song::InitFromItdb(Itdb_Track *track, const QString &prefix) { } d->basefilename_ = QFileInfo(filename).fileName(); - d->filetype_ = track->type2 ? FileType_MPEG : FileType_MP4; + d->filetype_ = track->type2 ? FileType::MPEG : FileType::MP4; d->filesize_ = track->size; d->mtime_ = track->time_modified; d->ctime_ = track->time_added; @@ -1150,7 +1150,7 @@ void Song::InitFromItdb(Itdb_Track *track, const QString &prefix) { if (itdb_track_has_thumbnails(track) && !d->artist_.isEmpty() && !d->title_.isEmpty()) { GdkPixbuf *pixbuf = static_cast(itdb_track_get_thumbnail(track, -1, -1)); if (pixbuf) { - QString cover_path = ImageCacheDir(Source_Device); + QString cover_path = ImageCacheDir(Source::Device); QDir dir(cover_path); if (!dir.exists()) dir.mkpath(cover_path); QString cover_file = cover_path + "/" + Utilities::Sha1CoverHash(effective_albumartist(), effective_album()).toHex() + ".jpg"; @@ -1184,8 +1184,8 @@ void Song::ToItdb(Itdb_Track *track) const { track->bitrate = d->bitrate_; track->samplerate = d->samplerate_; - track->type1 = (d->filetype_ == FileType_MPEG ? 1 : 0); - track->type2 = (d->filetype_ == FileType_MPEG ? 1 : 0); + track->type1 = (d->filetype_ == FileType::MPEG ? 1 : 0); + track->type2 = (d->filetype_ == FileType::MPEG ? 1 : 0); track->mediatype = 1; // Audio track->size = static_cast(d->filesize_); track->time_modified = d->mtime_; @@ -1202,7 +1202,7 @@ void Song::ToItdb(Itdb_Track *track) const { void Song::InitFromMTP(const LIBMTP_track_t *track, const QString &host) { d->valid_ = true; - d->source_ = Source_Device; + d->source_ = Source::Device; set_title(QString::fromUtf8(track->title)); set_artist(QString::fromUtf8(track->artist)); @@ -1226,19 +1226,19 @@ void Song::InitFromMTP(const LIBMTP_track_t *track, const QString &host) { d->playcount_ = track->usecount; switch (track->filetype) { - case LIBMTP_FILETYPE_WAV: d->filetype_ = FileType_WAV; break; - case LIBMTP_FILETYPE_MP3: d->filetype_ = FileType_MPEG; break; - case LIBMTP_FILETYPE_WMA: d->filetype_ = FileType_ASF; break; - case LIBMTP_FILETYPE_OGG: d->filetype_ = FileType_OggVorbis; break; - case LIBMTP_FILETYPE_MP4: d->filetype_ = FileType_MP4; break; - case LIBMTP_FILETYPE_AAC: d->filetype_ = FileType_MP4; break; - case LIBMTP_FILETYPE_FLAC: d->filetype_ = FileType_OggFlac; break; - case LIBMTP_FILETYPE_MP2: d->filetype_ = FileType_MPEG; break; - case LIBMTP_FILETYPE_M4A: d->filetype_ = FileType_MP4; break; - default: - d->filetype_ = FileType_Unknown; - d->valid_ = false; - break; + case LIBMTP_FILETYPE_WAV: d->filetype_ = FileType::WAV; break; + case LIBMTP_FILETYPE_MP3: d->filetype_ = FileType::MPEG; break; + case LIBMTP_FILETYPE_WMA: d->filetype_ = FileType::ASF; break; + case LIBMTP_FILETYPE_OGG: d->filetype_ = FileType::OggVorbis; break; + case LIBMTP_FILETYPE_MP4: d->filetype_ = FileType::MP4; break; + case LIBMTP_FILETYPE_AAC: d->filetype_ = FileType::MP4; break; + case LIBMTP_FILETYPE_FLAC: d->filetype_ = FileType::OggFlac; break; + case LIBMTP_FILETYPE_MP2: d->filetype_ = FileType::MPEG; break; + case LIBMTP_FILETYPE_M4A: d->filetype_ = FileType::MP4; break; + default: + d->filetype_ = FileType::Unknown; + d->valid_ = false; + break; } } @@ -1276,14 +1276,14 @@ void Song::ToMTP(LIBMTP_track_t *track) const { track->usecount = d->playcount_; switch (d->filetype_) { - case FileType_ASF: track->filetype = LIBMTP_FILETYPE_ASF; break; - case FileType_MP4: track->filetype = LIBMTP_FILETYPE_MP4; break; - case FileType_MPEG: track->filetype = LIBMTP_FILETYPE_MP3; break; - case FileType_FLAC: - case FileType_OggFlac: track->filetype = LIBMTP_FILETYPE_FLAC; break; - case FileType_OggSpeex: - case FileType_OggVorbis: track->filetype = LIBMTP_FILETYPE_OGG; break; - case FileType_WAV: track->filetype = LIBMTP_FILETYPE_WAV; break; + case FileType::ASF: track->filetype = LIBMTP_FILETYPE_ASF; break; + case FileType::MP4: track->filetype = LIBMTP_FILETYPE_MP4; break; + case FileType::MPEG: track->filetype = LIBMTP_FILETYPE_MP3; break; + case FileType::FLAC: + case FileType::OggFlac: track->filetype = LIBMTP_FILETYPE_FLAC; break; + case FileType::OggSpeex: + case FileType::OggVorbis: track->filetype = LIBMTP_FILETYPE_OGG; break; + case FileType::WAV: track->filetype = LIBMTP_FILETYPE_WAV; break; default: track->filetype = LIBMTP_FILETYPE_UNDEF_AUDIO; break; } @@ -1335,7 +1335,7 @@ bool Song::MergeFromSimpleMetaBundle(const Engine::SimpleMetaBundle &bundle) { if (bundle.length > 0) set_length_nanosec(bundle.length); if (bundle.year > 0) d->year_ = bundle.year; if (bundle.track > 0) d->track_ = bundle.track; - if (bundle.filetype != FileType_Unknown) d->filetype_ = bundle.filetype; + if (bundle.filetype != FileType::Unknown) d->filetype_ = bundle.filetype; if (bundle.samplerate > 0) d->samplerate_ = bundle.samplerate; if (bundle.bitdepth > 0) d->bitdepth_ = bundle.bitdepth; if (bundle.bitrate > 0) d->bitrate_ = bundle.bitrate; @@ -1375,10 +1375,10 @@ void Song::BindToQuery(SqlQuery *query) const { query->BindIntValue(":samplerate", d->samplerate_); query->BindIntValue(":bitdepth", d->bitdepth_); - query->BindValue(":source", d->source_); + query->BindValue(":source", static_cast(d->source_)); query->BindNotNullIntValue(":directory_id", d->directory_id_); query->BindUrlValue(":url", d->url_); - query->BindValue(":filetype", d->filetype_); + query->BindValue(":filetype", static_cast(d->filetype_)); query->BindLongLongValueOrZero(":filesize", d->filesize_); query->BindLongLongValueOrZero(":mtime", d->mtime_); query->BindLongLongValueOrZero(":ctime", d->ctime_); @@ -1564,7 +1564,7 @@ bool Song::IsAllMetadataEqual(const Song &other) const { } bool Song::IsEditable() const { - return d->valid_ && d->url_.isValid() && (d->url_.isLocalFile() || d->source_ == Source_Stream) && !has_cue(); + return d->valid_ && d->url_.isValid() && (d->url_.isLocalFile() || d->source_ == Source::Stream) && !has_cue(); } bool Song::operator==(const Song &other) const { diff --git a/src/core/song.h b/src/core/song.h index 0caa7b7da..a516202f8 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -65,53 +65,53 @@ class Song { public: - enum Source { - Source_Unknown = 0, - Source_LocalFile = 1, - Source_Collection = 2, - Source_CDDA = 3, - Source_Device = 4, - Source_Stream = 5, - Source_Tidal = 6, - Source_Subsonic = 7, - Source_Qobuz = 8, - Source_SomaFM = 9, - Source_RadioParadise = 10 + enum class Source { + Unknown = 0, + LocalFile = 1, + Collection = 2, + CDDA = 3, + Device = 4, + Stream = 5, + Tidal = 6, + Subsonic = 7, + Qobuz = 8, + SomaFM = 9, + RadioParadise = 10 }; // Don't change these values - they're stored in the database, and defined in the tag reader protobuf. // If a new lossless file is added, also add it to IsFileLossless(). - enum FileType { - FileType_Unknown = 0, - FileType_WAV = 1, - FileType_FLAC = 2, - FileType_WavPack = 3, - FileType_OggFlac = 4, - FileType_OggVorbis = 5, - FileType_OggOpus = 6, - FileType_OggSpeex = 7, - FileType_MPEG = 8, - FileType_MP4 = 9, - FileType_ASF = 10, - FileType_AIFF = 11, - FileType_MPC = 12, - FileType_TrueAudio = 13, - FileType_DSF = 14, - FileType_DSDIFF = 15, - FileType_PCM = 16, - FileType_APE = 17, - FileType_MOD = 18, - FileType_S3M = 19, - FileType_XM = 20, - FileType_IT = 21, - FileType_SPC = 22, - FileType_VGM = 23, - FileType_CDDA = 90, - FileType_Stream = 91, + enum class FileType { + Unknown = 0, + WAV = 1, + FLAC = 2, + WavPack = 3, + OggFlac = 4, + OggVorbis = 5, + OggOpus = 6, + OggSpeex = 7, + MPEG = 8, + MP4 = 9, + ASF = 10, + AIFF = 11, + MPC = 12, + TrueAudio = 13, + DSF = 14, + DSDIFF = 15, + PCM = 16, + APE = 17, + MOD = 18, + S3M = 19, + XM = 20, + IT = 21, + SPC = 22, + VGM = 23, + CDDA = 90, + Stream = 91 }; - Song(Song::Source source = Song::Source_Unknown); + Song(Source source = Source::Unknown); Song(const Song &other); ~Song(); @@ -139,13 +139,13 @@ class Song { static QString JoinSpec(const QString &table); static Source SourceFromURL(const QUrl &url); - static QString TextForSource(Source source); - static QString DescriptionForSource(Source source); - static Song::Source SourceFromText(const QString &source); - static QIcon IconForSource(Source source); - static QString TextForFiletype(FileType filetype); - static QString ExtensionForFiletype(FileType filetype); - static QIcon IconForFiletype(FileType filetype); + static QString TextForSource(const Source source); + static QString DescriptionForSource(const Source source); + static Source SourceFromText(const QString &source); + static QIcon IconForSource(const Source source); + static QString TextForFiletype(const FileType filetype); + static QString ExtensionForFiletype(const FileType filetype); + static QIcon IconForFiletype(const FileType filetype); QString TextForSource() const { return TextForSource(source()); } QString DescriptionForSource() const { return DescriptionForSource(source()); } @@ -157,7 +157,7 @@ class Song { static FileType FiletypeByMimetype(const QString &mimetype); static FileType FiletypeByDescription(const QString &text); static FileType FiletypeByExtension(const QString &ext); - static QString ImageCacheDir(const Song::Source source); + static QString ImageCacheDir(const Source source); // Sort songs alphabetically using their pretty title static int CompareSongsName(const Song &song1, const Song &song2); diff --git a/src/core/songloader.cpp b/src/core/songloader.cpp index 42fc654a3..bbc4b1106 100644 --- a/src/core/songloader.cpp +++ b/src/core/songloader.cpp @@ -72,7 +72,7 @@ SongLoader::SongLoader(CollectionBackendInterface *collection, const Player *pla playlist_parser_(new PlaylistParser(collection, this)), cue_parser_(new CueParser(collection, this)), timeout_(kDefaultTimeout), - state_(WaitingForType), + state_(State::WaitingForType), success_(false), parser_(nullptr), collection_(collection), @@ -100,7 +100,7 @@ SongLoader::~SongLoader() { #ifdef HAVE_GSTREAMER if (pipeline_) { - state_ = Finished; + state_ = State::Finished; gst_element_set_state(pipeline_.get(), GST_STATE_NULL); } #endif @@ -109,7 +109,7 @@ SongLoader::~SongLoader() { SongLoader::Result SongLoader::Load(const QUrl &url) { - if (url.isEmpty()) return Error; + if (url.isEmpty()) return Result::Error; url_ = url; @@ -121,13 +121,13 @@ SongLoader::Result SongLoader::Load(const QUrl &url) { // The URI scheme indicates that it can't possibly be a playlist, // or we have a custom handler for the URL, so add it as a raw stream. AddAsRawStream(); - return Success; + return Result::Success; } - if (player_->engine()->type() == Engine::GStreamer) { + if (player_->engine()->type() == Engine::EngineType::GStreamer) { #ifdef HAVE_GSTREAMER preload_func_ = std::bind(&SongLoader::LoadRemote, this); - return BlockingLoadRequired; + return Result::BlockingLoadRequired; #else errors_ << tr("You need GStreamer for this URL."); return Error; @@ -135,10 +135,10 @@ SongLoader::Result SongLoader::Load(const QUrl &url) { } else { errors_ << tr("You need GStreamer for this URL."); - return Error; + return Result::Error; } - return Success; + return Result::Success; } @@ -149,7 +149,7 @@ SongLoader::Result SongLoader::LoadFilenamesBlocking() { } else { errors_ << tr("Preload function was not set for blocking operation."); - return Error; + return Result::Error; } } @@ -162,44 +162,44 @@ SongLoader::Result SongLoader::LoadLocalPartial(const QString &filename) { if (!fileinfo.exists()) { errors_ << tr("File %1 does not exist.").arg(filename); - return Error; + return Result::Error; } // First check to see if it's a directory - if so we can load all the songs inside right away. if (fileinfo.isDir()) { LoadLocalDirectory(filename); - return Success; + return Result::Success; } // Assume it's just a normal file if (TagReaderClient::Instance()->IsMediaFileBlocking(filename) || Song::kAcceptedExtensions.contains(fileinfo.suffix(), Qt::CaseInsensitive)) { - Song song(Song::Source_LocalFile); + Song song(Song::Source::LocalFile); song.InitFromFilePartial(filename, fileinfo); if (song.is_valid()) { songs_ << song; - return Success; + return Result::Success; } } errors_ << QObject::tr("File %1 is not recognized as a valid audio file.").arg(filename); - return Error; + return Result::Error; } SongLoader::Result SongLoader::LoadAudioCD() { #if defined(HAVE_AUDIOCD) && defined(HAVE_GSTREAMER) - if (player_->engine()->type() == Engine::GStreamer) { + if (player_->engine()->type() == Engine::EngineType::GStreamer) { CddaSongLoader *cdda_song_loader = new CddaSongLoader(QUrl(), this); QObject::connect(cdda_song_loader, &CddaSongLoader::SongsDurationLoaded, this, &SongLoader::AudioCDTracksLoadFinishedSlot); QObject::connect(cdda_song_loader, &CddaSongLoader::SongsMetadataLoaded, this, &SongLoader::AudioCDTracksTagsLoaded); cdda_song_loader->LoadSongs(); - return Success; + return Result::Success; } else { #endif errors_ << tr("CD playback is only available with the GStreamer engine."); - return Error; + return Result::Error; #if defined(HAVE_AUDIOCD) && defined(HAVE_GSTREAMER) } #endif @@ -243,7 +243,7 @@ SongLoader::Result SongLoader::LoadLocal(const QString &filename) { if (query.Exec() && query.Next()) { // We may have many results when the file has many sections do { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.InitFromQuery(query, true); if (song.is_valid()) { @@ -251,12 +251,12 @@ SongLoader::Result SongLoader::LoadLocal(const QString &filename) { } } while (query.Next()); - return Success; + return Result::Success; } // It's not in the database, load it asynchronously. preload_func_ = std::bind(&SongLoader::LoadLocalAsync, this, filename); - return BlockingLoadRequired; + return Result::BlockingLoadRequired; } @@ -266,20 +266,20 @@ SongLoader::Result SongLoader::LoadLocalAsync(const QString &filename) { if (!fileinfo.exists()) { errors_ << tr("File %1 does not exist.").arg(filename); - return Error; + return Result::Error; } // First check to see if it's a directory - if so we will load all the songs inside right away. if (fileinfo.isDir()) { LoadLocalDirectory(filename); - return Success; + return Result::Success; } // It's a local file, so check if it looks like a playlist. Read the first few bytes. QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { errors_ << tr("Could not open file %1 for reading: %2").arg(filename, file.errorString()); - return Error; + return Result::Error; } QByteArray data(file.read(PlaylistParser::kMagicSize)); file.close(); @@ -287,13 +287,13 @@ SongLoader::Result SongLoader::LoadLocalAsync(const QString &filename) { ParserBase *parser = playlist_parser_->ParserForMagic(data); if (!parser) { // Check the file extension as well, maybe the magic failed, or it was a basic M3U file which is just a plain list of filenames. - parser = playlist_parser_->ParserForExtension(PlaylistParser::Type_Load, fileinfo.suffix().toLower()); + parser = playlist_parser_->ParserForExtension(PlaylistParser::Type::Load, fileinfo.suffix().toLower()); } if (parser) { // It's a playlist! qLog(Debug) << "Parsing using" << parser->name(); LoadPlaylist(parser, filename); - return Success; + return Result::Success; } // Check if it's a CUE file @@ -307,26 +307,26 @@ SongLoader::Result SongLoader::LoadLocalAsync(const QString &filename) { for (const Song &song : songs) { if (song.is_valid()) songs_ << song; } - return Success; + return Result::Success; } else { errors_ << tr("Could not open CUE file %1 for reading: %2").arg(matching_cue, cue.errorString()); - return Error; + return Result::Error; } } // Assume it's just a normal file if (TagReaderClient::Instance()->IsMediaFileBlocking(filename) || Song::kAcceptedExtensions.contains(fileinfo.suffix(), Qt::CaseInsensitive)) { - Song song(Song::Source_LocalFile); + Song song(Song::Source::LocalFile); song.InitFromFilePartial(filename, fileinfo); if (song.is_valid()) { songs_ << song; - return Success; + return Result::Success; } } errors_ << QObject::tr("File %1 is not recognized as a valid audio file.").arg(filename); - return Error; + return Result::Error; } @@ -342,7 +342,7 @@ void SongLoader::EffectiveSongLoad(Song *song) { if (!song || !song->url().isLocalFile()) return; - if (song->init_from_file() && song->filetype() != Song::FileType_Unknown) { + if (song->init_from_file() && song->filetype() != Song::FileType::Unknown) { // Maybe we loaded the metadata already, for example from a cuesheet. return; } @@ -409,7 +409,7 @@ void SongLoader::AddAsRawStream() { Song song(Song::SourceFromURL(url_)); song.set_valid(true); - song.set_filetype(Song::FileType_Stream); + song.set_filetype(Song::FileType::Stream); song.set_url(url_); song.set_title(url_.toString()); songs_ << song; @@ -417,7 +417,7 @@ void SongLoader::AddAsRawStream() { } void SongLoader::Timeout() { - state_ = Finished; + state_ = State::Finished; success_ = false; StopTypefind(); } @@ -475,7 +475,7 @@ SongLoader::Result SongLoader::LoadRemote() { GstElement *source = gst_element_make_from_uri(GST_URI_SRC, url_.toEncoded().constData(), nullptr, nullptr); if (!source) { errors_ << tr("Couldn't create GStreamer source element for %1").arg(url_.toString()); - return Error; + return Result::Error; } g_object_set(source, "ssl-strict", FALSE, nullptr); @@ -508,7 +508,7 @@ SongLoader::Result SongLoader::LoadRemote() { // Wait until loading is finished loop.exec(); - return Success; + return Result::Success; } #endif @@ -518,14 +518,14 @@ void SongLoader::TypeFound(GstElement*, uint, GstCaps *caps, void *self) { SongLoader *instance = static_cast(self); - if (instance->state_ != WaitingForType) return; + if (instance->state_ != State::WaitingForType) return; // Check the mimetype instance->mime_type_ = gst_structure_get_name(gst_caps_get_structure(caps, 0)); qLog(Debug) << "Mime type is" << instance->mime_type_; if (instance->mime_type_ == "text/plain" || instance->mime_type_ == "text/uri-list") { // Yeah it might be a playlist, let's get some data and have a better look - instance->state_ = WaitingForMagic; + instance->state_ = State::WaitingForMagic; return; } @@ -540,7 +540,7 @@ GstPadProbeReturn SongLoader::DataReady(GstPad*, GstPadProbeInfo *info, gpointer SongLoader *instance = reinterpret_cast(self); - if (instance->state_ == Finished) { + if (instance->state_ == State::Finished) { return GST_PAD_PROBE_OK; } @@ -553,7 +553,7 @@ GstPadProbeReturn SongLoader::DataReady(GstPad*, GstPadProbeInfo *info, gpointer qLog(Debug) << "Received total" << instance->buffer_.size() << "bytes"; gst_buffer_unmap(buffer, &map); - if (instance->state_ == WaitingForMagic && (instance->buffer_.size() >= PlaylistParser::kMagicSize || !instance->IsPipelinePlaying())) { + if (instance->state_ == State::WaitingForMagic && (instance->buffer_.size() >= PlaylistParser::kMagicSize || !instance->IsPipelinePlaying())) { // Got enough that we can test the magic instance->MagicReady(); } @@ -604,7 +604,7 @@ GstBusSyncReply SongLoader::BusCallbackSync(GstBus*, GstMessage *msg, gpointer s #ifdef HAVE_GSTREAMER void SongLoader::ErrorMessageReceived(GstMessage *msg) { - if (state_ == Finished) return; + if (state_ == State::Finished) return; GError *error = nullptr; gchar *debugs = nullptr; @@ -618,9 +618,9 @@ void SongLoader::ErrorMessageReceived(GstMessage *msg) { g_error_free(error); g_free(debugs); - if (state_ == WaitingForType && message_str == gst_error_get_message(GST_STREAM_ERROR, GST_STREAM_ERROR_TYPE_NOT_FOUND)) { + if (state_ == State::WaitingForType && message_str == gst_error_get_message(GST_STREAM_ERROR, GST_STREAM_ERROR_TYPE_NOT_FOUND)) { // Don't give up - assume it's a playlist and see if one of our parsers can read it. - state_ = WaitingForMagic; + state_ = State::WaitingForMagic; return; } @@ -632,24 +632,24 @@ void SongLoader::ErrorMessageReceived(GstMessage *msg) { #ifdef HAVE_GSTREAMER void SongLoader::EndOfStreamReached() { - qLog(Debug) << Q_FUNC_INFO << state_; + qLog(Debug) << Q_FUNC_INFO << static_cast(state_); switch (state_) { - case Finished: + case State::Finished: break; - case WaitingForMagic: + case State::WaitingForMagic: // Do the magic on the data we have already MagicReady(); - if (state_ == Finished) break; + if (state_ == State::Finished) break; // It looks like a playlist, so parse it [[fallthrough]]; - case WaitingForData: + case State::WaitingForData: // It's a playlist and we've got all the data - finish and parse it StopTypefindAsync(true); break; - case WaitingForType: + case State::WaitingForType: StopTypefindAsync(false); break; } @@ -680,7 +680,7 @@ void SongLoader::MagicReady() { StopTypefindAsync(true); } - state_ = WaitingForData; + state_ = State::WaitingForData; if (!IsPipelinePlaying()) { EndOfStreamReached(); @@ -708,7 +708,7 @@ bool SongLoader::IsPipelinePlaying() { #ifdef HAVE_GSTREAMER void SongLoader::StopTypefindAsync(bool success) { - state_ = Finished; + state_ = State::Finished; success_ = success; QMetaObject::invokeMethod(this, "StopTypefind", Qt::QueuedConnection); diff --git a/src/core/songloader.h b/src/core/songloader.h index 50480c412..cd969fc5c 100644 --- a/src/core/songloader.h +++ b/src/core/songloader.h @@ -60,10 +60,10 @@ class SongLoader : public QObject { explicit SongLoader(CollectionBackendInterface *collection, const Player *player, QObject *parent = nullptr); ~SongLoader() override; - enum Result { + enum class Result { Success, Error, - BlockingLoadRequired, + BlockingLoadRequired }; static const int kDefaultTimeout; @@ -101,7 +101,12 @@ class SongLoader : public QObject { #endif // HAVE_AUDIOCD && HAVE_GSTREAMER private: - enum State { WaitingForType, WaitingForMagic, WaitingForData, Finished }; + enum class State { + WaitingForType, + WaitingForMagic, + WaitingForData, + Finished + }; Result LoadLocal(const QString &filename); SongLoader::Result LoadLocalAsync(const QString &filename); diff --git a/src/core/thread.cpp b/src/core/thread.cpp index 4e9546f5f..ee64a1ac5 100644 --- a/src/core/thread.cpp +++ b/src/core/thread.cpp @@ -25,7 +25,7 @@ void Thread::run() { #ifndef Q_OS_WIN32 - if (io_priority_ != Utilities::IOPRIO_CLASS_NONE) { + if (io_priority_ != Utilities::IoPriority::IOPRIO_CLASS_NONE) { Utilities::SetThreadIOPriority(io_priority_); } #endif diff --git a/src/core/thread.h b/src/core/thread.h index 3debf3a2d..284a04fd1 100644 --- a/src/core/thread.h +++ b/src/core/thread.h @@ -31,7 +31,7 @@ class Thread : public QThread { Q_OBJECT public: - explicit Thread(QObject *parent = nullptr) : QThread(parent), io_priority_(Utilities::IOPRIO_CLASS_NONE) {} + explicit Thread(QObject *parent = nullptr) : QThread(parent), io_priority_(Utilities::IoPriority::IOPRIO_CLASS_NONE) {} void SetIoPriority(Utilities::IoPriority priority) { io_priority_ = priority; diff --git a/src/core/urlhandler.cpp b/src/core/urlhandler.cpp index c92f47464..7602d9db4 100644 --- a/src/core/urlhandler.cpp +++ b/src/core/urlhandler.cpp @@ -44,7 +44,7 @@ UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, co UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, const QString &error) : original_url_(original_url), type_(type), - filetype_(Song::FileType_Stream), + filetype_(Song::FileType::Stream), samplerate_(-1), bit_depth_(-1), length_nanosec_(-1), diff --git a/src/core/urlhandler.h b/src/core/urlhandler.h index cffedd804..24054f37a 100644 --- a/src/core/urlhandler.h +++ b/src/core/urlhandler.h @@ -42,7 +42,7 @@ class UrlHandler : public QObject { // Returned by StartLoading() and LoadNext(), indicates what the player should do when it wants to load a URL. struct LoadResult { - enum Type { + enum class Type { // There wasn't a track available, and the player should move on to the next playlist item. NoMoreTracks, @@ -57,7 +57,7 @@ class UrlHandler : public QObject { Error, }; - explicit LoadResult(const QUrl &original_url = QUrl(), const Type type = NoMoreTracks, const QUrl &stream_url = QUrl(), const Song::FileType filetype = Song::FileType_Stream, const int samplerate = -1, const int bit_depth = -1, const qint64 length_nanosec = -1, const QString &error = QString()); + explicit LoadResult(const QUrl &original_url = QUrl(), const Type type = Type::NoMoreTracks, const QUrl &stream_url = QUrl(), const Song::FileType filetype = Song::FileType::Stream, const int samplerate = -1, const int bit_depth = -1, const qint64 length_nanosec = -1, const QString &error = QString()); explicit LoadResult(const QUrl &original_url, const Type type, const QString &error); diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 5ad00ab13..e14220e35 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -98,8 +98,8 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget *parent) separator2_(nullptr), show_cover_(nullptr), search_cover_auto_(nullptr), - save_cover_type_(CollectionSettingsPage::SaveCoverType_Cache), - save_cover_filename_(CollectionSettingsPage::SaveCoverFilename_Pattern), + save_cover_type_(CollectionSettingsPage::SaveCoverType::Cache), + save_cover_filename_(CollectionSettingsPage::SaveCoverFilename::Pattern), cover_overwrite_(false), cover_lowercase_(true), cover_replace_spaces_(true), @@ -146,8 +146,8 @@ void AlbumCoverChoiceController::ReloadSettings() { QSettings s; s.beginGroup(CollectionSettingsPage::kSettingsGroup); - save_cover_type_ = CollectionSettingsPage::SaveCoverType(s.value("save_cover_type", CollectionSettingsPage::SaveCoverType_Cache).toInt()); - save_cover_filename_ = CollectionSettingsPage::SaveCoverFilename(s.value("save_cover_filename", CollectionSettingsPage::SaveCoverFilename_Pattern).toInt()); + save_cover_type_ = static_cast(s.value("save_cover_type", static_cast(CollectionSettingsPage::SaveCoverType::Cache)).toInt()); + save_cover_filename_ = static_cast(s.value("save_cover_filename", static_cast(CollectionSettingsPage::SaveCoverFilename::Pattern)).toInt()); cover_pattern_ = s.value("cover_pattern", "%albumartist-%album").toString(); cover_overwrite_ = s.value("cover_overwrite", false).toBool(); cover_lowercase_ = s.value("cover_lowercase", false).toBool(); @@ -214,14 +214,14 @@ QUrl AlbumCoverChoiceController::LoadCoverFromFile(Song *song) { if (QImage(cover_file).isNull()) return QUrl(); switch (get_save_album_cover_type()) { - case CollectionSettingsPage::SaveCoverType_Embedded: + case CollectionSettingsPage::SaveCoverType::Embedded: if (song->save_embedded_cover_supported()) { SaveCoverEmbeddedAutomatic(*song, cover_file); return QUrl::fromLocalFile(Song::kEmbeddedCover); } [[fallthrough]]; - case CollectionSettingsPage::SaveCoverType_Cache: - case CollectionSettingsPage::SaveCoverType_Album:{ + case CollectionSettingsPage::SaveCoverType::Cache: + case CollectionSettingsPage::SaveCoverType::Album:{ QUrl cover_url = QUrl::fromLocalFile(cover_file); SaveArtManualToSong(song, cover_url); return cover_url; @@ -540,7 +540,7 @@ void AlbumCoverChoiceController::SaveArtAutomaticToSong(Song *song, const QUrl & song->clear_art_manual(); } - if (song->source() == Song::Source_Collection) { + if (song->source() == Song::Source::Collection) { app_->collection_backend()->UpdateAutomaticAlbumArtAsync(song->effective_albumartist(), song->album(), art_automatic, song->has_embedded_cover()); } @@ -559,20 +559,20 @@ void AlbumCoverChoiceController::SaveArtManualToSong(Song *song, const QUrl &art // Update the backends. switch (song->source()) { - case Song::Source_Collection: + case Song::Source::Collection: app_->collection_backend()->UpdateManualAlbumArtAsync(song->effective_albumartist(), song->album(), art_manual, clear_art_automatic); break; - case Song::Source_LocalFile: - case Song::Source_CDDA: - case Song::Source_Device: - case Song::Source_Stream: - case Song::Source_RadioParadise: - case Song::Source_SomaFM: - case Song::Source_Unknown: + case Song::Source::LocalFile: + case Song::Source::CDDA: + case Song::Source::Device: + case Song::Source::Stream: + case Song::Source::RadioParadise: + case Song::Source::SomaFM: + case Song::Source::Unknown: break; - case Song::Source_Tidal: - case Song::Source_Qobuz: - case Song::Source_Subsonic: + case Song::Source::Tidal: + case Song::Source::Qobuz: + case Song::Source::Subsonic: InternetService *service = app_->internet_services()->ServiceBySource(song->source()); if (!service) break; if (service->artists_collection_backend()) { @@ -618,7 +618,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou QFile file(filepath); // Don't overwrite when saving in album dir if the filename is set to pattern unless "force_overwrite" is set. - if (source == Song::Source_Collection && !cover_overwrite_ && !force_overwrite && get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType_Album && save_cover_filename_ == CollectionSettingsPage::SaveCoverFilename_Pattern && file.exists()) { + if (source == Song::Source::Collection && !cover_overwrite_ && !force_overwrite && get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType::Album && save_cover_filename_ == CollectionSettingsPage::SaveCoverFilename::Pattern && file.exists()) { while (file.exists()) { QFileInfo fileinfo(file.fileName()); file.setFileName(fileinfo.path() + "/0" + fileinfo.fileName()); @@ -653,7 +653,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, const AlbumCoverImageResult &result) { - if (song.source() == Song::Source_Collection) { + if (song.source() == Song::Source::Collection) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QFuture future = QtConcurrent::run(&CollectionBackend::GetAlbumSongs, app_->collection_backend(), song.effective_albumartist(), song.effective_album(), CollectionFilterOptions()); #else @@ -698,7 +698,7 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, const QString &cover_filename) { - if (song.source() == Song::Source_Collection) { + if (song.source() == Song::Source::Collection) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QFuture future = QtConcurrent::run(&CollectionBackend::GetAlbumSongs, app_->collection_backend(), song.effective_albumartist(), song.effective_album(), CollectionFilterOptions()); #else @@ -758,7 +758,7 @@ QUrl AlbumCoverChoiceController::SaveCover(Song *song, const QDropEvent *e) { const QString suffix = QFileInfo(filename).suffix().toLower(); if (IsKnownImageExtension(suffix)) { - if (get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType_Embedded && song->save_embedded_cover_supported()) { + if (get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType::Embedded && song->save_embedded_cover_supported()) { SaveCoverEmbeddedAutomatic(*song, filename); return QUrl::fromLocalFile(Song::kEmbeddedCover); } @@ -784,7 +784,7 @@ QUrl AlbumCoverChoiceController::SaveCoverAutomatic(Song *song, const AlbumCover QUrl cover_url; switch(get_save_album_cover_type()) { - case CollectionSettingsPage::SaveCoverType_Embedded:{ + case CollectionSettingsPage::SaveCoverType::Embedded:{ if (song->save_embedded_cover_supported()) { SaveCoverEmbeddedAutomatic(*song, result); cover_url = QUrl::fromLocalFile(Song::kEmbeddedCover); @@ -792,8 +792,8 @@ QUrl AlbumCoverChoiceController::SaveCoverAutomatic(Song *song, const AlbumCover } } [[fallthrough]]; - case CollectionSettingsPage::SaveCoverType_Cache: - case CollectionSettingsPage::SaveCoverType_Album:{ + case CollectionSettingsPage::SaveCoverType::Cache: + case CollectionSettingsPage::SaveCoverType::Album:{ cover_url = SaveCoverToFileAutomatic(song, result); if (!cover_url.isEmpty()) SaveArtManualToSong(song, cover_url); break; diff --git a/src/covermanager/albumcoverchoicecontroller.h b/src/covermanager/albumcoverchoicecontroller.h index 5807e2e77..df025c8d2 100644 --- a/src/covermanager/albumcoverchoicecontroller.h +++ b/src/covermanager/albumcoverchoicecontroller.h @@ -69,7 +69,7 @@ class AlbumCoverChoiceController : public QWidget { void Init(Application *app); void ReloadSettings(); - CollectionSettingsPage::SaveCoverType get_save_album_cover_type() const { return (save_embedded_cover_override_ ? CollectionSettingsPage::SaveCoverType_Embedded : save_cover_type_); } + CollectionSettingsPage::SaveCoverType get_save_album_cover_type() const { return (save_embedded_cover_override_ ? CollectionSettingsPage::SaveCoverType::Embedded : save_cover_type_); } CollectionSettingsPage::SaveCoverType get_collection_save_album_cover_type() const { return save_cover_type_; } // Getters for all QActions implemented by this controller. diff --git a/src/covermanager/albumcoverexport.cpp b/src/covermanager/albumcoverexport.cpp index 6dcd47a52..de3579589 100644 --- a/src/covermanager/albumcoverexport.cpp +++ b/src/covermanager/albumcoverexport.cpp @@ -52,9 +52,9 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() { // Restore last accepted settings ui_->fileName->setText(s.value("fileName", "cover").toString()); - ui_->doNotOverwrite->setChecked(s.value("overwrite", OverwriteMode_None).toInt() == OverwriteMode_None); - ui_->overwriteAll->setChecked(s.value("overwrite", OverwriteMode_All).toInt() == OverwriteMode_All); - ui_->overwriteSmaller->setChecked(s.value("overwrite", OverwriteMode_Smaller).toInt() == OverwriteMode_Smaller); + ui_->doNotOverwrite->setChecked(static_cast(s.value("overwrite", static_cast(OverwriteMode::None)).toInt()) == OverwriteMode::None); + ui_->overwriteAll->setChecked(static_cast(s.value("overwrite", static_cast(OverwriteMode::All)).toInt()) == OverwriteMode::All); + ui_->overwriteSmaller->setChecked(static_cast(s.value("overwrite", static_cast(OverwriteMode::Smaller)).toInt()) == OverwriteMode::Smaller); ui_->forceSize->setChecked(s.value("forceSize", false).toBool()); ui_->width->setText(s.value("width", "").toString()); ui_->height->setText(s.value("height", "").toString()); @@ -71,13 +71,13 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() { if (fileName.isEmpty()) { fileName = "cover"; } - OverwriteMode overwrite = ui_->doNotOverwrite->isChecked() ? OverwriteMode_None : (ui_->overwriteAll->isChecked() ? OverwriteMode_All : OverwriteMode_Smaller); + OverwriteMode overwrite_mode = ui_->doNotOverwrite->isChecked() ? OverwriteMode::None : (ui_->overwriteAll->isChecked() ? OverwriteMode::All : OverwriteMode::Smaller); bool forceSize = ui_->forceSize->isChecked(); QString width = ui_->width->text(); QString height = ui_->height->text(); s.setValue("fileName", fileName); - s.setValue("overwrite", overwrite); + s.setValue("overwrite", static_cast(overwrite_mode)); s.setValue("forceSize", forceSize); s.setValue("width", width); s.setValue("height", height); @@ -85,7 +85,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() { s.setValue("export_embedded", ui_->export_embedded->isChecked()); result.filename_ = fileName; - result.overwrite_ = overwrite; + result.overwrite_ = overwrite_mode; result.forcesize_ = forceSize; result.width_ = width.toInt(); result.height_ = height.toInt(); diff --git a/src/covermanager/albumcoverexport.h b/src/covermanager/albumcoverexport.h index 87362a554..b5ef1139a 100644 --- a/src/covermanager/albumcoverexport.h +++ b/src/covermanager/albumcoverexport.h @@ -39,10 +39,10 @@ class AlbumCoverExport : public QDialog { explicit AlbumCoverExport(QWidget *parent = nullptr); ~AlbumCoverExport() override; - enum OverwriteMode { - OverwriteMode_None = 0, - OverwriteMode_All = 1, - OverwriteMode_Smaller = 2 + enum class OverwriteMode { + None = 0, + All = 1, + Smaller = 2 }; struct DialogResult { @@ -63,7 +63,7 @@ class AlbumCoverExport : public QDialog { } bool RequiresCoverProcessing() const { - return IsSizeForced() || overwrite_ == OverwriteMode_Smaller; + return IsSizeForced() || overwrite_ == OverwriteMode::Smaller; } }; diff --git a/src/covermanager/albumcoverfetcher.h b/src/covermanager/albumcoverfetcher.h index 685b8f15e..dbafd3e4a 100644 --- a/src/covermanager/albumcoverfetcher.h +++ b/src/covermanager/albumcoverfetcher.h @@ -100,7 +100,7 @@ Q_DECLARE_METATYPE(CoverProviderSearchResult) // This is a complete result of a single search request (a list of results, each describing one image, actually). using CoverProviderSearchResults = QList; -Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(CoverProviderSearchResults) // This class searches for album covers for a given query or artist/album and returns URLs. It's NOT thread-safe. class AlbumCoverFetcher : public QObject { diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp index a550da460..cd9703334 100644 --- a/src/covermanager/albumcoverloader.cpp +++ b/src/covermanager/albumcoverloader.cpp @@ -63,8 +63,8 @@ AlbumCoverLoader::AlbumCoverLoader(QObject *parent) load_image_async_id_(1), save_image_async_id_(1), network_(new NetworkAccessManager(this)), - save_cover_type_(CollectionSettingsPage::SaveCoverType_Cache), - save_cover_filename_(CollectionSettingsPage::SaveCoverFilename_Pattern), + save_cover_type_(CollectionSettingsPage::SaveCoverType::Cache), + save_cover_filename_(CollectionSettingsPage::SaveCoverFilename::Pattern), cover_overwrite_(false), cover_lowercase_(true), cover_replace_spaces_(true), @@ -94,8 +94,8 @@ void AlbumCoverLoader::ReloadSettings() { QSettings s; s.beginGroup(CollectionSettingsPage::kSettingsGroup); - save_cover_type_ = CollectionSettingsPage::SaveCoverType(s.value("save_cover_type", CollectionSettingsPage::SaveCoverType_Cache).toInt()); - save_cover_filename_ = CollectionSettingsPage::SaveCoverFilename(s.value("save_cover_filename", CollectionSettingsPage::SaveCoverFilename_Pattern).toInt()); + save_cover_type_ = static_cast(s.value("save_cover_type", static_cast(CollectionSettingsPage::SaveCoverType::Cache)).toInt()); + save_cover_filename_ = static_cast(s.value("save_cover_filename", static_cast(CollectionSettingsPage::SaveCoverFilename::Pattern)).toInt()); cover_pattern_ = s.value("cover_pattern", "%albumartist-%album").toString(); cover_overwrite_ = s.value("cover_overwrite", false).toBool(); cover_lowercase_ = s.value("cover_lowercase", false).toBool(); @@ -132,7 +132,7 @@ QString AlbumCoverLoader::CoverFilePath(const Song &song, const QString &album_d QString AlbumCoverLoader::CoverFilePath(const Song::Source source, const QString &artist, const QString &album, const QString &album_id, const QString &album_dir, const QUrl &cover_url, const QString &extension) { QString path; - if (source == Song::Source_Collection && save_cover_type_ == CollectionSettingsPage::SaveCoverType_Album && !album_dir.isEmpty()) { + if (source == Song::Source::Collection && save_cover_type_ == CollectionSettingsPage::SaveCoverType::Album && !album_dir.isEmpty()) { path = album_dir; } else { @@ -150,9 +150,9 @@ QString AlbumCoverLoader::CoverFilePath(const Song::Source source, const QString } QString filename; - if (source == Song::Source_Collection && - save_cover_type_ == CollectionSettingsPage::SaveCoverType_Album && - save_cover_filename_ == CollectionSettingsPage::SaveCoverFilename_Pattern && + if (source == Song::Source::Collection && + save_cover_type_ == CollectionSettingsPage::SaveCoverType::Album && + save_cover_filename_ == CollectionSettingsPage::SaveCoverFilename::Pattern && !cover_pattern_.isEmpty()) { filename = CoverFilenameFromVariable(artist, album); filename.remove(OrganizeFormat::kInvalidFatCharacters).remove('/').remove('\\'); @@ -179,27 +179,27 @@ QString AlbumCoverLoader::CoverFilenameFromSource(const Song::Source source, con QString filename; switch (source) { - case Song::Source_Tidal: + case Song::Source::Tidal: if (!album_id.isEmpty()) { filename = album_id + "-" + cover_url.fileName(); break; } [[fallthrough]]; - case Song::Source_Subsonic: - case Song::Source_Qobuz: + case Song::Source::Subsonic: + case Song::Source::Qobuz: if (!album_id.isEmpty()) { filename = album_id; break; } [[fallthrough]]; - case Song::Source_Collection: - case Song::Source_LocalFile: - case Song::Source_CDDA: - case Song::Source_Device: - case Song::Source_Stream: - case Song::Source_SomaFM: - case Song::Source_RadioParadise: - case Song::Source_Unknown: + case Song::Source::Collection: + case Song::Source::LocalFile: + case Song::Source::CDDA: + case Song::Source::Device: + case Song::Source::Stream: + case Song::Source::SomaFM: + case Song::Source::RadioParadise: + case Song::Source::Unknown: filename = Utilities::Sha1CoverHash(artist, album).toHex(); break; } @@ -380,7 +380,7 @@ AlbumCoverLoader::TryLoadResult AlbumCoverLoader::TryLoadImage(Task *task) { } // For local files and streams initialize art if found. - if ((task->song.source() == Song::Source_LocalFile || task->song.is_radio()) && !task->song.art_manual_is_valid() && !task->song.art_automatic_is_valid()) { + if ((task->song.source() == Song::Source::LocalFile || task->song.is_radio()) && !task->song.art_manual_is_valid() && !task->song.art_automatic_is_valid()) { switch (task->state) { case State_None: break; diff --git a/src/covermanager/albumcoverloader.h b/src/covermanager/albumcoverloader.h index dd2b32389..d7e43e050 100644 --- a/src/covermanager/albumcoverloader.h +++ b/src/covermanager/albumcoverloader.h @@ -74,7 +74,7 @@ class AlbumCoverLoader : public QObject { QString CoverFilePath(const Song::Source source, const QString &artist, const QString &album, const QString &album_id, const QString &album_dir, const QUrl &cover_url, const QString &extension = QString()); quint64 LoadImageAsync(const AlbumCoverLoaderOptions &options, const Song &song); - quint64 LoadImageAsync(const AlbumCoverLoaderOptions &options, const QUrl &art_automatic, const QUrl &art_manual, const QUrl &song_url = QUrl(), const Song::Source song_source = Song::Source_Unknown); + quint64 LoadImageAsync(const AlbumCoverLoaderOptions &options, const QUrl &art_automatic, const QUrl &art_manual, const QUrl &song_url = QUrl(), const Song::Source song_source = Song::Source::Unknown); quint64 LoadImageAsync(const AlbumCoverLoaderOptions &options, const AlbumCoverImageResult &album_cover); quint64 LoadImageAsync(const AlbumCoverLoaderOptions &options, const QImage &image); diff --git a/src/covermanager/albumcovermanager.cpp b/src/covermanager/albumcovermanager.cpp index 225febc12..d68b09d35 100644 --- a/src/covermanager/albumcovermanager.cpp +++ b/src/covermanager/albumcovermanager.cpp @@ -317,7 +317,7 @@ void AlbumCoverManager::SaveSettings() { s.beginGroup(kSettingsGroup); s.setValue("geometry", saveGeometry()); s.setValue("splitter_state", ui_->splitter->saveState()); - s.setValue("save_cover_type", album_cover_choice_controller_->get_save_album_cover_type()); + s.setValue("save_cover_type", static_cast(album_cover_choice_controller_->get_save_album_cover_type())); s.endGroup(); } @@ -417,7 +417,7 @@ void AlbumCoverManager::ArtistChanged(QListWidgetItem *current) { AlbumItem *item = new AlbumItem(icon_nocover_item_, display_text, ui_->albums); item->setData(Role_AlbumArtist, info.album_artist); item->setData(Role_Album, info.album); - item->setData(Role_Filetype, info.filetype); + item->setData(Role_Filetype, QVariant::fromValue(info.filetype)); item->setData(Role_CuePath, info.cue_path); item->setData(Qt::TextAlignmentRole, QVariant(Qt::AlignTop | Qt::AlignHCenter)); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); @@ -469,12 +469,12 @@ void AlbumCoverManager::UpdateFilter() { const bool hide_with_covers = filter_without_covers_->isChecked(); const bool hide_without_covers = filter_with_covers_->isChecked(); - HideCovers hide = Hide_None; + HideCovers hide_covers = HideCovers::None; if (hide_with_covers) { - hide = Hide_WithCovers; + hide_covers = HideCovers::WithCovers; } else if (hide_without_covers) { - hide = Hide_WithoutCovers; + hide_covers = HideCovers::WithoutCovers; } qint32 total_count = 0; @@ -482,7 +482,7 @@ void AlbumCoverManager::UpdateFilter() { for (int i = 0; i < ui_->albums->count(); ++i) { AlbumItem *item = static_cast(ui_->albums->item(i)); - bool should_hide = ShouldHide(*item, filter, hide); + bool should_hide = ShouldHide(*item, filter, hide_covers); item->setHidden(should_hide); if (!should_hide) { @@ -498,13 +498,13 @@ void AlbumCoverManager::UpdateFilter() { } -bool AlbumCoverManager::ShouldHide(const AlbumItem &item, const QString &filter, HideCovers hide) const { +bool AlbumCoverManager::ShouldHide(const AlbumItem &item, const QString &filter, const HideCovers hide_covers) const { bool has_cover = ItemHasCover(item); - if (hide == Hide_WithCovers && has_cover) { + if (hide_covers == HideCovers::WithCovers && has_cover) { return true; } - else if (hide == Hide_WithoutCovers && !has_cover) { + else if (hide_covers == HideCovers::WithoutCovers && !has_cover) { return true; } @@ -642,7 +642,7 @@ Song AlbumCoverManager::GetFirstSelectedAsSong() { Song AlbumCoverManager::ItemAsSong(AlbumItem *item) { - Song result(Song::Source_Collection); + Song result(Song::Source::Collection); QString title = item->data(Role_Album).toString(); QString artist_name = item->data(Role_AlbumArtist).toString(); @@ -781,13 +781,13 @@ void AlbumCoverManager::SaveImageToAlbums(Song *song, const AlbumCoverImageResul QUrl cover_url = result.cover_url; switch (album_cover_choice_controller_->get_save_album_cover_type()) { - case CollectionSettingsPage::SaveCoverType_Cache: - case CollectionSettingsPage::SaveCoverType_Album: + case CollectionSettingsPage::SaveCoverType::Cache: + case CollectionSettingsPage::SaveCoverType::Album: if (cover_url.isEmpty() || !cover_url.isValid() || !cover_url.isLocalFile()) { cover_url = album_cover_choice_controller_->SaveCoverToFileAutomatic(song, result); } break; - case CollectionSettingsPage::SaveCoverType_Embedded: + case CollectionSettingsPage::SaveCoverType::Embedded: cover_url = QUrl::fromLocalFile(Song::kEmbeddedCover); break; } @@ -798,14 +798,14 @@ void AlbumCoverManager::SaveImageToAlbums(Song *song, const AlbumCoverImageResul for (QListWidgetItem *item : context_menu_items_) { AlbumItem *album_item = static_cast(item); switch (album_cover_choice_controller_->get_save_album_cover_type()) { - case CollectionSettingsPage::SaveCoverType_Cache: - case CollectionSettingsPage::SaveCoverType_Album:{ + case CollectionSettingsPage::SaveCoverType::Cache: + case CollectionSettingsPage::SaveCoverType::Album:{ Song current_song = ItemAsSong(album_item); album_cover_choice_controller_->SaveArtManualToSong(¤t_song, cover_url); UpdateCoverInList(album_item, cover_url); break; } - case CollectionSettingsPage::SaveCoverType_Embedded:{ + case CollectionSettingsPage::SaveCoverType::Embedded:{ urls << album_item->urls; album_items << album_item; break; @@ -813,7 +813,7 @@ void AlbumCoverManager::SaveImageToAlbums(Song *song, const AlbumCoverImageResul } } - if (album_cover_choice_controller_->get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType_Embedded && !urls.isEmpty()) { + if (album_cover_choice_controller_->get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType::Embedded && !urls.isEmpty()) { quint64 id = -1; if (result.is_jpeg()) { id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image_data); @@ -971,7 +971,7 @@ void AlbumCoverManager::SaveAndSetCover(AlbumItem *item, const AlbumCoverImageRe const Song::FileType filetype = static_cast(item->data(Role_Filetype).toInt()); const bool has_cue = !item->data(Role_CuePath).toString().isEmpty(); - if (album_cover_choice_controller_->get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType_Embedded && Song::save_embedded_cover_supported(filetype) && !has_cue) { + if (album_cover_choice_controller_->get_save_album_cover_type() == CollectionSettingsPage::SaveCoverType::Embedded && Song::save_embedded_cover_supported(filetype) && !has_cue) { if (result.is_jpeg()) { quint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image_data); cover_save_tasks_.insert(id, item); @@ -991,7 +991,7 @@ void AlbumCoverManager::SaveAndSetCover(AlbumItem *item, const AlbumCoverImageRe cover_url = result.cover_url; } else if (!result.image_data.isEmpty() || !result.image.isNull()) { - cover_url = album_cover_choice_controller_->SaveCoverToFileAutomatic(Song::Source_Collection, albumartist, album, QString(), urls.first().adjusted(QUrl::RemoveFilename).path(), result, false); + cover_url = album_cover_choice_controller_->SaveCoverToFileAutomatic(Song::Source::Collection, albumartist, album, QString(), urls.first().adjusted(QUrl::RemoveFilename).path(), result, false); } if (cover_url.isEmpty()) return; diff --git a/src/covermanager/albumcovermanager.h b/src/covermanager/albumcovermanager.h index edc726d55..fce0f70af 100644 --- a/src/covermanager/albumcovermanager.h +++ b/src/covermanager/albumcovermanager.h @@ -116,10 +116,10 @@ class AlbumCoverManager : public QMainWindow { Role_Image }; - enum HideCovers { - Hide_None, - Hide_WithCovers, - Hide_WithoutCovers + enum class HideCovers { + None, + WithCovers, + WithoutCovers }; void LoadGeometry(); @@ -136,7 +136,7 @@ class AlbumCoverManager : public QMainWindow { static Song ItemAsSong(AlbumItem *item); void UpdateStatusText(); - bool ShouldHide(const AlbumItem &item, const QString &filter, HideCovers hide) const; + bool ShouldHide(const AlbumItem &item, const QString &filter, const HideCovers hide_covers) const; void SaveAndSetCover(AlbumItem *item, const AlbumCoverImageResult &result); void SaveImageToAlbums(Song *song, const AlbumCoverImageResult &result); diff --git a/src/covermanager/coverexportrunnable.cpp b/src/covermanager/coverexportrunnable.cpp index b1ace8c6b..6ef908d3b 100644 --- a/src/covermanager/coverexportrunnable.cpp +++ b/src/covermanager/coverexportrunnable.cpp @@ -122,16 +122,16 @@ void CoverExportRunnable::ProcessAndExportCover() { QString new_file = dir + '/' + dialog_result_.filename_ + '.' + (cover_path == Song::kEmbeddedCover ? "jpg" : extension); // If the file exists, do not override! - if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode_None && QFile::exists(new_file)) { + if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode::None && QFile::exists(new_file)) { EmitCoverSkipped(); return; } // we're handling overwrite as remove + copy so we need to delete the old file first - if (QFile::exists(new_file) && dialog_result_.overwrite_ != AlbumCoverExport::OverwriteMode_None) { + if (QFile::exists(new_file) && dialog_result_.overwrite_ != AlbumCoverExport::OverwriteMode::None) { // if the mode is "overwrite smaller" then skip the cover if a bigger one is already available in the folder - if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode_Smaller) { + if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode::Smaller) { QImage existing; existing.load(new_file); @@ -168,13 +168,13 @@ void CoverExportRunnable::ExportCover() { QString new_file = dir + '/' + dialog_result_.filename_ + '.' + (cover_path == Song::kEmbeddedCover ? "jpg" : extension); // If the file exists, do not override! - if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode_None && QFile::exists(new_file)) { + if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode::None && QFile::exists(new_file)) { EmitCoverSkipped(); return; } // We're handling overwrite as remove + copy so we need to delete the old file first - if (dialog_result_.overwrite_ != AlbumCoverExport::OverwriteMode_None && QFile::exists(new_file)) { + if (dialog_result_.overwrite_ != AlbumCoverExport::OverwriteMode::None && QFile::exists(new_file)) { if (!QFile::remove(new_file)) { EmitCoverSkipped(); return; diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index dd77d70fe..03cc62131 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -128,10 +128,10 @@ void DiscogsCoverProvider::SendSearchRequest(std::shared_ptralbum.toLower()); switch (search->type) { - case DiscogsCoverType_Master: + case DiscogsCoverType::Master: params << Param("type", "master"); break; - case DiscogsCoverType_Release: + case DiscogsCoverType::Release: params << Param("type", "release"); break; } @@ -296,8 +296,8 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) } if (search->requests_release_.count() == 0) { - if (search->type == DiscogsCoverType_Master) { - search->type = DiscogsCoverType_Release; + if (search->type == DiscogsCoverType::Master) { + search->type = DiscogsCoverType::Release; queue_search_requests_.enqueue(search); } else { diff --git a/src/covermanager/discogscoverprovider.h b/src/covermanager/discogscoverprovider.h index 902799001..a1d2597c8 100644 --- a/src/covermanager/discogscoverprovider.h +++ b/src/covermanager/discogscoverprovider.h @@ -55,9 +55,9 @@ class DiscogsCoverProvider : public JsonCoverProvider { bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; void CancelSearch(const int id) override; - enum DiscogsCoverType { - DiscogsCoverType_Master, - DiscogsCoverType_Release, + enum class DiscogsCoverType { + Master, + Release }; struct DiscogsCoverReleaseContext { @@ -67,7 +67,7 @@ class DiscogsCoverProvider : public JsonCoverProvider { QUrl url; }; struct DiscogsCoverSearchContext { - explicit DiscogsCoverSearchContext(const int _id = 0, const QString &_artist = QString(), const QString &_album = QString(), const DiscogsCoverType _type = DiscogsCoverType_Master) : id(_id), artist(_artist), album(_album), type(_type) {} + explicit DiscogsCoverSearchContext(const int _id = 0, const QString &_artist = QString(), const QString &_album = QString(), const DiscogsCoverType _type = DiscogsCoverType::Master) : id(_id), artist(_artist), album(_album), type(_type) {} int id; QString artist; QString album; diff --git a/src/covermanager/lastfmcoverprovider.h b/src/covermanager/lastfmcoverprovider.h index 8bca391c1..c94f581b1 100644 --- a/src/covermanager/lastfmcoverprovider.h +++ b/src/covermanager/lastfmcoverprovider.h @@ -48,7 +48,7 @@ class LastFmCoverProvider : public JsonCoverProvider { void QueryFinished(QNetworkReply *reply, const int id, const QString &type); private: - enum LastFmImageSize { + enum class LastFmImageSize { Unknown, Small = 34, Medium = 64, diff --git a/src/device/cddasongloader.cpp b/src/device/cddasongloader.cpp index 0d865b720..7a5c3baf5 100644 --- a/src/device/cddasongloader.cpp +++ b/src/device/cddasongloader.cpp @@ -128,10 +128,10 @@ void CddaSongLoader::LoadSongs() { songs.reserve(num_tracks); for (int track_number = 1; track_number <= num_tracks; ++track_number) { // Init song - Song song(Song::Source_CDDA); + Song song(Song::Source::CDDA); song.set_id(track_number); song.set_valid(true); - song.set_filetype(Song::FileType_CDDA); + song.set_filetype(Song::FileType::CDDA); song.set_url(GetUrlFromTrack(track_number)); song.set_title(QString("Track %1").arg(track_number)); song.set_track(track_number); @@ -221,7 +221,7 @@ void CddaSongLoader::AudioCDTagsLoaded(const QString &artist, const QString &alb songs.reserve(results.count()); int track_number = 1; for (const MusicBrainzClient::Result &ret : results) { - Song song(Song::Source_CDDA); + Song song(Song::Source::CDDA); song.set_artist(artist); song.set_album(album); song.set_title(ret.title_); @@ -229,7 +229,7 @@ void CddaSongLoader::AudioCDTagsLoaded(const QString &artist, const QString &alb song.set_track(track_number); song.set_year(ret.year_); song.set_id(track_number); - song.set_filetype(Song::FileType_CDDA); + song.set_filetype(Song::FileType::CDDA); song.set_valid(true); // We need to set url: that's how playlist will find the correct item to update song.set_url(GetUrlFromTrack(track_number++)); diff --git a/src/device/connecteddevice.cpp b/src/device/connecteddevice.cpp index 9e4eb971c..fb33d33f0 100644 --- a/src/device/connecteddevice.cpp +++ b/src/device/connecteddevice.cpp @@ -61,7 +61,7 @@ ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QS backend_->Init(app_->database(), app_->task_manager(), - Song::Source_Device, + Song::Source::Device, QString("device_%1_songs").arg(database_id), QString("device_%1_fts").arg(database_id), QString("device_%1_directories").arg(database_id), @@ -154,10 +154,10 @@ MusicStorage::TranscodeMode ConnectedDevice::GetTranscodeMode() const { Song::FileType ConnectedDevice::GetTranscodeFormat() const { DeviceInfo *info = manager_->FindDeviceById(unique_id_); - if (!info) return Song::FileType_Unknown; + if (!info) return Song::FileType::Unknown; QModelIndex idx = manager_->ItemToIndex(info); - if (!idx.isValid()) return Song::FileType_Unknown; + if (!idx.isValid()) return Song::FileType::Unknown; return static_cast(idx.data(DeviceManager::Role_TranscodeFormat).toInt()); @@ -167,4 +167,3 @@ void ConnectedDevice::BackendTotalSongCountUpdated(int count) { song_count_ = count; emit SongCountUpdated(count); } - diff --git a/src/device/connecteddevice.h b/src/device/connecteddevice.h index cba039a60..ed6f37aba 100644 --- a/src/device/connecteddevice.h +++ b/src/device/connecteddevice.h @@ -46,7 +46,7 @@ class ConnectedDevice : public QObject, public virtual MusicStorage, public std: explicit ConnectedDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr); ~ConnectedDevice() override; - Song::Source source() const override { return Song::Source_Device; } + Song::Source source() const override { return Song::Source::Device; } virtual bool Init() = 0; virtual bool IsLoading() { return false; } diff --git a/src/device/devicedatabasebackend.cpp b/src/device/devicedatabasebackend.cpp index 48a6dd133..f3e0550c5 100644 --- a/src/device/devicedatabasebackend.cpp +++ b/src/device/devicedatabasebackend.cpp @@ -128,8 +128,8 @@ int DeviceDatabaseBackend::AddDevice(const Device &device) { q.BindValue(":friendly_name", device.friendly_name_); q.BindValue(":size", device.size_); q.BindValue(":icon", device.icon_name_); - q.BindValue(":transcode_mode", device.transcode_mode_); - q.BindValue(":transcode_format", device.transcode_format_); + q.BindValue(":transcode_mode", static_cast(device.transcode_mode_)); + q.BindValue(":transcode_format", static_cast(device.transcode_format_)); if (!q.Exec()) { db_->ReportErrors(q); return -1; @@ -194,8 +194,8 @@ void DeviceDatabaseBackend::SetDeviceOptions(const int id, const QString &friend " WHERE ROWID=:id"); q.BindValue(":friendly_name", friendly_name); q.BindValue(":icon_name", icon_name); - q.BindValue(":transcode_mode", mode); - q.BindValue(":transcode_format", format); + q.BindValue(":transcode_mode", static_cast(mode)); + q.BindValue(":transcode_format", static_cast(format)); q.BindValue(":id", id); if (!q.Exec()) { db_->ReportErrors(q); diff --git a/src/device/deviceinfo.h b/src/device/deviceinfo.h index 0008d6859..d243452da 100644 --- a/src/device/deviceinfo.h +++ b/src/device/deviceinfo.h @@ -64,8 +64,8 @@ class DeviceInfo : public SimpleTreeItem { : SimpleTreeItem(Type_Root, _model), database_id_(-1), size_(0), - transcode_mode_(MusicStorage::Transcode_Unsupported), - transcode_format_(Song::FileType_Unknown), + transcode_mode_(MusicStorage::TranscodeMode::Transcode_Unsupported), + transcode_format_(Song::FileType::Unknown), task_percentage_(-1), unmount_(false), forget_(false) {} @@ -74,8 +74,8 @@ class DeviceInfo : public SimpleTreeItem { : SimpleTreeItem(_type, _parent), database_id_(-1), size_(0), - transcode_mode_(MusicStorage::Transcode_Unsupported), - transcode_format_(Song::FileType_Unknown), + transcode_mode_(MusicStorage::TranscodeMode::Transcode_Unsupported), + transcode_format_(Song::FileType::Unknown), task_percentage_(-1), unmount_(false), forget_(false) {} diff --git a/src/device/devicemanager.cpp b/src/device/devicemanager.cpp index dfbc42098..08a58d2ae 100644 --- a/src/device/devicemanager.cpp +++ b/src/device/devicemanager.cpp @@ -370,10 +370,10 @@ QVariant DeviceManager::data(const QModelIndex &idx, int role) const { } case Role_TranscodeMode: - return info->transcode_mode_; + return static_cast(info->transcode_mode_); case Role_TranscodeFormat: - return info->transcode_format_; + return static_cast(info->transcode_format_); case Role_SongCount: if (!info->device_) return QVariant(); diff --git a/src/device/deviceproperties.cpp b/src/device/deviceproperties.cpp index 5ce6be2a4..c09175a03 100644 --- a/src/device/deviceproperties.cpp +++ b/src/device/deviceproperties.cpp @@ -106,7 +106,7 @@ void DeviceProperties::ShowDevice(const QModelIndex &idx) { #ifdef HAVE_GSTREAMER // Load the transcode formats the first time the dialog is shown for (const TranscoderPreset &preset : Transcoder::GetAllPresets()) { - ui_->transcode_format->addItem(preset.name_, preset.filetype_); + ui_->transcode_format->addItem(preset.name_, QVariant::fromValue(preset.filetype_)); } ui_->transcode_format->model()->sort(0); #endif @@ -209,15 +209,15 @@ void DeviceProperties::UpdateFormats() { // Transcode mode MusicStorage::TranscodeMode mode = static_cast(index_.data(DeviceManager::Role_TranscodeMode).toInt()); switch (mode) { - case MusicStorage::Transcode_Always: + case MusicStorage::TranscodeMode::Transcode_Always: ui_->transcode_all->setChecked(true); break; - case MusicStorage::Transcode_Never: + case MusicStorage::TranscodeMode::Transcode_Never: ui_->transcode_off->setChecked(true); break; - case MusicStorage::Transcode_Unsupported: + case MusicStorage::TranscodeMode::Transcode_Unsupported: default: ui_->transcode_unsupported->setChecked(true); break; @@ -262,13 +262,13 @@ void DeviceProperties::accept() { QDialog::accept(); // Transcode mode - MusicStorage::TranscodeMode mode = MusicStorage::Transcode_Unsupported; + MusicStorage::TranscodeMode mode = MusicStorage::TranscodeMode::Transcode_Unsupported; if (ui_->transcode_all->isChecked()) - mode = MusicStorage::Transcode_Always; + mode = MusicStorage::TranscodeMode::Transcode_Always; else if (ui_->transcode_off->isChecked()) - mode = MusicStorage::Transcode_Never; + mode = MusicStorage::TranscodeMode::Transcode_Never; else if (ui_->transcode_unsupported->isChecked()) - mode = MusicStorage::Transcode_Unsupported; + mode = MusicStorage::TranscodeMode::Transcode_Unsupported; // Transcode format Song::FileType format = static_cast(ui_->transcode_format->itemData(ui_->transcode_format->currentIndex()).toInt()); @@ -316,7 +316,7 @@ void DeviceProperties::UpdateFormatsFinished() { #ifdef HAVE_GSTREAMER // Set the format combobox item TranscoderPreset preset = Transcoder::PresetForFileType(static_cast(index_.data(DeviceManager::Role_TranscodeFormat).toInt())); - if (preset.filetype_ == Song::FileType_Unknown) { + if (preset.filetype_ == Song::FileType::Unknown) { // The user hasn't chosen a format for this device yet, // so work our way down a list of some preferred formats, picking the first one that is supported preset = Transcoder::PresetForFileType(Transcoder::PickBestFormat(supported_formats_)); diff --git a/src/device/deviceview.cpp b/src/device/deviceview.cpp index b790e4c99..7c940d411 100644 --- a/src/device/deviceview.cpp +++ b/src/device/deviceview.cpp @@ -460,7 +460,7 @@ void DeviceView::DeleteFinished(const SongList &songs_with_errors) { if (songs_with_errors.isEmpty()) return; OrganizeErrorDialog *dialog = new OrganizeErrorDialog(this); - dialog->Show(OrganizeErrorDialog::Type_Delete, songs_with_errors); + dialog->Show(OrganizeErrorDialog::OperationType::Delete, songs_with_errors); // It deletes itself when the user closes it } diff --git a/src/device/filesystemdevice.cpp b/src/device/filesystemdevice.cpp index 880326963..66738d5ce 100644 --- a/src/device/filesystemdevice.cpp +++ b/src/device/filesystemdevice.cpp @@ -39,9 +39,9 @@ class DeviceLister; FilesystemDevice::FilesystemDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent) - : FilesystemMusicStorage(Song::Source_Device, url.toLocalFile()), + : FilesystemMusicStorage(Song::Source::Device, url.toLocalFile()), ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), - watcher_(new CollectionWatcher(Song::Source_Device)), + watcher_(new CollectionWatcher(Song::Source::Device)), watcher_thread_(new QThread(this)) { watcher_->moveToThread(watcher_thread_); diff --git a/src/device/filesystemdevice.h b/src/device/filesystemdevice.h index 80eb1c3d2..76e392e4f 100644 --- a/src/device/filesystemdevice.h +++ b/src/device/filesystemdevice.h @@ -46,7 +46,7 @@ class FilesystemDevice : public ConnectedDevice, public virtual FilesystemMusicS Q_INVOKABLE FilesystemDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr); ~FilesystemDevice() override; - Song::Source source() const final { return Song::Source_Device; } + Song::Source source() const final { return Song::Source::Device; } bool Init() override; void CloseAsync(); diff --git a/src/device/gpoddevice.cpp b/src/device/gpoddevice.cpp index d7d0160d8..fa9f5becc 100644 --- a/src/device/gpoddevice.cpp +++ b/src/device/gpoddevice.cpp @@ -384,7 +384,7 @@ void GPodDevice::FinishDelete(bool success) { } bool GPodDevice::GetSupportedFiletypes(QList *ret) { - *ret << Song::FileType_MP4; - *ret << Song::FileType_MPEG; + *ret << Song::FileType::MP4; + *ret << Song::FileType::MPEG; return true; } diff --git a/src/device/gpodloader.cpp b/src/device/gpodloader.cpp index 896ac4980..517c7962a 100644 --- a/src/device/gpodloader.cpp +++ b/src/device/gpodloader.cpp @@ -39,7 +39,7 @@ GPodLoader::GPodLoader(const QString &mount_point, TaskManager *task_manager, Co : QObject(parent), device_(device), mount_point_(mount_point), - type_(Song::FileType_Unknown), + type_(Song::FileType::Unknown), task_manager_(task_manager), backend_(backend), abort_(false) { @@ -93,11 +93,11 @@ Itdb_iTunesDB *GPodLoader::TryLoad() { Itdb_Track *track = static_cast(tracks->data); - Song song(Song::Source_Device); + Song song(Song::Source::Device); song.InitFromItdb(track, prefix); song.set_directory_id(1); - if (type_ != Song::FileType_Unknown) song.set_filetype(type_); + if (type_ != Song::FileType::Unknown) song.set_filetype(type_); songs << song; } diff --git a/src/device/mtpconnection.cpp b/src/device/mtpconnection.cpp index 16895fd98..a8eee6958 100644 --- a/src/device/mtpconnection.cpp +++ b/src/device/mtpconnection.cpp @@ -120,21 +120,21 @@ bool MtpConnection::GetSupportedFiletypes(QList *ret) { for (int i = 0; i < length; ++i) { switch (static_cast(list[i])) { - case LIBMTP_FILETYPE_WAV: *ret << Song::FileType_WAV; break; + case LIBMTP_FILETYPE_WAV: *ret << Song::FileType::WAV; break; case LIBMTP_FILETYPE_MP2: - case LIBMTP_FILETYPE_MP3: *ret << Song::FileType_MPEG; break; - case LIBMTP_FILETYPE_WMA: *ret << Song::FileType_ASF; break; + case LIBMTP_FILETYPE_MP3: *ret << Song::FileType::MPEG; break; + case LIBMTP_FILETYPE_WMA: *ret << Song::FileType::ASF; break; case LIBMTP_FILETYPE_MP4: case LIBMTP_FILETYPE_M4A: - case LIBMTP_FILETYPE_AAC: *ret << Song::FileType_MP4; break; + case LIBMTP_FILETYPE_AAC: *ret << Song::FileType::MP4; break; case LIBMTP_FILETYPE_FLAC: - *ret << Song::FileType_FLAC; - *ret << Song::FileType_OggFlac; + *ret << Song::FileType::FLAC; + *ret << Song::FileType::OggFlac; break; case LIBMTP_FILETYPE_OGG: - *ret << Song::FileType_OggVorbis; - *ret << Song::FileType_OggSpeex; - *ret << Song::FileType_OggFlac; + *ret << Song::FileType::OggVorbis; + *ret << Song::FileType::OggSpeex; + *ret << Song::FileType::OggFlac; break; default: qLog(Error) << "Unknown MTP file format" << LIBMTP_Get_Filetype_Description(static_cast(list[i])); diff --git a/src/device/mtpdevice.cpp b/src/device/mtpdevice.cpp index 13c315d54..117b0e49c 100644 --- a/src/device/mtpdevice.cpp +++ b/src/device/mtpdevice.cpp @@ -173,7 +173,7 @@ bool MtpDevice::CopyToStorage(const CopyJob &job) { if (ret != 0) return false; // Add it to our CollectionModel - Song metadata_on_device(Song::Source_Device); + Song metadata_on_device(Song::Source::Device); metadata_on_device.InitFromMTP(&track, url_.host()); metadata_on_device.set_directory_id(1); metadata_on_device.set_artist(metadata_on_device.effective_albumartist()); @@ -260,21 +260,21 @@ bool MtpDevice::GetSupportedFiletypes(QList *ret, LIBMTP_mtpdevi for (int i = 0; i < length; ++i) { switch (static_cast(list[i])) { - case LIBMTP_FILETYPE_WAV: *ret << Song::FileType_WAV; break; + case LIBMTP_FILETYPE_WAV: *ret << Song::FileType::WAV; break; case LIBMTP_FILETYPE_MP2: - case LIBMTP_FILETYPE_MP3: *ret << Song::FileType_MPEG; break; - case LIBMTP_FILETYPE_WMA: *ret << Song::FileType_ASF; break; + case LIBMTP_FILETYPE_MP3: *ret << Song::FileType::MPEG; break; + case LIBMTP_FILETYPE_WMA: *ret << Song::FileType::ASF; break; case LIBMTP_FILETYPE_MP4: case LIBMTP_FILETYPE_M4A: - case LIBMTP_FILETYPE_AAC: *ret << Song::FileType_MP4; break; + case LIBMTP_FILETYPE_AAC: *ret << Song::FileType::MP4; break; case LIBMTP_FILETYPE_FLAC: - *ret << Song::FileType_FLAC; - *ret << Song::FileType_OggFlac; + *ret << Song::FileType::FLAC; + *ret << Song::FileType::OggFlac; break; case LIBMTP_FILETYPE_OGG: - *ret << Song::FileType_OggVorbis; - *ret << Song::FileType_OggSpeex; - *ret << Song::FileType_OggFlac; + *ret << Song::FileType::OggVorbis; + *ret << Song::FileType::OggSpeex; + *ret << Song::FileType::OggFlac; break; default: qLog(Error) << "Unknown MTP file format" << LIBMTP_Get_Filetype_Description(static_cast(list[i])); diff --git a/src/device/mtploader.cpp b/src/device/mtploader.cpp index 1cddc2a4c..7a358538e 100644 --- a/src/device/mtploader.cpp +++ b/src/device/mtploader.cpp @@ -78,7 +78,7 @@ bool MtpLoader::TryLoad() { LIBMTP_track_t *track = tracks; - Song song(Song::Source_Device); + Song song(Song::Source::Device); song.InitFromMTP(track, url_.host()); if (song.is_valid() && !song.artist().isEmpty() && !song.title().isEmpty()) { song.set_directory_id(1); diff --git a/src/dialogs/edittagdialog.cpp b/src/dialogs/edittagdialog.cpp index 2bb663bbb..1ecf589a5 100644 --- a/src/dialogs/edittagdialog.cpp +++ b/src/dialogs/edittagdialog.cpp @@ -341,7 +341,7 @@ bool EditTagDialog::eventFilter(QObject *o, QEvent *e) { if (event->mimeData()->hasImage()) { QImage image = qvariant_cast(event->mimeData()->imageData()); if (!image.isNull()) { - UpdateCover(UpdateCoverAction_New, AlbumCoverImageResult(image)); + UpdateCover(UpdateCoverAction::New, AlbumCoverImageResult(image)); } } break; @@ -404,7 +404,7 @@ QList EditTagDialog::LoadData(const SongList &songs) { } -void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemList &items) { +void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemPtrList &items) { // Show the loading indicator if (!SetLoading(tr("Loading tracks") + "...")) return; @@ -438,7 +438,7 @@ void EditTagDialog::SetSongsFinished() { ui_->tab_widget->setEnabled(false); // Show a summary with empty information - UpdateSummaryTab(Song(), UpdateCoverAction_None); + UpdateSummaryTab(Song(), UpdateCoverAction::None); ui_->tab_widget->setCurrentWidget(ui_->tab_summary); SetSongListVisibility(false); @@ -614,7 +614,7 @@ void EditTagDialog::SelectionChanged() { ui_->tab_widget->setTabEnabled(ui_->tab_widget->indexOf(ui_->tab_lyrics), !multiple); if (multiple) { - UpdateSummaryTab(Song(), UpdateCoverAction_None); + UpdateSummaryTab(Song(), UpdateCoverAction::None); UpdateStatisticsTab(Song()); } else { @@ -636,11 +636,11 @@ void EditTagDialog::SelectionChanged() { bool comment_enabled = false; bool lyrics_enabled = false; for (const QModelIndex &idx : indexes) { - if (data_[idx.row()].cover_action_ == UpdateCoverAction_None) { + if (data_[idx.row()].cover_action_ == UpdateCoverAction::None) { data_[idx.row()].cover_result_ = AlbumCoverImageResult(); } const Song &song = data_[idx.row()].original_; - if (data_[idx.row()].cover_action_ != first_cover_action || (first_cover_action != UpdateCoverAction_None && data_[idx.row()].cover_result_.image_data != data_[indexes.first().row()].cover_result_.image_data)) { + if (data_[idx.row()].cover_action_ != first_cover_action || (first_cover_action != UpdateCoverAction::None && data_[idx.row()].cover_result_.image_data != data_[indexes.first().row()].cover_result_.image_data)) { action_different = true; } if (data_[idx.row()].cover_action_ != first_cover_action || @@ -693,7 +693,7 @@ void EditTagDialog::SelectionChanged() { const bool enable_change_art = first_song.is_collection_song(); ui_->tags_art_button->setEnabled(enable_change_art); - if ((art_different && first_cover_action != UpdateCoverAction_New) || action_different) { + if ((art_different && first_cover_action != UpdateCoverAction::New) || action_different) { tags_cover_art_id_ = -1; // Cancels any pending art load. ui_->tags_art->clear(); ui_->tags_art->setText(kArtDifferentHintText); @@ -717,7 +717,7 @@ void EditTagDialog::SelectionChanged() { album_cover_choice_controller_->unset_cover_action()->setEnabled(enable_change_art && !first_song.has_manually_unset_cover()); album_cover_choice_controller_->clear_cover_action()->setEnabled(enable_change_art && !first_song.art_manual().isEmpty()); album_cover_choice_controller_->delete_cover_action()->setEnabled(enable_change_art && first_song.has_valid_art() && !first_song.has_manually_unset_cover()); - if (data_[indexes.first().row()].cover_action_ == UpdateCoverAction_None) { + if (data_[indexes.first().row()].cover_action_ == UpdateCoverAction::None) { tags_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options_, first_song); } else { @@ -728,7 +728,7 @@ void EditTagDialog::SelectionChanged() { ui_->tags_summary->setText(summary); - const bool embedded_cover = (first_song.save_embedded_cover_supported() && (first_song.has_embedded_cover() || album_cover_choice_controller_->get_collection_save_album_cover_type() == CollectionSettingsPage::SaveCoverType_Embedded)); + const bool embedded_cover = (first_song.save_embedded_cover_supported() && (first_song.has_embedded_cover() || album_cover_choice_controller_->get_collection_save_album_cover_type() == CollectionSettingsPage::SaveCoverType::Embedded)); ui_->checkbox_embedded_cover->setChecked(embedded_cover); album_cover_choice_controller_->set_save_embedded_cover_override(embedded_cover); @@ -831,21 +831,21 @@ QString EditTagDialog::GetArtSummary(const Song &song, const UpdateCoverAction c QString summary; - if (cover_action != UpdateCoverAction_None) { + if (cover_action != UpdateCoverAction::None) { switch (cover_action) { - case UpdateCoverAction_Clear: + case UpdateCoverAction::Clear: summary = tr("Cover changed: Will be cleared when saved.").toHtmlEscaped(); break; - case UpdateCoverAction_Unset: + case UpdateCoverAction::Unset: summary = tr("Cover changed: Will be unset when saved.").toHtmlEscaped(); break; - case UpdateCoverAction_Delete: + case UpdateCoverAction::Delete: summary = tr("Cover changed: Will be deleted when saved.").toHtmlEscaped(); break; - case UpdateCoverAction_New: + case UpdateCoverAction::New: summary = tr("Cover changed: Will set new when saved.").toHtmlEscaped(); break; - case UpdateCoverAction_None: + case UpdateCoverAction::None: break; } } @@ -981,7 +981,7 @@ void EditTagDialog::LoadCoverFromFile() { if (!song) return; AlbumCoverImageResult result = album_cover_choice_controller_->LoadImageFromFile(song); - if (result.is_valid()) UpdateCover(UpdateCoverAction_New, result); + if (result.is_valid()) UpdateCover(UpdateCoverAction::New, result); } @@ -999,7 +999,7 @@ void EditTagDialog::LoadCoverFromURL() { if (ui_->song_list->selectionModel()->selectedIndexes().isEmpty()) return; AlbumCoverImageResult result = album_cover_choice_controller_->LoadImageFromURL(); - if (result.is_valid()) UpdateCover(UpdateCoverAction_New, result); + if (result.is_valid()) UpdateCover(UpdateCoverAction::New, result); } @@ -1009,7 +1009,7 @@ void EditTagDialog::SearchForCover() { if (!song) return; AlbumCoverImageResult result = album_cover_choice_controller_->SearchForImage(song); - if (result.is_valid()) UpdateCover(UpdateCoverAction_New, result); + if (result.is_valid()) UpdateCover(UpdateCoverAction::New, result); } @@ -1020,7 +1020,7 @@ void EditTagDialog::UnsetCover() { song->set_manually_unset_cover(); - UpdateCover(UpdateCoverAction_Unset); + UpdateCover(UpdateCoverAction::Unset); } @@ -1032,13 +1032,13 @@ void EditTagDialog::ClearCover() { song->clear_art_automatic(); song->clear_art_manual(); - UpdateCover(UpdateCoverAction_Clear); + UpdateCover(UpdateCoverAction::Clear); } void EditTagDialog::DeleteCover() { - UpdateCover(UpdateCoverAction_Delete); + UpdateCover(UpdateCoverAction::Delete); } @@ -1061,13 +1061,13 @@ void EditTagDialog::UpdateCover(const UpdateCoverAction action, const AlbumCover for (const QModelIndex &idx : indexes) { data_[idx.row()].cover_action_ = action; data_[idx.row()].cover_result_ = result; - if (action == UpdateCoverAction_New) { + if (action == UpdateCoverAction::New) { data_[idx.row()].current_.clear_art_manual(); } - else if (action == UpdateCoverAction_Unset) { + else if (action == UpdateCoverAction::Unset) { data_[idx.row()].current_.set_manually_unset_cover(); } - else if (action == UpdateCoverAction_Clear || action == UpdateCoverAction_Delete) { + else if (action == UpdateCoverAction::Clear || action == UpdateCoverAction::Delete) { data_[idx.row()].current_.clear_art_manual(); data_[idx.row()].current_.clear_art_automatic(); } @@ -1083,13 +1083,13 @@ void EditTagDialog::UpdateCover(const UpdateCoverAction action, const AlbumCover if (data_[i].current_.effective_albumartist() == artist && data_[i].current_.album() == album) { data_[i].cover_action_ = action; data_[i].cover_result_ = result; - if (action == UpdateCoverAction_New) { + if (action == UpdateCoverAction::New) { data_[i].current_.clear_art_manual(); } - else if (action == UpdateCoverAction_Unset) { + else if (action == UpdateCoverAction::Unset) { data_[i].current_.set_manually_unset_cover(); } - else if (action == UpdateCoverAction_Clear || action == UpdateCoverAction_Delete) { + else if (action == UpdateCoverAction::Clear || action == UpdateCoverAction::Delete) { data_[i].current_.clear_art_manual(); data_[i].current_.clear_art_automatic(); } @@ -1168,22 +1168,22 @@ void EditTagDialog::SaveData() { QString embedded_cover_from_file; // If embedded album cover is selected, and it isn't saved to the tags, then save it even if no action was done. - if (ui_->checkbox_embedded_cover->isChecked() && ref.cover_action_ == UpdateCoverAction_None && !ref.original_.has_embedded_cover() && ref.original_.save_embedded_cover_supported()) { + if (ui_->checkbox_embedded_cover->isChecked() && ref.cover_action_ == UpdateCoverAction::None && !ref.original_.has_embedded_cover() && ref.original_.save_embedded_cover_supported()) { if (ref.original_.art_manual().isValid() && ref.original_.art_manual().isLocalFile() && QFile::exists(ref.original_.art_manual().toLocalFile())) { - ref.cover_action_ = UpdateCoverAction_New; + ref.cover_action_ = UpdateCoverAction::New; embedded_cover_from_file = ref.original_.art_manual().toLocalFile(); } else if (ref.original_.art_automatic().isValid() && ref.original_.art_automatic().isLocalFile() && QFile::exists(ref.original_.art_automatic().toLocalFile())) { - ref.cover_action_ = UpdateCoverAction_New; + ref.cover_action_ = UpdateCoverAction::New; embedded_cover_from_file = ref.original_.art_automatic().toLocalFile(); } } - if (ref.cover_action_ != UpdateCoverAction_None) { + if (ref.cover_action_ != UpdateCoverAction::None) { switch (ref.cover_action_) { - case UpdateCoverAction_None: + case UpdateCoverAction::None: break; - case UpdateCoverAction_New:{ + case UpdateCoverAction::New:{ if ((!ref.current_.effective_albumartist().isEmpty() && !ref.current_.album().isEmpty()) && (!ui_->checkbox_embedded_cover->isChecked() || !ref.original_.save_embedded_cover_supported())) { QUrl cover_url; @@ -1204,13 +1204,13 @@ void EditTagDialog::SaveData() { } break; } - case UpdateCoverAction_Unset: + case UpdateCoverAction::Unset: ref.current_.set_manually_unset_cover(); break; - case UpdateCoverAction_Clear: + case UpdateCoverAction::Clear: ref.current_.clear_art_manual(); break; - case UpdateCoverAction_Delete:{ + case UpdateCoverAction::Delete:{ if (!ref.original_.art_automatic().isEmpty()) { if (ref.original_.art_automatic().isValid() && !ref.original_.has_embedded_cover() && ref.original_.art_automatic().isLocalFile()) { QString art_automatic = ref.original_.art_automatic().toLocalFile(); @@ -1233,7 +1233,7 @@ void EditTagDialog::SaveData() { } } if (ui_->checkbox_embedded_cover->isChecked() && ref.original_.save_embedded_cover_supported()) { - if (ref.cover_action_ == UpdateCoverAction_New) { + if (ref.cover_action_ == UpdateCoverAction::New) { if (ref.cover_result_.is_jpeg()) { // Save JPEG data directly. ++save_art_pending_; TagReaderReply *reply = TagReaderClient::Instance()->SaveEmbeddedArt(ref.current_.url().toLocalFile(), ref.cover_result_.image_data); @@ -1268,7 +1268,7 @@ void EditTagDialog::SaveData() { watcher->setFuture(future); } } - else if (ref.cover_action_ == UpdateCoverAction_Delete) { + else if (ref.cover_action_ == UpdateCoverAction::Delete) { ++save_art_pending_; TagReaderReply *reply = TagReaderClient::Instance()->SaveEmbeddedArt(ref.current_.url().toLocalFile(), QByteArray()); QObject::connect(reply, &TagReaderReply::Finished, this, [this, reply, ref]() { @@ -1435,18 +1435,18 @@ void EditTagDialog::SongSaveArtComplete(TagReaderReply *reply, const QString &fi song = collection_songs_.take(song.id()); } switch (cover_action) { - case UpdateCoverAction_None: + case UpdateCoverAction::None: break; - case UpdateCoverAction_New: + case UpdateCoverAction::New: song.clear_art_manual(); song.set_embedded_cover(); break; - case UpdateCoverAction_Clear: - case UpdateCoverAction_Delete: + case UpdateCoverAction::Clear: + case UpdateCoverAction::Delete: song.clear_art_automatic(); song.clear_art_manual(); break; - case UpdateCoverAction_Unset: + case UpdateCoverAction::Unset: song.clear_art_automatic(); song.set_manually_unset_cover(); break; diff --git a/src/dialogs/edittagdialog.h b/src/dialogs/edittagdialog.h index 28cff6b31..735ce76be 100644 --- a/src/dialogs/edittagdialog.h +++ b/src/dialogs/edittagdialog.h @@ -70,9 +70,9 @@ class EditTagDialog : public QDialog { static const char *kTagsDifferentHintText; static const char *kArtDifferentHintText; - void SetSongs(const SongList &songs, const PlaylistItemList &items = PlaylistItemList()); + void SetSongs(const SongList &songs, const PlaylistItemPtrList &items = PlaylistItemPtrList()); - PlaylistItemList playlist_items() const { return playlist_items_; } + PlaylistItemPtrList playlist_items() const { return playlist_items_; } void accept() override; @@ -85,15 +85,15 @@ class EditTagDialog : public QDialog { void hideEvent(QHideEvent *e) override; private: - enum UpdateCoverAction { - UpdateCoverAction_None = 0, - UpdateCoverAction_Clear, - UpdateCoverAction_Unset, - UpdateCoverAction_Delete, - UpdateCoverAction_New, + enum class UpdateCoverAction { + None = 0, + Clear, + Unset, + Delete, + New }; struct Data { - explicit Data(const Song &song = Song()) : original_(song), current_(song), cover_action_(UpdateCoverAction_None) {} + explicit Data(const Song &song = Song()) : original_(song), current_(song), cover_action_(UpdateCoverAction::None) {} static QVariant value(const Song &song, const QString &id); QVariant original_value(const QString &id) const { return value(original_, id); } @@ -189,7 +189,7 @@ class EditTagDialog : public QDialog { bool loading_; - PlaylistItemList playlist_items_; + PlaylistItemPtrList playlist_items_; QList data_; QList fields_; diff --git a/src/engine/engine_fwd.h b/src/engine/engine_fwd.h index 5868c3f83..ca0839e73 100644 --- a/src/engine/engine_fwd.h +++ b/src/engine/engine_fwd.h @@ -20,9 +20,15 @@ class Base; * * It is vital to be Idle just after the track has ended! */ -enum State { Empty, Idle, Playing, Paused, Error }; +enum class State { + Empty, + Idle, + Playing, + Paused, + Error +}; -enum TrackChangeType { +enum class TrackChangeType { // One of: First = 0x01, Manual = 0x02, @@ -39,4 +45,7 @@ Q_DECLARE_FLAGS(TrackChangeFlags, TrackChangeType) using EngineBase = Engine::Base; +Q_DECLARE_METATYPE(Engine::State) +Q_DECLARE_METATYPE(Engine::TrackChangeType) + #endif // ENGINE_FWD_H diff --git a/src/engine/enginebase.cpp b/src/engine/enginebase.cpp index fa84ee16f..dde583734 100644 --- a/src/engine/enginebase.cpp +++ b/src/engine/enginebase.cpp @@ -159,8 +159,8 @@ void Engine::Base::ReloadSettings() { s.endGroup(); s.beginGroup(NetworkProxySettingsPage::kSettingsGroup); - NetworkProxyFactory::Mode proxy_mode = NetworkProxyFactory::Mode(s.value("mode", NetworkProxyFactory::Mode_System).toInt()); - if (proxy_mode == NetworkProxyFactory::Mode_Manual && s.contains("engine") && s.value("engine").toBool()) { + const NetworkProxyFactory::Mode proxy_mode = static_cast(s.value("mode", static_cast(NetworkProxyFactory::Mode::System)).toInt()); + if (proxy_mode == NetworkProxyFactory::Mode::Manual && s.contains("engine") && s.value("engine").toBool()) { QString proxy_host = s.value("hostname").toString(); int proxy_port = s.value("port").toInt(); if (proxy_host.isEmpty() || proxy_port <= 0) { diff --git a/src/engine/enginebase.h b/src/engine/enginebase.h index c59604674..0b47eeaaf 100644 --- a/src/engine/enginebase.h +++ b/src/engine/enginebase.h @@ -223,11 +223,11 @@ class Base : public QObject { }; struct SimpleMetaBundle { - SimpleMetaBundle() : type(Type_Any), length(-1), year(-1), track(-1), filetype(Song::FileType_Unknown), samplerate(-1), bitdepth(-1), bitrate(-1) {} - enum Type { - Type_Any, - Type_Current, - Type_Next, + SimpleMetaBundle() : type(Type::Any), length(-1), year(-1), track(-1), filetype(Song::FileType::Unknown), samplerate(-1), bitdepth(-1), bitrate(-1) {} + enum class Type { + Any, + Current, + Next }; Type type; QUrl url; @@ -250,5 +250,6 @@ struct SimpleMetaBundle { } // namespace Engine Q_DECLARE_METATYPE(EngineBase::OutputDetails) +Q_DECLARE_METATYPE(Engine::SimpleMetaBundle) #endif // ENGINEBASE_H diff --git a/src/engine/enginetype.cpp b/src/engine/enginetype.cpp index c06ee650c..e627eb088 100644 --- a/src/engine/enginetype.cpp +++ b/src/engine/enginetype.cpp @@ -27,26 +27,26 @@ namespace Engine { Engine::EngineType EngineTypeFromName(const QString &enginename) { QString lower = enginename.toLower(); - if (lower == "gstreamer") return Engine::GStreamer; - else if (lower == "vlc") return Engine::VLC; - else return Engine::None; + if (lower == "gstreamer") return Engine::EngineType::GStreamer; + else if (lower == "vlc") return Engine::EngineType::VLC; + else return Engine::EngineType::None; } QString EngineName(const Engine::EngineType enginetype) { switch (enginetype) { - case Engine::GStreamer: return QString("gstreamer"); - case Engine::VLC: return QString("vlc"); - case Engine::None: - default: return QString("None"); + case Engine::EngineType::GStreamer: return QString("gstreamer"); + case Engine::EngineType::VLC: return QString("vlc"); + case Engine::EngineType::None: + default: return QString("None"); } } QString EngineDescription(Engine::EngineType enginetype) { switch (enginetype) { - case Engine::GStreamer: return QString("GStreamer"); - case Engine::VLC: return QString("VLC"); - case Engine::None: - default: return QString("None"); + case Engine::EngineType::GStreamer: return QString("GStreamer"); + case Engine::EngineType::VLC: return QString("VLC"); + case Engine::EngineType::None: + default: return QString("None"); } } diff --git a/src/engine/enginetype.h b/src/engine/enginetype.h index 02d1eed88..25527b5aa 100644 --- a/src/engine/enginetype.h +++ b/src/engine/enginetype.h @@ -27,7 +27,7 @@ namespace Engine { -enum EngineType { +enum class EngineType { None, GStreamer, VLC, diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index cad907d30..c9cbb941b 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -72,7 +72,7 @@ const char *GstEngine::kOSXAudioSink = "osxaudiosink"; const int GstEngine::kDiscoveryTimeoutS = 10; GstEngine::GstEngine(TaskManager *task_manager, QObject *parent) - : Engine::Base(Engine::GStreamer, parent), + : Engine::Base(Engine::EngineType::GStreamer, parent), task_manager_(task_manager), gst_startup_(nullptr), discoverer_(nullptr), @@ -137,19 +137,19 @@ bool GstEngine::Init() { Engine::State GstEngine::state() const { - if (!current_pipeline_) return stream_url_.isEmpty() ? Engine::Empty : Engine::Idle; + if (!current_pipeline_) return stream_url_.isEmpty() ? Engine::State::Empty : Engine::State::Idle; switch (current_pipeline_->state()) { case GST_STATE_NULL: - return Engine::Empty; + return Engine::State::Empty; case GST_STATE_READY: - return Engine::Idle; + return Engine::State::Idle; case GST_STATE_PLAYING: - return Engine::Playing; + return Engine::State::Playing; case GST_STATE_PAUSED: - return Engine::Paused; + return Engine::State::Paused; default: - return Engine::Empty; + return Engine::State::Empty; } } @@ -181,12 +181,12 @@ bool GstEngine::Load(const QUrl &stream_url, const QUrl &original_url, Engine::T QByteArray gst_url = FixupUrl(stream_url); - bool crossfade = current_pipeline_ && ((crossfade_enabled_ && change & Engine::Manual) || (autocrossfade_enabled_ && change & Engine::Auto) || ((crossfade_enabled_ || autocrossfade_enabled_) && change & Engine::Intro)); + bool crossfade = current_pipeline_ && ((crossfade_enabled_ && change & Engine::TrackChangeType::Manual) || (autocrossfade_enabled_ && change & Engine::TrackChangeType::Auto) || ((crossfade_enabled_ || autocrossfade_enabled_) && change & Engine::TrackChangeType::Intro)); - if (change & Engine::Auto && change & Engine::SameAlbum && !crossfade_same_album_) + if (change & Engine::TrackChangeType::Auto && change & Engine::TrackChangeType::SameAlbum && !crossfade_same_album_) crossfade = false; - if (!crossfade && current_pipeline_ && current_pipeline_->stream_url() == gst_url && change & Engine::Auto) { + if (!crossfade && current_pipeline_ && current_pipeline_->stream_url() == gst_url && change & Engine::TrackChangeType::Auto) { // We're not crossfading, and the pipeline is already playing the URI we want, so just do nothing. return true; } @@ -275,7 +275,7 @@ void GstEngine::Stop(const bool stop_after) { current_pipeline_.reset(); BufferingFinished(); - emit StateChanged(Engine::Empty); + emit StateChanged(Engine::State::Empty); } @@ -289,7 +289,7 @@ void GstEngine::Pause() { current_pipeline_->StartFader(fadeout_pause_duration_nanosec_, QTimeLine::Forward, QEasingCurve::InOutQuad, false); is_fading_out_to_pause_ = false; has_faded_out_ = false; - emit StateChanged(Engine::Playing); + emit StateChanged(Engine::State::Playing); return; } @@ -299,7 +299,7 @@ void GstEngine::Pause() { } else { current_pipeline_->SetState(GST_STATE_PAUSED); - emit StateChanged(Engine::Paused); + emit StateChanged(Engine::State::Paused); StopTimers(); } } @@ -321,7 +321,7 @@ void GstEngine::Unpause() { has_faded_out_ = false; } - emit StateChanged(Engine::Playing); + emit StateChanged(Engine::State::Playing); StartTimers(); } @@ -542,7 +542,7 @@ void GstEngine::HandlePipelineError(const int pipeline_id, const int domain, con current_pipeline_.reset(); BufferingFinished(); - emit StateChanged(Engine::Error); + emit StateChanged(Engine::State::Error); if ( (domain == static_cast(GST_RESOURCE_ERROR) && ( @@ -596,7 +596,7 @@ void GstEngine::FadeoutPauseFinished() { fadeout_pause_pipeline_->SetState(GST_STATE_PAUSED); current_pipeline_->SetState(GST_STATE_PAUSED); - emit StateChanged(Engine::Paused); + emit StateChanged(Engine::State::Paused); StopTimers(); is_fading_out_to_pause_ = false; @@ -651,7 +651,7 @@ void GstEngine::PlayDone(const GstStateChangeReturn ret, const quint64 offset_na Seek(offset_nanosec); } - emit StateChanged(Engine::Playing); + emit StateChanged(Engine::State::Playing); // We've successfully started playing a media stream with this url emit ValidSongRequested(stream_url_); @@ -828,7 +828,7 @@ std::shared_ptr GstEngine::CreatePipeline(const QByteArray &g if (!ret->InitFromUrl(gst_url, original_url, end_nanosec, error)) { ret.reset(); emit Error(error); - emit StateChanged(Engine::Error); + emit StateChanged(Engine::State::Error); emit FatalError(); } @@ -919,11 +919,11 @@ void GstEngine::StreamDiscovered(GstDiscoverer*, GstDiscovererInfo *info, GError Engine::SimpleMetaBundle bundle; if (discovered_url == instance->current_pipeline_->stream_url()) { - bundle.type = Engine::SimpleMetaBundle::Type_Current; + bundle.type = Engine::SimpleMetaBundle::Type::Current; bundle.url = instance->current_pipeline_->original_url(); } else if (discovered_url == instance->current_pipeline_->next_stream_url()) { - bundle.type = Engine::SimpleMetaBundle::Type_Next; + bundle.type = Engine::SimpleMetaBundle::Type::Next; bundle.url = instance->current_pipeline_->next_original_url(); } bundle.stream_url = QUrl(discovered_url); @@ -940,19 +940,19 @@ void GstEngine::StreamDiscovered(GstDiscoverer*, GstDiscovererInfo *info, GError QString mimetype = gst_structure_get_name(gst_structure); if (!mimetype.isEmpty() && mimetype != "audio/mpeg") { bundle.filetype = Song::FiletypeByMimetype(mimetype); - if (bundle.filetype == Song::FileType_Unknown) { + if (bundle.filetype == Song::FileType::Unknown) { qLog(Error) << "Unknown mimetype" << mimetype; } } } - if (bundle.filetype == Song::FileType_Unknown) { + if (bundle.filetype == Song::FileType::Unknown) { gchar *codec_description = gst_pb_utils_get_codec_description(caps); QString filetype_description = (codec_description ? QString(codec_description) : QString()); g_free(codec_description); if (!filetype_description.isEmpty()) { bundle.filetype = Song::FiletypeByDescription(filetype_description); - if (bundle.filetype == Song::FileType_Unknown) { + if (bundle.filetype == Song::FileType::Unknown) { qLog(Error) << "Unknown filetype" << filetype_description; } } diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 419c0c1e0..e15772412 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -1292,7 +1292,7 @@ void GstEnginePipeline::TagMessageReceived(GstMessage *msg) { gst_message_parse_tag(msg, &taglist); Engine::SimpleMetaBundle bundle; - bundle.type = Engine::SimpleMetaBundle::Type_Current; + bundle.type = Engine::SimpleMetaBundle::Type::Current; bundle.url = original_url_; bundle.title = ParseStrTag(taglist, GST_TAG_TITLE); bundle.artist = ParseStrTag(taglist, GST_TAG_ARTIST); diff --git a/src/engine/vlcengine.cpp b/src/engine/vlcengine.cpp index 93ee83e3f..39eef4445 100644 --- a/src/engine/vlcengine.cpp +++ b/src/engine/vlcengine.cpp @@ -39,10 +39,10 @@ #include "vlcscopedref.h" VLCEngine::VLCEngine(TaskManager *task_manager, QObject *parent) - : Engine::Base(Engine::VLC, parent), + : Engine::Base(Engine::EngineType::VLC, parent), instance_(nullptr), player_(nullptr), - state_(Engine::Empty) { + state_(Engine::State::Empty) { Q_UNUSED(task_manager); @@ -52,7 +52,7 @@ VLCEngine::VLCEngine(TaskManager *task_manager, QObject *parent) VLCEngine::~VLCEngine() { - if (state_ == Engine::Playing || state_ == Engine::Paused) { + if (state_ == Engine::State::Playing || state_ == Engine::State::Paused) { libvlc_media_player_stop(player_); } @@ -197,7 +197,7 @@ void VLCEngine::SetVolumeSW(const uint percent) { qint64 VLCEngine::position_nanosec() const { - if (state_ == Engine::Empty) return 0; + if (state_ == Engine::State::Empty) return 0; const qint64 result = (position() * kNsecPerMsec); return qMax(0LL, result); @@ -205,7 +205,7 @@ qint64 VLCEngine::position_nanosec() const { qint64 VLCEngine::length_nanosec() const { - if (state_ == Engine::Empty) return 0; + if (state_ == Engine::State::Empty) return 0; const qint64 result = (end_nanosec_ - static_cast(beginning_nanosec_)); if (result > 0) { return result; @@ -293,31 +293,31 @@ void VLCEngine::StateChangedCallback(const libvlc_event_t *e, void *data) { case libvlc_MediaPlayerStopped:{ const Engine::State state = engine->state_; - engine->state_ = Engine::Empty; - if (state == Engine::Playing) { + engine->state_ = Engine::State::Empty; + if (state == Engine::State::Playing) { emit engine->StateChanged(engine->state_); } break; } case libvlc_MediaPlayerEncounteredError: - engine->state_ = Engine::Error; + engine->state_ = Engine::State::Error; emit engine->StateChanged(engine->state_); emit engine->FatalError(); break; case libvlc_MediaPlayerPlaying: - engine->state_ = Engine::Playing; + engine->state_ = Engine::State::Playing; emit engine->StateChanged(engine->state_); break; case libvlc_MediaPlayerPaused: - engine->state_ = Engine::Paused; + engine->state_ = Engine::State::Paused; emit engine->StateChanged(engine->state_); break; case libvlc_MediaPlayerEndReached: - engine->state_ = Engine::Idle; + engine->state_ = Engine::State::Idle; emit engine->TrackEnded(); break; } diff --git a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp index dbe4821cf..470ae2b3f 100644 --- a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp @@ -42,7 +42,7 @@ const char *GlobalShortcutsBackendGnome::kService2 = "org.gnome.SettingsDaemon"; const char *GlobalShortcutsBackendGnome::kPath = "/org/gnome/SettingsDaemon/MediaKeys"; GlobalShortcutsBackendGnome::GlobalShortcutsBackendGnome(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_Gnome, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::Gnome, parent), interface_(nullptr), is_connected_(false) {} diff --git a/src/globalshortcuts/globalshortcutsbackend-kde.cpp b/src/globalshortcuts/globalshortcutsbackend-kde.cpp index f6003fc7c..b445647f2 100644 --- a/src/globalshortcuts/globalshortcutsbackend-kde.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-kde.cpp @@ -42,7 +42,7 @@ const char *GlobalShortcutsBackendKDE::kKdeService = "org.kde.kglobalaccel"; const char *GlobalShortcutsBackendKDE::kKdePath = "/kglobalaccel"; GlobalShortcutsBackendKDE::GlobalShortcutsBackendKDE(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_KDE, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::KDE, parent), interface_(nullptr), component_(nullptr) {} diff --git a/src/globalshortcuts/globalshortcutsbackend-macos.mm b/src/globalshortcuts/globalshortcutsbackend-macos.mm index 45793c819..087cd77e2 100644 --- a/src/globalshortcuts/globalshortcutsbackend-macos.mm +++ b/src/globalshortcuts/globalshortcutsbackend-macos.mm @@ -76,7 +76,7 @@ class GlobalShortcutsBackendMacOSPrivate : boost::noncopyable { }; GlobalShortcutsBackendMacOS::GlobalShortcutsBackendMacOS(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_MacOS, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::macOS, parent), p_(new GlobalShortcutsBackendMacOSPrivate(this)) {} GlobalShortcutsBackendMacOS::~GlobalShortcutsBackendMacOS() {} diff --git a/src/globalshortcuts/globalshortcutsbackend-mate.cpp b/src/globalshortcuts/globalshortcutsbackend-mate.cpp index c4531b6a8..d67df2da2 100644 --- a/src/globalshortcuts/globalshortcutsbackend-mate.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-mate.cpp @@ -40,7 +40,7 @@ const char *GlobalShortcutsBackendMate::kService2 = "org.mate.SettingsDaemon"; const char *GlobalShortcutsBackendMate::kPath = "/org/mate/SettingsDaemon/MediaKeys"; GlobalShortcutsBackendMate::GlobalShortcutsBackendMate(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_Mate, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::Mate, parent), interface_(nullptr), is_connected_(false) {} diff --git a/src/globalshortcuts/globalshortcutsbackend-win.cpp b/src/globalshortcuts/globalshortcutsbackend-win.cpp index 204396a83..6a9086b80 100644 --- a/src/globalshortcuts/globalshortcutsbackend-win.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-win.cpp @@ -34,7 +34,7 @@ #include "globalshortcut.h" GlobalShortcutsBackendWin::GlobalShortcutsBackendWin(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_Win, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::Win, parent), gshortcut_init_(nullptr) {} GlobalShortcutsBackendWin::~GlobalShortcutsBackendWin() { diff --git a/src/globalshortcuts/globalshortcutsbackend-x11.cpp b/src/globalshortcuts/globalshortcutsbackend-x11.cpp index 622f91b1f..27ae2d8d3 100644 --- a/src/globalshortcuts/globalshortcutsbackend-x11.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-x11.cpp @@ -34,7 +34,7 @@ #include "globalshortcut.h" GlobalShortcutsBackendX11::GlobalShortcutsBackendX11(GlobalShortcutsManager *manager, QObject *parent) - : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type_X11, parent), + : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::X11, parent), gshortcut_init_(nullptr) {} GlobalShortcutsBackendX11::~GlobalShortcutsBackendX11() { GlobalShortcutsBackendX11::DoUnregister(); } diff --git a/src/globalshortcuts/globalshortcutsbackend.cpp b/src/globalshortcuts/globalshortcutsbackend.cpp index e476b4a94..0facf0ec4 100644 --- a/src/globalshortcuts/globalshortcutsbackend.cpp +++ b/src/globalshortcuts/globalshortcutsbackend.cpp @@ -34,19 +34,19 @@ GlobalShortcutsBackend::GlobalShortcutsBackend(GlobalShortcutsManager *manager, QString GlobalShortcutsBackend::name() const { switch (type_) { - case Type_None: + case Type::None: return "None"; - case Type_KDE: + case Type::KDE: return "KDE"; - case Type_Gnome: + case Type::Gnome: return "Gnome"; - case Type_Mate: + case Type::Mate: return "Mate"; - case Type_X11: + case Type::X11: return "X11"; - case Type_MacOS: + case Type::macOS: return "macOS"; - case Type_Win: + case Type::Win: return "Windows"; } diff --git a/src/globalshortcuts/globalshortcutsbackend.h b/src/globalshortcuts/globalshortcutsbackend.h index 49071a3ca..ce22846c9 100644 --- a/src/globalshortcuts/globalshortcutsbackend.h +++ b/src/globalshortcuts/globalshortcutsbackend.h @@ -32,14 +32,14 @@ class GlobalShortcutsBackend : public QObject { Q_OBJECT public: - enum Type { - Type_None = 0, - Type_KDE, - Type_Gnome, - Type_Mate, - Type_X11, - Type_MacOS, - Type_Win + enum class Type { + None = 0, + KDE, + Gnome, + Mate, + X11, + macOS, + Win }; explicit GlobalShortcutsBackend(GlobalShortcutsManager *manager, const Type type, QObject *parent = nullptr); diff --git a/src/globalshortcuts/globalshortcutsmanager.cpp b/src/globalshortcuts/globalshortcutsmanager.cpp index 0f7e4c1ef..8bce74b6f 100644 --- a/src/globalshortcuts/globalshortcutsmanager.cpp +++ b/src/globalshortcuts/globalshortcutsmanager.cpp @@ -107,28 +107,28 @@ void GlobalShortcutsManager::ReloadSettings() { backends_enabled_.clear(); #ifdef Q_OS_MACOS - backends_enabled_ << GlobalShortcutsBackend::Type_MacOS; + backends_enabled_ << GlobalShortcutsBackend::Type::macOS; #endif #ifdef Q_OS_WIN - backends_enabled_ << GlobalShortcutsBackend::Type_Win; + backends_enabled_ << GlobalShortcutsBackend::Type::Win; #endif #if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) if (settings_.value("use_kde", true).toBool()) { - backends_enabled_ << GlobalShortcutsBackend::Type_KDE; + backends_enabled_ << GlobalShortcutsBackend::Type::KDE; } if (settings_.value("use_gnome", true).toBool()) { - backends_enabled_ << GlobalShortcutsBackend::Type_Gnome; + backends_enabled_ << GlobalShortcutsBackend::Type::Gnome; } if (settings_.value("use_mate", true).toBool()) { - backends_enabled_ << GlobalShortcutsBackend::Type_Mate; + backends_enabled_ << GlobalShortcutsBackend::Type::Mate; } #endif #ifdef HAVE_X11_GLOBALSHORTCUTS if (settings_.value("use_x11", false).toBool()) { - backends_enabled_ << GlobalShortcutsBackend::Type_X11; + backends_enabled_ << GlobalShortcutsBackend::Type::X11; } #endif diff --git a/src/internet/internetplaylistitem.cpp b/src/internet/internetplaylistitem.cpp index da732f3ea..81f38311f 100644 --- a/src/internet/internetplaylistitem.cpp +++ b/src/internet/internetplaylistitem.cpp @@ -64,8 +64,8 @@ QVariant InternetPlaylistItem::DatabaseValue(DatabaseColumn column) const { void InternetPlaylistItem::InitMetadata() { if (metadata_.title().isEmpty()) metadata_.set_title(metadata_.url().toString()); - if (metadata_.source() == Song::Source_Unknown) metadata_.set_source(Song::Source_Stream); - if (metadata_.filetype() == Song::FileType_Unknown) metadata_.set_filetype(Song::FileType_Stream); + if (metadata_.source() == Song::Source::Unknown) metadata_.set_source(Song::Source::Stream); + if (metadata_.filetype() == Song::FileType::Unknown) metadata_.set_filetype(Song::FileType::Stream); metadata_.set_valid(true); } diff --git a/src/internet/internetsearchmodel.cpp b/src/internet/internetsearchmodel.cpp index 7da5fd050..693e829b9 100644 --- a/src/internet/internetsearchmodel.cpp +++ b/src/internet/internetsearchmodel.cpp @@ -45,9 +45,9 @@ InternetSearchModel::InternetSearchModel(InternetService *service, QObject *pare artist_icon_(IconLoader::Load("folder-sound")), album_icon_(IconLoader::Load("cdcase")) { - group_by_[0] = CollectionModel::GroupBy_AlbumArtist; - group_by_[1] = CollectionModel::GroupBy_AlbumDisc; - group_by_[2] = CollectionModel::GroupBy_None; + group_by_[0] = CollectionModel::GroupBy::AlbumArtist; + group_by_[1] = CollectionModel::GroupBy::AlbumDisc; + group_by_[2] = CollectionModel::GroupBy::None; QList nocover_sizes = album_icon_.availableSizes(); no_cover_icon_ = album_icon_.pixmap(nocover_sizes.last()).scaled(CollectionModel::kPrettyCoverSize, CollectionModel::kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); @@ -88,7 +88,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem switch (group_by_[level]) { - case CollectionModel::GroupBy_AlbumArtist: + case CollectionModel::GroupBy::AlbumArtist: if (s.is_compilation()) { display_text = tr("Various artists"); sort_text = "aaaaaa"; @@ -100,7 +100,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem has_artist_icon = true; break; - case CollectionModel::GroupBy_Artist: + case CollectionModel::GroupBy::Artist: if (s.is_compilation()) { display_text = tr("Various artists"); sort_text = "aaaaaa"; @@ -112,14 +112,14 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem has_artist_icon = true; break; - case CollectionModel::GroupBy_Album: + case CollectionModel::GroupBy::Album: display_text = CollectionModel::TextOrUnknown(s.album()); sort_text = CollectionModel::SortTextForArtist(s.album()); unique_tag = s.album_id(); has_album_icon = true; break; - case CollectionModel::GroupBy_AlbumDisc:{ + case CollectionModel::GroupBy::AlbumDisc:{ int disc = qMax(0, s.disc()); display_text = CollectionModel::PrettyAlbumDisc(s.album(), disc); sort_text = s.album() + CollectionModel::SortTextForNumber(disc); @@ -128,7 +128,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem break; } - case CollectionModel::GroupBy_YearAlbum:{ + case CollectionModel::GroupBy::YearAlbum:{ int year = qMax(0, s.year()); display_text = CollectionModel::PrettyYearAlbum(year, s.album()); sort_text = CollectionModel::SortTextForNumber(year) + s.album(); @@ -137,7 +137,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem break; } - case CollectionModel::GroupBy_YearAlbumDisc:{ + case CollectionModel::GroupBy::YearAlbumDisc:{ int year = qMax(0, s.year()); int disc = qMax(0, s.disc()); display_text = CollectionModel::PrettyYearAlbumDisc(year, s.album(), disc); @@ -147,7 +147,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem break; } - case CollectionModel::GroupBy_OriginalYearAlbum:{ + case CollectionModel::GroupBy::OriginalYearAlbum:{ int year = qMax(0, s.effective_originalyear()); display_text = CollectionModel::PrettyYearAlbum(year, s.album()); sort_text = CollectionModel::SortTextForNumber(year) + s.album(); @@ -156,7 +156,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem break; } - case CollectionModel::GroupBy_OriginalYearAlbumDisc:{ + case CollectionModel::GroupBy::OriginalYearAlbumDisc:{ const int year = qMax(0, s.effective_originalyear()); const int disc = qMax(0, s.disc()); display_text = CollectionModel::PrettyYearAlbumDisc(year, s.album(), disc); @@ -166,56 +166,56 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem break; } - case CollectionModel::GroupBy_Disc: + case CollectionModel::GroupBy::Disc: display_text = CollectionModel::PrettyDisc(s.disc()); sort_text = CollectionModel::SortTextForArtist(display_text); has_album_icon = true; break; - case CollectionModel::GroupBy_Year:{ + case CollectionModel::GroupBy::Year:{ const int year = qMax(0, s.year()); display_text = QString::number(year); sort_text = CollectionModel::SortTextForNumber(year) + " "; break; } - case CollectionModel::GroupBy_OriginalYear:{ + case CollectionModel::GroupBy::OriginalYear:{ const int year = qMax(0, s.effective_originalyear()); display_text = QString::number(year); sort_text = CollectionModel::SortTextForNumber(year) + " "; break; } - case CollectionModel::GroupBy_Genre: + case CollectionModel::GroupBy::Genre: display_text = CollectionModel::TextOrUnknown(s.genre()); sort_text = CollectionModel::SortTextForArtist(s.genre()); has_album_icon = true; break; - case CollectionModel::GroupBy_Composer: + case CollectionModel::GroupBy::Composer: display_text = CollectionModel::TextOrUnknown(s.composer()); sort_text = CollectionModel::SortTextForArtist(s.composer()); has_album_icon = true; break; - case CollectionModel::GroupBy_Performer: + case CollectionModel::GroupBy::Performer: display_text = CollectionModel::TextOrUnknown(s.performer()); sort_text = CollectionModel::SortTextForArtist(s.performer()); has_album_icon = true; break; - case CollectionModel::GroupBy_Grouping: + case CollectionModel::GroupBy::Grouping: display_text = CollectionModel::TextOrUnknown(s.grouping()); sort_text = CollectionModel::SortTextForArtist(s.grouping()); has_album_icon = true; break; - case CollectionModel::GroupBy_FileType: + case CollectionModel::GroupBy::FileType: display_text = s.TextForFiletype(); sort_text = display_text; break; - case CollectionModel::GroupBy_Format: + case CollectionModel::GroupBy::Format: if (s.samplerate() <= 0) { display_text = s.TextForFiletype(); } @@ -230,23 +230,23 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem sort_text = display_text; break; - case CollectionModel::GroupBy_Samplerate: + case CollectionModel::GroupBy::Samplerate: display_text = QString::number(s.samplerate()); sort_text = display_text; break; - case CollectionModel::GroupBy_Bitdepth: + case CollectionModel::GroupBy::Bitdepth: display_text = QString::number(s.bitdepth()); sort_text = display_text; break; - case CollectionModel::GroupBy_Bitrate: + case CollectionModel::GroupBy::Bitrate: display_text = QString::number(s.bitrate()); sort_text = display_text; break; - case CollectionModel::GroupBy_None: - case CollectionModel::GroupByCount: + case CollectionModel::GroupBy::None: + case CollectionModel::GroupBy::GroupByCount: return parent; } @@ -262,7 +262,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem else { container = new QStandardItem(display_text); container->setData(sort_text, CollectionModel::Role_SortText); - container->setData(group_by_[level], CollectionModel::Role_ContainerType); + container->setData(static_cast(group_by_[level]), CollectionModel::Role_ContainerType); if (has_artist_icon) { container->setIcon(artist_icon_); diff --git a/src/internet/internetsearchview.cpp b/src/internet/internetsearchview.cpp index ebe83b1a9..dbaa997e7 100644 --- a/src/internet/internetsearchview.cpp +++ b/src/internet/internetsearchview.cpp @@ -102,7 +102,7 @@ InternetSearchView::InternetSearchView(QWidget *parent) current_proxy_(front_proxy_), swap_models_timer_(new QTimer(this)), use_pretty_covers_(true), - search_type_(InternetSearchView::SearchType_Artists), + search_type_(InternetSearchView::SearchType::Artists), search_error_(false), last_search_id_(0), searches_next_id_(1) { @@ -222,15 +222,15 @@ void InternetSearchView::ReloadSettings() { // Internet search settings - search_type_ = InternetSearchView::SearchType(s.value("type", static_cast(InternetSearchView::SearchType_Artists)).toInt()); + search_type_ = static_cast(s.value("type", static_cast(InternetSearchView::SearchType::Artists)).toInt()); switch (search_type_) { - case InternetSearchView::SearchType_Artists: + case InternetSearchView::SearchType::Artists: ui_->radiobutton_search_artists->setChecked(true); break; - case InternetSearchView::SearchType_Albums: + case InternetSearchView::SearchType::Albums: ui_->radiobutton_search_albums->setChecked(true); break; - case InternetSearchView::SearchType_Songs: + case InternetSearchView::SearchType::Songs: ui_->radiobutton_search_songs->setChecked(true); break; } @@ -238,12 +238,12 @@ void InternetSearchView::ReloadSettings() { int group_by_version = s.value("search_group_by_version", 0).toInt(); if (group_by_version == 1 && s.contains("search_group_by1") && s.contains("search_group_by2") && s.contains("search_group_by3")) { SetGroupBy(CollectionModel::Grouping( - CollectionModel::GroupBy(s.value("search_group_by1", static_cast(CollectionModel::GroupBy_AlbumArtist)).toInt()), - CollectionModel::GroupBy(s.value("search_group_by2", static_cast(CollectionModel::GroupBy_AlbumDisc)).toInt()), - CollectionModel::GroupBy(s.value("search_group_by3", static_cast(CollectionModel::GroupBy_None)).toInt()))); + static_cast(s.value("search_group_by1", static_cast(CollectionModel::GroupBy::AlbumArtist)).toInt()), + static_cast(s.value("search_group_by2", static_cast(CollectionModel::GroupBy::AlbumDisc)).toInt()), + static_cast(s.value("search_group_by3", static_cast(CollectionModel::GroupBy::None)).toInt()))); } else { - SetGroupBy(CollectionModel::Grouping(CollectionModel::GroupBy_AlbumArtist, CollectionModel::GroupBy_AlbumDisc, CollectionModel::GroupBy_None)); + SetGroupBy(CollectionModel::Grouping(CollectionModel::GroupBy::AlbumArtist, CollectionModel::GroupBy::AlbumDisc, CollectionModel::GroupBy::None)); } s.endGroup(); @@ -732,15 +732,15 @@ void InternetSearchView::SetGroupBy(const CollectionModel::Grouping g) { } void InternetSearchView::SearchArtistsClicked(const bool) { - SetSearchType(InternetSearchView::SearchType_Artists); + SetSearchType(InternetSearchView::SearchType::Artists); } void InternetSearchView::SearchAlbumsClicked(const bool) { - SetSearchType(InternetSearchView::SearchType_Albums); + SetSearchType(InternetSearchView::SearchType::Albums); } void InternetSearchView::SearchSongsClicked(const bool) { - SetSearchType(InternetSearchView::SearchType_Songs); + SetSearchType(InternetSearchView::SearchType::Songs); } void InternetSearchView::SetSearchType(const InternetSearchView::SearchType type) { diff --git a/src/internet/internetsearchview.h b/src/internet/internetsearchview.h index 803abb5fb..95de3ecb3 100644 --- a/src/internet/internetsearchview.h +++ b/src/internet/internetsearchview.h @@ -72,10 +72,10 @@ class InternetSearchView : public QWidget { explicit InternetSearchView(QWidget *parent = nullptr); ~InternetSearchView() override; - enum SearchType { - SearchType_Artists = 1, - SearchType_Albums = 2, - SearchType_Songs = 3, + enum class SearchType { + Artists = 1, + Albums = 2, + Songs = 3 }; struct Result { Song metadata_; diff --git a/src/moodbar/moodbarcontroller.cpp b/src/moodbar/moodbarcontroller.cpp index 6e6286ad1..793e7f3c1 100644 --- a/src/moodbar/moodbarcontroller.cpp +++ b/src/moodbar/moodbarcontroller.cpp @@ -60,15 +60,15 @@ void MoodbarController::CurrentSongChanged(const Song &song) { const MoodbarLoader::Result result = app_->moodbar_loader()->Load(song.url(), song.has_cue(), &data, &pipeline); switch (result) { - case MoodbarLoader::CannotLoad: + case MoodbarLoader::Result::CannotLoad: emit CurrentMoodbarDataChanged(QByteArray()); break; - case MoodbarLoader::Loaded: + case MoodbarLoader::Result::Loaded: emit CurrentMoodbarDataChanged(data); break; - case MoodbarLoader::WillLoadAsync: + case MoodbarLoader::Result::WillLoadAsync: // Emit an empty array for now so the GUI reverts to a normal progress // bar. Our slot will be called when the data is actually loaded. emit CurrentMoodbarDataChanged(QByteArray()); @@ -94,9 +94,9 @@ void MoodbarController::AsyncLoadComplete(MoodbarPipeline *pipeline, const QUrl } // Did we stop the song? switch (app_->player()->GetState()) { - case Engine::Error: - case Engine::Empty: - case Engine::Idle: + case Engine::State::Error: + case Engine::State::Empty: + case Engine::State::Idle: return; default: diff --git a/src/moodbar/moodbaritemdelegate.cpp b/src/moodbar/moodbaritemdelegate.cpp index 0e6bbe39b..92b1c1ba4 100644 --- a/src/moodbar/moodbaritemdelegate.cpp +++ b/src/moodbar/moodbaritemdelegate.cpp @@ -43,14 +43,14 @@ #include "settings/moodbarsettingspage.h" -MoodbarItemDelegate::Data::Data() : state_(State_None) {} +MoodbarItemDelegate::Data::Data() : state_(State::None) {} MoodbarItemDelegate::MoodbarItemDelegate(Application *app, PlaylistView *view, QObject *parent) : QItemDelegate(parent), app_(app), view_(view), enabled_(false), - style_(MoodbarRenderer::Style_Normal) { + style_(MoodbarRenderer::MoodbarStyle::Normal) { QObject::connect(app_, &Application::SettingsChanged, this, &MoodbarItemDelegate::ReloadSettings); ReloadSettings(); @@ -62,7 +62,7 @@ void MoodbarItemDelegate::ReloadSettings() { QSettings s; s.beginGroup(MoodbarSettingsPage::kSettingsGroup); enabled_ = s.value("enabled", false).toBool(); - MoodbarRenderer::MoodbarStyle new_style = static_cast(s.value("style", MoodbarRenderer::Style_Normal).toInt()); + const MoodbarRenderer::MoodbarStyle new_style = static_cast(s.value("style", static_cast(MoodbarRenderer::MoodbarStyle::Normal)).toInt()); s.endGroup(); if (!enabled_) { @@ -113,13 +113,13 @@ QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize data->desired_size_ = size; switch (data->state_) { - case Data::State_CannotLoad: - case Data::State_LoadingData: - case Data::State_LoadingColors: - case Data::State_LoadingImage: + case Data::State::CannotLoad: + case Data::State::LoadingData: + case Data::State::LoadingColors: + case Data::State::LoadingImage: return data->pixmap_; - case Data::State_Loaded: + case Data::State::Loaded: // Is the pixmap the right size? if (data->pixmap_.size() != size) { StartLoadingImage(url, data); @@ -127,7 +127,7 @@ QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize return data->pixmap_; - case Data::State_None: + case Data::State::None: break; } @@ -140,22 +140,22 @@ QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize void MoodbarItemDelegate::StartLoadingData(const QUrl &url, const bool has_cue, Data *data) { - data->state_ = Data::State_LoadingData; + 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, has_cue, &bytes, &pipeline)) { - case MoodbarLoader::CannotLoad: - data->state_ = Data::State_CannotLoad; + case MoodbarLoader::Result::CannotLoad: + data->state_ = Data::State::CannotLoad; break; - case MoodbarLoader::Loaded: + case MoodbarLoader::Result::Loaded: // We got the data immediately. StartLoadingColors(url, bytes, data); break; - case MoodbarLoader::WillLoadAsync: + case MoodbarLoader::Result::WillLoadAsync: // Maybe in a little while. QObject::connect(pipeline, &MoodbarPipeline::Finished, this, [this, url, pipeline]() { DataLoaded(url, pipeline); }); break; @@ -179,7 +179,7 @@ void MoodbarItemDelegate::ReloadAllColors() { for (const QUrl &url : data_.keys()) { Data *data = data_[url]; - if (data->state_ == Data::State_Loaded) { + if (data->state_ == Data::State::Loaded) { StartLoadingData(url, false, data); } } @@ -197,7 +197,7 @@ void MoodbarItemDelegate::DataLoaded(const QUrl &url, MoodbarPipeline *pipeline) } if (!pipeline->success()) { - data->state_ = Data::State_CannotLoad; + data->state_ = Data::State::CannotLoad; return; } @@ -208,7 +208,7 @@ void MoodbarItemDelegate::DataLoaded(const QUrl &url, MoodbarPipeline *pipeline) void MoodbarItemDelegate::StartLoadingColors(const QUrl &url, const QByteArray &bytes, Data *data) { - data->state_ = Data::State_LoadingColors; + data->state_ = Data::State::LoadingColors; QFuture future = QtConcurrent::run(MoodbarRenderer::Colors, bytes, style_, qApp->palette()); QFutureWatcher *watcher = new QFutureWatcher(); @@ -239,7 +239,7 @@ void MoodbarItemDelegate::ColorsLoaded(const QUrl &url, const ColorVector &color void MoodbarItemDelegate::StartLoadingImage(const QUrl &url, Data *data) { - data->state_ = Data::State_LoadingImage; + data->state_ = Data::State::LoadingImage; QFuture future = QtConcurrent::run(MoodbarRenderer::RenderToImage, data->colors_, data->desired_size_); QFutureWatcher *watcher = new QFutureWatcher(); @@ -269,7 +269,7 @@ void MoodbarItemDelegate::ImageLoaded(const QUrl &url, const QImage &image) { } data->pixmap_ = QPixmap::fromImage(image); - data->state_ = Data::State_Loaded; + data->state_ = Data::State::Loaded; Playlist *playlist = view_->playlist(); const PlaylistFilter *filter = playlist->filter(); diff --git a/src/moodbar/moodbaritemdelegate.h b/src/moodbar/moodbaritemdelegate.h index ef2186edc..5900c3fcf 100644 --- a/src/moodbar/moodbaritemdelegate.h +++ b/src/moodbar/moodbaritemdelegate.h @@ -58,13 +58,13 @@ class MoodbarItemDelegate : public QItemDelegate { struct Data { Data(); - enum State { - State_None, - State_CannotLoad, - State_LoadingData, - State_LoadingColors, - State_LoadingImage, - State_Loaded + enum class State { + None, + CannotLoad, + LoadingData, + LoadingColors, + LoadingImage, + Loaded }; QSet indexes_; diff --git a/src/moodbar/moodbarloader.cpp b/src/moodbar/moodbarloader.cpp index 63981e65a..e4dcfc74d 100644 --- a/src/moodbar/moodbarloader.cpp +++ b/src/moodbar/moodbarloader.cpp @@ -94,13 +94,13 @@ QStringList MoodbarLoader::MoodFilenames(const QString &song_filename) { MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, const bool has_cue, QByteArray *data, MoodbarPipeline **async_pipeline) { if (!url.isLocalFile() || has_cue) { - return CannotLoad; + return Result::CannotLoad; } // Are we in the middle of loading this moodbar already? if (requests_.contains(url)) { *async_pipeline = requests_[url]; - return WillLoadAsync; + return Result::WillLoadAsync; } // Check if a mood file exists for this file already @@ -113,7 +113,7 @@ MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, const bool has_cue, Q qLog(Info) << "Loading moodbar data from" << possible_mood_file; *data = f.readAll(); f.close(); - return Loaded; + return Result::Loaded; } else { qLog(Error) << "Failed to load moodbar data from" << possible_mood_file << f.errorString(); @@ -127,7 +127,7 @@ MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, const bool has_cue, Q qLog(Info) << "Loading cached moodbar data for" << filename; *data = cache_device->readAll(); if (!data->isEmpty()) { - return Loaded; + return Result::Loaded; } } @@ -144,7 +144,7 @@ MoodbarLoader::Result MoodbarLoader::Load(const QUrl &url, const bool has_cue, Q MaybeTakeNextRequest(); *async_pipeline = pipeline; - return WillLoadAsync; + return Result::WillLoadAsync; } diff --git a/src/moodbar/moodbarloader.h b/src/moodbar/moodbarloader.h index fb13f185e..24abb45a2 100644 --- a/src/moodbar/moodbarloader.h +++ b/src/moodbar/moodbarloader.h @@ -39,7 +39,7 @@ class MoodbarLoader : public QObject { explicit MoodbarLoader(Application *app, QObject *parent = nullptr); ~MoodbarLoader() override; - enum Result { + enum class Result { // The URL isn't a local file or the moodbar plugin was not available - // moodbar data can never be loaded. CannotLoad, diff --git a/src/moodbar/moodbarpipeline.cpp b/src/moodbar/moodbarpipeline.cpp index 5d3de4d65..044056e43 100644 --- a/src/moodbar/moodbarpipeline.cpp +++ b/src/moodbar/moodbarpipeline.cpp @@ -78,7 +78,7 @@ void MoodbarPipeline::Start() { Q_ASSERT(QThread::currentThread() != qApp->thread()); - Utilities::SetThreadIOPriority(Utilities::IOPRIO_CLASS_IDLE); + Utilities::SetThreadIOPriority(Utilities::IoPriority::IOPRIO_CLASS_IDLE); if (pipeline_) { return; diff --git a/src/moodbar/moodbarproxystyle.cpp b/src/moodbar/moodbarproxystyle.cpp index 83d5eaf5d..f16a47974 100644 --- a/src/moodbar/moodbarproxystyle.cpp +++ b/src/moodbar/moodbarproxystyle.cpp @@ -52,8 +52,8 @@ MoodbarProxyStyle::MoodbarProxyStyle(Application *app, QSlider *slider, QObject* app_(app), slider_(slider), enabled_(true), - moodbar_style_(MoodbarRenderer::Style_Normal), - state_(MoodbarOff), + moodbar_style_(MoodbarRenderer::MoodbarStyle::Normal), + state_(State::MoodbarOff), fade_timeline_(new QTimeLine(1000, this)), moodbar_colors_dirty_(true), moodbar_pixmap_dirty_(true), @@ -82,7 +82,7 @@ void MoodbarProxyStyle::ReloadSettings() { NextState(); // Get the style, and redraw if there's a change. - MoodbarRenderer::MoodbarStyle new_style = static_cast(s.value("style", MoodbarRenderer::Style_Normal).toInt()); + const MoodbarRenderer::MoodbarStyle new_style = static_cast(s.value("style", static_cast(MoodbarRenderer::MoodbarStyle::Normal)).toInt()); s.endGroup(); @@ -129,13 +129,13 @@ void MoodbarProxyStyle::NextState() { show_moodbar_action_->setChecked(enabled_); } - if ((visible && (state_ == MoodbarOn || state_ == FadingToOn)) || (!visible && (state_ == MoodbarOff || state_ == FadingToOff))) { + if ((visible && (state_ == State::MoodbarOn || state_ == State::FadingToOn)) || (!visible && (state_ == State::MoodbarOff || state_ == State::FadingToOff))) { return; } const QTimeLine::Direction direction = visible ? QTimeLine::Forward : QTimeLine::Backward; - if (state_ == MoodbarOn || state_ == MoodbarOff) { + if (state_ == State::MoodbarOn || state_ == State::MoodbarOff) { // Start the fade from the beginning. fade_timeline_->setDirection(direction); fade_timeline_->start(); @@ -151,7 +151,7 @@ void MoodbarProxyStyle::NextState() { fade_timeline_->resume(); } - state_ = visible ? FadingToOn : FadingToOff; + state_ = visible ? State::FadingToOn : State::FadingToOff; } @@ -198,16 +198,16 @@ void MoodbarProxyStyle::Render(ComplexControl control, const QStyleOptionSlider const qreal fade_value = fade_timeline_->currentValue(); // Have we finished fading? - if (state_ == FadingToOn && fade_value == 1.0) { - state_ = MoodbarOn; + if (state_ == State::FadingToOn && fade_value == 1.0) { + state_ = State::MoodbarOn; } - else if (state_ == FadingToOff && fade_value == 0.0) { - state_ = MoodbarOff; + else if (state_ == State::FadingToOff && fade_value == 0.0) { + state_ = State::MoodbarOff; } switch (state_) { - case FadingToOn: - case FadingToOff: + case State::FadingToOn: + case State::FadingToOff: // Update the cached pixmaps if necessary if (fade_source_.isNull()) { // Draw the normal slider into the fade source pixmap. @@ -224,7 +224,7 @@ void MoodbarProxyStyle::Render(ComplexControl control, const QStyleOptionSlider } if (fade_target_.isNull()) { - if (state_ == FadingToOn) { + if (state_ == State::FadingToOn) { EnsureMoodbarRendered(option); } fade_target_ = moodbar_pixmap_; @@ -240,12 +240,12 @@ void MoodbarProxyStyle::Render(ComplexControl control, const QStyleOptionSlider painter->setOpacity(1.0); break; - case MoodbarOff: + case State::MoodbarOff: // It's a normal slider widget. QProxyStyle::drawComplexControl(control, option, painter, widget); break; - case MoodbarOn: + case State::MoodbarOn: EnsureMoodbarRendered(option); painter->drawPixmap(option->rect, moodbar_pixmap_); DrawArrow(option, painter); @@ -276,12 +276,12 @@ QRect MoodbarProxyStyle::subControlRect(ComplexControl cc, const QStyleOptionCom } switch (state_) { - case MoodbarOff: - case FadingToOff: + case State::MoodbarOff: + case State::FadingToOff: break; - case MoodbarOn: - case FadingToOn: + case State::MoodbarOn: + case State::FadingToOn: switch (sc) { case SC_SliderGroove: return opt->rect.adjusted(kMarginSize, kMarginSize, -kMarginSize, -kMarginSize); @@ -376,7 +376,7 @@ void MoodbarProxyStyle::ShowContextMenu(const QPoint pos) { QMenu *styles_menu = context_menu_->addMenu(tr("Moodbar style")); style_action_group_ = new QActionGroup(styles_menu); - for (int i = 0; i < MoodbarRenderer::StyleCount; ++i) { + for (int i = 0; i < static_cast(MoodbarRenderer::MoodbarStyle::StyleCount); ++i) { const MoodbarRenderer::MoodbarStyle style = static_cast(i); QAction *action = style_action_group_->addAction(MoodbarRenderer::StyleName(style)); diff --git a/src/moodbar/moodbarproxystyle.h b/src/moodbar/moodbarproxystyle.h index 010eda232..5fff61f5c 100644 --- a/src/moodbar/moodbarproxystyle.h +++ b/src/moodbar/moodbarproxystyle.h @@ -70,7 +70,12 @@ class MoodbarProxyStyle : public QProxyStyle { static const int kArrowWidth; static const int kArrowHeight; - enum State { MoodbarOn, MoodbarOff, FadingToOn, FadingToOff }; + enum class State { + MoodbarOn, + MoodbarOff, + FadingToOn, + FadingToOff + }; private: void NextState(); diff --git a/src/moodbar/moodbarrenderer.cpp b/src/moodbar/moodbarrenderer.cpp index d585bab47..e5173bbe4 100644 --- a/src/moodbar/moodbarrenderer.cpp +++ b/src/moodbar/moodbarrenderer.cpp @@ -37,19 +37,19 @@ ColorVector MoodbarRenderer::Colors(const QByteArray &data, const MoodbarStyle s // Set some parameters based on the moodbar style StyleProperties properties; switch (style) { - case Style_Angry: + case MoodbarStyle::Angry: properties = StyleProperties(samples / 360 * 9, 45, -45, 200, 100); break; - case Style_Frozen: + case MoodbarStyle::Frozen: properties = StyleProperties(samples / 360 * 1, 140, 160, 50, 100); break; - case Style_Happy: + case MoodbarStyle::Happy: properties = StyleProperties(samples / 360 * 2, 0, 359, 150, 250); break; - case Style_Normal: + case MoodbarStyle::Normal: properties = StyleProperties(samples / 360 * 3, 0, 359, 100, 100); break; - case Style_SystemPalette: + case MoodbarStyle::SystemPalette: default: { const QColor highlight_color(palette.color(QPalette::Active, QPalette::Highlight)); @@ -163,15 +163,15 @@ QImage MoodbarRenderer::RenderToImage(const ColorVector &colors, const QSize siz QString MoodbarRenderer::StyleName(const MoodbarStyle style) { switch (style) { - case Style_Normal: + case MoodbarStyle::Normal: return QObject::tr("Normal"); - case Style_Angry: + case MoodbarStyle::Angry: return QObject::tr("Angry"); - case Style_Frozen: + case MoodbarStyle::Frozen: return QObject::tr("Frozen"); - case Style_Happy: + case MoodbarStyle::Happy: return QObject::tr("Happy"); - case Style_SystemPalette: + case MoodbarStyle::SystemPalette: return QObject::tr("System colors"); default: diff --git a/src/moodbar/moodbarrenderer.h b/src/moodbar/moodbarrenderer.h index d5455cd19..09880542e 100644 --- a/src/moodbar/moodbarrenderer.h +++ b/src/moodbar/moodbarrenderer.h @@ -36,12 +36,12 @@ using ColorVector = QVector; class MoodbarRenderer { public: // These values are persisted. Remember to change moodbarsettingspage.ui when changing them. - enum MoodbarStyle { - Style_Normal = 0, - Style_Angry, - Style_Frozen, - Style_Happy, - Style_SystemPalette, + enum class MoodbarStyle { + Normal = 0, + Angry, + Frozen, + Happy, + SystemPalette, StyleCount }; diff --git a/src/musicbrainz/musicbrainzclient.cpp b/src/musicbrainz/musicbrainzclient.cpp index 9062fd69b..aa77a0bd4 100644 --- a/src/musicbrainz/musicbrainzclient.cpp +++ b/src/musicbrainz/musicbrainzclient.cpp @@ -230,7 +230,7 @@ void MusicBrainzClient::RequestFinished(QNetworkReply *reply, const int id, cons for (const PendingResults &result_list : result_list_list) { ret << result_list.results_; } - emit Finished(id, UniqueResults(ret, KeepOriginalOrder), error); + emit Finished(id, UniqueResults(ret, UniqueResultsSortOption::KeepOriginalOrder), error); } } @@ -312,7 +312,7 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString &discid, QNetworkRep } } - emit DiscIdFinished(artist, album, UniqueResults(ret, SortResults)); + emit DiscIdFinished(artist, album, UniqueResults(ret, UniqueResultsSortOption::SortResults)); } @@ -492,7 +492,7 @@ MusicBrainzClient::Release MusicBrainzClient::ParseRelease(QXmlStreamReader *rea MusicBrainzClient::ResultList MusicBrainzClient::UniqueResults(const ResultList &results, UniqueResultsSortOption opt) { ResultList ret; - if (opt == SortResults) { + if (opt == UniqueResultsSortOption::SortResults) { #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) ret = QSet(results.begin(), results.end()).values(); #else diff --git a/src/musicbrainz/musicbrainzclient.h b/src/musicbrainz/musicbrainzclient.h index 117788532..ce0598947 100644 --- a/src/musicbrainz/musicbrainzclient.h +++ b/src/musicbrainz/musicbrainzclient.h @@ -124,22 +124,22 @@ class MusicBrainzClient : public QObject { }; // Used as parameter for UniqueResults - enum UniqueResultsSortOption { + enum class UniqueResultsSortOption { SortResults = 0, KeepOriginalOrder }; struct Release { - enum Status { - Status_Unknown = 0, - Status_PseudoRelease, - Status_Bootleg, - Status_Promotional, - Status_Official + enum class Status { + Unknown = 0, + PseudoRelease, + Bootleg, + Promotional, + Official }; - Release() : track_(0), year_(0), status_(Status_Unknown) {} + Release() : track_(0), year_(0), status_(Status::Unknown) {} Result CopyAndMergeInto(const Result &orig) const { Result ret(orig); @@ -151,19 +151,19 @@ class MusicBrainzClient : public QObject { void SetStatusFromString(const QString &s) { if (s.compare("Official", Qt::CaseInsensitive) == 0) { - status_ = Status_Official; + status_ = Status::Official; } else if (s.compare("Promotion", Qt::CaseInsensitive) == 0) { - status_ = Status_Promotional; + status_ = Status::Promotional; } else if (s.compare("Bootleg", Qt::CaseInsensitive) == 0) { - status_ = Status_Bootleg; + status_ = Status::Bootleg; } else if (s.compare("Pseudo-release", Qt::CaseInsensitive) == 0) { - status_ = Status_PseudoRelease; + status_ = Status::PseudoRelease; } else { - status_ = Status_Unknown; + status_ = Status::Unknown; } } @@ -196,7 +196,7 @@ class MusicBrainzClient : public QObject { static ResultList ParseTrack(QXmlStreamReader *reader); static void ParseArtist(QXmlStreamReader *reader, QString *artist); static Release ParseRelease(QXmlStreamReader *reader); - static ResultList UniqueResults(const ResultList &results, UniqueResultsSortOption opt = SortResults); + static ResultList UniqueResults(const ResultList &results, UniqueResultsSortOption opt = UniqueResultsSortOption::SortResults); static void Error(const QString &error, const QVariant &debug = QVariant()); private: diff --git a/src/organize/organize.cpp b/src/organize/organize.cpp index 0e8400e62..c47b260e3 100644 --- a/src/organize/organize.cpp +++ b/src/organize/organize.cpp @@ -193,7 +193,7 @@ void Organize::ProcessSomeFiles() { else { // Figure out if we need to transcode it Song::FileType dest_type = CheckTranscode(song.filetype()); - if (dest_type != Song::FileType_Unknown) { + if (dest_type != Song::FileType::Unknown) { // Get the preset TranscoderPreset preset = Transcoder::PresetForFileType(dest_type); qLog(Debug) << "Transcoding with" << preset.name_; @@ -238,7 +238,7 @@ void Organize::ProcessSomeFiles() { job.cover_source_ = task.song_info_.song_.art_automatic().path(); } } - else if (destination_->source() == Song::Source_Device) { + else if (destination_->source() == Song::Source::Device) { job.cover_image_ = TagReaderClient::Instance()->LoadEmbeddedArtAsImageBlocking(task.song_info_.song_.url().toLocalFile()); } @@ -249,7 +249,7 @@ void Organize::ProcessSomeFiles() { job.progress_ = std::bind(&Organize::SetSongProgress, this, std::placeholders::_1, !task.transcoded_filename_.isEmpty()); if (destination_->CopyToStorage(job)) { - if (job.remove_original_ && (destination_->source() == Song::Source_Collection || destination_->source() == Song::Source_Device)) { + if (job.remove_original_ && (destination_->source() == Song::Source::Collection || destination_->source() == Song::Source::Device)) { // Notify other aspects of system that song has been invalidated QString root = destination_->LocalPath(); QFileInfo new_file = QFileInfo(root + "/" + task.song_info_.new_filename_); @@ -279,28 +279,28 @@ void Organize::ProcessSomeFiles() { #ifdef HAVE_GSTREAMER Song::FileType Organize::CheckTranscode(Song::FileType original_type) const { - if (original_type == Song::FileType_Stream) return Song::FileType_Unknown; + if (original_type == Song::FileType::Stream) return Song::FileType::Unknown; const MusicStorage::TranscodeMode mode = destination_->GetTranscodeMode(); const Song::FileType format = destination_->GetTranscodeFormat(); switch (mode) { - case MusicStorage::Transcode_Never: - return Song::FileType_Unknown; + case MusicStorage::TranscodeMode::Transcode_Never: + return Song::FileType::Unknown; - case MusicStorage::Transcode_Always: - if (original_type == format) return Song::FileType_Unknown; + case MusicStorage::TranscodeMode::Transcode_Always: + if (original_type == format) return Song::FileType::Unknown; return format; - case MusicStorage::Transcode_Unsupported: - if (supported_filetypes_.isEmpty() || supported_filetypes_.contains(original_type)) return Song::FileType_Unknown; + case MusicStorage::TranscodeMode::Transcode_Unsupported: + if (supported_filetypes_.isEmpty() || supported_filetypes_.contains(original_type)) return Song::FileType::Unknown; - if (format != Song::FileType_Unknown) return format; + if (format != Song::FileType::Unknown) return format; // The user hasn't visited the device properties page yet to set a preferred format for the device, so we have to pick the best available one. return Transcoder::PickBestFormat(supported_filetypes_); } - return Song::FileType_Unknown; + return Song::FileType::Unknown; } #endif diff --git a/src/organize/organizedialog.cpp b/src/organize/organizedialog.cpp index b1cc34886..3008ca114 100644 --- a/src/organize/organizedialog.cpp +++ b/src/organize/organizedialog.cpp @@ -522,7 +522,7 @@ void OrganizeDialog::UpdatePreviews() { if (ok) { QString extension; #ifdef HAVE_GSTREAMER - if (storage && storage->GetTranscodeMode() == MusicStorage::Transcode_Always) { + if (storage && storage->GetTranscodeMode() == MusicStorage::TranscodeMode::Transcode_Always) { const Song::FileType format = storage->GetTranscodeFormat(); TranscoderPreset preset = Transcoder::PresetForFileType(format); extension = preset.extension_; @@ -565,7 +565,7 @@ void OrganizeDialog::OrganizeFinished(const QStringList &files_with_errors, cons if (files_with_errors.isEmpty()) return; error_dialog_ = std::make_unique(); - error_dialog_->Show(OrganizeErrorDialog::Type_Copy, files_with_errors, log); + error_dialog_->Show(OrganizeErrorDialog::OperationType::Copy, files_with_errors, log); } diff --git a/src/organize/organizeerrordialog.cpp b/src/organize/organizeerrordialog.cpp index 647742dc7..03651c7f5 100644 --- a/src/organize/organizeerrordialog.cpp +++ b/src/organize/organizeerrordialog.cpp @@ -50,29 +50,29 @@ OrganizeErrorDialog::~OrganizeErrorDialog() { delete ui_; } -void OrganizeErrorDialog::Show(OperationType type, const SongList &songs_with_errors, const QStringList &log) { +void OrganizeErrorDialog::Show(const OperationType operation_type, const SongList &songs_with_errors, const QStringList &log) { QStringList files; files.reserve(songs_with_errors.count()); for (const Song &song : songs_with_errors) { files << song.url().toLocalFile(); } - Show(type, files, log); + Show(operation_type, files, log); } -void OrganizeErrorDialog::Show(OperationType type, const QStringList &files_with_errors, const QStringList &log) { +void OrganizeErrorDialog::Show(const OperationType operation_type, const QStringList &files_with_errors, const QStringList &log) { QStringList sorted_files = files_with_errors; std::stable_sort(sorted_files.begin(), sorted_files.end()); - switch (type) { - case Type_Copy: + switch (operation_type) { + case OperationType::Copy: setWindowTitle(tr("Error copying songs")); ui_->label->setText(tr("There were problems copying some songs. The following files could not be copied:")); break; - case Type_Delete: + case OperationType::Delete: setWindowTitle(tr("Error deleting songs")); ui_->label->setText(tr("There were problems deleting some songs. The following files could not be deleted:")); break; @@ -82,4 +82,5 @@ void OrganizeErrorDialog::Show(OperationType type, const QStringList &files_with ui_->log->addItems(log); show(); + } diff --git a/src/organize/organizeerrordialog.h b/src/organize/organizeerrordialog.h index 2a2e02082..87d97ada1 100644 --- a/src/organize/organizeerrordialog.h +++ b/src/organize/organizeerrordialog.h @@ -41,13 +41,13 @@ class OrganizeErrorDialog : public QDialog { explicit OrganizeErrorDialog(QWidget *parent = nullptr); ~OrganizeErrorDialog() override; - enum OperationType { - Type_Copy, - Type_Delete, + enum class OperationType { + Copy, + Delete }; - void Show(OperationType type, const SongList &songs_with_errors, const QStringList &log = QStringList()); - void Show(OperationType type, const QStringList &files_with_errors, const QStringList &log = QStringList()); + void Show(const OperationType operation_type, const SongList &songs_with_errors, const QStringList &log = QStringList()); + void Show(const OperationType operation_type, const QStringList &files_with_errors, const QStringList &log = QStringList()); private: Ui_OrganizeErrorDialog *ui_; diff --git a/src/osd/osdbase.cpp b/src/osd/osdbase.cpp index 66dcd4be7..6afcbe324 100644 --- a/src/osd/osdbase.cpp +++ b/src/osd/osdbase.cpp @@ -47,10 +47,10 @@ OSDBase::OSDBase(std::shared_ptr tray_icon, Application *app, QO : QObject(parent), app_(app), tray_icon_(tray_icon), - pretty_popup_(new OSDPretty(OSDPretty::Mode_Popup)), + pretty_popup_(new OSDPretty(OSDPretty::Mode::Popup)), app_name_(QCoreApplication::applicationName()), timeout_msec_(5000), - behaviour_(Native), + behaviour_(Behaviour::Native), show_on_volume_change_(false), show_art_(true), show_on_play_mode_change_(true), @@ -75,7 +75,7 @@ void OSDBase::ReloadSettings() { QSettings s; s.beginGroup(kSettingsGroup); - behaviour_ = OSDBase::Behaviour(s.value("Behaviour", Native).toInt()); + behaviour_ = static_cast(s.value("Behaviour", static_cast(Behaviour::Native)).toInt()); timeout_msec_ = s.value("Timeout", 5000).toInt(); show_on_volume_change_ = s.value("ShowOnVolumeChange", false).toBool(); show_art_ = s.value("ShowArt", true).toBool(); @@ -88,15 +88,15 @@ void OSDBase::ReloadSettings() { s.endGroup(); #ifdef Q_OS_WIN32 - if (!SupportsNativeNotifications() && !SupportsTrayPopups() && behaviour_ == Native) { + if (!SupportsNativeNotifications() && !SupportsTrayPopups() && behaviour_ == Behaviour::Native) { #else - if (!SupportsNativeNotifications() && behaviour_ == Native) { + if (!SupportsNativeNotifications() && behaviour_ == Behaviour::Native) { #endif - behaviour_ = Pretty; + behaviour_ = Behaviour::Pretty; } - if (!SupportsTrayPopups() && behaviour_ == TrayPopup) { - behaviour_ = Disabled; + if (!SupportsTrayPopups() && behaviour_ == Behaviour::TrayPopup) { + behaviour_ = Behaviour::Disabled; } ReloadPrettyOSDSettings(); @@ -139,8 +139,8 @@ void OSDBase::ShowPlaying(const Song &song, const QUrl &cover_url, const QImage QString summary; bool html_escaped = false; if (use_custom_text_) { - summary = ReplaceMessage(Type_Summary, custom_text1_, song); - message_parts << ReplaceMessage(Type_Message, custom_text2_, song); + summary = ReplaceMessage(MessageType::Summary, custom_text1_, song); + message_parts << ReplaceMessage(MessageType::Message, custom_text2_, song); } else { summary = song.PrettyTitle(); @@ -156,12 +156,12 @@ void OSDBase::ShowPlaying(const Song &song, const QUrl &cover_url, const QImage if (song.track() > 0) { message_parts << tr("track %1").arg(song.track()); } - if (behaviour_ == Pretty) { + if (behaviour_ == Behaviour::Pretty) { summary = summary.toHtmlEscaped(); html_escaped = true; } #if defined(HAVE_DBUS) && !defined(Q_OS_MACOS) - else if (behaviour_ == Native) { + else if (behaviour_ == Behaviour::Native) { html_escaped = true; } #endif @@ -194,7 +194,7 @@ void OSDBase::Paused() { if (show_on_pause_) { QString summary; if (use_custom_text_) { - summary = ReplaceMessage(Type_Summary, custom_text1_, last_song_); + summary = ReplaceMessage(MessageType::Summary, custom_text1_, last_song_); } else { summary = last_song_.PrettyTitle(); @@ -202,7 +202,7 @@ void OSDBase::Paused() { summary.prepend(" - "); summary.prepend(last_song_.artist()); } - if (behaviour_ == Pretty) { + if (behaviour_ == Behaviour::Pretty) { summary = summary.toHtmlEscaped(); } } @@ -239,7 +239,7 @@ void OSDBase::Stopped() { QString summary; if (use_custom_text_) { - summary = ReplaceMessage(Type_Summary, custom_text1_, last_song_); + summary = ReplaceMessage(MessageType::Summary, custom_text1_, last_song_); } else { summary = last_song_.PrettyTitle(); @@ -247,7 +247,7 @@ void OSDBase::Stopped() { summary.prepend(" - "); summary.prepend(last_song_.artist()); } - if (behaviour_ == Pretty) { + if (behaviour_ == Behaviour::Pretty) { summary = summary.toHtmlEscaped(); } } @@ -283,11 +283,11 @@ void OSDBase::VolumeChanged(const uint value) { if (!show_on_volume_change_) return; QString message = tr("Volume %1%").arg(value); - if (behaviour_ == Pretty) { + if (behaviour_ == Behaviour::Pretty) { message = message.toHtmlEscaped(); } #if defined(HAVE_DBUS) && !defined(Q_OS_MACOS) - else if (behaviour_ == Native) { + else if (behaviour_ == Behaviour::Native) { message = message.toHtmlEscaped(); } #endif @@ -303,7 +303,7 @@ void OSDBase::ShowMessage(const QString &summary, const QString &message, const } else { switch (behaviour_) { - case Native: + case Behaviour::Native: #ifdef Q_OS_WIN32 Q_UNUSED(icon) [[fallthrough]]; @@ -316,18 +316,18 @@ void OSDBase::ShowMessage(const QString &summary, const QString &message, const } break; #endif - case TrayPopup: + case Behaviour::TrayPopup: #ifdef Q_OS_MACOS [[fallthrough]]; #else if (tray_icon_) tray_icon_->ShowPopup(summary, message, timeout_msec_); break; #endif - case Disabled: + case Behaviour::Disabled: if (!force_show_next_) break; force_show_next_ = false; [[fallthrough]]; - case Pretty: + case Behaviour::Pretty: pretty_popup_->ShowMessage(summary, message, image); break; @@ -343,10 +343,10 @@ void OSDBase::ShuffleModeChanged(const PlaylistSequence::ShuffleMode mode) { if (show_on_play_mode_change_) { QString current_mode = QString(); switch (mode) { - case PlaylistSequence::Shuffle_Off: current_mode = tr("Don't shuffle"); break; - case PlaylistSequence::Shuffle_All: current_mode = tr("Shuffle all"); break; - case PlaylistSequence::Shuffle_InsideAlbum: current_mode = tr("Shuffle tracks in this album"); break; - case PlaylistSequence::Shuffle_Albums: current_mode = tr("Shuffle albums"); break; + case PlaylistSequence::ShuffleMode::Off: current_mode = tr("Don't shuffle"); break; + case PlaylistSequence::ShuffleMode::All: current_mode = tr("Shuffle all"); break; + case PlaylistSequence::ShuffleMode::InsideAlbum: current_mode = tr("Shuffle tracks in this album"); break; + case PlaylistSequence::ShuffleMode::Albums: current_mode = tr("Shuffle albums"); break; } ShowMessage(app_name_, current_mode); } @@ -358,12 +358,12 @@ void OSDBase::RepeatModeChanged(const PlaylistSequence::RepeatMode mode) { if (show_on_play_mode_change_) { QString current_mode = QString(); switch (mode) { - case PlaylistSequence::Repeat_Off: current_mode = tr("Don't repeat"); break; - case PlaylistSequence::Repeat_Track: current_mode = tr("Repeat track"); break; - case PlaylistSequence::Repeat_Album: current_mode = tr("Repeat album"); break; - case PlaylistSequence::Repeat_Playlist: current_mode = tr("Repeat playlist"); break; - case PlaylistSequence::Repeat_OneByOne: current_mode = tr("Stop after every track"); break; - case PlaylistSequence::Repeat_Intro: current_mode = tr("Intro tracks"); break; + case PlaylistSequence::RepeatMode::Off: current_mode = tr("Don't repeat"); break; + case PlaylistSequence::RepeatMode::Track: current_mode = tr("Repeat track"); break; + case PlaylistSequence::RepeatMode::Album: current_mode = tr("Repeat album"); break; + case PlaylistSequence::RepeatMode::Playlist: current_mode = tr("Repeat playlist"); break; + case PlaylistSequence::RepeatMode::OneByOne: current_mode = tr("Stop after every track"); break; + case PlaylistSequence::RepeatMode::Intro: current_mode = tr("Intro tracks"); break; } ShowMessage(app_name_, current_mode); } @@ -381,19 +381,19 @@ QString OSDBase::ReplaceMessage(const MessageType type, const QString &message, // We need different strings depending on notification type switch (behaviour_) { - case Native: + case Behaviour::Native: #if defined(Q_OS_MACOS) html_escaped = false; newline = "\n"; break; #elif defined(HAVE_DBUS) switch (type) { - case Type_Summary:{ + case MessageType::Summary:{ html_escaped = false; newline = ""; break; } - case Type_Message: { + case MessageType::Message: { html_escaped = true; newline = "
"; break; @@ -407,13 +407,13 @@ QString OSDBase::ReplaceMessage(const MessageType type, const QString &message, qLog(Debug) << "Native notifications are not supported on this OS."; break; #endif - case TrayPopup: + case Behaviour::TrayPopup: qLog(Debug) << "New line not supported by this notification type."; html_escaped = false; newline = ""; break; - case Disabled: // When notifications are disabled, we force the PrettyOSD - case Pretty: + case Behaviour::Disabled: // When notifications are disabled, we force the PrettyOSD + case Behaviour::Pretty: html_escaped = true; newline = "
"; break; diff --git a/src/osd/osdbase.h b/src/osd/osdbase.h index 0ded8f1bc..ac79da5a9 100644 --- a/src/osd/osdbase.h +++ b/src/osd/osdbase.h @@ -49,11 +49,11 @@ class OSDBase : public QObject { static const char *kSettingsGroup; - enum Behaviour { + enum class Behaviour { Disabled = 0, Native, TrayPopup, - Pretty, + Pretty }; int timeout_msec() const { return timeout_msec_; } @@ -83,9 +83,9 @@ class OSDBase : public QObject { void ShowPreview(const OSDBase::Behaviour type, const QString &line1, const QString &line2, const Song &song); private: - enum MessageType { - Type_Summary, - Type_Message, + enum class MessageType { + Summary, + Message }; void ShowPlaying(const Song &song, const QUrl &cover_url, const QImage &image, const bool preview = false); void ShowMessage(const QString &summary, const QString &message = QString(), const QString &icon = "strawberry", const QImage &image = QImage()); diff --git a/src/osd/osdpretty.cpp b/src/osd/osdpretty.cpp index 7c2424a07..934537900 100644 --- a/src/osd/osdpretty.cpp +++ b/src/osd/osdpretty.cpp @@ -112,11 +112,11 @@ OSDPretty::OSDPretty(Mode mode, QWidget *parent) // Mode settings switch (mode_) { - case Mode_Popup: + case Mode::Popup: setCursor(QCursor(Qt::ArrowCursor)); break; - case Mode_Draggable: + case Mode::Draggable: setCursor(QCursor(Qt::OpenHandCursor)); break; } @@ -189,7 +189,7 @@ void OSDPretty::showEvent(QShowEvent *e) { fader_->setDirection(QTimeLine::Forward); fader_->start(); // Timeout will be started in FaderFinished } - else if (mode_ == Mode_Popup) { + else if (mode_ == Mode::Popup) { if (!disable_duration()) { timeout_->start(); } @@ -363,7 +363,7 @@ void OSDPretty::ShowMessage(const QString &summary, const QString &message, cons SetMessage(summary, message, image); - if (isVisible() && mode_ == Mode_Popup) { + if (isVisible() && mode_ == Mode::Popup) { // The OSD is already visible, toggle or restart the timer if (toggle_mode()) { set_toggle_mode(false); @@ -406,7 +406,7 @@ void OSDPretty::FaderFinished() { if (fader_->direction() == QTimeLine::Backward) { hide(); } - else if (mode_ == Mode_Popup && !disable_duration()) { + else if (mode_ == Mode::Popup && !disable_duration()) { timeout_->start(); } @@ -465,7 +465,7 @@ void OSDPretty::enterEvent(QEnterEvent*) { #else void OSDPretty::enterEvent(QEvent*) { #endif - if (mode_ == Mode_Popup) { + if (mode_ == Mode::Popup) { setWindowOpacity(0.25); } @@ -477,7 +477,7 @@ void OSDPretty::leaveEvent(QEvent*) { void OSDPretty::mousePressEvent(QMouseEvent *e) { - if (mode_ == Mode_Popup) { + if (mode_ == Mode::Popup) { hide(); } else { @@ -493,7 +493,7 @@ void OSDPretty::mousePressEvent(QMouseEvent *e) { void OSDPretty::mouseMoveEvent(QMouseEvent *e) { - if (mode_ == Mode_Draggable) { + if (mode_ == Mode::Draggable) { #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QPoint delta = e->globalPosition().toPoint() - drag_start_pos_; #else @@ -530,7 +530,7 @@ void OSDPretty::mouseMoveEvent(QMouseEvent *e) { void OSDPretty::mouseReleaseEvent(QMouseEvent *) { - if (current_screen() && mode_ == Mode_Draggable) { + if (current_screen() && mode_ == Mode::Draggable) { popup_screen_ = current_screen(); popup_screen_name_ = current_screen()->name(); popup_pos_ = current_pos(); diff --git a/src/osd/osdpretty.h b/src/osd/osdpretty.h index 3eea02919..7226916ab 100644 --- a/src/osd/osdpretty.h +++ b/src/osd/osdpretty.h @@ -52,9 +52,9 @@ class OSDPretty : public QWidget { Q_OBJECT public: - enum Mode { - Mode_Popup, - Mode_Draggable, + enum class Mode { + Popup, + Draggable }; explicit OSDPretty(Mode mode, QWidget *parent = nullptr); diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index c31e9d0bb..4db91bc7a 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -171,7 +171,7 @@ Playlist::~Playlist() { template void Playlist::InsertSongItems(const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { - PlaylistItemList items; + PlaylistItemPtrList items; items.reserve(songs.count()); for (const Song &song : songs) { items << std::make_shared(song); @@ -315,7 +315,7 @@ QVariant Playlist::data(const QModelIndex &idx, int role) const { case Column_Filename: return song.effective_stream_url(); case Column_BaseFilename: return song.basefilename(); case Column_Filesize: return song.filesize(); - case Column_Filetype: return song.filetype(); + case Column_Filetype: return QVariant::fromValue(song.filetype()); case Column_DateModified: return song.mtime(); case Column_DateCreated: return song.ctime(); @@ -323,7 +323,7 @@ QVariant Playlist::data(const QModelIndex &idx, int role) const { if (role == Qt::DisplayRole) return song.comment().simplified(); return song.comment(); - case Column_Source: return song.source(); + case Column_Source: return QVariant::fromValue(song.source()); case Column_Rating: return song.rating(); @@ -451,7 +451,7 @@ void Playlist::ItemReloadComplete(const QPersistentModelIndex &idx, const Song & old_metadata.albumartist() == item->Metadata().albumartist() && old_metadata.artist() == item->Metadata().artist() && old_metadata.album() == item->Metadata().album(); - InformOfCurrentSongChange(AutoScroll_Never, minor); + InformOfCurrentSongChange(AutoScroll::Never, minor); } else { emit dataChanged(index(idx.row(), 0), index(idx.row(), ColumnCount - 1)); @@ -478,7 +478,7 @@ int Playlist::last_played_row() const { } void Playlist::ShuffleModeChanged(const PlaylistSequence::ShuffleMode mode) { - is_shuffled_ = (mode != PlaylistSequence::Shuffle_Off); + is_shuffled_ = (mode != PlaylistSequence::ShuffleMode::Off); ReshuffleIndices(); } @@ -492,10 +492,10 @@ int Playlist::NextVirtualIndex(int i, const bool ignore_repeat_track) const { PlaylistSequence::RepeatMode repeat_mode = playlist_sequence_->repeat_mode(); PlaylistSequence::ShuffleMode shuffle_mode = playlist_sequence_->shuffle_mode(); - bool album_only = repeat_mode == PlaylistSequence::Repeat_Album || shuffle_mode == PlaylistSequence::Shuffle_InsideAlbum; + bool album_only = repeat_mode == PlaylistSequence::RepeatMode::Album || shuffle_mode == PlaylistSequence::ShuffleMode::InsideAlbum; // This one's easy - if we have to repeat the current track then just return i - if (repeat_mode == PlaylistSequence::Repeat_Track && !ignore_repeat_track) { + if (repeat_mode == PlaylistSequence::RepeatMode::Track && !ignore_repeat_track) { if (!FilterContainsVirtualIndex(i)) { return static_cast(virtual_items_.count()); // It's not in the filter any more } @@ -537,10 +537,10 @@ int Playlist::PreviousVirtualIndex(int i, const bool ignore_repeat_track) const PlaylistSequence::RepeatMode repeat_mode = playlist_sequence_->repeat_mode(); PlaylistSequence::ShuffleMode shuffle_mode = playlist_sequence_->shuffle_mode(); - bool album_only = repeat_mode == PlaylistSequence::Repeat_Album || shuffle_mode == PlaylistSequence::Shuffle_InsideAlbum; + bool album_only = repeat_mode == PlaylistSequence::RepeatMode::Album || shuffle_mode == PlaylistSequence::ShuffleMode::InsideAlbum; // This one's easy - if we have to repeat the current track then just return i - if (repeat_mode == PlaylistSequence::Repeat_Track && !ignore_repeat_track) { + if (repeat_mode == PlaylistSequence::RepeatMode::Track && !ignore_repeat_track) { if (!FilterContainsVirtualIndex(i)) return -1; return i; } @@ -583,10 +583,10 @@ int Playlist::next_row(const bool ignore_repeat_track) const { // We've gone off the end of the playlist. switch (playlist_sequence_->repeat_mode()) { - case PlaylistSequence::Repeat_Off: - case PlaylistSequence::Repeat_Intro: + case PlaylistSequence::RepeatMode::Off: + case PlaylistSequence::RepeatMode::Intro: return -1; - case PlaylistSequence::Repeat_Track: + case PlaylistSequence::RepeatMode::Track: next_virtual_index = current_virtual_index_; break; @@ -611,9 +611,9 @@ int Playlist::previous_row(const bool ignore_repeat_track) const { // We've gone off the beginning of the playlist. switch (playlist_sequence_->repeat_mode()) { - case PlaylistSequence::Repeat_Off: + case PlaylistSequence::RepeatMode::Off: return -1; - case PlaylistSequence::Repeat_Track: + case PlaylistSequence::RepeatMode::Track: prev_virtual_index = current_virtual_index_; break; @@ -823,7 +823,7 @@ bool Playlist::dropMimeData(const QMimeData *data, Qt::DropAction action, int ro } else if (pid == own_pid) { // Drag from a different playlist - PlaylistItemList items; + PlaylistItemPtrList items; items.reserve(source_rows.count()); for (const int i : source_rows) items << source_playlist->item_at(i); @@ -888,7 +888,7 @@ void Playlist::InsertSmartPlaylist(PlaylistGeneratorPtr generator, const int pos void Playlist::TurnOnDynamicPlaylist(PlaylistGeneratorPtr gen) { dynamic_playlist_ = gen; - ShuffleModeChanged(PlaylistSequence::Shuffle_Off); + ShuffleModeChanged(PlaylistSequence::ShuffleMode::Off); emit DynamicModeChanged(true); ScheduleSave(); @@ -902,7 +902,7 @@ void Playlist::MoveItemWithoutUndo(const int source, const int dest) { void Playlist::MoveItemsWithoutUndo(const QList &source_rows, int pos) { emit layoutAboutToBeChanged(); - PlaylistItemList moved_items; + PlaylistItemPtrList moved_items; moved_items.reserve(source_rows.count()); if (pos < 0) { @@ -955,7 +955,7 @@ void Playlist::MoveItemsWithoutUndo(int start, const QList &dest_rows) { emit layoutAboutToBeChanged(); - PlaylistItemList moved_items; + PlaylistItemPtrList moved_items; moved_items.reserve(dest_rows.count()); int pos = start; @@ -1007,13 +1007,13 @@ void Playlist::MoveItemsWithoutUndo(int start, const QList &dest_rows) { } -void Playlist::InsertItems(const PlaylistItemList &itemsIn, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { +void Playlist::InsertItems(const PlaylistItemPtrList &itemsIn, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { if (itemsIn.isEmpty()) { return; } - PlaylistItemList items = itemsIn; + PlaylistItemPtrList items = itemsIn; // Exercise vetoes SongList songs; @@ -1064,11 +1064,11 @@ void Playlist::InsertItems(const PlaylistItemList &itemsIn, const int pos, const undo_stack_->push(new PlaylistUndoCommands::InsertItems(this, items, pos, enqueue, enqueue_next)); } - if (play_now) emit PlayRequested(index(start, 0), AutoScroll_Maybe); + if (play_now) emit PlayRequested(index(start, 0), AutoScroll::Maybe); } -void Playlist::InsertItemsWithoutUndo(const PlaylistItemList &items, const int pos, const bool enqueue, const bool enqueue_next) { +void Playlist::InsertItemsWithoutUndo(const PlaylistItemPtrList &items, const int pos, const bool enqueue, const bool enqueue_next) { if (items.isEmpty()) return; @@ -1081,7 +1081,7 @@ void Playlist::InsertItemsWithoutUndo(const PlaylistItemList &items, const int p items_.insert(i, item); virtual_items_ << static_cast(virtual_items_.count()); - if (item->source() == Song::Source_Collection) { + if (item->source() == Song::Source::Collection) { int id = item->Metadata().id(); if (id != -1) { collection_items_by_id_.insert(id, item); @@ -1133,7 +1133,7 @@ void Playlist::InsertSongs(const SongList &songs, const int pos, const bool play void Playlist::InsertSongsOrCollectionItems(const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { - PlaylistItemList items; + PlaylistItemPtrList items; for (const Song &song : songs) { if (song.url().isLocalFile()) { if (song.is_collection_song()) { @@ -1158,7 +1158,7 @@ void Playlist::InsertSongsOrCollectionItems(const SongList &songs, const int pos void Playlist::InsertInternetItems(InternetService *service, const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { - PlaylistItemList playlist_items; + PlaylistItemPtrList playlist_items; playlist_items.reserve(songs.count()); for (const Song &song : songs) { playlist_items << std::make_shared(service, song); @@ -1170,7 +1170,7 @@ void Playlist::InsertInternetItems(InternetService *service, const SongList &son void Playlist::InsertRadioItems(const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { - PlaylistItemList playlist_items; + PlaylistItemPtrList playlist_items; playlist_items.reserve(songs.count()); for (const Song &song : songs) { playlist_items << std::make_shared(song); @@ -1196,7 +1196,7 @@ void Playlist::UpdateItems(SongList songs) { while (it.hasNext()) { const Song &song = it.next(); const PlaylistItemPtr &item = items_[i]; - if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType_Unknown || item->Metadata().filetype() == Song::FileType_Stream || item->Metadata().filetype() == Song::FileType_CDDA || !item->Metadata().init_from_file())) { + if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType::Unknown || item->Metadata().filetype() == Song::FileType::Stream || item->Metadata().filetype() == Song::FileType::CDDA || !item->Metadata().init_from_file())) { PlaylistItemPtr new_item; if (song.url().isLocalFile()) { if (song.is_collection_song()) { @@ -1414,8 +1414,8 @@ void Playlist::sort(int column, Qt::SortOrder order) { if (ignore_sorting_) return; - PlaylistItemList new_items(items_); - PlaylistItemList::iterator begin = new_items.begin(); + PlaylistItemPtrList new_items(items_); + PlaylistItemPtrList::iterator begin = new_items.begin(); if (dynamic_playlist_ && current_item_index_.isValid()) begin += current_item_index_.row() + 1; @@ -1441,11 +1441,11 @@ void Playlist::sort(int column, Qt::SortOrder order) { } -void Playlist::ReOrderWithoutUndo(const PlaylistItemList &new_items) { +void Playlist::ReOrderWithoutUndo(const PlaylistItemPtrList &new_items) { emit layoutAboutToBeChanged(); - PlaylistItemList old_items = items_; + PlaylistItemPtrList old_items = items_; items_ = new_items; QHash new_rows; @@ -1521,20 +1521,20 @@ void Playlist::Restore() { cancel_restore_ = false; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QFuture future = QtConcurrent::run(&PlaylistBackend::GetPlaylistItems, backend_, id_); + QFuture future = QtConcurrent::run(&PlaylistBackend::GetPlaylistItems, backend_, id_); #else - QFuture future = QtConcurrent::run(backend_, &PlaylistBackend::GetPlaylistItems, id_); + QFuture future = QtConcurrent::run(backend_, &PlaylistBackend::GetPlaylistItems, id_); #endif - QFutureWatcher *watcher = new QFutureWatcher(); - QObject::connect(watcher, &QFutureWatcher::finished, this, &Playlist::ItemsLoaded); + QFutureWatcher *watcher = new QFutureWatcher(); + QObject::connect(watcher, &QFutureWatcher::finished, this, &Playlist::ItemsLoaded); watcher->setFuture(future); } void Playlist::ItemsLoaded() { - QFutureWatcher *watcher = static_cast*>(sender()); - PlaylistItemList items = watcher->result(); + QFutureWatcher *watcher = static_cast*>(sender()); + PlaylistItemPtrList items = watcher->result(); watcher->deleteLater(); if (cancel_restore_) return; @@ -1558,7 +1558,7 @@ void Playlist::ItemsLoaded() { // The newly loaded list of items might be shorter than it was before so look out for a bad last_played index last_played_item_index_ = p.last_played == -1 || p.last_played >= rowCount() ? QModelIndex() : index(p.last_played); - if (p.dynamic_type == PlaylistGenerator::Type_Query) { + if (p.dynamic_type == PlaylistGenerator::Type::Query) { PlaylistGeneratorPtr gen = PlaylistGenerator::Create(p.dynamic_type); if (gen) { @@ -1667,21 +1667,21 @@ bool Playlist::removeRows(QList &rows) { } -PlaylistItemList Playlist::RemoveItemsWithoutUndo(const int row, const int count) { +PlaylistItemPtrList Playlist::RemoveItemsWithoutUndo(const int row, const int count) { if (row < 0 || row >= items_.size() || row + count > items_.size()) { - return PlaylistItemList(); + return PlaylistItemPtrList(); } beginRemoveRows(QModelIndex(), row, row + count - 1); // Remove items - PlaylistItemList ret; + PlaylistItemPtrList ret; ret.reserve(count); for (int i = 0; i < count; ++i) { PlaylistItemPtr item(items_.takeAt(row)); ret << item; - if (item->source() == Song::Source_Collection) { + if (item->source() == Song::Source::Collection) { int id = item->Metadata().id(); if (id != -1 && collection_items_by_id_.contains(id, item)) { collection_items_by_id_.remove(id, item); @@ -1747,7 +1747,7 @@ void Playlist::SetStreamMetadata(const QUrl &url, const Song &song, const bool m bool update_scrobble_point = song.length_nanosec() != current_item_metadata().length_nanosec(); current_item()->SetTemporaryMetadata(song); if (update_scrobble_point) UpdateScrobblePoint(); - InformOfCurrentSongChange(AutoScroll_Never, minor); + InformOfCurrentSongChange(AutoScroll::Never, minor); } @@ -1765,7 +1765,7 @@ void Playlist::ClearStreamMetadata() { bool Playlist::stop_after_current() const { PlaylistSequence::RepeatMode repeat_mode = playlist_sequence_->repeat_mode(); - if (repeat_mode == PlaylistSequence::Repeat_OneByOne) { + if (repeat_mode == PlaylistSequence::RepeatMode::OneByOne) { return true; } @@ -1785,7 +1785,7 @@ PlaylistItemPtr Playlist::current_item() const { } PlaylistItem::Options Playlist::current_item_options() const { - if (!current_item()) return PlaylistItem::Default; + if (!current_item()) return PlaylistItem::Option::Default; return current_item()->options(); } @@ -1903,7 +1903,7 @@ void Playlist::SongInsertVetoListenerDestroyed() { void Playlist::Shuffle() { - PlaylistItemList new_items(items_); + PlaylistItemPtrList new_items(items_); int begin = 0; if (current_item_index_.isValid()) { @@ -1948,7 +1948,7 @@ void Playlist::ReshuffleIndices() { return; } - if (playlist_sequence_->shuffle_mode() == PlaylistSequence::Shuffle_Off) { + if (playlist_sequence_->shuffle_mode() == PlaylistSequence::ShuffleMode::Off) { // No shuffling - sort the virtual item list normally. std::sort(virtual_items_.begin(), virtual_items_.end()); if (current_row() != -1) { @@ -1968,16 +1968,16 @@ void Playlist::ReshuffleIndices() { std::mt19937 g(rd()); switch (playlist_sequence_->shuffle_mode()) { - case PlaylistSequence::Shuffle_Off: + case PlaylistSequence::ShuffleMode::Off: // Handled above. break; - case PlaylistSequence::Shuffle_All: - case PlaylistSequence::Shuffle_InsideAlbum: + case PlaylistSequence::ShuffleMode::All: + case PlaylistSequence::ShuffleMode::InsideAlbum: std::shuffle(begin, end, g); break; - case PlaylistSequence::Shuffle_Albums: { + case PlaylistSequence::ShuffleMode::Albums: { QMap album_keys; // real index -> key QSet album_key_set; // unique keys @@ -2040,7 +2040,7 @@ SongList Playlist::GetAllSongs() const { } -PlaylistItemList Playlist::GetAllItems() const { return items_; } +PlaylistItemPtrList Playlist::GetAllItems() const { return items_; } quint64 Playlist::GetTotalLength() const { @@ -2053,7 +2053,7 @@ quint64 Playlist::GetTotalLength() const { } -PlaylistItemList Playlist::collection_items_by_id(const int id) const { +PlaylistItemPtrList Playlist::collection_items_by_id(const int id) const { return collection_items_by_id_.values(id); } @@ -2258,7 +2258,7 @@ bool Playlist::ApplyValidityOnCurrentSong(const QUrl &url, const bool valid) { Song current_song = current->Metadata(); // If validity has changed, reload the item - if (current_song.source() == Song::Source_LocalFile || current_song.source() == Song::Source_Collection) { + if (current_song.source() == Song::Source::LocalFile || current_song.source() == Song::Source::Collection) { if (current_song.url() == url && current_song.url().isLocalFile() && current_song.is_valid() != QFile::exists(current_song.url().toLocalFile())) { ReloadItems(QList() << current_row()); } @@ -2319,7 +2319,7 @@ void Playlist::UpdateScrobblePoint(const qint64 seek_point_nanosec) { void Playlist::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result) { // Update art_manual for local songs that are not in the collection. - if (((result.type == AlbumCoverLoaderResult::Type_Manual && result.album_cover.cover_url.isLocalFile()) || result.type == AlbumCoverLoaderResult::Type_ManuallyUnset) && (song.source() == Song::Source_LocalFile || song.source() == Song::Source_CDDA || song.source() == Song::Source_Device)) { + if (((result.type == AlbumCoverLoaderResult::Type_Manual && result.album_cover.cover_url.isLocalFile()) || result.type == AlbumCoverLoaderResult::Type_ManuallyUnset) && (song.source() == Song::Source::LocalFile || song.source() == Song::Source::CDDA || song.source() == Song::Source::Device)) { PlaylistItemPtr item = current_item(); if (item && item->Metadata() == song && (!item->Metadata().art_manual_is_valid() || (result.type == AlbumCoverLoaderResult::Type_ManuallyUnset && !item->Metadata().has_manually_unset_cover()))) { qLog(Debug) << "Updating art manual for local song" << song.title() << song.album() << song.title() << "to" << result.album_cover.cover_url << "in playlist."; diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 01c6e6c47..05bb92c49 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -142,10 +142,10 @@ class Playlist : public QAbstractListModel { Role_CanSetRating, }; - enum AutoScroll { - AutoScroll_Never, - AutoScroll_Maybe, - AutoScroll_Always + enum class AutoScroll { + Never, + Maybe, + Always }; static const char *kCddaMimeType; @@ -211,10 +211,10 @@ class Playlist : public QAbstractListModel { PlaylistItem::Options current_item_options() const; Song current_item_metadata() const; - PlaylistItemList collection_items_by_id(const int id) const; + PlaylistItemPtrList collection_items_by_id(const int id) const; SongList GetAllSongs() const; - PlaylistItemList GetAllItems() const; + PlaylistItemPtrList GetAllItems() const; quint64 GetTotalLength() const; // in seconds void set_sequence(PlaylistSequence *v); @@ -229,7 +229,7 @@ class Playlist : public QAbstractListModel { void UpdateScrobblePoint(const qint64 seek_point_nanosec = 0); // Changing the playlist - void InsertItems(const PlaylistItemList &itemsIn, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false); + void InsertItems(const PlaylistItemPtrList &itemsIn, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false); void InsertCollectionItems(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false); void InsertSongs(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false); void InsertSongsOrCollectionItems(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false); @@ -293,7 +293,7 @@ class Playlist : public QAbstractListModel { void ItemReload(const QPersistentModelIndex &idx, const Song &old_metadata, const bool metadata_edit); public slots: - void set_current_row(const int i, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll_Maybe, const bool is_stopping = false, const bool force_inform = false); + void set_current_row(const int i, const Playlist::AutoScroll autoscroll = Playlist::AutoScroll::Maybe, const bool is_stopping = false, const bool force_inform = false); void Paused(); void Playing(); void Stopped(); @@ -350,12 +350,12 @@ class Playlist : public QAbstractListModel { void InsertSongItems(const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next = false); // Modify the playlist without changing the undo stack. These are used by our friends in PlaylistUndoCommands - void InsertItemsWithoutUndo(const PlaylistItemList &items, int pos, bool enqueue = false, bool enqueue_next = false); - PlaylistItemList RemoveItemsWithoutUndo(const int row, const int count); + void InsertItemsWithoutUndo(const PlaylistItemPtrList &items, int pos, bool enqueue = false, bool enqueue_next = false); + PlaylistItemPtrList RemoveItemsWithoutUndo(const int row, const int count); void MoveItemsWithoutUndo(const QList &source_rows, int pos); void MoveItemWithoutUndo(const int source, const int dest); void MoveItemsWithoutUndo(int start, const QList &dest_rows); - void ReOrderWithoutUndo(const PlaylistItemList &new_items); + void ReOrderWithoutUndo(const PlaylistItemPtrList &new_items); void RemoveItemsNotInQueue(); @@ -392,7 +392,7 @@ class Playlist : public QAbstractListModel { QString ui_path_; bool favorite_; - PlaylistItemList items_; + PlaylistItemPtrList items_; // Contains the indices into items_ in the order that they will be played. QList virtual_items_; diff --git a/src/playlist/playlistbackend.cpp b/src/playlist/playlistbackend.cpp index ba10b1829..c1a3f5c52 100644 --- a/src/playlist/playlistbackend.cpp +++ b/src/playlist/playlistbackend.cpp @@ -86,15 +86,15 @@ void PlaylistBackend::Exit() { } PlaylistBackend::PlaylistList PlaylistBackend::GetAllPlaylists() { - return GetPlaylists(GetPlaylists_All); + return GetPlaylists(GetPlaylistsFlags::GetPlaylists_All); } PlaylistBackend::PlaylistList PlaylistBackend::GetAllOpenPlaylists() { - return GetPlaylists(GetPlaylists_OpenInUi); + return GetPlaylists(GetPlaylistsFlags::GetPlaylists_OpenInUi); } PlaylistBackend::PlaylistList PlaylistBackend::GetAllFavoritePlaylists() { - return GetPlaylists(GetPlaylists_Favorite); + return GetPlaylists(GetPlaylistsFlags::GetPlaylists_Favorite); } PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFlags flags) { @@ -105,10 +105,10 @@ PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFl PlaylistList ret; QStringList condition_list; - if (flags & GetPlaylists_OpenInUi) { + if (flags & GetPlaylistsFlags::GetPlaylists_OpenInUi) { condition_list << "ui_order != -1"; } - if (flags & GetPlaylists_Favorite) { + if (flags & GetPlaylistsFlags::GetPlaylists_Favorite) { condition_list << "is_favorite != 0"; } QString condition; @@ -172,9 +172,9 @@ PlaylistBackend::Playlist PlaylistBackend::GetPlaylist(const int id) { } -PlaylistItemList PlaylistBackend::GetPlaylistItems(const int playlist) { +PlaylistItemPtrList PlaylistBackend::GetPlaylistItems(const int playlist) { - PlaylistItemList playlistitems; + PlaylistItemPtrList playlistitems; { @@ -189,7 +189,7 @@ PlaylistItemList PlaylistBackend::GetPlaylistItems(const int playlist) { q.BindValue(":playlist", playlist); if (!q.Exec()) { db_->ReportErrors(q); - return PlaylistItemList(); + return PlaylistItemPtrList(); } // it's probable that we'll have a few songs associated with the same CUE, so we're caching results of parsing CUEs @@ -270,7 +270,7 @@ Song PlaylistBackend::NewSongFromQuery(const SqlRow &row, std::shared_ptr state) { // We need collection to run a CueParser; also, this method applies only to file-type PlaylistItems - if (item->source() != Song::Source_LocalFile) return item; + if (item->source() != Song::Source::LocalFile) return item; CueParser cue_parser(app_->collection_backend()); @@ -316,13 +316,13 @@ PlaylistItemPtr PlaylistBackend::RestoreCueData(PlaylistItemPtr item, std::share } -void PlaylistBackend::SavePlaylistAsync(int playlist, const PlaylistItemList &items, int last_played, PlaylistGeneratorPtr dynamic) { +void PlaylistBackend::SavePlaylistAsync(int playlist, const PlaylistItemPtrList &items, int last_played, PlaylistGeneratorPtr dynamic) { - QMetaObject::invokeMethod(this, "SavePlaylist", Qt::QueuedConnection, Q_ARG(int, playlist), Q_ARG(PlaylistItemList, items), Q_ARG(int, last_played), Q_ARG(PlaylistGeneratorPtr, dynamic)); + QMetaObject::invokeMethod(this, "SavePlaylist", Qt::QueuedConnection, Q_ARG(int, playlist), Q_ARG(PlaylistItemPtrList, items), Q_ARG(int, last_played), Q_ARG(PlaylistGeneratorPtr, dynamic)); } -void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemList &items, int last_played, PlaylistGeneratorPtr dynamic) { +void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &items, int last_played, PlaylistGeneratorPtr dynamic) { QMutexLocker l(db_->Mutex()); QSqlDatabase db(db_->Connect()); @@ -361,7 +361,7 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemList &items, q.prepare("UPDATE playlists SET last_played=:last_played, dynamic_playlist_type=:dynamic_type, dynamic_playlist_data=:dynamic_data, dynamic_playlist_backend=:dynamic_backend WHERE ROWID=:playlist"); q.BindValue(":last_played", last_played); if (dynamic) { - q.BindValue(":dynamic_type", dynamic->type()); + q.BindValue(":dynamic_type", static_cast(dynamic->type())); q.BindValue(":dynamic_data", dynamic->Save()); q.BindValue(":dynamic_backend", dynamic->collection()->songs_table()); } diff --git a/src/playlist/playlistbackend.h b/src/playlist/playlistbackend.h index ce46d6c0e..126c7a528 100644 --- a/src/playlist/playlistbackend.h +++ b/src/playlist/playlistbackend.h @@ -75,14 +75,14 @@ class PlaylistBackend : public QObject { PlaylistList GetAllFavoritePlaylists(); PlaylistBackend::Playlist GetPlaylist(const int id); - PlaylistItemList GetPlaylistItems(const int playlist); + PlaylistItemPtrList GetPlaylistItems(const int playlist); SongList GetPlaylistSongs(const int playlist); void SetPlaylistOrder(const QList &ids); void SetPlaylistUiPath(const int id, const QString &path); int CreatePlaylist(const QString &name, const QString &special_type); - void SavePlaylistAsync(const int playlist, const PlaylistItemList &items, const int last_played, PlaylistGeneratorPtr dynamic); + void SavePlaylistAsync(const int playlist, const PlaylistItemPtrList &items, const int last_played, PlaylistGeneratorPtr dynamic); void RenamePlaylist(const int id, const QString &new_name); void FavoritePlaylist(const int id, bool is_favorite); void RemovePlaylist(const int id); @@ -91,7 +91,7 @@ class PlaylistBackend : public QObject { public slots: void Exit(); - void SavePlaylist(const int playlist, const PlaylistItemList &items, const int last_played, PlaylistGeneratorPtr dynamic); + void SavePlaylist(const int playlist, const PlaylistItemPtrList &items, const int last_played, PlaylistGeneratorPtr dynamic); signals: void ExitFinished(); diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index 36ab61909..99420ebeb 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -339,7 +339,7 @@ void PlaylistContainer::NewPlaylist() { manager_->New(tr("Playlist")); } void PlaylistContainer::LoadPlaylist() { QString filename = settings_.value("last_load_playlist").toString(); - filename = QFileDialog::getOpenFileName(this, tr("Load playlist"), filename, manager_->parser()->filters(PlaylistParser::Type_Load)); + filename = QFileDialog::getOpenFileName(this, tr("Load playlist"), filename, manager_->parser()->filters(PlaylistParser::Type::Load)); if (filename.isNull()) return; diff --git a/src/playlist/playlistfilterparser.cpp b/src/playlist/playlistfilterparser.cpp index 1d17af295..0efe2d28d 100644 --- a/src/playlist/playlistfilterparser.cpp +++ b/src/playlist/playlistfilterparser.cpp @@ -198,7 +198,7 @@ class FilterTerm : public FilterTree { } return false; } - FilterType type() override { return Term; } + FilterType type() override { return FilterType::Term; } private: QScopedPointer cmp_; QList columns_; @@ -213,7 +213,7 @@ class FilterColumnTerm : public FilterTree { QModelIndex idx(model->index(row, col, parent)); return cmp_->Matches(idx.data().toString().toLower()); } - FilterType type() override { return Column; } + FilterType type() override { return FilterType::Column; } private: int col; QScopedPointer cmp_; @@ -226,7 +226,7 @@ class NotFilter : public FilterTree { bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const override { return !child_->accept(row, parent, model); } - FilterType type() override { return Not; } + FilterType type() override { return FilterType::Not; } private: QScopedPointer child_; }; @@ -238,7 +238,7 @@ class OrFilter : public FilterTree { bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const override { return std::any_of(children_.begin(), children_.end(), [row, parent, model](FilterTree *child) { return child->accept(row, parent, model); }); } - FilterType type() override { return Or; } + FilterType type() override { return FilterType::Or; } private: QList children_; }; @@ -250,7 +250,7 @@ class AndFilter : public FilterTree { bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const override { return !std::any_of(children_.begin(), children_.end(), [row, parent, model](FilterTree *child) { return !child->accept(row, parent, model); }); } - FilterType type() override { return And; } + FilterType type() override { return FilterType::And; } private: QList children_; }; @@ -385,7 +385,7 @@ FilterTree *FilterParser::parseSearchExpression() { else if (*iter_ == '-') { ++iter_; FilterTree *tree = parseSearchExpression(); - if (tree->type() != FilterTree::Nop) return new NotFilter(tree); + if (tree->type() != FilterTree::FilterType::Nop) return new NotFilter(tree); return tree; } else { diff --git a/src/playlist/playlistfilterparser.h b/src/playlist/playlistfilterparser.h index 75cf9b8f0..74ee2ee06 100644 --- a/src/playlist/playlistfilterparser.h +++ b/src/playlist/playlistfilterparser.h @@ -36,7 +36,7 @@ class FilterTree { FilterTree() = default; virtual ~FilterTree() {} virtual bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const = 0; - enum FilterType { + enum class FilterType { Nop = 0, Or, And, @@ -53,7 +53,7 @@ class FilterTree { class NopFilter : public FilterTree { public: bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const override { Q_UNUSED(row); Q_UNUSED(parent); Q_UNUSED(model); return true; } - FilterType type() override { return Nop; } + FilterType type() override { return FilterType::Nop; } }; diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index bd7c78acf..29b24489f 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -41,20 +41,20 @@ PlaylistItemPtr PlaylistItem::NewFromSource(const Song::Source source) { switch (source) { - case Song::Source_Collection: + case Song::Source::Collection: return std::make_shared(); - case Song::Source_Subsonic: - case Song::Source_Tidal: - case Song::Source_Qobuz: + case Song::Source::Subsonic: + case Song::Source::Tidal: + case Song::Source::Qobuz: return std::make_shared(source); - case Song::Source_Stream: - case Song::Source_RadioParadise: - case Song::Source_SomaFM: + case Song::Source::Stream: + case Song::Source::RadioParadise: + case Song::Source::SomaFM: return std::make_shared(source); - case Song::Source_LocalFile: - case Song::Source_CDDA: - case Song::Source_Device: - case Song::Source_Unknown: + case Song::Source::LocalFile: + case Song::Source::CDDA: + case Song::Source::Device: + case Song::Source::Unknown: break; } @@ -65,20 +65,20 @@ PlaylistItemPtr PlaylistItem::NewFromSource(const Song::Source source) { PlaylistItemPtr PlaylistItem::NewFromSong(const Song &song) { switch (song.source()) { - case Song::Source_Collection: + case Song::Source::Collection: return std::make_shared(song); - case Song::Source_Subsonic: - case Song::Source_Tidal: - case Song::Source_Qobuz: + case Song::Source::Subsonic: + case Song::Source::Tidal: + case Song::Source::Qobuz: return std::make_shared(song); - case Song::Source_Stream: - case Song::Source_RadioParadise: - case Song::Source_SomaFM: + case Song::Source::Stream: + case Song::Source::RadioParadise: + case Song::Source::SomaFM: return std::make_shared(song); - case Song::Source_LocalFile: - case Song::Source_CDDA: - case Song::Source_Device: - case Song::Source_Unknown: + case Song::Source::LocalFile: + case Song::Source::CDDA: + case Song::Source::Device: + case Song::Source::Unknown: break; } @@ -90,7 +90,7 @@ PlaylistItem::~PlaylistItem() = default; void PlaylistItem::BindToQuery(SqlQuery *query) const { - query->BindValue(":type", source_); + query->BindValue(":type", static_cast(source_)); query->BindValue(":collection_id", DatabaseValue(Column_CollectionId)); DatabaseSongMetadata().BindToQuery(query); diff --git a/src/playlist/playlistitem.h b/src/playlist/playlistitem.h index b59186666..5f163ad72 100644 --- a/src/playlist/playlistitem.h +++ b/src/playlist/playlistitem.h @@ -51,7 +51,7 @@ class PlaylistItem : public std::enable_shared_from_this { static std::shared_ptr NewFromSource(const Song::Source source); static std::shared_ptr NewFromSong(const Song &song); - enum Option { + enum class Option { Default = 0x00, // Disables the "pause" action. @@ -64,7 +64,7 @@ class PlaylistItem : public std::enable_shared_from_this { virtual Song::Source source() const { return source_; } - virtual Options options() const { return Default; } + virtual Options options() const { return Option::Default; } virtual QList actions() { return QList(); } @@ -132,10 +132,10 @@ class PlaylistItem : public std::enable_shared_from_this { Q_DISABLE_COPY(PlaylistItem) }; using PlaylistItemPtr = std::shared_ptr; -using PlaylistItemList = QList; +using PlaylistItemPtrList = QList; Q_DECLARE_METATYPE(PlaylistItemPtr) -Q_DECLARE_METATYPE(PlaylistItemList) +Q_DECLARE_METATYPE(PlaylistItemPtrList) Q_DECLARE_OPERATORS_FOR_FLAGS(PlaylistItem::Options) #endif // PLAYLISTITEM_H diff --git a/src/playlist/playlistitemmimedata.h b/src/playlist/playlistitemmimedata.h index 08ab69bcb..d6e7ca1bc 100644 --- a/src/playlist/playlistitemmimedata.h +++ b/src/playlist/playlistitemmimedata.h @@ -32,10 +32,10 @@ class PlaylistItemMimeData : public MimeData { Q_OBJECT public: - explicit PlaylistItemMimeData(const PlaylistItemPtr &item, QObject* = nullptr) : MimeData(), items_(PlaylistItemList() << item) {} - explicit PlaylistItemMimeData(const PlaylistItemList &items, QObject* = nullptr) : MimeData(), items_(items) {} + explicit PlaylistItemMimeData(const PlaylistItemPtr &item, QObject* = nullptr) : MimeData(), items_(PlaylistItemPtrList() << item) {} + explicit PlaylistItemMimeData(const PlaylistItemPtrList &items, QObject* = nullptr) : MimeData(), items_(items) {} - PlaylistItemList items_; + PlaylistItemPtrList items_; }; #endif // PLAYLISTITEMMIMEDATA_H diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index c558c8d9a..126d81bbd 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -252,18 +252,18 @@ void PlaylistManager::SaveWithUI(const int id, const QString &playlist_name) { QFileInfo fileinfo; forever { - filename = QFileDialog::getSaveFileName(nullptr, tr("Save playlist", "Title of the playlist save dialog."), filename, parser()->filters(PlaylistParser::Type_Save), &last_save_filter); + filename = QFileDialog::getSaveFileName(nullptr, tr("Save playlist", "Title of the playlist save dialog."), filename, parser()->filters(PlaylistParser::Type::Save), &last_save_filter); if (filename.isEmpty()) return; fileinfo.setFile(filename); - ParserBase *parser = parser_->ParserForExtension(PlaylistParser::Type_Save, fileinfo.suffix()); + ParserBase *parser = parser_->ParserForExtension(PlaylistParser::Type::Save, fileinfo.suffix()); if (parser) break; QMessageBox::warning(nullptr, tr("Unknown playlist extension"), tr("Unknown file extension for playlist.")); } s.beginGroup(PlaylistSettingsPage::kSettingsGroup); - PlaylistSettingsPage::PathType path_type = static_cast(s.value("path_type", PlaylistSettingsPage::PathType_Automatic).toInt()); + PlaylistSettingsPage::PathType path_type = static_cast(s.value("path_type", static_cast(PlaylistSettingsPage::PathType::Automatic)).toInt()); s.endGroup(); - if (path_type == PlaylistSettingsPage::PathType_Ask_User) { + if (path_type == PlaylistSettingsPage::PathType::Ask_User) { PlaylistSaveOptionsDialog optionsdialog; optionsdialog.setModal(true); if (optionsdialog.exec() != QDialog::Accepted) return; @@ -470,7 +470,7 @@ void PlaylistManager::SongsDiscovered(const SongList &songs) { for (const Song &song : songs) { for (const Data &data : std::as_const(playlists_)) { - PlaylistItemList items = data.p->collection_items_by_id(song.id()); + PlaylistItemPtrList items = data.p->collection_items_by_id(song.id()); for (PlaylistItemPtr item : items) { if (item->Metadata().directory_id() != song.directory_id()) continue; item->SetMetadata(song); @@ -624,7 +624,7 @@ void PlaylistManager::RateCurrentSong2(const int rating) { void PlaylistManager::SaveAllPlaylists() { - SavePlaylistsDialog dialog(parser()->file_extensions(PlaylistParser::Type_Save), parser()->default_extension()); + SavePlaylistsDialog dialog(parser()->file_extensions(PlaylistParser::Type::Save), parser()->default_extension()); if (dialog.exec() != QDialog::Accepted) { return; } @@ -637,9 +637,9 @@ void PlaylistManager::SaveAllPlaylists() { QSettings s; s.beginGroup(PlaylistSettingsPage::kSettingsGroup); - PlaylistSettingsPage::PathType path_type = static_cast(s.value("path_type", PlaylistSettingsPage::PathType_Automatic).toInt()); + PlaylistSettingsPage::PathType path_type = static_cast(s.value("path_type", static_cast(PlaylistSettingsPage::PathType::Automatic)).toInt()); s.endGroup(); - if (path_type == PlaylistSettingsPage::PathType_Ask_User) { + if (path_type == PlaylistSettingsPage::PathType::Ask_User) { PlaylistSaveOptionsDialog optionsdialog; optionsdialog.setModal(true); if (optionsdialog.exec() != QDialog::Accepted) return; diff --git a/src/playlist/playlistsaveoptionsdialog.cpp b/src/playlist/playlistsaveoptionsdialog.cpp index e9dfef3fa..8e8ebfe12 100644 --- a/src/playlist/playlistsaveoptionsdialog.cpp +++ b/src/playlist/playlistsaveoptionsdialog.cpp @@ -37,9 +37,9 @@ PlaylistSaveOptionsDialog::PlaylistSaveOptionsDialog(QWidget *parent) : QDialog( ui->setupUi(this); - ui->filePaths->addItem(tr("Automatic"), PlaylistSettingsPage::PathType_Automatic); - ui->filePaths->addItem(tr("Relative"), PlaylistSettingsPage::PathType_Relative); - ui->filePaths->addItem(tr("Absolute"), PlaylistSettingsPage::PathType_Absolute); + ui->filePaths->addItem(tr("Automatic"), QVariant::fromValue(PlaylistSettingsPage::PathType::Automatic)); + ui->filePaths->addItem(tr("Relative"), QVariant::fromValue(PlaylistSettingsPage::PathType::Relative)); + ui->filePaths->addItem(tr("Absolute"), QVariant::fromValue(PlaylistSettingsPage::PathType::Absolute)); } @@ -59,5 +59,5 @@ void PlaylistSaveOptionsDialog::accept() { } PlaylistSettingsPage::PathType PlaylistSaveOptionsDialog::path_type() const { - return static_cast(ui->filePaths->itemData(ui->filePaths->currentIndex()).toInt()); + return ui->filePaths->itemData(ui->filePaths->currentIndex()).value(); } diff --git a/src/playlist/playlistsequence.cpp b/src/playlist/playlistsequence.cpp index 3ef931cfe..207d0689b 100644 --- a/src/playlist/playlistsequence.cpp +++ b/src/playlist/playlistsequence.cpp @@ -46,8 +46,8 @@ PlaylistSequence::PlaylistSequence(QWidget *parent, SettingsProvider *settings) repeat_menu_(new QMenu(this)), shuffle_menu_(new QMenu(this)), loading_(false), - repeat_mode_(Repeat_Off), - shuffle_mode_(Shuffle_Off), + repeat_mode_(RepeatMode::Off), + shuffle_mode_(ShuffleMode::Off), dynamic_(false) { ui_->setupUi(this); @@ -94,8 +94,8 @@ PlaylistSequence::~PlaylistSequence() { void PlaylistSequence::Load() { loading_ = true; // Stops these setter functions calling Save() - SetShuffleMode(ShuffleMode(settings_->value("shuffle_mode", Shuffle_Off).toInt())); - SetRepeatMode(RepeatMode(settings_->value("repeat_mode", Repeat_Off).toInt())); + SetShuffleMode(static_cast(settings_->value("shuffle_mode", static_cast(ShuffleMode::Off)).toInt())); + SetRepeatMode(static_cast(settings_->value("repeat_mode", static_cast(RepeatMode::Off)).toInt())); loading_ = false; } @@ -104,8 +104,8 @@ void PlaylistSequence::Save() { if (loading_) return; - settings_->setValue("shuffle_mode", shuffle_mode_); - settings_->setValue("repeat_mode", repeat_mode_); + settings_->setValue("shuffle_mode", static_cast(shuffle_mode_)); + settings_->setValue("repeat_mode", static_cast(repeat_mode_)); } @@ -139,12 +139,12 @@ QPixmap PlaylistSequence::DesaturatedPixmap(const QPixmap &pixmap) { void PlaylistSequence::RepeatActionTriggered(QAction *action) { - RepeatMode mode = Repeat_Off; - if (action == ui_->action_repeat_track) mode = Repeat_Track; - if (action == ui_->action_repeat_album) mode = Repeat_Album; - if (action == ui_->action_repeat_playlist) mode = Repeat_Playlist; - if (action == ui_->action_repeat_onebyone) mode = Repeat_OneByOne; - if (action == ui_->action_repeat_intro) mode = Repeat_Intro; + RepeatMode mode = RepeatMode::Off; + if (action == ui_->action_repeat_track) mode = RepeatMode::Track; + if (action == ui_->action_repeat_album) mode = RepeatMode::Album; + if (action == ui_->action_repeat_playlist) mode = RepeatMode::Playlist; + if (action == ui_->action_repeat_onebyone) mode = RepeatMode::OneByOne; + if (action == ui_->action_repeat_intro) mode = RepeatMode::Intro; SetRepeatMode(mode); @@ -152,10 +152,10 @@ void PlaylistSequence::RepeatActionTriggered(QAction *action) { void PlaylistSequence::ShuffleActionTriggered(QAction *action) { - ShuffleMode mode = Shuffle_Off; - if (action == ui_->action_shuffle_all) mode = Shuffle_All; - if (action == ui_->action_shuffle_inside_album) mode = Shuffle_InsideAlbum; - if (action == ui_->action_shuffle_albums) mode = Shuffle_Albums; + ShuffleMode mode = ShuffleMode::Off; + if (action == ui_->action_shuffle_all) mode = ShuffleMode::All; + if (action == ui_->action_shuffle_inside_album) mode = ShuffleMode::InsideAlbum; + if (action == ui_->action_shuffle_albums) mode = ShuffleMode::Albums; SetShuffleMode(mode); @@ -163,15 +163,15 @@ void PlaylistSequence::ShuffleActionTriggered(QAction *action) { void PlaylistSequence::SetRepeatMode(const RepeatMode mode) { - ui_->repeat->setChecked(mode != Repeat_Off); + ui_->repeat->setChecked(mode != RepeatMode::Off); switch (mode) { - case Repeat_Off: ui_->action_repeat_off->setChecked(true); break; - case Repeat_Track: ui_->action_repeat_track->setChecked(true); break; - case Repeat_Album: ui_->action_repeat_album->setChecked(true); break; - case Repeat_Playlist: ui_->action_repeat_playlist->setChecked(true); break; - case Repeat_OneByOne: ui_->action_repeat_onebyone->setChecked(true); break; - case Repeat_Intro: ui_->action_repeat_intro->setChecked(true); break; + case RepeatMode::Off: ui_->action_repeat_off->setChecked(true); break; + case RepeatMode::Track: ui_->action_repeat_track->setChecked(true); break; + case RepeatMode::Album: ui_->action_repeat_album->setChecked(true); break; + case RepeatMode::Playlist: ui_->action_repeat_playlist->setChecked(true); break; + case RepeatMode::OneByOne: ui_->action_repeat_onebyone->setChecked(true); break; + case RepeatMode::Intro: ui_->action_repeat_intro->setChecked(true); break; } @@ -186,13 +186,13 @@ void PlaylistSequence::SetRepeatMode(const RepeatMode mode) { void PlaylistSequence::SetShuffleMode(const ShuffleMode mode) { - ui_->shuffle->setChecked(mode != Shuffle_Off); + ui_->shuffle->setChecked(mode != ShuffleMode::Off); switch (mode) { - case Shuffle_Off: ui_->action_shuffle_off->setChecked(true); break; - case Shuffle_All: ui_->action_shuffle_all->setChecked(true); break; - case Shuffle_InsideAlbum: ui_->action_shuffle_inside_album->setChecked(true); break; - case Shuffle_Albums: ui_->action_shuffle_albums->setChecked(true); break; + case ShuffleMode::Off: ui_->action_shuffle_off->setChecked(true); break; + case ShuffleMode::All: ui_->action_shuffle_all->setChecked(true); break; + case ShuffleMode::InsideAlbum: ui_->action_shuffle_inside_album->setChecked(true); break; + case ShuffleMode::Albums: ui_->action_shuffle_albums->setChecked(true); break; } if (mode != shuffle_mode_) { @@ -205,23 +205,23 @@ void PlaylistSequence::SetShuffleMode(const ShuffleMode mode) { } PlaylistSequence::ShuffleMode PlaylistSequence::shuffle_mode() const { - return dynamic_ ? Shuffle_Off : shuffle_mode_; + return dynamic_ ? ShuffleMode::Off : shuffle_mode_; } PlaylistSequence::RepeatMode PlaylistSequence::repeat_mode() const { - return dynamic_ ? Repeat_Off : repeat_mode_; + return dynamic_ ? RepeatMode::Off : repeat_mode_; } -//called from global shortcut +// Called from global shortcut void PlaylistSequence::CycleShuffleMode() { - ShuffleMode mode = Shuffle_Off; - //we cycle through the shuffle modes + ShuffleMode mode = ShuffleMode::Off; + // We cycle through the shuffle modes switch (shuffle_mode()) { - case Shuffle_Off: mode = Shuffle_All; break; - case Shuffle_All: mode = Shuffle_InsideAlbum; break; - case Shuffle_InsideAlbum: mode = Shuffle_Albums; break; - case Shuffle_Albums: break; + case ShuffleMode::Off: mode = ShuffleMode::All; break; + case ShuffleMode::All: mode = ShuffleMode::InsideAlbum; break; + case ShuffleMode::InsideAlbum: mode = ShuffleMode::Albums; break; + case ShuffleMode::Albums: break; } SetShuffleMode(mode); @@ -231,15 +231,15 @@ void PlaylistSequence::CycleShuffleMode() { //called from global shortcut void PlaylistSequence::CycleRepeatMode() { - RepeatMode mode = Repeat_Off; + RepeatMode mode = RepeatMode::Off; //we cycle through the repeat modes switch (repeat_mode()) { - case Repeat_Off: mode = Repeat_Track; break; - case Repeat_Track: mode = Repeat_Album; break; - case Repeat_Album: mode = Repeat_Playlist; break; - case Repeat_Playlist: mode = Repeat_OneByOne; break; - case Repeat_OneByOne: mode = Repeat_Intro; break; - case Repeat_Intro: + case RepeatMode::Off: mode = RepeatMode::Track; break; + case RepeatMode::Track: mode = RepeatMode::Album; break; + case RepeatMode::Album: mode = RepeatMode::Playlist; break; + case RepeatMode::Playlist: mode = RepeatMode::OneByOne; break; + case RepeatMode::OneByOne: mode = RepeatMode::Intro; break; + case RepeatMode::Intro: break; } diff --git a/src/playlist/playlistsequence.h b/src/playlist/playlistsequence.h index 20b769e66..a20735ccb 100644 --- a/src/playlist/playlistsequence.h +++ b/src/playlist/playlistsequence.h @@ -45,19 +45,19 @@ class PlaylistSequence : public QWidget { explicit PlaylistSequence(QWidget *parent = nullptr, SettingsProvider *settings = nullptr); ~PlaylistSequence() override; - enum RepeatMode { - Repeat_Off = 0, - Repeat_Track = 1, - Repeat_Album = 2, - Repeat_Playlist = 3, - Repeat_OneByOne = 4, - Repeat_Intro = 5, + enum class RepeatMode { + Off = 0, + Track = 1, + Album = 2, + Playlist = 3, + OneByOne = 4, + Intro = 5 }; - enum ShuffleMode { - Shuffle_Off = 0, - Shuffle_All = 1, - Shuffle_InsideAlbum = 2, - Shuffle_Albums = 3, + enum class ShuffleMode { + Off = 0, + All = 1, + InsideAlbum = 2, + Albums = 3 }; static const char *kSettingsGroup; diff --git a/src/playlist/playlistundocommands.cpp b/src/playlist/playlistundocommands.cpp index d25de15cd..b97830dd9 100644 --- a/src/playlist/playlistundocommands.cpp +++ b/src/playlist/playlistundocommands.cpp @@ -32,7 +32,7 @@ namespace PlaylistUndoCommands { Base::Base(Playlist *playlist) : QUndoCommand(nullptr), playlist_(playlist) {} -InsertItems::InsertItems(Playlist *playlist, const PlaylistItemList &items, int pos, bool enqueue, bool enqueue_next) +InsertItems::InsertItems(Playlist *playlist, const PlaylistItemPtrList &items, int pos, bool enqueue, bool enqueue_next) : Base(playlist), items_(items), pos_(pos), @@ -117,14 +117,14 @@ void MoveItems::undo() { playlist_->MoveItemsWithoutUndo(pos_, source_rows_); } -ReOrderItems::ReOrderItems(Playlist *playlist, const PlaylistItemList &new_items) +ReOrderItems::ReOrderItems(Playlist *playlist, const PlaylistItemPtrList &new_items) : Base(playlist), old_items_(playlist->items_), new_items_(new_items) {} void ReOrderItems::undo() { playlist_->ReOrderWithoutUndo(old_items_); } void ReOrderItems::redo() { playlist_->ReOrderWithoutUndo(new_items_); } -SortItems::SortItems(Playlist *playlist, int column, Qt::SortOrder order, const PlaylistItemList &new_items) +SortItems::SortItems(Playlist *playlist, int column, Qt::SortOrder order, const PlaylistItemPtrList &new_items) : ReOrderItems(playlist, new_items) { Q_UNUSED(column); @@ -135,7 +135,7 @@ SortItems::SortItems(Playlist *playlist, int column, Qt::SortOrder order, const } -ShuffleItems::ShuffleItems(Playlist *playlist, const PlaylistItemList &new_items) +ShuffleItems::ShuffleItems(Playlist *playlist, const PlaylistItemPtrList &new_items) : ReOrderItems(playlist, new_items) { setText(tr("shuffle songs")); diff --git a/src/playlist/playlistundocommands.h b/src/playlist/playlistundocommands.h index 8e413c2b8..1c885941c 100644 --- a/src/playlist/playlistundocommands.h +++ b/src/playlist/playlistundocommands.h @@ -49,7 +49,7 @@ namespace PlaylistUndoCommands { class InsertItems : public Base { public: - explicit InsertItems(Playlist *playlist, const PlaylistItemList &items, int pos, bool enqueue = false, bool enqueue_next = false); + explicit InsertItems(Playlist *playlist, const PlaylistItemPtrList &items, int pos, bool enqueue = false, bool enqueue_next = false); void undo() override; void redo() override; @@ -59,7 +59,7 @@ namespace PlaylistUndoCommands { bool UpdateItem(const PlaylistItemPtr &updated_item); private: - PlaylistItemList items_; + PlaylistItemPtrList items_; int pos_; bool enqueue_; bool enqueue_next_; @@ -80,7 +80,7 @@ namespace PlaylistUndoCommands { Range(int pos, int count) : pos_(pos), count_(count) {} int pos_; int count_; - PlaylistItemList items_; + PlaylistItemPtrList items_; }; QList ranges_; @@ -100,25 +100,25 @@ namespace PlaylistUndoCommands { class ReOrderItems : public Base { public: - explicit ReOrderItems(Playlist *playlist, const PlaylistItemList &new_items); + explicit ReOrderItems(Playlist *playlist, const PlaylistItemPtrList &new_items); void undo() override; void redo() override; private: - PlaylistItemList old_items_; - PlaylistItemList new_items_; + PlaylistItemPtrList old_items_; + PlaylistItemPtrList new_items_; }; class SortItems : public ReOrderItems { public: - explicit SortItems(Playlist *playlist, int column, Qt::SortOrder order, const PlaylistItemList &new_items); + explicit SortItems(Playlist *playlist, int column, Qt::SortOrder order, const PlaylistItemPtrList &new_items); }; class ShuffleItems : public ReOrderItems { public: - explicit ShuffleItems(Playlist *playlist, const PlaylistItemList &new_items); + explicit ShuffleItems(Playlist *playlist, const PlaylistItemPtrList &new_items); }; } // namespace diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 3ad957e4d..83248a5d5 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -138,8 +138,8 @@ PlaylistView::PlaylistView(QWidget *parent) style_(new PlaylistProxyStyle()), playlist_(nullptr), header_(new PlaylistHeader(Qt::Horizontal, this, this)), - background_image_type_(AppearanceSettingsPage::BackgroundImageType_Default), - background_image_position_(AppearanceSettingsPage::BackgroundImagePosition_BottomRight), + background_image_type_(AppearanceSettingsPage::BackgroundImageType::Default), + background_image_position_(AppearanceSettingsPage::BackgroundImagePosition::BottomRight), background_image_maxsize_(0), background_image_stretch_(false), background_image_do_not_cut_(true), @@ -668,7 +668,7 @@ void PlaylistView::showEvent(QShowEvent *e) { glow_timer_.start(1500 / kGlowIntensitySteps, this); } - MaybeAutoscroll(Playlist::AutoScroll_Maybe); + MaybeAutoscroll(Playlist::AutoScroll::Maybe); QTreeView::showEvent(e); @@ -699,7 +699,7 @@ void PlaylistView::keyPressEvent(QKeyEvent *event) { CopyCurrentSongToClipboard(); } else if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { - if (currentIndex().isValid()) emit PlayItem(currentIndex(), Playlist::AutoScroll_Never); + if (currentIndex().isValid()) emit PlayItem(currentIndex(), Playlist::AutoScroll::Never); event->accept(); } else if (event->modifiers() != Qt::ControlModifier && event->key() == Qt::Key_Space) { @@ -957,7 +957,7 @@ void PlaylistView::InhibitAutoscrollTimeout() { void PlaylistView::MaybeAutoscroll(const Playlist::AutoScroll autoscroll) { - if (autoscroll == Playlist::AutoScroll_Always || (autoscroll == Playlist::AutoScroll_Maybe && !inhibit_autoscroll_)) { + if (autoscroll == Playlist::AutoScroll::Always || (autoscroll == Playlist::AutoScroll::Maybe && !inhibit_autoscroll_)) { JumpToCurrentlyPlayingTrack(); } @@ -1013,7 +1013,7 @@ void PlaylistView::paintEvent(QPaintEvent *event) { // The cached pixmap gets invalidated in dragLeaveEvent, dropEvent and scrollContentsBy. // Draw background - if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Custom || background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Album) { + if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Custom || background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) { if (!background_image_.isNull() || !previous_background_image_.isNull()) { QPainter background_painter(viewport()); @@ -1064,23 +1064,23 @@ void PlaylistView::paintEvent(QPaintEvent *event) { background_painter.setOpacity(1.0 - previous_background_image_opacity_); } switch (background_image_position_) { - case AppearanceSettingsPage::BackgroundImagePosition_UpperLeft: + case AppearanceSettingsPage::BackgroundImagePosition::UpperLeft: current_background_image_x_ = 0; current_background_image_y_ = 0; break; - case AppearanceSettingsPage::BackgroundImagePosition_UpperRight: + case AppearanceSettingsPage::BackgroundImagePosition::UpperRight: current_background_image_x_ = (pb_width - cached_scaled_background_image_.width()); current_background_image_y_ = 0; break; - case AppearanceSettingsPage::BackgroundImagePosition_Middle: + case AppearanceSettingsPage::BackgroundImagePosition::Middle: current_background_image_x_ = ((pb_width - cached_scaled_background_image_.width()) / 2); current_background_image_y_ = ((pb_height - cached_scaled_background_image_.height()) / 2); break; - case AppearanceSettingsPage::BackgroundImagePosition_BottomLeft: + case AppearanceSettingsPage::BackgroundImagePosition::BottomLeft: current_background_image_x_ = 0; current_background_image_y_ = (pb_height - cached_scaled_background_image_.height()); break; - case AppearanceSettingsPage::BackgroundImagePosition_BottomRight: + case AppearanceSettingsPage::BackgroundImagePosition::BottomRight: default: current_background_image_x_ = (pb_width - cached_scaled_background_image_.width()); current_background_image_y_ = (pb_height - cached_scaled_background_image_.height()); @@ -1250,20 +1250,20 @@ void PlaylistView::ReloadSettings() { if (!glow_enabled_) StopGlowing(); // Background: - AppearanceSettingsPage::BackgroundImageType background_image_type(AppearanceSettingsPage::BackgroundImageType_Default); + AppearanceSettingsPage::BackgroundImageType background_image_type(AppearanceSettingsPage::BackgroundImageType::Default); if (background_image_type_var.isValid()) { background_image_type = static_cast(background_image_type_var.toInt()); } else { - background_image_type = AppearanceSettingsPage::BackgroundImageType_Default; + background_image_type = AppearanceSettingsPage::BackgroundImageType::Default; } - AppearanceSettingsPage::BackgroundImagePosition background_image_position(AppearanceSettingsPage::BackgroundImagePosition_BottomRight); + AppearanceSettingsPage::BackgroundImagePosition background_image_position(AppearanceSettingsPage::BackgroundImagePosition::BottomRight); if (background_image_position_var.isValid()) { background_image_position = static_cast(background_image_position_var.toInt()); } else { - background_image_position = AppearanceSettingsPage::BackgroundImagePosition_BottomRight; + background_image_position = AppearanceSettingsPage::BackgroundImagePosition::BottomRight; } // Check if background properties have changed. @@ -1295,10 +1295,10 @@ void PlaylistView::ReloadSettings() { blur_radius_ = blur_radius; opacity_level_ = opacity_level; - if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Custom) { + if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Custom) { set_background_image(QImage(background_image_filename)); } - else if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Album) { + else if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) { set_background_image(current_song_cover_art_); } else { @@ -1308,8 +1308,8 @@ void PlaylistView::ReloadSettings() { cached_scaled_background_image_ = QPixmap(); previous_background_image_ = QPixmap(); } - setProperty("default_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Default); - setProperty("strawbs_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Strawbs); + setProperty("default_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Default); + setProperty("strawbs_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Strawbs); emit BackgroundPropertyChanged(); force_background_redraw_ = true; } @@ -1472,7 +1472,7 @@ void PlaylistView::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResu if ((song != Song() && song_playing_ == Song()) || result.album_cover.image == current_song_cover_art_) return; current_song_cover_art_ = result.album_cover.image; - if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType_Album) { + if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) { if (song.art_automatic().isEmpty() && song.art_manual().isEmpty()) { set_background_image(QImage()); } diff --git a/src/playlist/playlistview.h b/src/playlist/playlistview.h index 3746ae2ca..6f756a3af 100644 --- a/src/playlist/playlistview.h +++ b/src/playlist/playlistview.h @@ -128,7 +128,7 @@ class PlaylistView : public QTreeView { signals: void PlayItem(QModelIndex idx, Playlist::AutoScroll autoscroll); - void PlayPause(const quint64 offset_nanosec = 0, Playlist::AutoScroll autoscroll = Playlist::AutoScroll_Never); + void PlayPause(const quint64 offset_nanosec = 0, Playlist::AutoScroll autoscroll = Playlist::AutoScroll::Never); void RightClicked(QPoint global_pos, QModelIndex idx); void SeekForward(); void SeekBackward(); diff --git a/src/playlist/songloaderinserter.cpp b/src/playlist/songloaderinserter.cpp index f1b6791c4..4bec6d159 100644 --- a/src/playlist/songloaderinserter.cpp +++ b/src/playlist/songloaderinserter.cpp @@ -62,12 +62,12 @@ void SongLoaderInserter::Load(Playlist *destination, int row, bool play_now, boo SongLoader::Result ret = loader->Load(url); - if (ret == SongLoader::BlockingLoadRequired) { + if (ret == SongLoader::Result::BlockingLoadRequired) { pending_.append(loader); continue; } - if (ret == SongLoader::Success) { + if (ret == SongLoader::Result::Success) { songs_ << loader->songs(); } else { @@ -108,7 +108,7 @@ void SongLoaderInserter::LoadAudioCD(Playlist *destination, int row, bool play_n QObject::connect(loader, &SongLoader::LoadAudioCDFinished, this, &SongLoaderInserter::AudioCDTagsLoaded); qLog(Info) << "Loading audio CD..."; SongLoader::Result ret = loader->LoadAudioCD(); - if (ret == SongLoader::Error) { + if (ret == SongLoader::Result::Error) { if (loader->errors().isEmpty()) emit Error(tr("Error while loading audio CD.")); else { @@ -175,7 +175,7 @@ void SongLoaderInserter::AsyncLoad() { SongLoader::Result res = loader->LoadFilenamesBlocking(); task_manager_->SetTaskProgress(async_load_id, ++async_progress); - if (res == SongLoader::Error) { + if (res == SongLoader::Result::Error) { for (const QString &error : loader->errors()) { emit Error(error); } diff --git a/src/playlistparsers/asxiniparser.h b/src/playlistparsers/asxiniparser.h index 485574c7a..20aec7836 100644 --- a/src/playlistparsers/asxiniparser.h +++ b/src/playlistparsers/asxiniparser.h @@ -49,7 +49,7 @@ class AsxIniParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; }; #endif // ASXINIPARSER_H diff --git a/src/playlistparsers/asxparser.cpp b/src/playlistparsers/asxparser.cpp index dd4181151..5347814cc 100644 --- a/src/playlistparsers/asxparser.cpp +++ b/src/playlistparsers/asxparser.cpp @@ -119,7 +119,7 @@ return_song: Song song = LoadSong(ref, 0, dir, collection_search); // Override metadata with what was in the playlist - if (song.source() != Song::Source_Collection) { + if (song.source() != Song::Source::Collection) { if (!title.isEmpty()) song.set_title(title); if (!artist.isEmpty()) song.set_artist(artist); if (!album.isEmpty()) song.set_album(album); diff --git a/src/playlistparsers/asxparser.h b/src/playlistparsers/asxparser.h index c928e0dd2..887bbde83 100644 --- a/src/playlistparsers/asxparser.h +++ b/src/playlistparsers/asxparser.h @@ -51,7 +51,7 @@ class ASXParser : public XMLParser { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: Song ParseTrack(QXmlStreamReader *reader, const QDir &dir, const bool collection_search) const; diff --git a/src/playlistparsers/cueparser.h b/src/playlistparsers/cueparser.h index 7cab1c727..a78fcb232 100644 --- a/src/playlistparsers/cueparser.h +++ b/src/playlistparsers/cueparser.h @@ -70,7 +70,7 @@ class CueParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; static QString FindCueFilename(const QString &filename); diff --git a/src/playlistparsers/m3uparser.cpp b/src/playlistparsers/m3uparser.cpp index 07b383a89..118cb85cd 100644 --- a/src/playlistparsers/m3uparser.cpp +++ b/src/playlistparsers/m3uparser.cpp @@ -42,7 +42,7 @@ SongList M3UParser::Load(QIODevice *device, const QString &playlist_path, const Q_UNUSED(playlist_path); - M3UType type = STANDARD; + M3UType type = M3UType::STANDARD; Metadata current_metadata; QString data = QString::fromUtf8(device->readAll()); @@ -55,7 +55,7 @@ SongList M3UParser::Load(QIODevice *device, const QString &playlist_path, const QString line = QString::fromUtf8(buffer.readLine()).trimmed(); if (line.startsWith("#EXTM3U")) { // This is in extended M3U format. - type = EXTENDED; + type = M3UType::EXTENDED; line = QString::fromUtf8(buffer.readLine()).trimmed(); } @@ -63,7 +63,7 @@ SongList M3UParser::Load(QIODevice *device, const QString &playlist_path, const forever { if (line.startsWith('#')) { // Extended info or comment. - if (type == EXTENDED && line.startsWith("#EXT")) { + if (type == M3UType::EXTENDED && line.startsWith("#EXT")) { if (!ParseMetadata(line, ¤t_metadata)) { qLog(Warning) << "Failed to parse metadata: " << line; } diff --git a/src/playlistparsers/m3uparser.h b/src/playlistparsers/m3uparser.h index 3a6030f8a..930ea226b 100644 --- a/src/playlistparsers/m3uparser.h +++ b/src/playlistparsers/m3uparser.h @@ -52,10 +52,10 @@ class M3UParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: - enum M3UType { + enum class M3UType { STANDARD = 0, EXTENDED, // Includes extended info (track, artist, etc.) LINK, // Points to a directory. diff --git a/src/playlistparsers/parserbase.cpp b/src/playlistparsers/parserbase.cpp index a90b9abad..8f7192465 100644 --- a/src/playlistparsers/parserbase.cpp +++ b/src/playlistparsers/parserbase.cpp @@ -47,12 +47,12 @@ void ParserBase::LoadSong(const QString &filename_or_url, const qint64 beginning if (filename_or_url.contains(QRegularExpression("^[a-z]{2,}:", QRegularExpression::CaseInsensitiveOption))) { QUrl url(filename_or_url); song->set_source(Song::SourceFromURL(url)); - if (song->source() == Song::Source_LocalFile) { + if (song->source() == Song::Source::LocalFile) { filename = url.toLocalFile(); } else if (song->is_stream()) { song->set_url(QUrl::fromUserInput(filename_or_url)); - song->set_filetype(Song::FileType_Stream); + song->set_filetype(Song::FileType::Stream); song->set_valid(true); return; } @@ -94,7 +94,7 @@ void ParserBase::LoadSong(const QString &filename_or_url, const qint64 beginning Song ParserBase::LoadSong(const QString &filename_or_url, const qint64 beginning, const QDir &dir, const bool collection_search) const { - Song song(Song::Source_LocalFile); + Song song(Song::Source::LocalFile); LoadSong(filename_or_url, beginning, dir, &song, collection_search); return song; @@ -107,10 +107,10 @@ QString ParserBase::URLOrFilename(const QUrl &url, const QDir &dir, const Playli const QString filename = url.toLocalFile(); - if (path_type != PlaylistSettingsPage::PathType_Absolute && QDir::isAbsolutePath(filename)) { + if (path_type != PlaylistSettingsPage::PathType::Absolute && QDir::isAbsolutePath(filename)) { const QString relative = dir.relativeFilePath(filename); - if (!relative.startsWith("../") || path_type == PlaylistSettingsPage::PathType_Relative) { + if (!relative.startsWith("../") || path_type == PlaylistSettingsPage::PathType::Relative) { return relative; } } diff --git a/src/playlistparsers/parserbase.h b/src/playlistparsers/parserbase.h index 75f42687f..e01c0da93 100644 --- a/src/playlistparsers/parserbase.h +++ b/src/playlistparsers/parserbase.h @@ -57,7 +57,7 @@ class ParserBase : public QObject { // Any playlist parser may decide to leave out some entries if it finds them incomplete or invalid. // This means that the final resulting SongList should be considered valid (at least from the parser's point of view). virtual SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_lookup = true) const = 0; - virtual void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const = 0; + virtual void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const = 0; protected: // Loads a song. If filename_or_url is a URL (with a scheme other than "file") then it is set on the song and the song marked as a stream. diff --git a/src/playlistparsers/playlistparser.cpp b/src/playlistparsers/playlistparser.cpp index c45b2ea2f..d49188bd8 100644 --- a/src/playlistparsers/playlistparser.cpp +++ b/src/playlistparsers/playlistparser.cpp @@ -98,7 +98,7 @@ QString PlaylistParser::filters(const Type type) const { } } - if (type == Type_Load) { + if (type == Type::Load) { filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(" "))); } @@ -168,7 +168,7 @@ SongList PlaylistParser::LoadFromFile(const QString &filename) const { QFileInfo fileinfo(filename); // Find a parser that supports this file extension - ParserBase *parser = ParserForExtension(Type_Load, fileinfo.suffix()); + ParserBase *parser = ParserForExtension(Type::Load, fileinfo.suffix()); if (!parser) { qLog(Warning) << "Unknown filetype:" << filename; return SongList(); @@ -208,16 +208,16 @@ void PlaylistParser::Save(const SongList &songs, const QString &filename, const } // Find a parser that supports this file extension - ParserBase *parser = ParserForExtension(Type_Save, fileinfo.suffix()); + ParserBase *parser = ParserForExtension(Type::Save, fileinfo.suffix()); if (!parser) { qLog(Warning) << "Unknown filetype" << filename; return; } - if (path_type == PlaylistSettingsPage::PathType_Absolute && dir.path() != dir.absolutePath()) { + if (path_type == PlaylistSettingsPage::PathType::Absolute && dir.path() != dir.absolutePath()) { dir.setPath(dir.absolutePath()); } - else if (path_type != PlaylistSettingsPage::PathType_Absolute && !dir.canonicalPath().isEmpty() && dir.path() != dir.canonicalPath()) { + else if (path_type != PlaylistSettingsPage::PathType::Absolute && !dir.canonicalPath().isEmpty() && dir.path() != dir.canonicalPath()) { dir.setPath(dir.canonicalPath()); } @@ -236,6 +236,6 @@ void PlaylistParser::Save(const SongList &songs, const QString &filename, const bool PlaylistParser::ParserIsSupported(const Type type, ParserBase *parser) const { - return ((type == Type_Load && parser->load_supported()) || (type == Type_Save && parser->save_supported())); + return ((type == Type::Load && parser->load_supported()) || (type == Type::Save && parser->save_supported())); } diff --git a/src/playlistparsers/playlistparser.h b/src/playlistparsers/playlistparser.h index 37310607b..5a8c6fbc0 100644 --- a/src/playlistparsers/playlistparser.h +++ b/src/playlistparsers/playlistparser.h @@ -43,9 +43,9 @@ class PlaylistParser : public QObject { public: explicit PlaylistParser(CollectionBackendInterface *collection = nullptr, QObject *parent = nullptr); - enum Type { - Type_Load, - Type_Save, + enum class Type { + Load, + Save }; static const int kMagicSize; diff --git a/src/playlistparsers/plsparser.h b/src/playlistparsers/plsparser.h index db7856ba5..3aacabdd7 100644 --- a/src/playlistparsers/plsparser.h +++ b/src/playlistparsers/plsparser.h @@ -51,7 +51,7 @@ class PLSParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; }; #endif // PLSPARSER_H diff --git a/src/playlistparsers/wplparser.h b/src/playlistparsers/wplparser.h index 222aba41a..f43170c5e 100644 --- a/src/playlistparsers/wplparser.h +++ b/src/playlistparsers/wplparser.h @@ -54,7 +54,7 @@ class WplParser : public XMLParser { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path, const QDir &dir, const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir, const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir, const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: void ParseSeq(const QDir &dir, QXmlStreamReader *reader, SongList *songs, const bool collection_search = true) const; diff --git a/src/playlistparsers/xspfparser.cpp b/src/playlistparsers/xspfparser.cpp index 562ee7a77..2ceb5d295 100644 --- a/src/playlistparsers/xspfparser.cpp +++ b/src/playlistparsers/xspfparser.cpp @@ -122,7 +122,7 @@ return_song: Song song = LoadSong(location, 0, dir, collection_search); // Override metadata with what was in the playlist - if (song.source() != Song::Source_Collection) { + if (song.source() != Song::Source::Collection) { if (!title.isEmpty()) song.set_title(title); if (!artist.isEmpty()) song.set_artist(artist); if (!album.isEmpty()) song.set_album(album); diff --git a/src/playlistparsers/xspfparser.h b/src/playlistparsers/xspfparser.h index 51cb50ca3..8f6e7f306 100644 --- a/src/playlistparsers/xspfparser.h +++ b/src/playlistparsers/xspfparser.h @@ -51,7 +51,7 @@ class XSPFParser : public XMLParser { bool TryMagic(const QByteArray &data) const override; SongList Load(QIODevice *device, const QString &playlist_path = "", const QDir &dir = QDir(), const bool collection_search = true) const override; - void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType_Automatic) const override; + void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: Song ParseTrack(QXmlStreamReader *reader, const QDir &dir, const bool collection_search) const; diff --git a/src/qobuz/qobuzbaserequest.h b/src/qobuz/qobuzbaserequest.h index 9c66ae6ce..acc7f24b6 100644 --- a/src/qobuz/qobuzbaserequest.h +++ b/src/qobuz/qobuzbaserequest.h @@ -47,15 +47,15 @@ class QobuzBaseRequest : public QObject { explicit QobuzBaseRequest(QobuzService *service, NetworkAccessManager *network, QObject *parent = nullptr); ~QobuzBaseRequest(); - enum QueryType { - QueryType_None, - QueryType_Artists, - QueryType_Albums, - QueryType_Songs, - QueryType_SearchArtists, - QueryType_SearchAlbums, - QueryType_SearchSongs, - QueryType_StreamURL, + enum class QueryType { + None, + Artists, + Albums, + Songs, + SearchArtists, + SearchAlbums, + SearchSongs, + StreamURL }; protected: diff --git a/src/qobuz/qobuzfavoriterequest.cpp b/src/qobuz/qobuzfavoriterequest.cpp index c5cab180c..aa51e0a7c 100644 --- a/src/qobuz/qobuzfavoriterequest.cpp +++ b/src/qobuz/qobuzfavoriterequest.cpp @@ -54,11 +54,11 @@ QobuzFavoriteRequest::~QobuzFavoriteRequest() { QString QobuzFavoriteRequest::FavoriteText(const FavoriteType type) { switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: return "artists"; - case FavoriteType_Albums: + case FavoriteType::Albums: return "albums"; - case FavoriteType_Songs: + case FavoriteType::Songs: default: return "tracks"; } @@ -68,13 +68,13 @@ QString QobuzFavoriteRequest::FavoriteText(const FavoriteType type) { QString QobuzFavoriteRequest::FavoriteMethod(const FavoriteType type) { switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: return "artist_ids"; break; - case FavoriteType_Albums: + case FavoriteType::Albums: return "album_ids"; break; - case FavoriteType_Songs: + case FavoriteType::Songs: return "track_ids"; break; } @@ -84,19 +84,19 @@ QString QobuzFavoriteRequest::FavoriteMethod(const FavoriteType type) { } void QobuzFavoriteRequest::AddArtists(const SongList &songs) { - AddFavorites(FavoriteType_Artists, songs); + AddFavorites(FavoriteType::Artists, songs); } void QobuzFavoriteRequest::AddAlbums(const SongList &songs) { - AddFavorites(FavoriteType_Albums, songs); + AddFavorites(FavoriteType::Albums, songs); } void QobuzFavoriteRequest::AddSongs(const SongList &songs) { - AddFavorites(FavoriteType_Songs, songs); + AddFavorites(FavoriteType::Songs, songs); } void QobuzFavoriteRequest::AddSongs(const SongMap &songs) { - AddFavoritesRequest(FavoriteType_Songs, songs.keys(), songs.values()); + AddFavoritesRequest(FavoriteType::Songs, songs.keys(), songs.values()); } void QobuzFavoriteRequest::AddFavorites(const FavoriteType type, const SongList &songs) { @@ -105,15 +105,15 @@ void QobuzFavoriteRequest::AddFavorites(const FavoriteType type, const SongList for (const Song &song : songs) { QString id; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: if (song.artist_id().isEmpty()) continue; id = song.artist_id(); break; - case FavoriteType_Albums: + case FavoriteType::Albums: if (song.album_id().isEmpty()) continue; id = song.album_id(); break; - case FavoriteType_Songs: + case FavoriteType::Songs: if (song.song_id().isEmpty()) continue; id = song.song_id(); break; @@ -165,13 +165,13 @@ void QobuzFavoriteRequest::AddFavoritesReply(QNetworkReply *reply, const Favorit qLog(Debug) << "Qobuz:" << songs.count() << "songs added to" << FavoriteText(type) << "favorites."; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: emit ArtistsAdded(songs); break; - case FavoriteType_Albums: + case FavoriteType::Albums: emit AlbumsAdded(songs); break; - case FavoriteType_Songs: + case FavoriteType::Songs: emit SongsAdded(songs); break; } @@ -179,19 +179,19 @@ void QobuzFavoriteRequest::AddFavoritesReply(QNetworkReply *reply, const Favorit } void QobuzFavoriteRequest::RemoveArtists(const SongList &songs) { - RemoveFavorites(FavoriteType_Artists, songs); + RemoveFavorites(FavoriteType::Artists, songs); } void QobuzFavoriteRequest::RemoveAlbums(const SongList &songs) { - RemoveFavorites(FavoriteType_Albums, songs); + RemoveFavorites(FavoriteType::Albums, songs); } void QobuzFavoriteRequest::RemoveSongs(const SongList &songs) { - RemoveFavorites(FavoriteType_Songs, songs); + RemoveFavorites(FavoriteType::Songs, songs); } void QobuzFavoriteRequest::RemoveSongs(const SongMap &songs) { - RemoveFavoritesRequest(FavoriteType_Songs, songs.keys(), songs.values()); + RemoveFavoritesRequest(FavoriteType::Songs, songs.keys(), songs.values()); } void QobuzFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongList &songs) { @@ -200,15 +200,15 @@ void QobuzFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongLi for (const Song &song : songs) { QString id; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: if (song.artist_id().isEmpty()) continue; id = song.artist_id(); break; - case FavoriteType_Albums: + case FavoriteType::Albums: if (song.album_id().isEmpty()) continue; id = song.album_id(); break; - case FavoriteType_Songs: + case FavoriteType::Songs: if (song.song_id().isEmpty()) continue; id = song.song_id(); break; @@ -259,13 +259,13 @@ void QobuzFavoriteRequest::RemoveFavoritesReply(QNetworkReply *reply, const Favo qLog(Debug) << "Qobuz:" << songs.count() << "songs removed from" << FavoriteText(type) << "favorites."; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: emit ArtistsRemoved(songs); break; - case FavoriteType_Albums: + case FavoriteType::Albums: emit AlbumsRemoved(songs); break; - case FavoriteType_Songs: + case FavoriteType::Songs: emit SongsRemoved(songs); break; } diff --git a/src/qobuz/qobuzfavoriterequest.h b/src/qobuz/qobuzfavoriterequest.h index 81a8b23a1..c7f49fd96 100644 --- a/src/qobuz/qobuzfavoriterequest.h +++ b/src/qobuz/qobuzfavoriterequest.h @@ -41,10 +41,11 @@ class QobuzFavoriteRequest : public QobuzBaseRequest { explicit QobuzFavoriteRequest(QobuzService *service, NetworkAccessManager *network, QObject *parent = nullptr); ~QobuzFavoriteRequest(); - enum FavoriteType { - FavoriteType_Artists, - FavoriteType_Albums, - FavoriteType_Songs + private: + enum class FavoriteType { + Artists, + Albums, + Songs }; signals: diff --git a/src/qobuz/qobuzrequest.cpp b/src/qobuz/qobuzrequest.cpp index 84f52c9e0..f68ec6120 100644 --- a/src/qobuz/qobuzrequest.cpp +++ b/src/qobuz/qobuzrequest.cpp @@ -51,14 +51,14 @@ constexpr int QobuzRequest::kMaxConcurrentAlbumSongsRequests = 3; constexpr int QobuzRequest::kMaxConcurrentAlbumCoverRequests = 1; constexpr int QobuzRequest::kFlushRequestsDelay = 200; -QobuzRequest::QobuzRequest(QobuzService *service, QobuzUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType type, QObject *parent) +QobuzRequest::QobuzRequest(QobuzService *service, QobuzUrlHandler *url_handler, Application *app, NetworkAccessManager *network, const QueryType query_type, QObject *parent) : QobuzBaseRequest(service, network, parent), service_(service), url_handler_(url_handler), app_(app), network_(network), timer_flush_requests_(new QTimer(this)), - type_(type), + query_type_(query_type), query_id_(-1), finished_(false), artists_requests_total_(0), @@ -117,23 +117,23 @@ QobuzRequest::~QobuzRequest() { void QobuzRequest::Process() { - switch (type_) { - case QueryType::QueryType_Artists: + switch (query_type_) { + case QueryType::Artists: GetArtists(); break; - case QueryType::QueryType_Albums: + case QueryType::Albums: GetAlbums(); break; - case QueryType::QueryType_Songs: + case QueryType::Songs: GetSongs(); break; - case QueryType::QueryType_SearchArtists: + case QueryType::SearchArtists: ArtistsSearch(); break; - case QueryType::QueryType_SearchAlbums: + case QueryType::SearchAlbums: AlbumsSearch(); break; - case QueryType::QueryType_SearchSongs: + case QueryType::SearchSongs: SongsSearch(); break; default: @@ -220,18 +220,18 @@ void QobuzRequest::FlushArtistsRequests() { Request request = artists_requests_queue_.dequeue(); ParamList params; - if (type_ == QueryType_Artists) { + if (query_type_ == QueryType::Artists) { params << Param("type", "artists"); params << Param("user_auth_token", user_auth_token()); } - else if (type_ == QueryType_SearchArtists) params << Param("query", search_text_); + else if (query_type_ == QueryType::SearchArtists) params << Param("query", search_text_); if (request.limit > 0) params << Param("limit", QString::number(request.limit)); if (request.offset > 0) params << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Artists) { + if (query_type_ == QueryType::Artists) { reply = CreateRequest(QString("favorite/getUserFavorites"), params); } - else if (type_ == QueryType_SearchArtists) { + else if (query_type_ == QueryType::SearchArtists) { reply = CreateRequest("artist/search", params); } if (!reply) continue; @@ -272,18 +272,18 @@ void QobuzRequest::FlushAlbumsRequests() { Request request = albums_requests_queue_.dequeue(); ParamList params; - if (type_ == QueryType_Albums) { + if (query_type_ == QueryType::Albums) { params << Param("type", "albums"); params << Param("user_auth_token", user_auth_token()); } - else if (type_ == QueryType_SearchAlbums) params << Param("query", search_text_); + else if (query_type_ == QueryType::SearchAlbums) params << Param("query", search_text_); if (request.limit > 0) params << Param("limit", QString::number(request.limit)); if (request.offset > 0) params << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Albums) { + if (query_type_ == QueryType::Albums) { reply = CreateRequest(QString("favorite/getUserFavorites"), params); } - else if (type_ == QueryType_SearchAlbums) { + else if (query_type_ == QueryType::SearchAlbums) { reply = CreateRequest("album/search", params); } if (!reply) continue; @@ -324,18 +324,18 @@ void QobuzRequest::FlushSongsRequests() { Request request = songs_requests_queue_.dequeue(); ParamList params; - if (type_ == QueryType_Songs) { + if (query_type_ == QueryType::Songs) { params << Param("type", "tracks"); params << Param("user_auth_token", user_auth_token()); } - else if (type_ == QueryType_SearchSongs) params << Param("query", search_text_); + else if (query_type_ == QueryType::SearchSongs) params << Param("query", search_text_); if (request.limit > 0) params << Param("limit", QString::number(request.limit)); if (request.offset > 0) params << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Songs) { + if (query_type_ == QueryType::Songs) { reply = CreateRequest(QString("favorite/getUserFavorites"), params); } - else if (type_ == QueryType_SearchSongs) { + else if (query_type_ == QueryType::SearchSongs) { reply = CreateRequest("track/search", params); } if (!reply) continue; @@ -528,8 +528,8 @@ void QobuzRequest::ArtistsFinishCheck(const int limit, const int offset, const i if ((limit == 0 || limit > artists_received) && artists_received_ < artists_total_) { int offset_next = offset + artists_received; if (offset_next > 0 && offset_next < artists_total_) { - if (type_ == QueryType_Artists) AddArtistsRequest(offset_next); - else if (type_ == QueryType_SearchArtists) AddArtistsSearchRequest(offset_next); + if (query_type_ == QueryType::Artists) AddArtistsRequest(offset_next); + else if (query_type_ == QueryType::SearchArtists) AddArtistsSearchRequest(offset_next); } } @@ -683,7 +683,7 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } QJsonArray array_items = value_items.toArray(); if (array_items.isEmpty()) { - if ((type_ == QueryType_Albums || type_ == QueryType_SearchAlbums) && offset_requested == 0) { + if ((query_type_ == QueryType::Albums || query_type_ == QueryType::SearchAlbums) && offset_requested == 0) { no_results_ = true; } AlbumsFinishCheck(artist_requested); @@ -749,7 +749,7 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } - if (type_ == QueryType_Albums || type_ == QueryType_SearchAlbums) { + if (query_type_ == QueryType::Albums || query_type_ == QueryType::SearchAlbums) { albums_received_ += albums_received; emit UpdateProgress(query_id_, GetProgress(albums_received_, albums_total_)); } @@ -765,15 +765,15 @@ void QobuzRequest::AlbumsFinishCheck(const Artist &artist, const int limit, cons if (limit == 0 || limit > albums_received) { int offset_next = offset + albums_received; if (offset_next > 0 && offset_next < albums_total) { - switch (type_) { - case QueryType_Albums: + switch (query_type_) { + case QueryType::Albums: AddAlbumsRequest(offset_next); break; - case QueryType_SearchAlbums: + case QueryType::SearchAlbums: AddAlbumsSearchRequest(offset_next); break; - case QueryType_Artists: - case QueryType_SearchArtists: + case QueryType::Artists: + case QueryType::SearchArtists: AddArtistAlbumsRequest(artist, offset_next); break; default: @@ -978,7 +978,7 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ QJsonArray array_items = value_items.toArray(); if (array_items.isEmpty()) { - if ((type_ == QueryType_Songs || type_ == QueryType_SearchSongs) && offset_requested == 0) { + if ((query_type_ == QueryType::Songs || query_type_ == QueryType::SearchSongs) && offset_requested == 0) { no_results_ = true; } SongsFinishCheck(album_artist, album, limit_requested, offset_requested, songs_total); @@ -998,7 +998,7 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ QJsonObject obj_item = value_item.toObject(); ++songs_received; - Song song(Song::Source_Qobuz); + Song song(Song::Source::Qobuz); ParseSong(song, obj_item, album_artist, album); if (!song.is_valid()) continue; if (song.disc() >= 2) multidisc = true; @@ -1012,7 +1012,7 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ songs_.insert(song.song_id(), song); } - if (type_ == QueryType_Songs || type_ == QueryType_SearchSongs) { + if (query_type_ == QueryType::Songs || query_type_ == QueryType::SearchSongs) { songs_received_ += songs_received; emit UpdateProgress(query_id_, GetProgress(songs_received_, songs_total_)); } @@ -1028,17 +1028,17 @@ void QobuzRequest::SongsFinishCheck(const Artist &artist, const Album &album, co if (limit == 0 || limit > songs_received) { int offset_next = offset + songs_received; if (offset_next > 0 && offset_next < songs_total) { - switch (type_) { - case QueryType_Songs: + switch (query_type_) { + case QueryType::Songs: AddSongsRequest(offset_next); break; - case QueryType_SearchSongs: + case QueryType::SearchSongs: AddSongsSearchRequest(offset_next); break; - case QueryType_Artists: - case QueryType_SearchArtists: - case QueryType_Albums: - case QueryType_SearchAlbums: + case QueryType::Artists: + case QueryType::SearchArtists: + case QueryType::Albums: + case QueryType::SearchAlbums: AddAlbumSongsRequest(artist, album, offset_next); break; default: @@ -1184,7 +1184,7 @@ void QobuzRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti //qLog(Debug) << "id" << song_id << "track" << track << "title" << title << "album" << album << "album artist" << album_artist << cover_url << streamable << url; - song.set_source(Song::Source_Qobuz); + song.set_source(Song::Source::Qobuz); song.set_song_id(song_id); song.set_album_id(song_album.album_id); song.set_artist_id(song_artist.artist_id); @@ -1202,7 +1202,7 @@ void QobuzRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti song.set_composer(composer); song.set_comment(copyright); song.set_directory_id(0); - song.set_filetype(Song::FileType_Stream); + song.set_filetype(Song::FileType::Stream); song.set_filesize(0); song.set_mtime(0); song.set_ctime(0); diff --git a/src/qobuz/qobuzrequest.h b/src/qobuz/qobuzrequest.h index 9b3b4eccc..a419ec048 100644 --- a/src/qobuz/qobuzrequest.h +++ b/src/qobuz/qobuzrequest.h @@ -52,7 +52,7 @@ class QobuzRequest : public QobuzBaseRequest { public: - explicit QobuzRequest(QobuzService *service, QobuzUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType type, QObject *parent = nullptr); + explicit QobuzRequest(QobuzService *service, QobuzUrlHandler *url_handler, Application *app, NetworkAccessManager *network, const QueryType query_type, QObject *parent = nullptr); ~QobuzRequest() override; void ReloadSettings(); @@ -120,8 +120,8 @@ class QobuzRequest : public QobuzBaseRequest { private: - bool IsQuery() { return (type_ == QueryType_Artists || type_ == QueryType_Albums || type_ == QueryType_Songs); } - bool IsSearch() { return (type_ == QueryType_SearchArtists || type_ == QueryType_SearchAlbums || type_ == QueryType_SearchSongs); } + bool IsQuery() { return (query_type_ == QueryType::Artists || query_type_ == QueryType::Albums || query_type_ == QueryType::Songs); } + bool IsSearch() { return (query_type_ == QueryType::SearchArtists || query_type_ == QueryType::SearchAlbums || query_type_ == QueryType::SearchSongs); } void StartRequests(); void FlushRequests(); @@ -184,7 +184,7 @@ class QobuzRequest : public QobuzBaseRequest { NetworkAccessManager *network_; QTimer *timer_flush_requests_; - const QueryType type_; + const QueryType query_type_; int query_id_; QString search_text_; diff --git a/src/qobuz/qobuzservice.cpp b/src/qobuz/qobuzservice.cpp index a92394b10..808238191 100644 --- a/src/qobuz/qobuzservice.cpp +++ b/src/qobuz/qobuzservice.cpp @@ -57,7 +57,7 @@ #include "settings/settingsdialog.h" #include "settings/qobuzsettingspage.h" -const Song::Source QobuzService::kSource = Song::Source_Qobuz; +const Song::Source QobuzService::kSource = Song::Source::Qobuz; const char QobuzService::kApiUrl[] = "https://www.qobuz.com/api.json/0.2"; constexpr char QobuzService::kAuthUrl[] = "https://www.qobuz.com/api.json/0.2/user/login"; @@ -74,7 +74,7 @@ constexpr char QobuzService::kAlbumsSongsFtsTable[] = "qobuz_albums_songs_fts"; constexpr char QobuzService::kSongsFtsTable[] = "qobuz_songs_fts"; QobuzService::QobuzService(Application *app, QObject *parent) - : InternetService(Song::Source_Qobuz, "Qobuz", "qobuz", QobuzSettingsPage::kSettingsGroup, SettingsDialog::Page_Qobuz, app, parent), + : InternetService(Song::Source::Qobuz, "Qobuz", "qobuz", QobuzSettingsPage::kSettingsGroup, SettingsDialog::Page::Qobuz, app, parent), app_(app), network_(new NetworkAccessManager(this)), url_handler_(new QobuzUrlHandler(app, this)), @@ -100,7 +100,7 @@ QobuzService::QobuzService(Application *app, QObject *parent) credential_id_(-1), pending_search_id_(0), next_pending_search_id_(1), - pending_search_type_(InternetSearchView::SearchType_Artists), + pending_search_type_(InternetSearchView::SearchType::Artists), search_id_(0), login_sent_(false), login_attempts_(0), @@ -112,15 +112,15 @@ QobuzService::QobuzService(Application *app, QObject *parent) artists_collection_backend_ = new CollectionBackend(); artists_collection_backend_->moveToThread(app_->database()->thread()); - artists_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Qobuz, kArtistsSongsTable, kArtistsSongsFtsTable); + artists_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Qobuz, kArtistsSongsTable, kArtistsSongsFtsTable); albums_collection_backend_ = new CollectionBackend(); albums_collection_backend_->moveToThread(app_->database()->thread()); - albums_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Qobuz, kAlbumsSongsTable, kAlbumsSongsFtsTable); + albums_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Qobuz, kAlbumsSongsTable, kAlbumsSongsFtsTable); songs_collection_backend_ = new CollectionBackend(); songs_collection_backend_->moveToThread(app_->database()->thread()); - songs_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Qobuz, kSongsTable, kSongsFtsTable); + songs_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Qobuz, kSongsTable, kSongsFtsTable); artists_collection_model_ = new CollectionModel(artists_collection_backend_, app_, this); albums_collection_model_ = new CollectionModel(albums_collection_backend_, app_, this); @@ -221,7 +221,7 @@ void QobuzService::ExitReceived() { } void QobuzService::ShowConfig() { - app_->OpenSettingsDialogAtPage(SettingsDialog::Page_Qobuz); + app_->OpenSettingsDialogAtPage(SettingsDialog::Page::Qobuz); } void QobuzService::ReloadSettings() { @@ -535,7 +535,7 @@ void QobuzService::GetArtists() { } ResetArtistsRequest(); - artists_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType_Artists), [](QobuzRequest *request) { request->deleteLater(); }); + artists_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType::Artists), [](QobuzRequest *request) { request->deleteLater(); }); QObject::connect(artists_request_.get(), &QobuzRequest::Results, this, &QobuzService::ArtistsResultsReceived); QObject::connect(artists_request_.get(), &QobuzRequest::UpdateStatus, this, &QobuzService::ArtistsUpdateStatusReceived); QObject::connect(artists_request_.get(), &QobuzRequest::UpdateProgress, this, &QobuzService::ArtistsUpdateProgressReceived); @@ -585,7 +585,7 @@ void QobuzService::GetAlbums() { } ResetAlbumsRequest(); - albums_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType_Albums), [](QobuzRequest *request) { request->deleteLater(); }); + albums_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType::Albums), [](QobuzRequest *request) { request->deleteLater(); }); QObject::connect(albums_request_.get(), &QobuzRequest::Results, this, &QobuzService::AlbumsResultsReceived); QObject::connect(albums_request_.get(), &QobuzRequest::UpdateStatus, this, &QobuzService::AlbumsUpdateStatusReceived); QObject::connect(albums_request_.get(), &QobuzRequest::UpdateProgress, this, &QobuzService::AlbumsUpdateProgressReceived); @@ -635,7 +635,7 @@ void QobuzService::GetSongs() { } ResetSongsRequest(); - songs_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType_Songs), [](QobuzRequest *request) { request->deleteLater(); }); + songs_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, QobuzBaseRequest::QueryType::Songs), [](QobuzRequest *request) { request->deleteLater(); }); QObject::connect(songs_request_.get(), &QobuzRequest::Results, this, &QobuzService::SongsResultsReceived); QObject::connect(songs_request_.get(), &QobuzRequest::UpdateStatus, this, &QobuzService::SongsUpdateStatusReceived); QObject::connect(songs_request_.get(), &QobuzRequest::UpdateProgress, this, &QobuzService::SongsUpdateProgressReceived); @@ -700,21 +700,21 @@ void QobuzService::CancelSearch() { void QobuzService::SendSearch() { - QobuzBaseRequest::QueryType type = QobuzBaseRequest::QueryType_None; + QobuzBaseRequest::QueryType query_type = QobuzBaseRequest::QueryType::None; switch (pending_search_type_) { - case InternetSearchView::SearchType_Artists: - type = QobuzBaseRequest::QueryType_SearchArtists; + case InternetSearchView::SearchType::Artists: + query_type = QobuzBaseRequest::QueryType::SearchArtists; break; - case InternetSearchView::SearchType_Albums: - type = QobuzBaseRequest::QueryType_SearchAlbums; + case InternetSearchView::SearchType::Albums: + query_type = QobuzBaseRequest::QueryType::SearchAlbums; break; - case InternetSearchView::SearchType_Songs: - type = QobuzBaseRequest::QueryType_SearchSongs; + case InternetSearchView::SearchType::Songs: + query_type = QobuzBaseRequest::QueryType::SearchSongs; break; } - search_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, type), [](QobuzRequest *request) { request->deleteLater(); } ); + search_request_.reset(new QobuzRequest(this, url_handler_, app_, network_, query_type), [](QobuzRequest *request) { request->deleteLater(); } ); QObject::connect(search_request_.get(), &QobuzRequest::Results, this, &QobuzService::SearchResultsReceived); QObject::connect(search_request_.get(), &QobuzRequest::UpdateStatus, this, &QobuzService::SearchUpdateStatus); diff --git a/src/qobuz/qobuzstreamurlrequest.cpp b/src/qobuz/qobuzstreamurlrequest.cpp index d5c4931dc..567ef0dbf 100644 --- a/src/qobuz/qobuzstreamurlrequest.cpp +++ b/src/qobuz/qobuzstreamurlrequest.cpp @@ -189,16 +189,16 @@ void QobuzStreamURLRequest::StreamURLReceived() { QUrl url(json_obj["url"].toString()); QString mimetype = json_obj["mime_type"].toString(); - Song::FileType filetype(Song::FileType_Unknown); + Song::FileType filetype(Song::FileType::Unknown); QMimeDatabase mimedb; QStringList suffixes = mimedb.mimeTypeForName(mimetype.toUtf8()).suffixes(); for (const QString &suffix : suffixes) { filetype = Song::FiletypeByExtension(suffix); - if (filetype != Song::FileType_Unknown) break; + if (filetype != Song::FileType::Unknown) break; } - if (filetype == Song::FileType_Unknown) { + if (filetype == Song::FileType::Unknown) { qLog(Debug) << "Qobuz: Unknown mimetype" << mimetype; - filetype = Song::FileType_Stream; + filetype = Song::FileType::Stream; } if (!url.isValid()) { diff --git a/src/qobuz/qobuzurlhandler.cpp b/src/qobuz/qobuzurlhandler.cpp index cce85931a..238df4fcf 100644 --- a/src/qobuz/qobuzurlhandler.cpp +++ b/src/qobuz/qobuzurlhandler.cpp @@ -47,13 +47,13 @@ UrlHandler::LoadResult QobuzUrlHandler::StartLoading(const QUrl &url) { req.id = service_->GetStreamURL(url, error); if (req.id == 0) { CancelTask(req.task_id); - return LoadResult(url, LoadResult::Error, error); + return LoadResult(url, LoadResult::Type::Error, error); } requests_.insert(req.id, req); LoadResult ret(url); - ret.type_ = LoadResult::WillLoadAsynchronously; + ret.type_ = LoadResult::Type::WillLoadAsynchronously; return ret; @@ -65,7 +65,7 @@ void QobuzUrlHandler::GetStreamURLFailure(const uint id, const QUrl &original_ur Request req = requests_.take(id); CancelTask(req.task_id); - emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Error, error)); + emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Type::Error, error)); } @@ -75,7 +75,7 @@ void QobuzUrlHandler::GetStreamURLSuccess(const uint id, const QUrl &original_ur Request req = requests_.take(id); CancelTask(req.task_id); - emit AsyncLoadComplete(LoadResult(original_url, LoadResult::TrackAvailable, stream_url, filetype, samplerate, bit_depth, duration)); + emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Type::TrackAvailable, stream_url, filetype, samplerate, bit_depth, duration)); } diff --git a/src/radios/radiobackend.cpp b/src/radios/radiobackend.cpp index 4bfa55d29..55497c528 100644 --- a/src/radios/radiobackend.cpp +++ b/src/radios/radiobackend.cpp @@ -69,7 +69,7 @@ void RadioBackend::AddChannels(const RadioChannelList &channels) { q.prepare(QString("INSERT INTO radio_channels (source, name, url, thumbnail_url) VALUES (:source, :name, :url, :thumbnail_url)")); for (const RadioChannel &channel : channels) { - q.BindValue(":source", channel.source); + q.BindValue(":source", static_cast(channel.source)); q.BindValue(":name", channel.name); q.BindValue(":url", channel.url); q.BindValue(":thumbnail_url", channel.thumbnail_url); diff --git a/src/radios/radiochannel.cpp b/src/radios/radiochannel.cpp index 41be309c1..98dce5d9d 100644 --- a/src/radios/radiochannel.cpp +++ b/src/radios/radiochannel.cpp @@ -27,7 +27,7 @@ Song RadioChannel::ToSong() const { Song song(source); song.set_valid(true); - song.set_filetype(Song::FileType_Stream); + song.set_filetype(Song::FileType::Stream); song.set_title(Song::DescriptionForSource(source) + " " + name); song.set_url(url); diff --git a/src/radios/radiochannel.h b/src/radios/radiochannel.h index 08371577c..4e8162947 100644 --- a/src/radios/radiochannel.h +++ b/src/radios/radiochannel.h @@ -27,7 +27,7 @@ #include "core/song.h" struct RadioChannel { - explicit RadioChannel(const Song::Source _source = Song::Source_Unknown, const QString &_name = QString(), const QUrl &_url = QUrl(), const QUrl &_thumbnail_url = QUrl()) : source(_source), name(_name), url(_url), thumbnail_url(_thumbnail_url) {} + explicit RadioChannel(const Song::Source _source = Song::Source::Unknown, const QString &_name = QString(), const QUrl &_url = QUrl(), const QUrl &_thumbnail_url = QUrl()) : source(_source), name(_name), url(_url), thumbnail_url(_thumbnail_url) {} Song::Source source; QString name; @@ -39,5 +39,6 @@ struct RadioChannel { using RadioChannelList = QList; Q_DECLARE_METATYPE(RadioChannel) +Q_DECLARE_METATYPE(RadioChannelList) #endif // RADIOCHANNEL_H diff --git a/src/radios/radioitem.h b/src/radios/radioitem.h index 0f9e1d303..55912a54e 100644 --- a/src/radios/radioitem.h +++ b/src/radios/radioitem.h @@ -33,7 +33,7 @@ class RadioItem : public SimpleTreeItem { Type_LoadingIndicator, Type_Root, Type_Service, - Type_Channel, + Type_Channel }; explicit RadioItem(SimpleTreeModel *_model) : SimpleTreeItem(Type_Root, _model) {} diff --git a/src/radios/radiomodel.cpp b/src/radios/radiomodel.cpp index 184ff6dab..97839e7f8 100644 --- a/src/radios/radiomodel.cpp +++ b/src/radios/radiomodel.cpp @@ -110,7 +110,7 @@ QVariant RadioModel::data(const RadioItem *item, int role) const { return item->SortText(); break; case Role_Source: - return item->source; + return QVariant::fromValue(item->source); break; case Role_Homepage:{ RadioService *service = app_->radio_services()->ServiceBySource(item->source); diff --git a/src/radios/radiomodel.h b/src/radios/radiomodel.h index 944f69a7f..6cdb8e97a 100644 --- a/src/radios/radiomodel.h +++ b/src/radios/radiomodel.h @@ -57,7 +57,7 @@ class RadioModel : public SimpleTreeModel { Role_Url, Role_Homepage, Role_Donate, - RoleCount, + RoleCount }; // QAbstractItemModel diff --git a/src/radios/radioparadiseservice.cpp b/src/radios/radioparadiseservice.cpp index 9ff70af4a..33d48b5b4 100644 --- a/src/radios/radioparadiseservice.cpp +++ b/src/radios/radioparadiseservice.cpp @@ -25,7 +25,7 @@ #include "radiochannel.h" RadioParadiseService::RadioParadiseService(Application *app, NetworkAccessManager *network, QObject *parent) - : RadioService(Song::Source_RadioParadise, "Radio Paradise", IconLoader::Load("radioparadise"), app, network, parent) {} + : RadioService(Song::Source::RadioParadise, "Radio Paradise", IconLoader::Load("radioparadise"), app, network, parent) {} QUrl RadioParadiseService::Homepage() { return QUrl("https://radioparadise.com/"); } QUrl RadioParadiseService::Donate() { return QUrl("https://payments.radioparadise.com/rp2s-content.php?name=Support&file=support"); } diff --git a/src/radios/radioplaylistitem.cpp b/src/radios/radioplaylistitem.cpp index b12811f44..070769c85 100644 --- a/src/radios/radioplaylistitem.cpp +++ b/src/radios/radioplaylistitem.cpp @@ -51,8 +51,8 @@ QVariant RadioPlaylistItem::DatabaseValue(DatabaseColumn column) const { void RadioPlaylistItem::InitMetadata() { if (metadata_.title().isEmpty()) metadata_.set_title(metadata_.url().toString()); - if (metadata_.source() == Song::Source_Unknown) metadata_.set_source(Song::Source_Stream); - if (metadata_.filetype() == Song::FileType_Unknown) metadata_.set_filetype(Song::FileType_Stream); + if (metadata_.source() == Song::Source::Unknown) metadata_.set_source(Song::Source::Stream); + if (metadata_.filetype() == Song::FileType::Unknown) metadata_.set_filetype(Song::FileType::Stream); metadata_.set_valid(true); } diff --git a/src/radios/somafmservice.cpp b/src/radios/somafmservice.cpp index f98a02f93..546d2939b 100644 --- a/src/radios/somafmservice.cpp +++ b/src/radios/somafmservice.cpp @@ -37,7 +37,7 @@ const char *SomaFMService::kApiChannelsUrl = "https://somafm.com/channels.json"; SomaFMService::SomaFMService(Application *app, NetworkAccessManager *network, QObject *parent) - : RadioService(Song::Source_SomaFM, "SomaFM", IconLoader::Load("somafm"), app, network, parent) {} + : RadioService(Song::Source::SomaFM, "SomaFM", IconLoader::Load("somafm"), app, network, parent) {} SomaFMService::~SomaFMService() { Abort(); diff --git a/src/scrobbler/audioscrobbler.cpp b/src/scrobbler/audioscrobbler.cpp index f4ecc3aef..8eea753c0 100644 --- a/src/scrobbler/audioscrobbler.cpp +++ b/src/scrobbler/audioscrobbler.cpp @@ -82,17 +82,17 @@ void AudioScrobbler::ReloadSettings() { sources_.clear(); if (sources.isEmpty()) { - sources_ << Song::Source_Unknown - << Song::Source_LocalFile - << Song::Source_Collection - << Song::Source_CDDA - << Song::Source_Device - << Song::Source_Stream - << Song::Source_Tidal - << Song::Source_Subsonic - << Song::Source_Qobuz - << Song::Source_SomaFM - << Song::Source_RadioParadise; + sources_ << Song::Source::Unknown + << Song::Source::LocalFile + << Song::Source::Collection + << Song::Source::CDDA + << Song::Source::Device + << Song::Source::Stream + << Song::Source::Tidal + << Song::Source::Subsonic + << Song::Source::Qobuz + << Song::Source::SomaFM + << Song::Source::RadioParadise; } else { for (const QString &source : sources) { @@ -141,7 +141,7 @@ void AudioScrobbler::ToggleOffline() { } void AudioScrobbler::ShowConfig() { - app_->OpenSettingsDialogAtPage(SettingsDialog::Page_Scrobbler); + app_->OpenSettingsDialogAtPage(SettingsDialog::Page::Scrobbler); } void AudioScrobbler::UpdateNowPlaying(const Song &song) { diff --git a/src/scrobbler/scrobblingapi20.cpp b/src/scrobbler/scrobblingapi20.cpp index 70777cd64..3c94a055a 100644 --- a/src/scrobbler/scrobblingapi20.cpp +++ b/src/scrobbler/scrobblingapi20.cpp @@ -420,14 +420,15 @@ QByteArray ScrobblingAPI20::GetReplyData(QNetworkReply *reply) { error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()); } } + const ScrobbleErrorCode lastfm_error_code = static_cast(error_code); if (reply->error() == QNetworkReply::ContentAccessDenied || reply->error() == QNetworkReply::ContentOperationNotPermittedError || reply->error() == QNetworkReply::AuthenticationRequiredError || - error_code == ScrobbleErrorCode::InvalidSessionKey || - error_code == ScrobbleErrorCode::UnauthorizedToken || - error_code == ScrobbleErrorCode::LoginRequired || - error_code == ScrobbleErrorCode::AuthenticationFailed || - error_code == ScrobbleErrorCode::APIKeySuspended + lastfm_error_code == ScrobbleErrorCode::InvalidSessionKey || + lastfm_error_code == ScrobbleErrorCode::UnauthorizedToken || + lastfm_error_code == ScrobbleErrorCode::LoginRequired || + lastfm_error_code == ScrobbleErrorCode::AuthenticationFailed || + lastfm_error_code == ScrobbleErrorCode::APIKeySuspended ){ // Session is probably expired Logout(); diff --git a/src/scrobbler/scrobblingapi20.h b/src/scrobbler/scrobblingapi20.h index 84f40e530..47ed3941f 100644 --- a/src/scrobbler/scrobblingapi20.h +++ b/src/scrobbler/scrobblingapi20.h @@ -88,7 +88,7 @@ class ScrobblingAPI20 : public ScrobblerService { private: - enum ScrobbleErrorCode { + enum class ScrobbleErrorCode { NoError = 1, InvalidService = 2, InvalidMethod = 3, diff --git a/src/scrobbler/subsonicscrobbler.cpp b/src/scrobbler/subsonicscrobbler.cpp index 42deef138..04f34af25 100644 --- a/src/scrobbler/subsonicscrobbler.cpp +++ b/src/scrobbler/subsonicscrobbler.cpp @@ -62,7 +62,7 @@ void SubsonicScrobbler::ReloadSettings() { void SubsonicScrobbler::UpdateNowPlaying(const Song &song) { - if (song.source() != Song::Source::Source_Subsonic) return; + if (song.source() != Song::Source::Subsonic) return; song_playing_ = song; time_ = QDateTime::currentDateTime(); @@ -82,7 +82,7 @@ void SubsonicScrobbler::ClearPlaying() { void SubsonicScrobbler::Scrobble(const Song &song) { - if (song.source() != Song::Source::Source_Subsonic || song.id() != song_playing_.id() || song.url() != song_playing_.url() || !song.is_metadata_good()) return; + if (song.source() != Song::Source::Subsonic || song.id() != song_playing_.id() || song.url() != song_playing_.url() || !song.is_metadata_good()) return; if (app_->scrobbler()->IsOffline()) return; diff --git a/src/settings/appearancesettingspage.cpp b/src/settings/appearancesettingspage.cpp index 3808830a7..8bf39f3c3 100644 --- a/src/settings/appearancesettingspage.cpp +++ b/src/settings/appearancesettingspage.cpp @@ -84,7 +84,7 @@ const char *AppearanceSettingsPage::kPlaylistPlayingSongColor = "playlist_playin AppearanceSettingsPage::AppearanceSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui_AppearanceSettingsPage), - background_image_type_(BackgroundImageType_Default) { + background_image_type_(BackgroundImageType::Default) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("view-media-visualization", true, 0, 32)); @@ -94,11 +94,11 @@ AppearanceSettingsPage::AppearanceSettingsPage(SettingsDialog *dialog, QWidget * ui_->combobox_style->addItem(style, style); } - ui_->combobox_backgroundimageposition->setItemData(0, BackgroundImagePosition_UpperLeft); - ui_->combobox_backgroundimageposition->setItemData(1, BackgroundImagePosition_UpperRight); - ui_->combobox_backgroundimageposition->setItemData(2, BackgroundImagePosition_Middle); - ui_->combobox_backgroundimageposition->setItemData(3, BackgroundImagePosition_BottomLeft); - ui_->combobox_backgroundimageposition->setItemData(4, BackgroundImagePosition_BottomRight); + ui_->combobox_backgroundimageposition->setItemData(0, static_cast(BackgroundImagePosition::UpperLeft)); + ui_->combobox_backgroundimageposition->setItemData(1, static_cast(BackgroundImagePosition::UpperRight)); + ui_->combobox_backgroundimageposition->setItemData(2, static_cast(BackgroundImagePosition::Middle)); + ui_->combobox_backgroundimageposition->setItemData(3, static_cast(BackgroundImagePosition::BottomLeft)); + ui_->combobox_backgroundimageposition->setItemData(4, static_cast(BackgroundImagePosition::BottomRight)); QObject::connect(ui_->blur_slider, &QSlider::valueChanged, this, &AppearanceSettingsPage::BlurLevelChanged); QObject::connect(ui_->opacity_slider, &QSlider::valueChanged, this, &AppearanceSettingsPage::OpacityLevelChanged); @@ -160,29 +160,29 @@ void AppearanceSettingsPage::Load() { TabBarSystemColor(ui_->tabbar_system_color->isChecked()); // Playlist settings - background_image_type_ = static_cast(s.value(kBackgroundImageType).toInt()); + background_image_type_ = static_cast(s.value(kBackgroundImageType, static_cast(BackgroundImageType::Default)).toInt()); background_image_filename_ = s.value(kBackgroundImageFilename).toString(); switch (background_image_type_) { - case BackgroundImageType_Default: + case BackgroundImageType::Default: ui_->use_default_background->setChecked(true); break; - case BackgroundImageType_None: + case BackgroundImageType::None: ui_->use_no_background->setChecked(true); break; - case BackgroundImageType_Album: + case BackgroundImageType::Album: ui_->use_album_cover_background->setChecked(true); break; - case BackgroundImageType_Strawbs: + case BackgroundImageType::Strawbs: ui_->use_strawbs_background->setChecked(true); break; - case BackgroundImageType_Custom: + case BackgroundImageType::Custom: ui_->use_custom_background_image->setChecked(true); break; } ui_->background_image_filename->setText(background_image_filename_); - ui_->combobox_backgroundimageposition->setCurrentIndex(ui_->combobox_backgroundimageposition->findData(s.value(kBackgroundImagePosition, BackgroundImagePosition_BottomRight).toInt())); + ui_->combobox_backgroundimageposition->setCurrentIndex(ui_->combobox_backgroundimageposition->findData(s.value(kBackgroundImagePosition, static_cast(BackgroundImagePosition::BottomRight)).toInt())); ui_->spinbox_background_image_maxsize->setValue(s.value(kBackgroundImageMaxSize, 0).toInt()); ui_->checkbox_background_image_stretch->setChecked(s.value(kBackgroundImageStretch, false).toBool()); ui_->checkbox_background_image_do_not_cut->setChecked(s.value(kBackgroundImageDoNotCut, true).toBool()); @@ -234,32 +234,31 @@ void AppearanceSettingsPage::Save() { background_image_filename_ = ui_->background_image_filename->text(); if (ui_->use_default_background->isChecked()) { - background_image_type_ = BackgroundImageType_Default; + background_image_type_ = BackgroundImageType::Default; } else if (ui_->use_no_background->isChecked()) { - background_image_type_ = BackgroundImageType_None; + background_image_type_ = BackgroundImageType::None; } else if (ui_->use_album_cover_background->isChecked()) { - background_image_type_ = BackgroundImageType_Album; + background_image_type_ = BackgroundImageType::Album; } else if (ui_->use_strawbs_background->isChecked()) { - background_image_type_ = BackgroundImageType_Strawbs; + background_image_type_ = BackgroundImageType::Strawbs; } else if (ui_->use_custom_background_image->isChecked()) { - background_image_type_ = BackgroundImageType_Custom; + background_image_type_ = BackgroundImageType::Custom; } - s.setValue(kBackgroundImageType, background_image_type_); + s.setValue(kBackgroundImageType, static_cast(background_image_type_)); - if (background_image_type_ == BackgroundImageType_Custom) { + if (background_image_type_ == BackgroundImageType::Custom) { s.setValue(kBackgroundImageFilename, background_image_filename_); } else { s.remove(kBackgroundImageFilename); } - BackgroundImagePosition backgroundimageposition = static_cast(ui_->combobox_backgroundimageposition->itemData(ui_->combobox_backgroundimageposition->currentIndex()).toInt()); s.setValue(kBackgroundImageMaxSize, ui_->spinbox_background_image_maxsize->value()); - s.setValue(kBackgroundImagePosition, backgroundimageposition); + s.setValue(kBackgroundImagePosition, ui_->combobox_backgroundimageposition->currentData().toInt()); s.setValue(kBackgroundImageStretch, ui_->checkbox_background_image_stretch->isChecked()); s.setValue(kBackgroundImageDoNotCut, ui_->checkbox_background_image_do_not_cut->isChecked()); s.setValue(kBackgroundImageKeepAspectRatio, ui_->checkbox_background_image_keep_aspect_ratio->isChecked()); diff --git a/src/settings/appearancesettingspage.h b/src/settings/appearancesettingspage.h index fcd197b9e..0f73ab1c0 100644 --- a/src/settings/appearancesettingspage.h +++ b/src/settings/appearancesettingspage.h @@ -75,20 +75,20 @@ class AppearanceSettingsPage : public SettingsPage { static const char *kPlaylistPlayingSongColor; - enum BackgroundImageType { - BackgroundImageType_Default, - BackgroundImageType_None, - BackgroundImageType_Custom, - BackgroundImageType_Album, - BackgroundImageType_Strawbs + enum class BackgroundImageType { + Default, + None, + Custom, + Album, + Strawbs }; - enum BackgroundImagePosition { - BackgroundImagePosition_UpperLeft = 1, - BackgroundImagePosition_UpperRight = 2, - BackgroundImagePosition_Middle = 3, - BackgroundImagePosition_BottomLeft = 4, - BackgroundImagePosition_BottomRight = 5 + enum class BackgroundImagePosition { + UpperLeft = 1, + UpperRight = 2, + Middle = 3, + BottomLeft = 4, + BottomRight = 5 }; void Load() override; diff --git a/src/settings/backendsettingspage.cpp b/src/settings/backendsettingspage.cpp index c2d358554..cbf8d73ad 100644 --- a/src/settings/backendsettingspage.cpp +++ b/src/settings/backendsettingspage.cpp @@ -67,7 +67,7 @@ BackendSettingsPage::BackendSettingsPage(SettingsDialog *dialog, QWidget *parent ui_(new Ui_BackendSettingsPage), configloaded_(false), engineloaded_(false), - enginetype_current_(Engine::None) { + enginetype_current_(Engine::EngineType::None) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("soundcard", true, 0, 32)); @@ -113,15 +113,15 @@ void BackendSettingsPage::Load() { QSettings s; s.beginGroup(kSettingsGroup); - Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::None)).toString()); - if (enginetype == Engine::None && engine()) enginetype = engine()->type(); + Engine::EngineType enginetype = Engine::EngineTypeFromName(s.value("engine", EngineName(Engine::EngineType::None)).toString()); + if (enginetype == Engine::EngineType::None && engine()) enginetype = engine()->type(); ui_->combobox_engine->clear(); #ifdef HAVE_GSTREAMER - ui_->combobox_engine->addItem(IconLoader::Load("gstreamer"), EngineDescription(Engine::GStreamer), QVariant::fromValue(static_cast(Engine::GStreamer))); + ui_->combobox_engine->addItem(IconLoader::Load("gstreamer"), EngineDescription(Engine::EngineType::GStreamer), static_cast(Engine::EngineType::GStreamer)); #endif #ifdef HAVE_VLC - ui_->combobox_engine->addItem(IconLoader::Load("vlc"), EngineDescription(Engine::VLC), QVariant::fromValue(static_cast(Engine::VLC))); + ui_->combobox_engine->addItem(IconLoader::Load("vlc"), EngineDescription(Engine::EngineType::VLC), static_cast(Engine::EngineType::VLC)); #endif enginetype_current_ = enginetype; @@ -133,20 +133,17 @@ void BackendSettingsPage::Load() { #ifdef HAVE_ALSA ui_->lineedit_device->show(); ui_->widget_alsa_plugin->show(); - int alsaplug_int = alsa_plugin(s.value("alsaplugin", 0).toInt()); - if (static_cast(alsaplug_int)) { - alsa_plugin alsaplugin = static_cast(alsaplug_int); - switch (alsaplugin) { - case alsa_plugin::alsa_hw: - ui_->radiobutton_alsa_hw->setChecked(true); - break; - case alsa_plugin::alsa_plughw: - ui_->radiobutton_alsa_plughw->setChecked(true); - break; - case alsa_plugin::alsa_pcm: - ui_->radiobutton_alsa_pcm->setChecked(true); - break; - } + const ALSAPluginType alsa_plugin_type = static_cast(s.value("alsaplugin", static_cast(ALSAPluginType::PCM)).toInt()); + switch (alsa_plugin_type) { + case ALSAPluginType::HW: + ui_->radiobutton_alsa_hw->setChecked(true); + break; + case ALSAPluginType::PlugHW: + ui_->radiobutton_alsa_plughw->setChecked(true); + break; + case ALSAPluginType::PCM: + ui_->radiobutton_alsa_pcm->setChecked(true); + break; } #else ui_->lineedit_device->hide(); @@ -191,7 +188,7 @@ void BackendSettingsPage::Load() { if (!EngineInitialized()) return; - if (engine()->state() == Engine::Empty) { + if (engine()->state() == Engine::State::Empty) { if (ui_->combobox_engine->count() > 1) ui_->combobox_engine->setEnabled(true); else ui_->combobox_engine->setEnabled(false); } @@ -234,7 +231,7 @@ void BackendSettingsPage::Load() { bool BackendSettingsPage::EngineInitialized() { - if (!engine() || engine()->type() == Engine::None) { + if (!engine() || engine()->type() == Engine::EngineType::None) { errordialog_.ShowMessage("Engine is not initialized! Please restart."); return false; } @@ -309,7 +306,7 @@ void BackendSettingsPage::Load_Output(QString output, QVariant device) { } } - if (engine()->type() == Engine::GStreamer) { + if (engine()->type() == Engine::EngineType::GStreamer) { ui_->groupbox_buffer->setEnabled(true); ui_->groupbox_replaygain->setEnabled(true); } @@ -335,7 +332,7 @@ void BackendSettingsPage::Load_Device(const QString &output, const QVariant &dev ui_->lineedit_device->clear(); #ifdef Q_OS_WIN - if (engine()->type() != Engine::GStreamer) + if (engine()->type() != Engine::EngineType::GStreamer) #endif ui_->combobox_device->addItem(IconLoader::Load("soundcard"), kOutputAutomaticallySelect, QVariant()); @@ -364,29 +361,29 @@ void BackendSettingsPage::Load_Device(const QString &output, const QVariant &dev ui_->radiobutton_alsa_pcm->setEnabled(true); if (device.toString().contains(QRegularExpression("^hw:.*"))) { ui_->radiobutton_alsa_hw->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_hw); + SwitchALSADevices(ALSAPluginType::HW); } else if (device.toString().contains(QRegularExpression("^plughw:.*"))) { ui_->radiobutton_alsa_plughw->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_plughw); + SwitchALSADevices(ALSAPluginType::PlugHW); } else if (device.toString().contains(QRegularExpression("^.*:.*CARD=.*")) || device.toString().contains(QRegularExpression("^.*:.*DEV=.*"))) { ui_->radiobutton_alsa_pcm->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_pcm); + SwitchALSADevices(ALSAPluginType::PCM); } else { if (ui_->radiobutton_alsa_hw->isChecked()) { - SwitchALSADevices(alsa_plugin::alsa_hw); + SwitchALSADevices(ALSAPluginType::HW); } else if (ui_->radiobutton_alsa_plughw->isChecked()) { - SwitchALSADevices(alsa_plugin::alsa_plughw); + SwitchALSADevices(ALSAPluginType::PlugHW); } else if (ui_->radiobutton_alsa_pcm->isChecked()) { - SwitchALSADevices(alsa_plugin::alsa_pcm); + SwitchALSADevices(ALSAPluginType::PCM); } else { ui_->radiobutton_alsa_hw->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_hw); + SwitchALSADevices(ALSAPluginType::HW); } } } @@ -462,9 +459,9 @@ void BackendSettingsPage::Save() { s.setValue("device", device_value); #ifdef HAVE_ALSA - if (ui_->radiobutton_alsa_hw->isChecked()) s.setValue("alsaplugin", static_cast(alsa_plugin::alsa_hw)); - else if (ui_->radiobutton_alsa_plughw->isChecked()) s.setValue("alsaplugin", static_cast(alsa_plugin::alsa_plughw)); - else if (ui_->radiobutton_alsa_pcm->isChecked()) s.setValue("alsaplugin", static_cast(alsa_plugin::alsa_pcm)); + if (ui_->radiobutton_alsa_hw->isChecked()) s.setValue("alsaplugin", static_cast(ALSAPluginType::HW)); + else if (ui_->radiobutton_alsa_plughw->isChecked()) s.setValue("alsaplugin", static_cast(ALSAPluginType::PlugHW)); + else if (ui_->radiobutton_alsa_pcm->isChecked()) s.setValue("alsaplugin", static_cast(ALSAPluginType::PCM)); else s.remove("alsaplugin"); #endif @@ -517,7 +514,7 @@ void BackendSettingsPage::EngineChanged(const int index) { if (engine()->type() == enginetype) return; - if (engine()->state() != Engine::Empty) { + if (engine()->state() != Engine::State::Empty) { errordialog_.ShowMessage("Can't switch engine while playing!"); ui_->combobox_engine->setCurrentIndex(ui_->combobox_engine->findData(static_cast(engine()->type()))); return; @@ -576,15 +573,15 @@ void BackendSettingsPage::DeviceStringChanged() { if (engine()->ALSADeviceSupport(output.name)) { if (ui_->lineedit_device->text().contains(QRegularExpression("^hw:.*")) && !ui_->radiobutton_alsa_hw->isChecked()) { ui_->radiobutton_alsa_hw->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_hw); + SwitchALSADevices(ALSAPluginType::HW); } else if (ui_->lineedit_device->text().contains(QRegularExpression("^plughw:.*")) && !ui_->radiobutton_alsa_plughw->isChecked()) { ui_->radiobutton_alsa_plughw->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_plughw); + SwitchALSADevices(ALSAPluginType::PlugHW); } else if ((ui_->lineedit_device->text().contains(QRegularExpression("^.*:.*CARD=.*")) || ui_->lineedit_device->text().contains(QRegularExpression("^.*:.*DEV=.*"))) && !ui_->radiobutton_alsa_pcm->isChecked()) { ui_->radiobutton_alsa_pcm->setChecked(true); - SwitchALSADevices(alsa_plugin::alsa_pcm); + SwitchALSADevices(ALSAPluginType::PCM); } } #endif @@ -646,18 +643,18 @@ void BackendSettingsPage::RgFallbackGainChanged(const int value) { } #ifdef HAVE_ALSA -void BackendSettingsPage::SwitchALSADevices(const alsa_plugin alsaplugin) { +void BackendSettingsPage::SwitchALSADevices(const ALSAPluginType alsa_plugin_type) { // All ALSA devices are listed twice, one for "hw" and one for "plughw" // Only show one of them by making the other ones invisible based on the alsa plugin radiobuttons for (int i = 0; i < ui_->combobox_device->count(); ++i) { QListView *view = qobject_cast(ui_->combobox_device->view()); if (!view) continue; - if ((ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^hw:.*")) && alsaplugin != alsa_plugin::alsa_hw) + if ((ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^hw:.*")) && alsa_plugin_type != ALSAPluginType::HW) || - (ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^plughw:.*")) && alsaplugin != alsa_plugin::alsa_plughw) + (ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^plughw:.*")) && alsa_plugin_type != ALSAPluginType::PlugHW) || - ((ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^.*:.*CARD=.*")) || ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^.*:.*DEV=.*"))) && alsaplugin != alsa_plugin::alsa_pcm) + ((ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^.*:.*CARD=.*")) || ui_->combobox_device->itemData(i).toString().contains(QRegularExpression("^.*:.*DEV=.*"))) && alsa_plugin_type != ALSAPluginType::PCM) ) { view->setRowHidden(i, true); } @@ -680,7 +677,7 @@ void BackendSettingsPage::radiobutton_alsa_hw_clicked(const bool checked) { EngineBase::OutputDetails output = ui_->combobox_output->itemData(ui_->combobox_output->currentIndex()).value(); if (!engine()->ALSADeviceSupport(output.name)) return; - SwitchALSADevices(alsa_plugin::alsa_hw); + SwitchALSADevices(ALSAPluginType::HW); QString device_new = ui_->lineedit_device->text(); @@ -709,7 +706,7 @@ void BackendSettingsPage::radiobutton_alsa_plughw_clicked(const bool checked) { EngineBase::OutputDetails output = ui_->combobox_output->itemData(ui_->combobox_output->currentIndex()).value(); if (!engine()->ALSADeviceSupport(output.name)) return; - SwitchALSADevices(alsa_plugin::alsa_plughw); + SwitchALSADevices(ALSAPluginType::PlugHW); QString device_new = ui_->lineedit_device->text(); @@ -738,7 +735,7 @@ void BackendSettingsPage::radiobutton_alsa_pcm_clicked(const bool checked) { EngineBase::OutputDetails output = ui_->combobox_output->itemData(ui_->combobox_output->currentIndex()).value(); if (!engine()->ALSADeviceSupport(output.name)) return; - SwitchALSADevices(alsa_plugin::alsa_pcm); + SwitchALSADevices(ALSAPluginType::PCM); QString device_new = ui_->lineedit_device->text(); @@ -798,7 +795,7 @@ void BackendSettingsPage::FadingOptionsChanged() { if (!configloaded_ || !EngineInitialized()) return; EngineBase::OutputDetails output = ui_->combobox_output->itemData(ui_->combobox_output->currentIndex()).value(); - if (engine()->type() == Engine::GStreamer && + if (engine()->type() == Engine::EngineType::GStreamer && !(engine()->ALSADeviceSupport(output.name) && !ui_->lineedit_device->text().isEmpty() && (ui_->lineedit_device->text().contains(QRegularExpression("^hw:.*")) || ui_->lineedit_device->text().contains(QRegularExpression("^plughw:.*"))))) { ui_->groupbox_fading->setEnabled(true); } diff --git a/src/settings/backendsettingspage.h b/src/settings/backendsettingspage.h index 27c33f967..b83890a2e 100644 --- a/src/settings/backendsettingspage.h +++ b/src/settings/backendsettingspage.h @@ -55,6 +55,14 @@ class BackendSettingsPage : public SettingsPage { EngineBase *engine() const { return dialog()->app()->player()->engine(); } +#ifdef HAVE_ALSA + enum class ALSAPluginType { + HW = 1, + PlugHW = 2, + PCM = 3 + }; +#endif + private slots: void EngineChanged(const int index); void OutputChanged(const int index); @@ -69,13 +77,6 @@ class BackendSettingsPage : public SettingsPage { void BufferDefaults(); private: -#ifdef HAVE_ALSA - enum alsa_plugin { - alsa_hw = 1, - alsa_plughw = 2, - alsa_pcm = 3 - }; -#endif bool EngineInitialized(); @@ -83,7 +84,7 @@ class BackendSettingsPage : public SettingsPage { void Load_Output(QString output, QVariant device); void Load_Device(const QString &output, const QVariant &device); #ifdef HAVE_ALSA - void SwitchALSADevices(const alsa_plugin alsaplugin); + void SwitchALSADevices(const ALSAPluginType alsa_plugin_type); #endif void SelectDevice(const QString &device_new); diff --git a/src/settings/behavioursettingspage.cpp b/src/settings/behavioursettingspage.cpp index 467782ecb..3101900f0 100644 --- a/src/settings/behavioursettingspage.cpp +++ b/src/settings/behavioursettingspage.cpp @@ -116,24 +116,24 @@ BehaviourSettingsPage::BehaviourSettingsPage(SettingsDialog *dialog, QWidget *pa ui_->groupbox_language->setVisible(false); #endif - ui_->combobox_menuplaymode->setItemData(0, PlayBehaviour_Never); - ui_->combobox_menuplaymode->setItemData(1, PlayBehaviour_IfStopped); - ui_->combobox_menuplaymode->setItemData(2, PlayBehaviour_Always); + ui_->combobox_menuplaymode->setItemData(0, static_cast(PlayBehaviour::Never)); + ui_->combobox_menuplaymode->setItemData(1, static_cast(PlayBehaviour::IfStopped)); + ui_->combobox_menuplaymode->setItemData(2, static_cast(PlayBehaviour::Always)); - ui_->combobox_previousmode->setItemData(0, PreviousBehaviour_DontRestart); - ui_->combobox_previousmode->setItemData(1, PreviousBehaviour_Restart); + ui_->combobox_previousmode->setItemData(0, static_cast(PreviousBehaviour::DontRestart)); + ui_->combobox_previousmode->setItemData(1, static_cast(PreviousBehaviour::Restart)); - ui_->combobox_doubleclickaddmode->setItemData(0, AddBehaviour_Append); - ui_->combobox_doubleclickaddmode->setItemData(1, AddBehaviour_Load); - ui_->combobox_doubleclickaddmode->setItemData(2, AddBehaviour_OpenInNew); - ui_->combobox_doubleclickaddmode->setItemData(3, AddBehaviour_Enqueue); + ui_->combobox_doubleclickaddmode->setItemData(0, static_cast(AddBehaviour::Append)); + ui_->combobox_doubleclickaddmode->setItemData(1, static_cast(AddBehaviour::Load)); + ui_->combobox_doubleclickaddmode->setItemData(2, static_cast(AddBehaviour::OpenInNew)); + ui_->combobox_doubleclickaddmode->setItemData(3, static_cast(AddBehaviour::Enqueue)); - ui_->combobox_doubleclickplaymode->setItemData(0, PlayBehaviour_Never); - ui_->combobox_doubleclickplaymode->setItemData(1, PlayBehaviour_IfStopped); - ui_->combobox_doubleclickplaymode->setItemData(2, PlayBehaviour_Always); + ui_->combobox_doubleclickplaymode->setItemData(0, static_cast(PlayBehaviour::Never)); + ui_->combobox_doubleclickplaymode->setItemData(1, static_cast(PlayBehaviour::IfStopped)); + ui_->combobox_doubleclickplaymode->setItemData(2, static_cast(PlayBehaviour::Always)); - ui_->combobox_doubleclickplaylistaddmode->setItemData(0, PlaylistAddBehaviour_Play); - ui_->combobox_doubleclickplaylistaddmode->setItemData(1, PlaylistAddBehaviour_Enqueue); + ui_->combobox_doubleclickplaylistaddmode->setItemData(0, static_cast(PlaylistAddBehaviour::Play)); + ui_->combobox_doubleclickplaylistaddmode->setItemData(1, static_cast(PlaylistAddBehaviour::Enqueue)); } @@ -177,26 +177,25 @@ void BehaviourSettingsPage::Load() { ui_->checkbox_playingwidget->setChecked(s.value("playing_widget", true).toBool()); #ifndef Q_OS_MACOS - StartupBehaviour behaviour = StartupBehaviour(s.value("startupbehaviour", Startup_Remember).toInt()); - switch (behaviour) { - case Startup_Show: + const StartupBehaviour startup_behaviour = static_cast(s.value("startupbehaviour", static_cast(StartupBehaviour::Remember)).toInt()); + switch (startup_behaviour) { + case StartupBehaviour::Show: ui_->radiobutton_show->setChecked(true); break; - case Startup_ShowMaximized: + case StartupBehaviour::ShowMaximized: ui_->radiobutton_show_maximized->setChecked(true); break; - case Startup_ShowMinimized: + case StartupBehaviour::ShowMinimized: ui_->radiobutton_show_minimized->setChecked(true); break; - case Startup_Hide: + case StartupBehaviour::Hide: if (systemtray_available_) { ui_->radiobutton_hide->setChecked(true); break; } ; [[fallthrough]]; - case BehaviourSettingsPage::Startup_Remember: - default: + case BehaviourSettingsPage::StartupBehaviour::Remember: ui_->radiobutton_remember->setChecked(true); break; } @@ -210,15 +209,15 @@ void BehaviourSettingsPage::Load() { ui_->combobox_language->setCurrentIndex(ui_->combobox_language->findText(name)); } - ui_->combobox_menuplaymode->setCurrentIndex(ui_->combobox_menuplaymode->findData(s.value("menu_playmode", PlayBehaviour_Never).toInt())); + ui_->combobox_menuplaymode->setCurrentIndex(ui_->combobox_menuplaymode->findData(s.value("menu_playmode", static_cast(PlayBehaviour::Never)).toInt())); - ui_->combobox_previousmode->setCurrentIndex(ui_->combobox_previousmode->findData(s.value("menu_previousmode", PreviousBehaviour_DontRestart).toInt())); + ui_->combobox_previousmode->setCurrentIndex(ui_->combobox_previousmode->findData(s.value("menu_previousmode", static_cast(PreviousBehaviour::DontRestart)).toInt())); - ui_->combobox_doubleclickaddmode->setCurrentIndex(ui_->combobox_doubleclickaddmode->findData(s.value("doubleclick_addmode", AddBehaviour_Append).toInt())); + ui_->combobox_doubleclickaddmode->setCurrentIndex(ui_->combobox_doubleclickaddmode->findData(s.value("doubleclick_addmode", static_cast(AddBehaviour::Append)).toInt())); - ui_->combobox_doubleclickplaymode->setCurrentIndex(ui_->combobox_doubleclickplaymode->findData(s.value("doubleclick_playmode", PlayBehaviour_Never).toInt())); + ui_->combobox_doubleclickplaymode->setCurrentIndex(ui_->combobox_doubleclickplaymode->findData(s.value("doubleclick_playmode", static_cast(PlayBehaviour::Never)).toInt())); - ui_->combobox_doubleclickplaylistaddmode->setCurrentIndex(ui_->combobox_doubleclickplaylistaddmode->findData(s.value("doubleclick_playlist_addmode", PlaylistAddBehaviour_Play).toInt())); + ui_->combobox_doubleclickplaylistaddmode->setCurrentIndex(ui_->combobox_doubleclickplaylistaddmode->findData(s.value("doubleclick_playlist_addmode", static_cast(PlaylistAddBehaviour::Play)).toInt())); ui_->spinbox_seekstepsec->setValue(s.value("seek_step_sec", 10).toInt()); @@ -241,30 +240,30 @@ void BehaviourSettingsPage::Save() { s.setValue("resumeplayback", ui_->checkbox_resumeplayback->isChecked()); s.setValue("playing_widget", ui_->checkbox_playingwidget->isChecked()); - StartupBehaviour behaviour = Startup_Remember; - if (ui_->radiobutton_remember->isChecked()) behaviour = Startup_Remember; - if (ui_->radiobutton_show->isChecked()) behaviour = Startup_Show; - if (ui_->radiobutton_hide->isChecked()) behaviour = Startup_Hide; - if (ui_->radiobutton_show_maximized->isChecked()) behaviour = Startup_ShowMaximized; - if (ui_->radiobutton_show_minimized->isChecked()) behaviour = Startup_ShowMinimized; - s.setValue("startupbehaviour", static_cast(behaviour)); + StartupBehaviour startup_behaviour = StartupBehaviour::Remember; + if (ui_->radiobutton_remember->isChecked()) startup_behaviour = StartupBehaviour::Remember; + if (ui_->radiobutton_show->isChecked()) startup_behaviour = StartupBehaviour::Show; + if (ui_->radiobutton_hide->isChecked()) startup_behaviour = StartupBehaviour::Hide; + if (ui_->radiobutton_show_maximized->isChecked()) startup_behaviour = StartupBehaviour::ShowMaximized; + if (ui_->radiobutton_show_minimized->isChecked()) startup_behaviour = StartupBehaviour::ShowMinimized; + s.setValue("startupbehaviour", static_cast(startup_behaviour)); s.setValue("language", language_map_.contains(ui_->combobox_language->currentText()) ? language_map_[ui_->combobox_language->currentText()] : QString()); - PlayBehaviour menu_playmode = static_cast(ui_->combobox_menuplaymode->itemData(ui_->combobox_menuplaymode->currentIndex()).toInt()); + const PlayBehaviour menu_playmode = static_cast(ui_->combobox_menuplaymode->currentData().toInt()); - PreviousBehaviour menu_previousmode = static_cast(ui_->combobox_previousmode->itemData(ui_->combobox_previousmode->currentIndex()).toInt()); - AddBehaviour doubleclick_addmode = static_cast(ui_->combobox_doubleclickaddmode->itemData(ui_->combobox_doubleclickaddmode->currentIndex()).toInt()); + const PreviousBehaviour menu_previousmode = static_cast(ui_->combobox_previousmode->currentData().toInt()); + const AddBehaviour doubleclick_addmode = static_cast(ui_->combobox_doubleclickaddmode->currentData().toInt()); - PlayBehaviour doubleclick_playmode = static_cast(ui_->combobox_doubleclickplaymode->itemData(ui_->combobox_doubleclickplaymode->currentIndex()).toInt()); + const PlayBehaviour doubleclick_playmode = static_cast(ui_->combobox_doubleclickplaymode->currentData().toInt()); - PlaylistAddBehaviour doubleclick_playlist_addmode = static_cast(ui_->combobox_doubleclickplaylistaddmode->itemData(ui_->combobox_doubleclickplaylistaddmode->currentIndex()).toInt()); + const PlaylistAddBehaviour doubleclick_playlist_addmode = static_cast(ui_->combobox_doubleclickplaylistaddmode->currentData().toInt()); - s.setValue("menu_playmode", menu_playmode); - s.setValue("menu_previousmode", menu_previousmode); - s.setValue("doubleclick_addmode", doubleclick_addmode); - s.setValue("doubleclick_playmode", doubleclick_playmode); - s.setValue("doubleclick_playlist_addmode", doubleclick_playlist_addmode); + s.setValue("menu_playmode", static_cast(menu_playmode)); + s.setValue("menu_previousmode", static_cast(menu_previousmode)); + s.setValue("doubleclick_addmode", static_cast(doubleclick_addmode)); + s.setValue("doubleclick_playmode", static_cast(doubleclick_playmode)); + s.setValue("doubleclick_playlist_addmode", static_cast(doubleclick_playlist_addmode)); s.setValue("seek_step_sec", ui_->spinbox_seekstepsec->value()); diff --git a/src/settings/behavioursettingspage.h b/src/settings/behavioursettingspage.h index fd60fa99e..095fead4f 100644 --- a/src/settings/behavioursettingspage.h +++ b/src/settings/behavioursettingspage.h @@ -43,35 +43,35 @@ class BehaviourSettingsPage : public SettingsPage { static const char *kSettingsGroup; // Don't change the values - enum StartupBehaviour { - Startup_Remember = 1, - Startup_Show = 2, - Startup_Hide = 3, - Startup_ShowMaximized = 4, - Startup_ShowMinimized = 5, + enum class StartupBehaviour { + Remember = 1, + Show = 2, + Hide = 3, + ShowMaximized = 4, + ShowMinimized = 5 }; - enum PlayBehaviour { - PlayBehaviour_Never = 1, - PlayBehaviour_IfStopped = 2, - PlayBehaviour_Always = 3, + enum class PlayBehaviour { + Never = 1, + IfStopped = 2, + Always = 3 }; - enum PreviousBehaviour { - PreviousBehaviour_DontRestart = 1, - PreviousBehaviour_Restart = 2 + enum class PreviousBehaviour { + DontRestart = 1, + Restart = 2 }; - enum AddBehaviour { - AddBehaviour_Append = 1, - AddBehaviour_Enqueue = 2, - AddBehaviour_Load = 3, - AddBehaviour_OpenInNew = 4 + enum class AddBehaviour { + Append = 1, + Enqueue = 2, + Load = 3, + OpenInNew = 4 }; - enum PlaylistAddBehaviour { - PlaylistAddBehaviour_Play = 1, - PlaylistAddBehaviour_Enqueue = 2, + enum class PlaylistAddBehaviour { + Play = 1, + Enqueue = 2 }; void Load() override; diff --git a/src/settings/collectionsettingspage.cpp b/src/settings/collectionsettingspage.cpp index c2e33f40e..6d680cf38 100644 --- a/src/settings/collectionsettingspage.cpp +++ b/src/settings/collectionsettingspage.cpp @@ -76,11 +76,22 @@ CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog, QWidget * setWindowIcon(IconLoader::Load("library-music", true, 0, 32)); ui_->add->setIcon(IconLoader::Load("document-open-folder")); - ui_->combobox_cache_size->addItems({ "KB", "MB" }); - ui_->combobox_disk_cache_size->addItems({ "KB", "MB", "GB" }); + ui_->combobox_cache_size->addItem("KB", static_cast(CacheSizeUnit::KB)); + ui_->combobox_cache_size->addItem("MB", static_cast(CacheSizeUnit::MB)); - ui_->combobox_iopriority->addItems({ "Auto", "Realtime", "Best effort", "Idle" }); - ui_->combobox_threadpriority->addItems({ "Idle", "Lowest", "Low", "Normal" }); + ui_->combobox_disk_cache_size->addItem("KB", static_cast(CacheSizeUnit::KB)); + ui_->combobox_disk_cache_size->addItem("MB", static_cast(CacheSizeUnit::MB)); + ui_->combobox_disk_cache_size->addItem("GB", static_cast(CacheSizeUnit::GB)); + + ui_->combobox_iopriority->addItem("Auto", static_cast(Utilities::IoPriority::IOPRIO_CLASS_NONE)); + ui_->combobox_iopriority->addItem("Realtime", static_cast(Utilities::IoPriority::IOPRIO_CLASS_RT)); + ui_->combobox_iopriority->addItem("Best effort", static_cast(Utilities::IoPriority::IOPRIO_CLASS_BE)); + ui_->combobox_iopriority->addItem("Idle", static_cast(Utilities::IoPriority::IOPRIO_CLASS_IDLE)); + + ui_->combobox_threadpriority->addItem("Idle", QThread::Priority::IdlePriority); + ui_->combobox_threadpriority->addItem("Lowest", QThread::Priority::LowestPriority); + ui_->combobox_threadpriority->addItem("Low", QThread::Priority::LowPriority); + ui_->combobox_threadpriority->addItem("Normal", QThread::Priority::NormalPriority); QObject::connect(ui_->add, &QPushButton::clicked, this, &CollectionSettingsPage::Add); QObject::connect(ui_->remove, &QPushButton::clicked, this, &CollectionSettingsPage::Remove); @@ -193,17 +204,27 @@ void CollectionSettingsPage::Load() { QStringList filters = s.value("cover_art_patterns", QStringList() << "front" << "cover").toStringList(); ui_->cover_art_patterns->setText(filters.join(",")); - SaveCoverType save_cover_type = SaveCoverType(s.value("save_cover_type", SaveCoverType_Cache).toInt()); + const SaveCoverType save_cover_type = static_cast(s.value("save_cover_type", static_cast(SaveCoverType::Cache)).toInt()); switch (save_cover_type) { - case SaveCoverType_Cache: ui_->radiobutton_save_albumcover_cache->setChecked(true); break; - case SaveCoverType_Album: ui_->radiobutton_save_albumcover_albumdir->setChecked(true); break; - case SaveCoverType_Embedded: ui_->radiobutton_save_albumcover_embedded->setChecked(true); break; + case SaveCoverType::Cache: + ui_->radiobutton_save_albumcover_cache->setChecked(true); + break; + case SaveCoverType::Album: + ui_->radiobutton_save_albumcover_albumdir->setChecked(true); + break; + case SaveCoverType::Embedded: + ui_->radiobutton_save_albumcover_embedded->setChecked(true); + break; } - SaveCoverFilename save_cover_filename = SaveCoverFilename(s.value("save_cover_filename", SaveCoverFilename_Pattern).toInt()); + const SaveCoverFilename save_cover_filename = static_cast(s.value("save_cover_filename", static_cast(SaveCoverFilename::Pattern)).toInt()); switch (save_cover_filename) { - case SaveCoverFilename_Hash: ui_->radiobutton_cover_hash->setChecked(true); break; - case SaveCoverFilename_Pattern: ui_->radiobutton_cover_pattern->setChecked(true); break; + case SaveCoverFilename::Hash: + ui_->radiobutton_cover_hash->setChecked(true); + break; + case SaveCoverFilename::Pattern: + ui_->radiobutton_cover_pattern->setChecked(true); + break; } QString cover_pattern = s.value("cover_pattern").toString(); if (!cover_pattern.isEmpty()) ui_->lineedit_cover_pattern->setText(cover_pattern); @@ -212,12 +233,10 @@ void CollectionSettingsPage::Load() { ui_->checkbox_cover_replace_spaces->setChecked(s.value("cover_replace_spaces", true).toBool()); ui_->spinbox_cache_size->setValue(s.value(kSettingsCacheSize, kSettingsCacheSizeDefault).toInt()); - ui_->combobox_cache_size->setCurrentIndex(s.value(kSettingsCacheSizeUnit, static_cast(CacheSizeUnit_MB)).toInt()); - if (ui_->combobox_cache_size->currentIndex() == -1) ui_->combobox_cache_size->setCurrentIndex(static_cast(CacheSizeUnit_MB)); + ui_->combobox_cache_size->setCurrentIndex(ui_->combobox_cache_size->findData(s.value(kSettingsCacheSizeUnit, static_cast(CacheSizeUnit::MB)).toInt())); ui_->checkbox_disk_cache->setChecked(s.value(kSettingsDiskCacheEnable, false).toBool()); ui_->spinbox_disk_cache_size->setValue(s.value(kSettingsDiskCacheSize, kSettingsDiskCacheSizeDefault).toInt()); - ui_->combobox_disk_cache_size->setCurrentIndex(s.value(kSettingsDiskCacheSizeUnit, static_cast(CacheSizeUnit_MB)).toInt()); - if (ui_->combobox_disk_cache_size->currentIndex() == -1) ui_->combobox_cache_size->setCurrentIndex(static_cast(CacheSizeUnit_MB)); + ui_->combobox_disk_cache_size->setCurrentIndex(ui_->combobox_disk_cache_size->findData(s.value(kSettingsDiskCacheSizeUnit, static_cast(CacheSizeUnit::MB)).toInt())); ui_->checkbox_save_playcounts->setChecked(s.value("save_playcounts", false).toBool()); ui_->checkbox_save_ratings->setChecked(s.value("save_ratings", false).toBool()); @@ -232,10 +251,10 @@ void CollectionSettingsPage::Load() { #endif #ifndef Q_OS_WIN32 - ComboBoxLoadFromSettingsByIndex(s, ui_->combobox_iopriority, "io_priority", Utilities::IOPRIO_CLASS_IDLE); + ui_->combobox_iopriority->setCurrentIndex(ui_->combobox_iopriority->findData(s.value("io_priority", static_cast(Utilities::IoPriority::IOPRIO_CLASS_IDLE)).toInt())); #endif - ComboBoxLoadFromSettingsByIndex(s, ui_->combobox_threadpriority, "thread_priority", QThread::Priority::IdlePriority); + ui_->combobox_threadpriority->setCurrentIndex(ui_->combobox_threadpriority->findData(s.value("thread_priority", QThread::Priority::IdlePriority).toInt())); int workers = s.value("tagreader_workers", qBound(1, QThread::idealThreadCount() / 2, 4)).toInt(); if (workers <= 0 || workers > 4) { @@ -278,15 +297,15 @@ void CollectionSettingsPage::Save() { s.setValue("cover_art_patterns", filters); - SaveCoverType save_cover_type = SaveCoverType_Cache; - if (ui_->radiobutton_save_albumcover_cache->isChecked()) save_cover_type = SaveCoverType_Cache; - else if (ui_->radiobutton_save_albumcover_albumdir->isChecked()) save_cover_type = SaveCoverType_Album; - else if (ui_->radiobutton_save_albumcover_embedded->isChecked()) save_cover_type = SaveCoverType_Embedded; + SaveCoverType save_cover_type = SaveCoverType::Cache; + if (ui_->radiobutton_save_albumcover_cache->isChecked()) save_cover_type = SaveCoverType::Cache; + else if (ui_->radiobutton_save_albumcover_albumdir->isChecked()) save_cover_type = SaveCoverType::Album; + else if (ui_->radiobutton_save_albumcover_embedded->isChecked()) save_cover_type = SaveCoverType::Embedded; s.setValue("save_cover_type", static_cast(save_cover_type)); - SaveCoverFilename save_cover_filename = SaveCoverFilename_Hash; - if (ui_->radiobutton_cover_hash->isChecked()) save_cover_filename = SaveCoverFilename_Hash; - else if (ui_->radiobutton_cover_pattern->isChecked()) save_cover_filename = SaveCoverFilename_Pattern; + SaveCoverFilename save_cover_filename = SaveCoverFilename::Hash; + if (ui_->radiobutton_cover_hash->isChecked()) save_cover_filename = SaveCoverFilename::Hash; + else if (ui_->radiobutton_cover_pattern->isChecked()) save_cover_filename = SaveCoverFilename::Pattern; s.setValue("save_cover_filename", static_cast(save_cover_filename)); s.setValue("cover_pattern", ui_->lineedit_cover_pattern->text()); @@ -295,10 +314,10 @@ void CollectionSettingsPage::Save() { s.setValue("cover_replace_spaces", ui_->checkbox_cover_replace_spaces->isChecked()); s.setValue(kSettingsCacheSize, ui_->spinbox_cache_size->value()); - s.setValue(kSettingsCacheSizeUnit, ui_->combobox_cache_size->currentIndex()); + s.setValue(kSettingsCacheSizeUnit, ui_->combobox_cache_size->currentData().toInt()); s.setValue(kSettingsDiskCacheEnable, ui_->checkbox_disk_cache->isChecked()); s.setValue(kSettingsDiskCacheSize, ui_->spinbox_disk_cache_size->value()); - s.setValue(kSettingsDiskCacheSizeUnit, ui_->combobox_disk_cache_size->currentIndex()); + s.setValue(kSettingsDiskCacheSizeUnit, ui_->combobox_disk_cache_size->currentData().toInt()); s.setValue("save_playcounts", ui_->checkbox_save_playcounts->isChecked()); s.setValue("save_ratings", ui_->checkbox_save_ratings->isChecked()); @@ -308,10 +327,10 @@ void CollectionSettingsPage::Save() { s.setValue("delete_files", ui_->checkbox_delete_files->isChecked()); #ifndef Q_OS_WIN32 - s.setValue("io_priority", ui_->combobox_iopriority->currentIndex()); + s.setValue("io_priority", ui_->combobox_iopriority->currentData().toInt()); #endif - s.setValue("thread_priority", ui_->combobox_threadpriority->currentIndex()); + s.setValue("thread_priority", ui_->combobox_threadpriority->currentData().toInt()); s.setValue("tagreader_workers", ui_->spinbox_tagreaderworkers->value()); s.endGroup(); @@ -353,8 +372,10 @@ void CollectionSettingsPage::ClearPixmapDiskCache() { void CollectionSettingsPage::CacheSizeUnitChanged(int index) { - switch (static_cast(index)) { - case CacheSizeUnit_MB: + const CacheSizeUnit cache_size_unit = static_cast(ui_->combobox_cache_size->currentData(index).toInt()); + + switch (cache_size_unit) { + case CacheSizeUnit::MB: ui_->spinbox_cache_size->setMaximum(std::numeric_limits::max() / 1024); break; default: @@ -366,8 +387,10 @@ void CollectionSettingsPage::CacheSizeUnitChanged(int index) { void CollectionSettingsPage::DiskCacheSizeUnitChanged(int index) { - switch (static_cast(index)) { - case CacheSizeUnit_GB: + const CacheSizeUnit cache_size_unit = static_cast(ui_->combobox_disk_cache_size->currentData(index).toInt()); + + switch (cache_size_unit) { + case CacheSizeUnit::GB: ui_->spinbox_disk_cache_size->setMaximum(4); break; default: diff --git a/src/settings/collectionsettingspage.h b/src/settings/collectionsettingspage.h index 8de2c3cae..c0235a601 100644 --- a/src/settings/collectionsettingspage.h +++ b/src/settings/collectionsettingspage.h @@ -50,22 +50,22 @@ class CollectionSettingsPage : public SettingsPage { static const int kSettingsCacheSizeDefault; static const int kSettingsDiskCacheSizeDefault; - enum SaveCoverType { - SaveCoverType_Cache = 1, - SaveCoverType_Album = 2, - SaveCoverType_Embedded = 3 + enum class SaveCoverType { + Cache = 1, + Album = 2, + Embedded = 3 }; - enum SaveCoverFilename { - SaveCoverFilename_Hash = 1, - SaveCoverFilename_Pattern = 2 + enum class SaveCoverFilename { + Hash = 1, + Pattern = 2 }; - enum CacheSizeUnit { - CacheSizeUnit_KB, - CacheSizeUnit_MB, - CacheSizeUnit_GB, - CacheSizeUnit_TB, + enum class CacheSizeUnit { + KB, + MB, + GB, + TB }; void Load() override; diff --git a/src/settings/contextsettingspage.cpp b/src/settings/contextsettingspage.cpp index ae70ec346..c53e5927b 100644 --- a/src/settings/contextsettingspage.cpp +++ b/src/settings/contextsettingspage.cpp @@ -47,7 +47,7 @@ const char *ContextSettingsPage::kSettingsGroup = "Context"; const char *ContextSettingsPage::kSettingsTitleFmt = "TitleFmt"; const char *ContextSettingsPage::kSettingsSummaryFmt = "SummaryFmt"; -const char *ContextSettingsPage::kSettingsGroupEnable[ContextSettingsOrder::NELEMS] = { +const char *ContextSettingsPage::kSettingsGroupEnable[static_cast(ContextSettingsOrder::NELEMS)] = { "AlbumEnable", "EngineAndDeviceEnable", "TechnicalDataEnable", @@ -65,12 +65,12 @@ ContextSettingsPage::ContextSettingsPage(SettingsDialog *dialog, QWidget *parent ui_->setupUi(this); setWindowIcon(IconLoader::Load("view-choose", true, 0, 32)); - checkboxes_[ContextSettingsOrder::ALBUM] = ui_->checkbox_album; - checkboxes_[ContextSettingsOrder::ENGINE_AND_DEVICE] = ui_->checkbox_engine_device; - checkboxes_[ContextSettingsOrder::TECHNICAL_DATA] = ui_->checkbox_technical_data; - checkboxes_[ContextSettingsOrder::SONG_LYRICS] = ui_->checkbox_song_lyrics; - checkboxes_[ContextSettingsOrder::SEARCH_COVER] = ui_->checkbox_search_cover; - checkboxes_[ContextSettingsOrder::SEARCH_LYRICS] = ui_->checkbox_search_lyrics; + checkboxes_[static_cast(ContextSettingsOrder::ALBUM)] = ui_->checkbox_album; + checkboxes_[static_cast(ContextSettingsOrder::ENGINE_AND_DEVICE)] = ui_->checkbox_engine_device; + checkboxes_[static_cast(ContextSettingsOrder::TECHNICAL_DATA)] = ui_->checkbox_technical_data; + checkboxes_[static_cast(ContextSettingsOrder::SONG_LYRICS)] = ui_->checkbox_song_lyrics; + checkboxes_[static_cast(ContextSettingsOrder::SEARCH_COVER)] = ui_->checkbox_search_cover; + checkboxes_[static_cast(ContextSettingsOrder::SEARCH_LYRICS)] = ui_->checkbox_search_lyrics; // Create and populate the helper menus QMenu *menu = new QMenu(this); @@ -135,7 +135,7 @@ void ContextSettingsPage::Load() { ui_->context_custom_text1->setText(s.value(kSettingsTitleFmt, "%title% - %artist%").toString()); ui_->context_custom_text2->setText(s.value(kSettingsSummaryFmt, "%album%").toString()); - for (int i = 0; i < ContextSettingsOrder::NELEMS; ++i) { + for (int i = 0; i < static_cast(ContextSettingsOrder::NELEMS); ++i) { checkboxes_[i]->setChecked(s.value(kSettingsGroupEnable[i], checkboxes_[i]->isChecked()).toBool()); } @@ -172,7 +172,7 @@ void ContextSettingsPage::Save() { s.beginGroup(kSettingsGroup); s.setValue(kSettingsTitleFmt, ui_->context_custom_text1->text()); s.setValue(kSettingsSummaryFmt, ui_->context_custom_text2->text()); - for (int i = 0; i < ContextSettingsOrder::NELEMS; ++i) { + for (int i = 0; i < static_cast(ContextSettingsOrder::NELEMS); ++i) { s.setValue(kSettingsGroupEnable[i], checkboxes_[i]->isChecked()); } s.setValue("font_headline", ui_->font_headline->currentFont().family()); diff --git a/src/settings/contextsettingspage.h b/src/settings/contextsettingspage.h index fcec562e1..ee91caf6b 100644 --- a/src/settings/contextsettingspage.h +++ b/src/settings/contextsettingspage.h @@ -42,7 +42,7 @@ class ContextSettingsPage : public SettingsPage { explicit ContextSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~ContextSettingsPage() override; - enum ContextSettingsOrder { + enum class ContextSettingsOrder { ALBUM, ENGINE_AND_DEVICE, TECHNICAL_DATA, @@ -55,7 +55,7 @@ class ContextSettingsPage : public SettingsPage { static const char *kSettingsGroup; static const char *kSettingsTitleFmt; static const char *kSettingsSummaryFmt; - static const char *kSettingsGroupEnable[ContextSettingsOrder::NELEMS]; + static const char *kSettingsGroupEnable[static_cast(ContextSettingsOrder::NELEMS)]; static const qreal kDefaultFontSizeHeadline; void Load() override; @@ -70,7 +70,7 @@ class ContextSettingsPage : public SettingsPage { private: Ui_ContextSettingsPage *ui_; - QCheckBox *checkboxes_[ContextSettingsOrder::NELEMS] {}; + QCheckBox *checkboxes_[static_cast(ContextSettingsOrder::NELEMS)] {}; }; #endif // CONTEXTSETTINGSPAGE_H diff --git a/src/settings/coverssettingspage.cpp b/src/settings/coverssettingspage.cpp index d0305578a..57d108d78 100644 --- a/src/settings/coverssettingspage.cpp +++ b/src/settings/coverssettingspage.cpp @@ -131,7 +131,7 @@ void CoversSettingsPage::CurrentItemChanged(QListWidgetItem *item_current, QList ui_->label_auth_info->setText(tr("Use Qobuz settings to authenticate.")); } else { - ui_->login_state->SetLoggedIn(provider->IsAuthenticated() ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(provider->IsAuthenticated() ? LoginStateWidget::State::LoggedIn : LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); ui_->button_authenticate->show(); ui_->login_state->show(); @@ -201,7 +201,7 @@ void CoversSettingsPage::NoProviderSelected() { void CoversSettingsPage::DisableAuthentication() { - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(false); ui_->login_state->hide(); ui_->button_authenticate->hide(); @@ -221,7 +221,7 @@ void CoversSettingsPage::AuthenticateClicked() { CoverProvider *provider = dialog()->app()->cover_providers()->ProviderByName(ui_->providers->currentItem()->text()); if (!provider) return; ui_->button_authenticate->setEnabled(false); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoginInProgress); QObject::connect(provider, &CoverProvider::AuthenticationFailure, this, &CoversSettingsPage::AuthenticationFailure); QObject::connect(provider, &CoverProvider::AuthenticationSuccess, this, &CoversSettingsPage::AuthenticationSuccess); provider->Authenticate(); @@ -245,7 +245,7 @@ void CoversSettingsPage::LogoutClicked() { } else { ui_->button_authenticate->setEnabled(true); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); } } @@ -258,7 +258,7 @@ void CoversSettingsPage::AuthenticationSuccess() { if (!isVisible() || !ui_->providers->currentItem() || ui_->providers->currentItem()->text() != provider->name()) return; - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); ui_->button_authenticate->setEnabled(true); } @@ -273,7 +273,7 @@ void CoversSettingsPage::AuthenticationFailure(const QStringList &errors) { QMessageBox::warning(this, tr("Authentication failed"), errors.join("\n")); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); } diff --git a/src/settings/lyricssettingspage.cpp b/src/settings/lyricssettingspage.cpp index 210e1b569..9c264984a 100644 --- a/src/settings/lyricssettingspage.cpp +++ b/src/settings/lyricssettingspage.cpp @@ -122,7 +122,7 @@ void LyricsSettingsPage::CurrentItemChanged(QListWidgetItem *item_current, QList LyricsProvider *provider = dialog()->app()->lyrics_providers()->ProviderByName(item_current->text()); if (provider) { if (provider->AuthenticationRequired()) { - ui_->login_state->SetLoggedIn(provider->IsAuthenticated() ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(provider->IsAuthenticated() ? LoginStateWidget::State::LoggedIn : LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); ui_->button_authenticate->show(); ui_->login_state->show(); @@ -191,7 +191,7 @@ void LyricsSettingsPage::NoProviderSelected() { void LyricsSettingsPage::DisableAuthentication() { - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(false); ui_->login_state->hide(); ui_->button_authenticate->hide(); @@ -211,7 +211,7 @@ void LyricsSettingsPage::AuthenticateClicked() { LyricsProvider *provider = dialog()->app()->lyrics_providers()->ProviderByName(ui_->providers->currentItem()->text()); if (!provider) return; ui_->button_authenticate->setEnabled(false); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoginInProgress); QObject::connect(provider, &LyricsProvider::AuthenticationFailure, this, &LyricsSettingsPage::AuthenticationFailure); QObject::connect(provider, &LyricsProvider::AuthenticationSuccess, this, &LyricsSettingsPage::AuthenticationSuccess); provider->Authenticate(); @@ -226,7 +226,7 @@ void LyricsSettingsPage::LogoutClicked() { provider->Deauthenticate(); ui_->button_authenticate->setEnabled(true); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); } @@ -238,7 +238,7 @@ void LyricsSettingsPage::AuthenticationSuccess() { if (!isVisible() || !ui_->providers->currentItem() || ui_->providers->currentItem()->text() != provider->name()) return; - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); ui_->button_authenticate->setEnabled(true); } @@ -253,7 +253,7 @@ void LyricsSettingsPage::AuthenticationFailure(const QStringList &errors) { QMessageBox::warning(this, tr("Authentication failed"), errors.join("\n")); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); } diff --git a/src/settings/moodbarsettingspage.cpp b/src/settings/moodbarsettingspage.cpp index 23a88c6d1..ace1edcfc 100644 --- a/src/settings/moodbarsettingspage.cpp +++ b/src/settings/moodbarsettingspage.cpp @@ -111,7 +111,7 @@ void MoodbarSettingsPage::InitMoodbarPreviews() { file.close(); // Render and set each preview - for (int i = 0; i < MoodbarRenderer::StyleCount; ++i) { + for (int i = 0; i < static_cast(MoodbarRenderer::MoodbarStyle::StyleCount); ++i) { const MoodbarRenderer::MoodbarStyle style = static_cast(i); const ColorVector colors = MoodbarRenderer::Colors(file_data, style, palette()); diff --git a/src/settings/networkproxysettingspage.cpp b/src/settings/networkproxysettingspage.cpp index 7899e77f7..25db28c99 100644 --- a/src/settings/networkproxysettingspage.cpp +++ b/src/settings/networkproxysettingspage.cpp @@ -56,18 +56,17 @@ void NetworkProxySettingsPage::Load() { QSettings s; s.beginGroup(NetworkProxyFactory::kSettingsGroup); - NetworkProxyFactory::Mode mode = NetworkProxyFactory::Mode(s.value("mode", NetworkProxyFactory::Mode_System).toInt()); + const NetworkProxyFactory::Mode mode = static_cast(s.value("mode", static_cast(NetworkProxyFactory::Mode::System)).toInt()); switch (mode) { - case NetworkProxyFactory::Mode_Manual: + case NetworkProxyFactory::Mode::Manual: ui_->proxy_manual->setChecked(true); break; - case NetworkProxyFactory::Mode_Direct: + case NetworkProxyFactory::Mode::Direct: ui_->proxy_direct->setChecked(true); break; - case NetworkProxyFactory::Mode_System: - default: + case NetworkProxyFactory::Mode::System: ui_->proxy_system->setChecked(true); break; } @@ -91,13 +90,13 @@ void NetworkProxySettingsPage::Save() { QSettings s; - NetworkProxyFactory::Mode mode = NetworkProxyFactory::Mode_System; - if (ui_->proxy_direct->isChecked()) mode = NetworkProxyFactory::Mode_Direct; - else if (ui_->proxy_system->isChecked()) mode = NetworkProxyFactory::Mode_System; - else if (ui_->proxy_manual->isChecked()) mode = NetworkProxyFactory::Mode_Manual; + NetworkProxyFactory::Mode mode = NetworkProxyFactory::Mode::System; + if (ui_->proxy_direct->isChecked()) mode = NetworkProxyFactory::Mode::Direct; + else if (ui_->proxy_system->isChecked()) mode = NetworkProxyFactory::Mode::System; + else if (ui_->proxy_manual->isChecked()) mode = NetworkProxyFactory::Mode::Manual; s.beginGroup(NetworkProxyFactory::kSettingsGroup); - s.setValue("mode", mode); + s.setValue("mode", static_cast(mode)); s.setValue("type", ui_->proxy_type->currentIndex() == 0 ? QNetworkProxy::HttpProxy : QNetworkProxy::Socks5Proxy); s.setValue("hostname", ui_->proxy_hostname->text()); s.setValue("port", ui_->proxy_port->value()); diff --git a/src/settings/notificationssettingspage.cpp b/src/settings/notificationssettingspage.cpp index c599cc291..af8c048e9 100644 --- a/src/settings/notificationssettingspage.cpp +++ b/src/settings/notificationssettingspage.cpp @@ -59,7 +59,7 @@ class QShowEvent; NotificationsSettingsPage::NotificationsSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui_NotificationsSettingsPage), - pretty_popup_(new OSDPretty(OSDPretty::Mode_Draggable)) { + pretty_popup_(new OSDPretty(OSDPretty::Mode::Draggable)) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("help-hint", true, 0, 32)); @@ -154,9 +154,9 @@ void NotificationsSettingsPage::Load() { QSettings s; s.beginGroup(OSDBase::kSettingsGroup); - OSDBase::Behaviour osd_behaviour = OSDBase::Behaviour(s.value("Behaviour", OSDBase::Native).toInt()); + const OSDBase::Behaviour osd_behaviour = static_cast(s.value("Behaviour", static_cast(OSDBase::Behaviour::Native)).toInt()); switch (osd_behaviour) { - case OSDBase::Native: + case OSDBase::Behaviour::Native: #ifdef Q_OS_WIN32 if (dialog()->osd()->SupportsNativeNotifications() || dialog()->osd()->SupportsTrayPopups()) { #else @@ -167,18 +167,18 @@ void NotificationsSettingsPage::Load() { } // Fallthrough - case OSDBase::Pretty: + case OSDBase::Behaviour::Pretty: ui_->notifications_pretty->setChecked(true); break; - case OSDBase::TrayPopup: + case OSDBase::Behaviour::TrayPopup: if (dialog()->osd()->SupportsTrayPopups()) { ui_->notifications_tray->setChecked(true); break; } // Fallthrough - case OSDBase::Disabled: + case OSDBase::Behaviour::Disabled: default: ui_->notifications_none->setChecked(true); break; @@ -229,11 +229,11 @@ void NotificationsSettingsPage::Save() { QSettings s; - OSDBase::Behaviour osd_behaviour = OSDBase::Disabled; - if (ui_->notifications_none->isChecked()) osd_behaviour = OSDBase::Disabled; - else if (ui_->notifications_native->isChecked()) osd_behaviour = OSDBase::Native; - else if (ui_->notifications_tray->isChecked()) osd_behaviour = OSDBase::TrayPopup; - else if (ui_->notifications_pretty->isChecked()) osd_behaviour = OSDBase::Pretty; + OSDBase::Behaviour osd_behaviour = OSDBase::Behaviour::Disabled; + if (ui_->notifications_none->isChecked()) osd_behaviour = OSDBase::Behaviour::Disabled; + else if (ui_->notifications_native->isChecked()) osd_behaviour = OSDBase::Behaviour::Native; + else if (ui_->notifications_tray->isChecked()) osd_behaviour = OSDBase::Behaviour::TrayPopup; + else if (ui_->notifications_pretty->isChecked()) osd_behaviour = OSDBase::Behaviour::Pretty; s.beginGroup(OSDBase::kSettingsGroup); s.setValue("Behaviour", static_cast(osd_behaviour)); @@ -345,15 +345,15 @@ void NotificationsSettingsPage::NotificationCustomTextChanged(bool enabled) { void NotificationsSettingsPage::PrepareNotificationPreview() { - OSDBase::Behaviour notificationType = OSDBase::Disabled; + OSDBase::Behaviour notificationType = OSDBase::Behaviour::Disabled; if (ui_->notifications_native->isChecked()) { - notificationType = OSDBase::Native; + notificationType = OSDBase::Behaviour::Native; } else if (ui_->notifications_pretty->isChecked()) { - notificationType = OSDBase::Pretty; + notificationType = OSDBase::Behaviour::Pretty; } else if (ui_->notifications_tray->isChecked()) { - notificationType = OSDBase::TrayPopup; + notificationType = OSDBase::Behaviour::TrayPopup; } // If user changes timeout or other options, that won't be reflected in the preview diff --git a/src/settings/playlistsettingspage.cpp b/src/settings/playlistsettingspage.cpp index de93ac1c3..81711ddac 100644 --- a/src/settings/playlistsettingspage.cpp +++ b/src/settings/playlistsettingspage.cpp @@ -76,18 +76,18 @@ void PlaylistSettingsPage::Load() { ui_->checkbox_playlist_clear->setChecked(s.value("playlist_clear", true).toBool()); ui_->checkbox_auto_sort->setChecked(s.value("auto_sort", false).toBool()); - PathType path_type = PathType(s.value("path_type", PathType_Automatic).toInt()); + const PathType path_type = static_cast(s.value("path_type", static_cast(PathType::Automatic)).toInt()); switch (path_type) { - case PathType_Automatic: + case PathType::Automatic: ui_->radiobutton_automaticpath->setChecked(true); break; - case PathType_Absolute: + case PathType::Absolute: ui_->radiobutton_absolutepath->setChecked(true); break; - case PathType_Relative: + case PathType::Relative: ui_->radiobutton_relativepath->setChecked(true); break; - case PathType_Ask_User: + case PathType::Ask_User: ui_->radiobutton_askpath->setChecked(true); } @@ -111,18 +111,18 @@ void PlaylistSettingsPage::Load() { void PlaylistSettingsPage::Save() { - PathType path_type = PathType_Automatic; + PathType path_type = PathType::Automatic; if (ui_->radiobutton_automaticpath->isChecked()) { - path_type = PathType_Automatic; + path_type = PathType::Automatic; } else if (ui_->radiobutton_absolutepath->isChecked()) { - path_type = PathType_Absolute; + path_type = PathType::Absolute; } else if (ui_->radiobutton_relativepath->isChecked()) { - path_type = PathType_Relative; + path_type = PathType::Relative; } else if (ui_->radiobutton_askpath->isChecked()) { - path_type = PathType_Ask_User; + path_type = PathType::Ask_User; } QSettings s; diff --git a/src/settings/playlistsettingspage.h b/src/settings/playlistsettingspage.h index 58d9638b9..4f37f642c 100644 --- a/src/settings/playlistsettingspage.h +++ b/src/settings/playlistsettingspage.h @@ -41,11 +41,11 @@ class PlaylistSettingsPage : public SettingsPage { static const char *kSettingsGroup; - enum PathType { - PathType_Automatic = 0, // Automatically select path type - PathType_Absolute, // Always use absolute paths - PathType_Relative, // Always use relative paths - PathType_Ask_User, // Only used in preferences: to ask user which of the previous values he wants to use. + enum class PathType { + Automatic = 0, // Automatically select path type + Absolute, // Always use absolute paths + Relative, // Always use relative paths + Ask_User // Only used in preferences: to ask user which of the previous values he wants to use. }; void Load() override; diff --git a/src/settings/qobuzsettingspage.cpp b/src/settings/qobuzsettingspage.cpp index 43e80019e..956eb4140 100644 --- a/src/settings/qobuzsettingspage.cpp +++ b/src/settings/qobuzsettingspage.cpp @@ -94,7 +94,7 @@ void QobuzSettingsPage::Load() { s.endGroup(); - if (service_->authenticated()) ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + if (service_->authenticated()) ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); Init(ui_->layout_qobuzsettingspage->parentWidget()); @@ -157,7 +157,7 @@ bool QobuzSettingsPage::eventFilter(QObject *object, QEvent *event) { void QobuzSettingsPage::LogoutClicked() { service_->Logout(); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_login->setEnabled(true); } @@ -165,7 +165,7 @@ void QobuzSettingsPage::LogoutClicked() { void QobuzSettingsPage::LoginSuccess() { if (!isVisible()) return; - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); ui_->button_login->setEnabled(true); } diff --git a/src/settings/scrobblersettingspage.cpp b/src/settings/scrobblersettingspage.cpp index 22e20b92f..05cf27759 100644 --- a/src/settings/scrobblersettingspage.cpp +++ b/src/settings/scrobblersettingspage.cpp @@ -99,17 +99,17 @@ void ScrobblerSettingsPage::Load() { ui_->checkbox_albumartist->setChecked(scrobbler_->PreferAlbumArtist()); ui_->checkbox_show_error_dialog->setChecked(scrobbler_->ShowErrorDialog()); - ui_->checkbox_source_collection->setChecked(scrobbler_->sources().contains(Song::Source_Collection)); - ui_->checkbox_source_local->setChecked(scrobbler_->sources().contains(Song::Source_LocalFile)); - ui_->checkbox_source_cdda->setChecked(scrobbler_->sources().contains(Song::Source_CDDA)); - ui_->checkbox_source_device->setChecked(scrobbler_->sources().contains(Song::Source_Device)); - ui_->checkbox_source_subsonic->setChecked(scrobbler_->sources().contains(Song::Source_Subsonic)); - ui_->checkbox_source_tidal->setChecked(scrobbler_->sources().contains(Song::Source_Tidal)); - ui_->checkbox_source_qobuz->setChecked(scrobbler_->sources().contains(Song::Source_Qobuz)); - ui_->checkbox_source_stream->setChecked(scrobbler_->sources().contains(Song::Source_Stream)); - ui_->checkbox_source_somafm->setChecked(scrobbler_->sources().contains(Song::Source_SomaFM)); - ui_->checkbox_source_radioparadise->setChecked(scrobbler_->sources().contains(Song::Source_RadioParadise)); - ui_->checkbox_source_unknown->setChecked(scrobbler_->sources().contains(Song::Source_Unknown)); + ui_->checkbox_source_collection->setChecked(scrobbler_->sources().contains(Song::Source::Collection)); + ui_->checkbox_source_local->setChecked(scrobbler_->sources().contains(Song::Source::LocalFile)); + ui_->checkbox_source_cdda->setChecked(scrobbler_->sources().contains(Song::Source::CDDA)); + ui_->checkbox_source_device->setChecked(scrobbler_->sources().contains(Song::Source::Device)); + ui_->checkbox_source_subsonic->setChecked(scrobbler_->sources().contains(Song::Source::Subsonic)); + ui_->checkbox_source_tidal->setChecked(scrobbler_->sources().contains(Song::Source::Tidal)); + ui_->checkbox_source_qobuz->setChecked(scrobbler_->sources().contains(Song::Source::Qobuz)); + ui_->checkbox_source_stream->setChecked(scrobbler_->sources().contains(Song::Source::Stream)); + ui_->checkbox_source_somafm->setChecked(scrobbler_->sources().contains(Song::Source::SomaFM)); + ui_->checkbox_source_radioparadise->setChecked(scrobbler_->sources().contains(Song::Source::RadioParadise)); + ui_->checkbox_source_unknown->setChecked(scrobbler_->sources().contains(Song::Source::Unknown)); ui_->checkbox_lastfm_enable->setChecked(lastfmscrobbler_->IsEnabled()); ui_->checkbox_lastfm_https->setChecked(lastfmscrobbler_->IsUseHTTPS()); @@ -142,17 +142,17 @@ void ScrobblerSettingsPage::Save() { s.setValue("show_error_dialog", ui_->checkbox_show_error_dialog->isChecked()); QStringList sources; - if (ui_->checkbox_source_collection->isChecked()) sources << Song::TextForSource(Song::Source_Collection); - if (ui_->checkbox_source_local->isChecked()) sources << Song::TextForSource(Song::Source_LocalFile); - if (ui_->checkbox_source_cdda->isChecked()) sources << Song::TextForSource(Song::Source_CDDA); - if (ui_->checkbox_source_device->isChecked()) sources << Song::TextForSource(Song::Source_Device); - if (ui_->checkbox_source_subsonic->isChecked()) sources << Song::TextForSource(Song::Source_Subsonic); - if (ui_->checkbox_source_tidal->isChecked()) sources << Song::TextForSource(Song::Source_Tidal); - if (ui_->checkbox_source_qobuz->isChecked()) sources << Song::TextForSource(Song::Source_Qobuz); - if (ui_->checkbox_source_stream->isChecked()) sources << Song::TextForSource(Song::Source_Stream); - if (ui_->checkbox_source_somafm->isChecked()) sources << Song::TextForSource(Song::Source_SomaFM); - if (ui_->checkbox_source_radioparadise->isChecked()) sources << Song::TextForSource(Song::Source_RadioParadise); - if (ui_->checkbox_source_unknown->isChecked()) sources << Song::TextForSource(Song::Source_Unknown); + if (ui_->checkbox_source_collection->isChecked()) sources << Song::TextForSource(Song::Source::Collection); + if (ui_->checkbox_source_local->isChecked()) sources << Song::TextForSource(Song::Source::LocalFile); + if (ui_->checkbox_source_cdda->isChecked()) sources << Song::TextForSource(Song::Source::CDDA); + if (ui_->checkbox_source_device->isChecked()) sources << Song::TextForSource(Song::Source::Device); + if (ui_->checkbox_source_subsonic->isChecked()) sources << Song::TextForSource(Song::Source::Subsonic); + if (ui_->checkbox_source_tidal->isChecked()) sources << Song::TextForSource(Song::Source::Tidal); + if (ui_->checkbox_source_qobuz->isChecked()) sources << Song::TextForSource(Song::Source::Qobuz); + if (ui_->checkbox_source_stream->isChecked()) sources << Song::TextForSource(Song::Source::Stream); + if (ui_->checkbox_source_somafm->isChecked()) sources << Song::TextForSource(Song::Source::SomaFM); + if (ui_->checkbox_source_radioparadise->isChecked()) sources << Song::TextForSource(Song::Source::RadioParadise); + if (ui_->checkbox_source_unknown->isChecked()) sources << Song::TextForSource(Song::Source::Unknown); s.setValue("sources", sources); @@ -179,7 +179,7 @@ void ScrobblerSettingsPage::Save() { void ScrobblerSettingsPage::LastFM_Login() { lastfm_waiting_for_auth_ = true; - ui_->widget_lastfm_login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + ui_->widget_lastfm_login_state->SetLoggedIn(LoginStateWidget::State::LoginInProgress); lastfmscrobbler_->Authenticate(ui_->checkbox_lastfm_https->isChecked()); } @@ -208,13 +208,13 @@ void ScrobblerSettingsPage::LastFM_AuthenticationComplete(const bool success, co } void ScrobblerSettingsPage::LastFM_RefreshControls(const bool authenticated) { - ui_->widget_lastfm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut, lastfmscrobbler_->username()); + ui_->widget_lastfm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::State::LoggedIn : LoginStateWidget::State::LoggedOut, lastfmscrobbler_->username()); } void ScrobblerSettingsPage::LibreFM_Login() { librefm_waiting_for_auth_ = true; - ui_->widget_librefm_login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + ui_->widget_librefm_login_state->SetLoggedIn(LoginStateWidget::State::LoginInProgress); librefmscrobbler_->Authenticate(); } @@ -243,13 +243,13 @@ void ScrobblerSettingsPage::LibreFM_AuthenticationComplete(const bool success, c } void ScrobblerSettingsPage::LibreFM_RefreshControls(const bool authenticated) { - ui_->widget_librefm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut, librefmscrobbler_->username()); + ui_->widget_librefm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::State::LoggedIn : LoginStateWidget::State::LoggedOut, librefmscrobbler_->username()); } void ScrobblerSettingsPage::ListenBrainz_Login() { listenbrainz_waiting_for_auth_ = true; - ui_->widget_listenbrainz_login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + ui_->widget_listenbrainz_login_state->SetLoggedIn(LoginStateWidget::State::LoginInProgress); listenbrainzscrobbler_->Authenticate(); } @@ -278,5 +278,5 @@ void ScrobblerSettingsPage::ListenBrainz_AuthenticationComplete(const bool succe } void ScrobblerSettingsPage::ListenBrainz_RefreshControls(const bool authenticated) { - ui_->widget_listenbrainz_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut); + ui_->widget_listenbrainz_login_state->SetLoggedIn(authenticated ? LoginStateWidget::State::LoggedIn : LoginStateWidget::State::LoggedOut); } diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp index e4909cbcb..085cd812b 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/settingsdialog.cpp @@ -129,29 +129,29 @@ SettingsDialog::SettingsDialog(Application *app, OSDBase *osd, QMainWindow *main ui_->list->setItemDelegate(new SettingsItemDelegate(this)); QTreeWidgetItem *general = AddCategory(tr("General")); - AddPage(Page_Behaviour, new BehaviourSettingsPage(this, this), general); - AddPage(Page_Collection, new CollectionSettingsPage(this, this), general); - AddPage(Page_Backend, new BackendSettingsPage(this, this), general); - AddPage(Page_Playlist, new PlaylistSettingsPage(this, this), general); - AddPage(Page_Scrobbler, new ScrobblerSettingsPage(this, this), general); - AddPage(Page_Covers, new CoversSettingsPage(this, this), general); - AddPage(Page_Lyrics, new LyricsSettingsPage(this, this), general); + AddPage(Page::Behaviour, new BehaviourSettingsPage(this, this), general); + AddPage(Page::Collection, new CollectionSettingsPage(this, this), general); + AddPage(Page::Backend, new BackendSettingsPage(this, this), general); + AddPage(Page::Playlist, new PlaylistSettingsPage(this, this), general); + AddPage(Page::Scrobbler, new ScrobblerSettingsPage(this, this), general); + AddPage(Page::Covers, new CoversSettingsPage(this, this), general); + AddPage(Page::Lyrics, new LyricsSettingsPage(this, this), general); #ifdef HAVE_GSTREAMER - AddPage(Page_Transcoding, new TranscoderSettingsPage(this, this), general); + AddPage(Page::Transcoding, new TranscoderSettingsPage(this, this), general); #endif - AddPage(Page_Proxy, new NetworkProxySettingsPage(this, this), general); + AddPage(Page::Proxy, new NetworkProxySettingsPage(this, this), general); QTreeWidgetItem *iface = AddCategory(tr("User interface")); - AddPage(Page_Appearance, new AppearanceSettingsPage(this, this), iface); - AddPage(Page_Context, new ContextSettingsPage(this, this), iface); - AddPage(Page_Notifications, new NotificationsSettingsPage(this, this), iface); + AddPage(Page::Appearance, new AppearanceSettingsPage(this, this), iface); + AddPage(Page::Context, new ContextSettingsPage(this, this), iface); + AddPage(Page::Notifications, new NotificationsSettingsPage(this, this), iface); #ifdef HAVE_GLOBALSHORTCUTS - AddPage(Page_GlobalShortcuts, new GlobalShortcutsSettingsPage(this, this), iface); + AddPage(Page::GlobalShortcuts, new GlobalShortcutsSettingsPage(this, this), iface); #endif #ifdef HAVE_MOODBAR - AddPage(Page_Moodbar, new MoodbarSettingsPage(this, this), iface); + AddPage(Page::Moodbar, new MoodbarSettingsPage(this, this), iface); #endif #if defined(HAVE_SUBSONIC) || defined(HAVE_TIDAL) || defined(HAVE_QOBUZ) @@ -159,18 +159,18 @@ SettingsDialog::SettingsDialog(Application *app, OSDBase *osd, QMainWindow *main #endif #ifdef HAVE_SUBSONIC - AddPage(Page_Subsonic, new SubsonicSettingsPage(this, this), streaming); + AddPage(Page::Subsonic, new SubsonicSettingsPage(this, this), streaming); #endif #ifdef HAVE_TIDAL - AddPage(Page_Tidal, new TidalSettingsPage(this, this), streaming); + AddPage(Page::Tidal, new TidalSettingsPage(this, this), streaming); #endif #ifdef HAVE_QOBUZ - AddPage(Page_Qobuz, new QobuzSettingsPage(this, this), streaming); + AddPage(Page::Qobuz, new QobuzSettingsPage(this, this), streaming); #endif // List box QObject::connect(ui_->list, &QTreeWidget::currentItemChanged, this, &SettingsDialog::CurrentItemChanged); - ui_->list->setCurrentItem(pages_[Page_Behaviour].item_); + ui_->list->setCurrentItem(pages_[Page::Behaviour].item_); // Make sure the list is big enough to show all the items ui_->list->setMinimumWidth(qobject_cast(ui_->list)->sizeHintForColumn(0)); // clazy:exclude=unneeded-cast diff --git a/src/settings/settingsdialog.h b/src/settings/settingsdialog.h index 7837ef649..d95ffdb94 100644 --- a/src/settings/settingsdialog.h +++ b/src/settings/settingsdialog.h @@ -74,25 +74,25 @@ class SettingsDialog : public QDialog { explicit SettingsDialog(Application *app, OSDBase *osd, QMainWindow *mainwindow, QWidget *parent = nullptr); ~SettingsDialog() override; - enum Page { - Page_Behaviour, - Page_Collection, - Page_Backend, - Page_Playback, - Page_Playlist, - Page_Scrobbler, - Page_Covers, - Page_Lyrics, - Page_Transcoding, - Page_Proxy, - Page_Appearance, - Page_Context, - Page_Notifications, - Page_GlobalShortcuts, - Page_Moodbar, - Page_Subsonic, - Page_Tidal, - Page_Qobuz, + enum class Page { + Behaviour, + Collection, + Backend, + Playback, + Playlist, + Scrobbler, + Covers, + Lyrics, + Transcoding, + Proxy, + Appearance, + Context, + Notifications, + GlobalShortcuts, + Moodbar, + Subsonic, + Tidal, + Qobuz, }; enum Role { diff --git a/src/settings/subsonicsettingspage.cpp b/src/settings/subsonicsettingspage.cpp index 8c94fee4e..796a0810b 100644 --- a/src/settings/subsonicsettingspage.cpp +++ b/src/settings/subsonicsettingspage.cpp @@ -84,12 +84,12 @@ void SubsonicSettingsPage::Load() { ui_->checkbox_download_album_covers->setChecked(s.value("downloadalbumcovers", true).toBool()); ui_->checkbox_server_scrobbling->setChecked(s.value("serversidescrobbling", false).toBool()); - AuthMethod auth_method = static_cast(s.value("authmethod", AuthMethod_MD5).toInt()); + const AuthMethod auth_method = static_cast(s.value("authmethod", static_cast(AuthMethod::MD5)).toInt()); switch (auth_method) { - case AuthMethod_Hex: + case AuthMethod::Hex: ui_->auth_method_hex->setChecked(true); break; - case AuthMethod_MD5: + case AuthMethod::MD5: ui_->auth_method_md5->setChecked(true); break; } @@ -115,10 +115,10 @@ void SubsonicSettingsPage::Save() { s.setValue("downloadalbumcovers", ui_->checkbox_download_album_covers->isChecked()); s.setValue("serversidescrobbling", ui_->checkbox_server_scrobbling->isChecked()); if (ui_->auth_method_hex->isChecked()) { - s.setValue("authmethod", AuthMethod_Hex); + s.setValue("authmethod", static_cast(AuthMethod::Hex)); } else { - s.setValue("authmethod", AuthMethod_MD5); + s.setValue("authmethod", static_cast(AuthMethod::MD5)); } s.endGroup(); @@ -137,7 +137,7 @@ void SubsonicSettingsPage::TestClicked() { return; } - emit Test(server_url, ui_->username->text(), ui_->password->text(), ui_->auth_method_hex->isChecked() ? AuthMethod_Hex : AuthMethod_MD5); + emit Test(server_url, ui_->username->text(), ui_->password->text(), ui_->auth_method_hex->isChecked() ? AuthMethod::Hex : AuthMethod::MD5); ui_->button_test->setEnabled(false); } diff --git a/src/settings/subsonicsettingspage.h b/src/settings/subsonicsettingspage.h index 535a842e5..b95ae636b 100644 --- a/src/settings/subsonicsettingspage.h +++ b/src/settings/subsonicsettingspage.h @@ -42,9 +42,9 @@ class SubsonicSettingsPage : public SettingsPage { static const char *kSettingsGroup; - enum AuthMethod { - AuthMethod_Hex, - AuthMethod_MD5 + enum class AuthMethod { + Hex, + MD5 }; void Load() override; diff --git a/src/settings/tidalsettingspage.cpp b/src/settings/tidalsettingspage.cpp index a68929141..eae58704f 100644 --- a/src/settings/tidalsettingspage.cpp +++ b/src/settings/tidalsettingspage.cpp @@ -73,9 +73,9 @@ TidalSettingsPage::TidalSettingsPage(SettingsDialog *dialog, QWidget *parent) ui_->coversize->addItem("750x750", "750x750"); ui_->coversize->addItem("1280x1280", "1280x1280"); - ui_->streamurl->addItem("streamurl", StreamUrlMethod_StreamUrl); - ui_->streamurl->addItem("urlpostpaywall", StreamUrlMethod_UrlPostPaywall); - ui_->streamurl->addItem("playbackinfopostpaywall", StreamUrlMethod_PlaybackInfoPostPaywall); + ui_->streamurl->addItem("streamurl", static_cast(StreamUrlMethod::StreamUrl)); + ui_->streamurl->addItem("urlpostpaywall", static_cast(StreamUrlMethod::UrlPostPaywall)); + ui_->streamurl->addItem("playbackinfopostpaywall", static_cast(StreamUrlMethod::PlaybackInfoPostPaywall)); } @@ -104,18 +104,13 @@ void TidalSettingsPage::Load() { ui_->checkbox_fetchalbums->setChecked(s.value("fetchalbums", false).toBool()); ui_->checkbox_download_album_covers->setChecked(s.value("downloadalbumcovers", true).toBool()); ComboBoxLoadFromSettings(s, ui_->coversize, "coversize", "640x640"); - - StreamUrlMethod stream_url = static_cast(s.value("streamurl").toInt()); - int i = ui_->streamurl->findData(stream_url); - if (i == -1) i = ui_->streamurl->findData(StreamUrlMethod_StreamUrl); - ui_->streamurl->setCurrentIndex(i); - + ui_->streamurl->setCurrentIndex(ui_->streamurl->findData(s.value("streamurl", static_cast(StreamUrlMethod::StreamUrl)).toInt())); ui_->checkbox_album_explicit->setChecked(s.value("album_explicit", false).toBool()); s.endGroup(); OAuthClicked(ui_->oauth->isChecked()); - if (service_->authenticated()) ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + if (service_->authenticated()) ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); Init(ui_->layout_tidalsettingspage->parentWidget()); @@ -135,15 +130,15 @@ void TidalSettingsPage::Save() { s.setValue("username", ui_->username->text()); s.setValue("password", QString::fromUtf8(ui_->password->text().toUtf8().toBase64())); - s.setValue("quality", ui_->quality->itemData(ui_->quality->currentIndex())); + s.setValue("quality", ui_->quality->currentData().toString()); s.setValue("searchdelay", ui_->searchdelay->value()); s.setValue("artistssearchlimit", ui_->artistssearchlimit->value()); s.setValue("albumssearchlimit", ui_->albumssearchlimit->value()); s.setValue("songssearchlimit", ui_->songssearchlimit->value()); s.setValue("fetchalbums", ui_->checkbox_fetchalbums->isChecked()); s.setValue("downloadalbumcovers", ui_->checkbox_download_album_covers->isChecked()); - s.setValue("coversize", ui_->coversize->itemData(ui_->coversize->currentIndex())); - s.setValue("streamurl", ui_->streamurl->itemData(ui_->streamurl->currentIndex())); + s.setValue("coversize", ui_->coversize->currentData().toString()); + s.setValue("streamurl", ui_->streamurl->currentData().toInt()); s.setValue("album_explicit", ui_->checkbox_album_explicit->isChecked()); s.endGroup(); @@ -200,14 +195,14 @@ void TidalSettingsPage::LogoutClicked() { service_->Logout(); ui_->button_login->setEnabled(true); - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); } void TidalSettingsPage::LoginSuccess() { if (!isVisible()) return; - ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn); + ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedIn); ui_->button_login->setEnabled(true); } diff --git a/src/settings/tidalsettingspage.h b/src/settings/tidalsettingspage.h index fe80079aa..a979c11a1 100644 --- a/src/settings/tidalsettingspage.h +++ b/src/settings/tidalsettingspage.h @@ -41,10 +41,10 @@ class TidalSettingsPage : public SettingsPage { static const char *kSettingsGroup; - enum StreamUrlMethod { - StreamUrlMethod_StreamUrl, - StreamUrlMethod_UrlPostPaywall, - StreamUrlMethod_PlaybackInfoPostPaywall, + enum class StreamUrlMethod { + StreamUrl, + UrlPostPaywall, + PlaybackInfoPostPaywall }; void Load() override; diff --git a/src/smartplaylists/playlistgenerator.h b/src/smartplaylists/playlistgenerator.h index f0df7bdd6..489b38073 100644 --- a/src/smartplaylists/playlistgenerator.h +++ b/src/smartplaylists/playlistgenerator.h @@ -43,13 +43,13 @@ class PlaylistGenerator : public QObject, public std::enable_shared_from_this Create(const Type type = Type_Query); + static std::shared_ptr Create(const Type type = Type::Query); // Should be called before Load on a new PlaylistGenerator void set_collection(CollectionBackend *backend) { backend_ = backend; } @@ -68,7 +68,7 @@ class PlaylistGenerator : public QObject, public std::enable_shared_from_this 0) { return generator->GenerateMore(dynamic_count); @@ -70,17 +70,17 @@ void PlaylistGeneratorInserter::Load(Playlist *destination, const int row, const QObject::connect(generator.get(), &PlaylistGenerator::Error, this, &PlaylistGeneratorInserter::Error); - QFuture future = QtConcurrent::run(PlaylistGeneratorInserter::Generate, generator, dynamic_count); - QFutureWatcher *watcher = new QFutureWatcher(); - QObject::connect(watcher, &QFutureWatcher::finished, this, &PlaylistGeneratorInserter::Finished); + QFuture future = QtConcurrent::run(PlaylistGeneratorInserter::Generate, generator, dynamic_count); + QFutureWatcher *watcher = new QFutureWatcher(); + QObject::connect(watcher, &QFutureWatcher::finished, this, &PlaylistGeneratorInserter::Finished); watcher->setFuture(future); } void PlaylistGeneratorInserter::Finished() { - QFutureWatcher *watcher = static_cast*>(sender()); - PlaylistItemList items = watcher->result(); + QFutureWatcher *watcher = static_cast*>(sender()); + PlaylistItemPtrList items = watcher->result(); watcher->deleteLater(); if (items.isEmpty()) { diff --git a/src/smartplaylists/playlistgeneratorinserter.h b/src/smartplaylists/playlistgeneratorinserter.h index 317c610c9..8e70b10d2 100644 --- a/src/smartplaylists/playlistgeneratorinserter.h +++ b/src/smartplaylists/playlistgeneratorinserter.h @@ -44,7 +44,7 @@ class PlaylistGeneratorInserter : public QObject { void Load(Playlist *destination, const int row, const bool play_now, const bool enqueue, const bool enqueue_next, PlaylistGeneratorPtr generator, const int dynamic_count = 0); private: - static PlaylistItemList Generate(PlaylistGeneratorPtr generator, const int dynamic_count); + static PlaylistItemPtrList Generate(PlaylistGeneratorPtr generator, const int dynamic_count); signals: void Error(QString message); diff --git a/src/smartplaylists/playlistquerygenerator.cpp b/src/smartplaylists/playlistquerygenerator.cpp index 06a6a31da..b1605d7da 100644 --- a/src/smartplaylists/playlistquerygenerator.cpp +++ b/src/smartplaylists/playlistquerygenerator.cpp @@ -67,7 +67,7 @@ QByteArray PlaylistQueryGenerator::Save() const { } -PlaylistItemList PlaylistQueryGenerator::Generate() { +PlaylistItemPtrList PlaylistQueryGenerator::Generate() { previous_ids_.clear(); current_pos_ = 0; @@ -75,7 +75,7 @@ PlaylistItemList PlaylistQueryGenerator::Generate() { } -PlaylistItemList PlaylistQueryGenerator::GenerateMore(const int count) { +PlaylistItemPtrList PlaylistQueryGenerator::GenerateMore(const int count) { SmartPlaylistSearch search_copy = search_; search_copy.id_not_in_ = previous_ids_; @@ -83,13 +83,13 @@ PlaylistItemList PlaylistQueryGenerator::GenerateMore(const int count) { search_copy.limit_ = count; } - if (search_copy.sort_type_ != SmartPlaylistSearch::Sort_Random) { + if (search_copy.sort_type_ != SmartPlaylistSearch::SortType::Random) { search_copy.first_item_ = current_pos_; current_pos_ += search_copy.limit_; } SongList songs = backend_->SmartPlaylistsFindSongs(search_copy); - PlaylistItemList items; + PlaylistItemPtrList items; items.reserve(songs.count()); for (const Song &song : songs) { items << PlaylistItem::NewFromSong(song); diff --git a/src/smartplaylists/playlistquerygenerator.h b/src/smartplaylists/playlistquerygenerator.h index a640800f9..4fde2640c 100644 --- a/src/smartplaylists/playlistquerygenerator.h +++ b/src/smartplaylists/playlistquerygenerator.h @@ -37,14 +37,14 @@ class PlaylistQueryGenerator : public PlaylistGenerator { explicit PlaylistQueryGenerator(QObject *parent = nullptr); explicit PlaylistQueryGenerator(const QString &name, const SmartPlaylistSearch &search, const bool dynamic = false, QObject *parent = nullptr); - Type type() const override { return Type_Query; } + Type type() const override { return Type::Query; } void Load(const SmartPlaylistSearch &search); void Load(const QByteArray &data) override; QByteArray Save() const override; - PlaylistItemList Generate() override; - PlaylistItemList GenerateMore(const int count) override; + PlaylistItemPtrList Generate() override; + PlaylistItemPtrList GenerateMore(const int count) override; bool is_dynamic() const override { return dynamic_; } void set_dynamic(bool dynamic) override { dynamic_ = dynamic; } diff --git a/src/smartplaylists/smartplaylistquerywizardplugin.cpp b/src/smartplaylists/smartplaylistquerywizardplugin.cpp index 9848dacbd..68758d974 100644 --- a/src/smartplaylists/smartplaylistquerywizardplugin.cpp +++ b/src/smartplaylists/smartplaylistquerywizardplugin.cpp @@ -128,7 +128,7 @@ int SmartPlaylistQueryWizardPlugin::CreatePages(QWizard *wizard, int finish_page terms_page_layout->addWidget(search_page_->preview_); // Add sort field texts - for (int i = 0; i < SmartPlaylistSearchTerm::FieldCount; ++i) { + for (int i = 0; i < static_cast(SmartPlaylistSearchTerm::Field::FieldCount); ++i) { const SmartPlaylistSearchTerm::Field field = static_cast(i); const QString field_name = SmartPlaylistSearchTerm::FieldName(field); sort_ui_->field_value->addItem(field_name); @@ -172,7 +172,7 @@ void SmartPlaylistQueryWizardPlugin::SetGenerator(PlaylistGeneratorPtr g) { SmartPlaylistSearch search = gen->search(); // Search type - search_page_->ui_->type->setCurrentIndex(search.search_type_); + search_page_->ui_->type->setCurrentIndex(static_cast(search.search_type_)); // Search terms qDeleteAll(search_page_->terms_); @@ -184,13 +184,13 @@ void SmartPlaylistQueryWizardPlugin::SetGenerator(PlaylistGeneratorPtr g) { } // Sort order - if (search.sort_type_ == SmartPlaylistSearch::Sort_Random) { + if (search.sort_type_ == SmartPlaylistSearch::SortType::Random) { sort_ui_->random->setChecked(true); } else { sort_ui_->field->setChecked(true); - sort_ui_->order->setCurrentIndex(search.sort_type_ == SmartPlaylistSearch::Sort_FieldAsc ? 0 : 1); - sort_ui_->field_value->setCurrentIndex(search.sort_field_); + sort_ui_->order->setCurrentIndex(search.sort_type_ == SmartPlaylistSearch::SortType::FieldAsc ? 0 : 1); + sort_ui_->field_value->setCurrentIndex(static_cast(search.sort_field_)); } // Limit @@ -292,11 +292,11 @@ SmartPlaylistSearch SmartPlaylistQueryWizardPlugin::MakeSearch() const { // Sort order if (sort_ui_->random->isChecked()) { - ret.sort_type_ = SmartPlaylistSearch::Sort_Random; + ret.sort_type_ = SmartPlaylistSearch::SortType::Random; } else { const bool ascending = sort_ui_->order->currentIndex() == 0; - ret.sort_type_ = ascending ? SmartPlaylistSearch::Sort_FieldAsc : SmartPlaylistSearch::Sort_FieldDesc; + ret.sort_type_ = ascending ? SmartPlaylistSearch::SortType::FieldAsc : SmartPlaylistSearch::SortType::FieldDesc; ret.sort_field_ = static_cast(sort_ui_->field_value->currentIndex()); } diff --git a/src/smartplaylists/smartplaylistquerywizardplugin.h b/src/smartplaylists/smartplaylistquerywizardplugin.h index 76f8e0487..6cde6e481 100644 --- a/src/smartplaylists/smartplaylistquerywizardplugin.h +++ b/src/smartplaylists/smartplaylistquerywizardplugin.h @@ -44,7 +44,7 @@ class SmartPlaylistQueryWizardPlugin : public SmartPlaylistWizardPlugin { explicit SmartPlaylistQueryWizardPlugin(Application *app, CollectionBackend *collection, QObject *parent); ~SmartPlaylistQueryWizardPlugin() override; - PlaylistGenerator::Type type() const override { return PlaylistGenerator::Type_Query; } + PlaylistGenerator::Type type() const override { return PlaylistGenerator::Type::Query; } QString name() const override; QString description() const override; bool is_dynamic() const override { return true; } diff --git a/src/smartplaylists/smartplaylistsearch.cpp b/src/smartplaylists/smartplaylistsearch.cpp index 837e889f2..670c11c34 100644 --- a/src/smartplaylists/smartplaylistsearch.cpp +++ b/src/smartplaylists/smartplaylistsearch.cpp @@ -28,7 +28,7 @@ #include "smartplaylistsearch.h" -SmartPlaylistSearch::SmartPlaylistSearch() : search_type_(Type_And), sort_type_(Sort_Random), sort_field_(SmartPlaylistSearchTerm::Field_Title), limit_(-1), first_item_(0) { Reset(); } +SmartPlaylistSearch::SmartPlaylistSearch() : search_type_(SearchType::And), sort_type_(SortType::Random), sort_field_(SmartPlaylistSearchTerm::Field::Title), limit_(-1), first_item_(0) { Reset(); } SmartPlaylistSearch::SmartPlaylistSearch(const SearchType type, const TermList &terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit) : search_type_(type), @@ -40,10 +40,10 @@ SmartPlaylistSearch::SmartPlaylistSearch(const SearchType type, const TermList & void SmartPlaylistSearch::Reset() { - search_type_ = Type_And; + search_type_ = SearchType::And; terms_.clear(); - sort_type_ = Sort_Random; - sort_field_ = SmartPlaylistSearchTerm::Field_Title; + sort_type_ = SortType::Random; + sort_field_ = SmartPlaylistSearchTerm::Field::Title; limit_ = -1; first_item_ = 0; @@ -61,8 +61,8 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { term_where_clauses << term.ToSql(); } - if (!terms_.isEmpty() && search_type_ != Type_All) { - QString boolean_op = search_type_ == Type_And ? " AND " : " OR "; + if (!terms_.isEmpty() && search_type_ != SearchType::All) { + QString boolean_op = search_type_ == SearchType::And ? " AND " : " OR "; where_clauses << "(" + term_where_clauses.join(boolean_op) + ")"; } @@ -84,11 +84,11 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { } // Add sort by - if (sort_type_ == Sort_Random) { + if (sort_type_ == SortType::Random) { sql += " ORDER BY random()"; } else { - sql += " ORDER BY " + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == Sort_FieldAsc ? " ASC" : " DESC"); + sql += " ORDER BY " + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == SortType::FieldAsc ? " ASC" : " DESC"); } // Add limit @@ -106,7 +106,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { bool SmartPlaylistSearch::is_valid() const { - if (search_type_ == Type_All) return true; + if (search_type_ == SearchType::All) return true; return !terms_.isEmpty(); } diff --git a/src/smartplaylists/smartplaylistsearch.h b/src/smartplaylists/smartplaylistsearch.h index 4b9b193b7..340e19577 100644 --- a/src/smartplaylists/smartplaylistsearch.h +++ b/src/smartplaylists/smartplaylistsearch.h @@ -36,10 +36,18 @@ class SmartPlaylistSearch { using TermList = QList; // These values are persisted, so add to the end of the enum only - enum SearchType { Type_And = 0, Type_Or, Type_All, }; + enum class SearchType { + And = 0, + Or, + All + }; // These values are persisted, so add to the end of the enum only - enum SortType { Sort_Random = 0, Sort_FieldAsc, Sort_FieldDesc, }; + enum class SortType { + Random = 0, + FieldAsc, + FieldDesc + }; explicit SmartPlaylistSearch(); explicit SmartPlaylistSearch(const SearchType type, const TermList &terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit = PlaylistGenerator::kDefaultLimit); diff --git a/src/smartplaylists/smartplaylistsearchpreview.cpp b/src/smartplaylists/smartplaylistsearchpreview.cpp index f81c03770..33402e514 100644 --- a/src/smartplaylists/smartplaylistsearchpreview.cpp +++ b/src/smartplaylists/smartplaylistsearchpreview.cpp @@ -105,7 +105,7 @@ void SmartPlaylistSearchPreview::showEvent(QShowEvent *e) { } namespace { -PlaylistItemList DoRunSearch(PlaylistGeneratorPtr gen) { return gen->Generate(); } +PlaylistItemPtrList DoRunSearch(PlaylistGeneratorPtr gen) { return gen->Generate(); } } // namespace void SmartPlaylistSearchPreview::RunSearch(const SmartPlaylistSearch &search) { @@ -116,17 +116,17 @@ void SmartPlaylistSearchPreview::RunSearch(const SmartPlaylistSearch &search) { ui_->busy_container->show(); ui_->count_label->hide(); - QFuture future = QtConcurrent::run(DoRunSearch, generator_); - QFutureWatcher *watcher = new QFutureWatcher(); - QObject::connect(watcher, &QFutureWatcher::finished, this, &SmartPlaylistSearchPreview::SearchFinished); + QFuture future = QtConcurrent::run(DoRunSearch, generator_); + QFutureWatcher *watcher = new QFutureWatcher(); + QObject::connect(watcher, &QFutureWatcher::finished, this, &SmartPlaylistSearchPreview::SearchFinished); watcher->setFuture(future); } void SmartPlaylistSearchPreview::SearchFinished() { - QFutureWatcher *watcher = static_cast*>(sender()); - PlaylistItemList all_items = watcher->result(); + QFutureWatcher *watcher = static_cast*>(sender()); + PlaylistItemPtrList all_items = watcher->result(); watcher->deleteLater(); last_search_ = std::dynamic_pointer_cast(generator_)->search(); @@ -140,7 +140,7 @@ void SmartPlaylistSearchPreview::SearchFinished() { return; } - PlaylistItemList displayed_items = all_items.mid(0, PlaylistGenerator::kDefaultLimit); + PlaylistItemPtrList displayed_items = all_items.mid(0, PlaylistGenerator::kDefaultLimit); model_->Clear(); model_->InsertItems(displayed_items); diff --git a/src/smartplaylists/smartplaylistsearchterm.cpp b/src/smartplaylists/smartplaylistsearchterm.cpp index 61230d4b7..af3daae52 100644 --- a/src/smartplaylists/smartplaylistsearchterm.cpp +++ b/src/smartplaylists/smartplaylistsearchterm.cpp @@ -29,21 +29,21 @@ #include "smartplaylistsearchterm.h" #include "playlist/playlist.h" -SmartPlaylistSearchTerm::SmartPlaylistSearchTerm() : field_(Field_Title), operator_(Op_Equals), date_(Date_Hour) {} +SmartPlaylistSearchTerm::SmartPlaylistSearchTerm() : field_(Field::Title), operator_(Operator::Equals), datetype_(DateType::Hour) {} SmartPlaylistSearchTerm::SmartPlaylistSearchTerm(Field field, Operator op, const QVariant &value) - : field_(field), operator_(op), value_(value), date_(Date_Hour) {} + : field_(field), operator_(op), value_(value), datetype_(DateType::Hour) {} QString SmartPlaylistSearchTerm::ToSql() const { QString col = FieldColumnName(field_); - QString date = DateName(date_, true); + QString date = DateName(datetype_, true); QString value = value_.toString(); value.replace('\'', "''"); - if (field_ == Field_Filetype) { + if (field_ == Field::Filetype) { Song::FileType filetype = Song::FiletypeByExtension(value); - if (filetype == Song::FileType_Unknown) { + if (filetype == Song::FileType::Unknown) { filetype = Song::FiletypeByDescription(value); } value = QString::number(static_cast(filetype)); @@ -51,15 +51,15 @@ QString SmartPlaylistSearchTerm::ToSql() const { QString second_value; - bool special_date_query = (operator_ == SmartPlaylistSearchTerm::Op_NumericDate || - operator_ == SmartPlaylistSearchTerm::Op_NumericDateNot || - operator_ == SmartPlaylistSearchTerm::Op_RelativeDate); + bool special_date_query = (operator_ == Operator::NumericDate || + operator_ == Operator::NumericDateNot || + operator_ == Operator::RelativeDate); // Floating point problems... // Theoretically 0.0 == 0 stars, 0.1 == 0.5 star, 0.2 == 1 star etc. // but in reality we need to consider anything from [0.05, 0.15) range to be 0.5 star etc. // To make this simple, I transform the ranges to integeres and then operate on ints: [0.0, 0.05) -> 0, [0.05, 0.15) -> 1 etc. - if (TypeOf(field_) == Type_Date) { + if (TypeOf(field_) == Type::Date) { if (!special_date_query) { // We have the exact date // The calendar widget specifies no time so ditch the possible time part @@ -80,75 +80,75 @@ QString SmartPlaylistSearchTerm::ToSql() const { } } } - else if (TypeOf(field_) == Type_Time) { + else if (TypeOf(field_) == Type::Time) { // Convert seconds to nanoseconds value = "CAST (" + value + " *1000000000 AS INTEGER)"; } // File paths need some extra processing since they are stored as encoded urls in the database. - if (field_ == Field_Filepath) { - if (operator_ == Op_StartsWith || operator_ == Op_Equals) { + if (field_ == Field::Filepath) { + if (operator_ == Operator::StartsWith || operator_ == Operator::Equals) { value = QUrl::fromLocalFile(value).toEncoded(); } else { value = QUrl(value).toEncoded(); } } - else if (TypeOf(field_) == Type_Rating) { + else if (TypeOf(field_) == Type::Rating) { col = "CAST ((" + col + " + 0.05) * 10 AS INTEGER)"; value = "CAST ((" + value + " + 0.05) * 10 AS INTEGER)"; } switch (operator_) { - case Op_Contains: + case Operator::Contains: return col + " LIKE '%" + value + "%'"; - case Op_NotContains: + case Operator::NotContains: return col + " NOT LIKE '%" + value + "%'"; - case Op_StartsWith: + case Operator::StartsWith: return col + " LIKE '" + value + "%'"; - case Op_EndsWith: + case Operator::EndsWith: return col + " LIKE '%" + value + "'"; - case Op_Equals: - if (TypeOf(field_) == Type_Text) { + case Operator::Equals: + if (TypeOf(field_) == Type::Text) { return col + " LIKE '" + value + "'"; } - else if (TypeOf(field_) == Type_Date || TypeOf(field_) == Type_Time || TypeOf(field_) == Type_Rating) { + else if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { return col + " = " + value; } else { return col + " = '" + value + "'"; } - case Op_GreaterThan: - if (TypeOf(field_) == Type_Date || TypeOf(field_) == Type_Time || TypeOf(field_) == Type_Rating) { + case Operator::GreaterThan: + if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { return col + " > " + value; } else { return col + " > '" + value + "'"; } - case Op_LessThan: - if (TypeOf(field_) == Type_Date || TypeOf(field_) == Type_Time || TypeOf(field_) == Type_Rating) { + case Operator::LessThan: + if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { return col + " < " + value; } else { return col + " < '" + value + "'"; } - case Op_NumericDate: + case Operator::NumericDate: return col + " > " + "DATETIME('now', '-" + value + " " + date + "', 'localtime')"; - case Op_NumericDateNot: + case Operator::NumericDateNot: return col + " < " + "DATETIME('now', '-" + value + " " + date + "', 'localtime')"; - case Op_RelativeDate: + case Operator::RelativeDate: // Consider the time range before the first date but after the second one return "(" + col + " < " + "DATETIME('now', '-" + value + " " + date + "', 'localtime') AND " + col + " > " + "DATETIME('now', '-" + second_value + " " + date + "', 'localtime'))"; - case Op_NotEquals: - if (TypeOf(field_) == Type_Text) { + case Operator::NotEquals: + if (TypeOf(field_) == Type::Text) { return col + " <> '" + value + "'"; } else { return col + " <> " + value; } - case Op_Empty: + case Operator::Empty: return col + " = ''"; - case Op_NotEmpty: + case Operator::NotEmpty: return col + " <> ''"; } @@ -158,30 +158,30 @@ QString SmartPlaylistSearchTerm::ToSql() const { bool SmartPlaylistSearchTerm::is_valid() const { // We can accept also a zero value in these cases - if (operator_ == SmartPlaylistSearchTerm::Op_NumericDate) { + if (operator_ == Operator::NumericDate) { return value_.toInt() >= 0; } - else if (operator_ == SmartPlaylistSearchTerm::Op_RelativeDate) { + else if (operator_ == Operator::RelativeDate) { return (value_.toInt() >= 0 && value_.toInt() < second_value_.toInt()); } switch (TypeOf(field_)) { - case Type_Text: - if (operator_ == SmartPlaylistSearchTerm::Op_Empty || operator_ == SmartPlaylistSearchTerm::Op_NotEmpty) { + case Type::Text: + if (operator_ == Operator::Empty || operator_ == Operator::NotEmpty) { return true; } // Empty fields should be possible. - // All values for Type_Text should be valid. + // All values for Type::Text should be valid. return !value_.toString().isEmpty(); - case Type_Date: + case Type::Date: return value_.toInt() != 0; - case Type_Number: + case Type::Number: return value_.toInt() >= 0; - case Type_Time: + case Type::Time: return true; - case Type_Rating: + case Type::Rating: return value_.toFloat() >= 0.0; - case Type_Invalid: + case Type::Invalid: return false; } return false; @@ -189,78 +189,80 @@ bool SmartPlaylistSearchTerm::is_valid() const { } bool SmartPlaylistSearchTerm::operator==(const SmartPlaylistSearchTerm &other) const { - return field_ == other.field_ && operator_ == other.operator_ && - value_ == other.value_ && date_ == other.date_ && + return field_ == other.field_ && + operator_ == other.operator_ && + value_ == other.value_ && + datetype_ == other.datetype_ && second_value_ == other.second_value_; } SmartPlaylistSearchTerm::Type SmartPlaylistSearchTerm::TypeOf(const Field field) { switch (field) { - case Field_Length: - return Type_Time; + case Field::Length: + return Type::Time; - case Field_Track: - case Field_Disc: - case Field_Year: - case Field_OriginalYear: - case Field_Filesize: - case Field_PlayCount: - case Field_SkipCount: - case Field_Samplerate: - case Field_Bitdepth: - case Field_Bitrate: - return Type_Number; + case Field::Track: + case Field::Disc: + case Field::Year: + case Field::OriginalYear: + case Field::Filesize: + case Field::PlayCount: + case Field::SkipCount: + case Field::Samplerate: + case Field::Bitdepth: + case Field::Bitrate: + return Type::Number; - case Field_LastPlayed: - case Field_DateCreated: - case Field_DateModified: - return Type_Date; + case Field::LastPlayed: + case Field::DateCreated: + case Field::DateModified: + return Type::Date; - case Field_Rating: - return Type_Rating; + case Field::Rating: + return Type::Rating; default: - return Type_Text; + return Type::Text; } } -OperatorList SmartPlaylistSearchTerm::OperatorsForType(const Type type) { +SmartPlaylistSearchTerm::OperatorList SmartPlaylistSearchTerm::OperatorsForType(const Type type) { switch (type) { - case Type_Text: - return OperatorList() << Op_Contains << Op_NotContains << Op_Equals - << Op_NotEquals << Op_Empty << Op_NotEmpty - << Op_StartsWith << Op_EndsWith; - case Type_Date: - return OperatorList() << Op_Equals << Op_NotEquals << Op_GreaterThan - << Op_LessThan << Op_NumericDate - << Op_NumericDateNot << Op_RelativeDate; + case Type::Text: + return OperatorList() << Operator::Contains << Operator::NotContains << Operator::Equals + << Operator::NotEquals << Operator::Empty << Operator::NotEmpty + << Operator::StartsWith << Operator::EndsWith; + case Type::Date: + return OperatorList() << Operator::Equals << Operator::NotEquals << Operator::GreaterThan + << Operator::LessThan << Operator::NumericDate + << Operator::NumericDateNot << Operator::RelativeDate; default: - return OperatorList() << Op_Equals << Op_NotEquals << Op_GreaterThan - << Op_LessThan; + return OperatorList() << Operator::Equals << Operator::NotEquals << Operator::GreaterThan + << Operator::LessThan; } } QString SmartPlaylistSearchTerm::OperatorText(const Type type, const Operator op) { - if (type == Type_Date) { + if (type == Type::Date) { switch (op) { - case Op_GreaterThan: + case Operator::GreaterThan: return QObject::tr("after"); - case Op_LessThan: + case Operator::LessThan: return QObject::tr("before"); - case Op_Equals: + case Operator::Equals: return QObject::tr("on"); - case Op_NotEquals: + case Operator::NotEquals: return QObject::tr("not on"); - case Op_NumericDate: + case Operator::NumericDate: return QObject::tr("in the last"); - case Op_NumericDateNot: + case Operator::NumericDateNot: return QObject::tr("not in the last"); - case Op_RelativeDate: + case Operator::RelativeDate: return QObject::tr("between"); default: return QString(); @@ -268,25 +270,25 @@ QString SmartPlaylistSearchTerm::OperatorText(const Type type, const Operator op } switch (op) { - case Op_Contains: + case Operator::Contains: return QObject::tr("contains"); - case Op_NotContains: + case Operator::NotContains: return QObject::tr("does not contain"); - case Op_StartsWith: + case Operator::StartsWith: return QObject::tr("starts with"); - case Op_EndsWith: + case Operator::EndsWith: return QObject::tr("ends with"); - case Op_GreaterThan: + case Operator::GreaterThan: return QObject::tr("greater than"); - case Op_LessThan: + case Operator::LessThan: return QObject::tr("less than"); - case Op_Equals: + case Operator::Equals: return QObject::tr("equals"); - case Op_NotEquals: + case Operator::NotEquals: return QObject::tr("not equals"); - case Op_Empty: + case Operator::Empty: return QObject::tr("empty"); - case Op_NotEmpty: + case Operator::NotEmpty: return QObject::tr("not empty"); default: return QString(); @@ -299,59 +301,59 @@ QString SmartPlaylistSearchTerm::OperatorText(const Type type, const Operator op QString SmartPlaylistSearchTerm::FieldColumnName(const Field field) { switch (field) { - case Field_AlbumArtist: + case Field::AlbumArtist: return "albumartist"; - case Field_Artist: + case Field::Artist: return "artist"; - case Field_Album: + case Field::Album: return "album"; - case Field_Title: + case Field::Title: return "title"; - case Field_Track: + case Field::Track: return "track"; - case Field_Disc: + case Field::Disc: return "disc"; - case Field_Year: + case Field::Year: return "year"; - case Field_OriginalYear: + case Field::OriginalYear: return "originalyear"; - case Field_Genre: + case Field::Genre: return "genre"; - case Field_Composer: + case Field::Composer: return "composer"; - case Field_Performer: + case Field::Performer: return "performer"; - case Field_Grouping: + case Field::Grouping: return "grouping"; - case Field_Comment: + case Field::Comment: return "comment"; - case Field_Length: + case Field::Length: return "length"; - case Field_Filepath: + case Field::Filepath: return "url"; - case Field_Filetype: + case Field::Filetype: return "filetype"; - case Field_Filesize: + case Field::Filesize: return "filesize"; - case Field_DateCreated: + case Field::DateCreated: return "ctime"; - case Field_DateModified: + case Field::DateModified: return "mtime"; - case Field_PlayCount: + case Field::PlayCount: return "playcount"; - case Field_SkipCount: + case Field::SkipCount: return "skipcount"; - case Field_LastPlayed: + case Field::LastPlayed: return "lastplayed"; - case Field_Rating: + case Field::Rating: return "rating"; - case Field_Samplerate: + case Field::Samplerate: return "samplerate"; - case Field_Bitdepth: + case Field::Bitdepth: return "bitdepth"; - case Field_Bitrate: + case Field::Bitrate: return "bitrate"; - case FieldCount: + case Field::FieldCount: Q_ASSERT(0); } return QString(); @@ -361,59 +363,59 @@ QString SmartPlaylistSearchTerm::FieldColumnName(const Field field) { QString SmartPlaylistSearchTerm::FieldName(const Field field) { switch (field) { - case Field_AlbumArtist: + case Field::AlbumArtist: return Playlist::column_name(Playlist::Column_AlbumArtist); - case Field_Artist: + case Field::Artist: return Playlist::column_name(Playlist::Column_Artist); - case Field_Album: + case Field::Album: return Playlist::column_name(Playlist::Column_Album); - case Field_Title: + case Field::Title: return Playlist::column_name(Playlist::Column_Title); - case Field_Track: + case Field::Track: return Playlist::column_name(Playlist::Column_Track); - case Field_Disc: + case Field::Disc: return Playlist::column_name(Playlist::Column_Disc); - case Field_Year: + case Field::Year: return Playlist::column_name(Playlist::Column_Year); - case Field_OriginalYear: + case Field::OriginalYear: return Playlist::column_name(Playlist::Column_OriginalYear); - case Field_Genre: + case Field::Genre: return Playlist::column_name(Playlist::Column_Genre); - case Field_Composer: + case Field::Composer: return Playlist::column_name(Playlist::Column_Composer); - case Field_Performer: + case Field::Performer: return Playlist::column_name(Playlist::Column_Performer); - case Field_Grouping: + case Field::Grouping: return Playlist::column_name(Playlist::Column_Grouping); - case Field_Comment: + case Field::Comment: return QObject::tr("Comment"); - case Field_Length: + case Field::Length: return Playlist::column_name(Playlist::Column_Length); - case Field_Filepath: + case Field::Filepath: return Playlist::column_name(Playlist::Column_Filename); - case Field_Filetype: + case Field::Filetype: return Playlist::column_name(Playlist::Column_Filetype); - case Field_Filesize: + case Field::Filesize: return Playlist::column_name(Playlist::Column_Filesize); - case Field_DateCreated: + case Field::DateCreated: return Playlist::column_name(Playlist::Column_DateCreated); - case Field_DateModified: + case Field::DateModified: return Playlist::column_name(Playlist::Column_DateModified); - case Field_PlayCount: + case Field::PlayCount: return Playlist::column_name(Playlist::Column_PlayCount); - case Field_SkipCount: + case Field::SkipCount: return Playlist::column_name(Playlist::Column_SkipCount); - case Field_LastPlayed: + case Field::LastPlayed: return Playlist::column_name(Playlist::Column_LastPlayed); - case Field_Rating: + case Field::Rating: return Playlist::column_name(Playlist::Column_Rating); - case Field_Samplerate: + case Field::Samplerate: return Playlist::column_name(Playlist::Column_Samplerate); - case Field_Bitdepth: + case Field::Bitdepth: return Playlist::column_name(Playlist::Column_Bitdepth); - case Field_Bitrate: + case Field::Bitrate: return Playlist::column_name(Playlist::Column_Bitrate); - case FieldCount: + case Field::FieldCount: Q_ASSERT(0); } return QString(); @@ -423,35 +425,35 @@ QString SmartPlaylistSearchTerm::FieldName(const Field field) { QString SmartPlaylistSearchTerm::FieldSortOrderText(const Type type, const bool ascending) { switch (type) { - case Type_Text: + case Type::Text: return ascending ? QObject::tr("A-Z") : QObject::tr("Z-A"); - case Type_Date: + case Type::Date: return ascending ? QObject::tr("oldest first") : QObject::tr("newest first"); - case Type_Time: + case Type::Time: return ascending ? QObject::tr("shortest first") : QObject::tr("longest first"); - case Type_Number: - case Type_Rating: + case Type::Number: + case Type::Rating: return ascending ? QObject::tr("smallest first") : QObject::tr("biggest first"); - case Type_Invalid: + case Type::Invalid: return QString(); } return QString(); } -QString SmartPlaylistSearchTerm::DateName(const DateType date, const bool forQuery) { +QString SmartPlaylistSearchTerm::DateName(const DateType datetype, const bool forQuery) { // If forQuery is true, untranslated keywords are returned - switch (date) { - case Date_Hour: + switch (datetype) { + case DateType::Hour: return (forQuery ? "hours" : QObject::tr("Hours")); - case Date_Day: + case DateType::Day: return (forQuery ? "days" : QObject::tr("Days")); - case Date_Week: + case DateType::Week: return (forQuery ? "weeks" : QObject::tr("Weeks")); - case Date_Month: + case DateType::Month: return (forQuery ? "months" : QObject::tr("Months")); - case Date_Year: + case DateType::Year: return (forQuery ? "years" : QObject::tr("Years")); } return QString(); @@ -464,7 +466,7 @@ QDataStream &operator<<(QDataStream &s, const SmartPlaylistSearchTerm &term) { s << static_cast(term.operator_); s << term.value_; s << term.second_value_; - s << static_cast(term.date_); + s << static_cast(term.datetype_); return s; } @@ -475,7 +477,7 @@ QDataStream &operator>>(QDataStream &s, SmartPlaylistSearchTerm &term) { s >> field >> op >> term.value_ >> term.second_value_ >> date; term.field_ = static_cast(field); term.operator_ = static_cast(op); - term.date_ = static_cast(date); + term.datetype_ = static_cast(date); return s; } diff --git a/src/smartplaylists/smartplaylistsearchterm.h b/src/smartplaylists/smartplaylistsearchterm.h index d6c40b459..ba11b1844 100644 --- a/src/smartplaylists/smartplaylistsearchterm.h +++ b/src/smartplaylists/smartplaylistsearchterm.h @@ -31,82 +31,83 @@ class SmartPlaylistSearchTerm { public: // These values are persisted, so add to the end of the enum only - enum Field { - Field_AlbumArtist = 0, - Field_Artist, - Field_Album, - Field_Title, - Field_Track, - Field_Disc, - Field_Year, - Field_OriginalYear, - Field_Genre, - Field_Composer, - Field_Performer, - Field_Grouping, - Field_Comment, - Field_Length, - Field_Filepath, - Field_Filetype, - Field_Filesize, - Field_DateCreated, - Field_DateModified, - Field_PlayCount, - Field_SkipCount, - Field_LastPlayed, - Field_Rating, - Field_Samplerate, - Field_Bitdepth, - Field_Bitrate, + enum class Field { + AlbumArtist = 0, + Artist, + Album, + Title, + Track, + Disc, + Year, + OriginalYear, + Genre, + Composer, + Performer, + Grouping, + Comment, + Length, + Filepath, + Filetype, + Filesize, + DateCreated, + DateModified, + PlayCount, + SkipCount, + LastPlayed, + Rating, + Samplerate, + Bitdepth, + Bitrate, FieldCount }; // These values are persisted, so add to the end of the enum only - enum Operator { + enum class Operator { // For text - Op_Contains = 0, - Op_NotContains = 1, - Op_StartsWith = 2, - Op_EndsWith = 3, + Contains = 0, + NotContains = 1, + StartsWith = 2, + EndsWith = 3, // For numbers - Op_GreaterThan = 4, - Op_LessThan = 5, + GreaterThan = 4, + LessThan = 5, // For everything - Op_Equals = 6, - Op_NotEquals = 9, + Equals = 6, + NotEquals = 9, // For numeric dates (e.g. in the last X days) - Op_NumericDate = 7, + NumericDate = 7, // For relative dates - Op_RelativeDate = 8, + RelativeDate = 8, // For numeric dates (e.g. not in the last X days) - Op_NumericDateNot = 10, + NumericDateNot = 10, - Op_Empty = 11, - Op_NotEmpty = 12, + Empty = 11, + NotEmpty = 12, // Next value = 13 }; + using OperatorList = QList; - enum Type { - Type_Text, - Type_Date, - Type_Time, - Type_Number, - Type_Rating, - Type_Invalid + enum class Type { + Text, + Date, + Time, + Number, + Rating, + Invalid }; // These values are persisted, so add to the end of the enum only - enum DateType { - Date_Hour = 0, - Date_Day, - Date_Week, - Date_Month, - Date_Year + enum class DateType { + Hour = 0, + Day, + Week, + Month, + Year }; explicit SmartPlaylistSearchTerm(); @@ -115,7 +116,7 @@ class SmartPlaylistSearchTerm { Field field_; Operator operator_; QVariant value_; - DateType date_; + DateType datetype_; // For relative dates, we need a second parameter, might be useful somewhere else QVariant second_value_; @@ -130,13 +131,14 @@ class SmartPlaylistSearchTerm { static QString FieldName(const Field field); static QString FieldColumnName(const Field field); static QString FieldSortOrderText(const Type type, const bool ascending); - static QString DateName(const DateType date, const bool forQuery); + static QString DateName(const DateType datetype, const bool forQuery); }; -using OperatorList = QList; - QDataStream &operator<<(QDataStream &s, const SmartPlaylistSearchTerm &term); QDataStream &operator>>(QDataStream &s, SmartPlaylistSearchTerm &term); +Q_DECLARE_METATYPE(SmartPlaylistSearchTerm::Operator) +Q_DECLARE_METATYPE(SmartPlaylistSearchTerm::OperatorList) + #endif // SMARTPLAYLISTSEARCHTERM_H diff --git a/src/smartplaylists/smartplaylistsearchtermwidget.cpp b/src/smartplaylists/smartplaylistsearchtermwidget.cpp index 0ea0185bc..bda449230 100644 --- a/src/smartplaylists/smartplaylistsearchtermwidget.cpp +++ b/src/smartplaylists/smartplaylistsearchtermwidget.cpp @@ -81,7 +81,7 @@ SmartPlaylistSearchTermWidget::SmartPlaylistSearchTermWidget(CollectionBackend * animation_(new QPropertyAnimation(this, "overlay_opacity", this)), active_(true), initialized_(false), - current_field_type_(SmartPlaylistSearchTerm::Type_Invalid) { + current_field_type_(SmartPlaylistSearchTerm::Type::Invalid) { ui_->setupUi(this); @@ -103,7 +103,7 @@ SmartPlaylistSearchTermWidget::SmartPlaylistSearchTermWidget(CollectionBackend * ui_->value_date->setDate(QDate::currentDate()); // Populate the combo boxes - for (int i = 0; i < SmartPlaylistSearchTerm::FieldCount; ++i) { + for (int i = 0; i < static_cast(SmartPlaylistSearchTerm::Field::FieldCount); ++i) { ui_->field->addItem(SmartPlaylistSearchTerm::FieldName(static_cast(i))); ui_->field->setItemData(i, i); } @@ -149,7 +149,7 @@ void SmartPlaylistSearchTermWidget::FieldChanged(int index) { for (SmartPlaylistSearchTerm::Operator op : SmartPlaylistSearchTerm::OperatorsForType(type)) { const int i = ui_->op->count(); ui_->op->addItem(SmartPlaylistSearchTerm::OperatorText(type, op)); - ui_->op->setItemData(i, op); + ui_->op->setItemData(i, QVariant::fromValue(op)); } current_field_type_ = type; } @@ -158,27 +158,27 @@ void SmartPlaylistSearchTermWidget::FieldChanged(int index) { QWidget *page = nullptr; SmartPlaylistSearchTerm::Operator op = static_cast(ui_->op->itemData(ui_->op->currentIndex()).toInt()); switch (type) { - case SmartPlaylistSearchTerm::Type_Time: + case SmartPlaylistSearchTerm::Type::Time: page = ui_->page_time; break; - case SmartPlaylistSearchTerm::Type_Number: + case SmartPlaylistSearchTerm::Type::Number: page = ui_->page_number; break; - case SmartPlaylistSearchTerm::Type_Date: + case SmartPlaylistSearchTerm::Type::Date: page = ui_->page_date; break; - case SmartPlaylistSearchTerm::Type_Text: - if (op == SmartPlaylistSearchTerm::Op_Empty || op == SmartPlaylistSearchTerm::Op_NotEmpty) { + case SmartPlaylistSearchTerm::Type::Text: + if (op == SmartPlaylistSearchTerm::Operator::Empty || op == SmartPlaylistSearchTerm::Operator::NotEmpty) { page = ui_->page_empty; } else { page = ui_->page_text; } break; - case SmartPlaylistSearchTerm::Type_Rating: + case SmartPlaylistSearchTerm::Type::Rating: page = ui_->page_rating; break; - case SmartPlaylistSearchTerm::Type_Invalid: + case SmartPlaylistSearchTerm::Type::Invalid: page = nullptr; break; } @@ -186,11 +186,11 @@ void SmartPlaylistSearchTermWidget::FieldChanged(int index) { // Maybe set a tag completer switch (field) { - case SmartPlaylistSearchTerm::Field_Artist: + case SmartPlaylistSearchTerm::Field::Artist: new TagCompleter(collection_, Playlist::Column_Artist, ui_->value_text); break; - case SmartPlaylistSearchTerm::Field_Album: + case SmartPlaylistSearchTerm::Field::Album: new TagCompleter(collection_, Playlist::Column_Album, ui_->value_text); break; @@ -214,7 +214,7 @@ void SmartPlaylistSearchTermWidget::OpChanged(int idx) { // We need to change the page only in the following case if ((ui_->value_stack->currentWidget() == ui_->page_text) || (ui_->value_stack->currentWidget() == ui_->page_empty)) { QWidget *page = nullptr; - if (op == SmartPlaylistSearchTerm::Op_Empty || op == SmartPlaylistSearchTerm::Op_NotEmpty) { + if (op == SmartPlaylistSearchTerm::Operator::Empty || op == SmartPlaylistSearchTerm::Operator::NotEmpty) { page = ui_->page_empty; } else { @@ -228,10 +228,10 @@ void SmartPlaylistSearchTermWidget::OpChanged(int idx) { (ui_->value_stack->currentWidget() == ui_->page_date_relative) ) { QWidget *page = nullptr; - if (op == SmartPlaylistSearchTerm::Op_NumericDate || op == SmartPlaylistSearchTerm::Op_NumericDateNot) { + if (op == SmartPlaylistSearchTerm::Operator::NumericDate || op == SmartPlaylistSearchTerm::Operator::NumericDateNot) { page = ui_->page_date_numeric; } - else if (op == SmartPlaylistSearchTerm::Op_RelativeDate) { + else if (op == SmartPlaylistSearchTerm::Operator::RelativeDate) { page = ui_->page_date_relative; } else { @@ -317,12 +317,12 @@ float SmartPlaylistSearchTermWidget::overlay_opacity() const { void SmartPlaylistSearchTermWidget::SetTerm(const SmartPlaylistSearchTerm &term) { - ui_->field->setCurrentIndex(ui_->field->findData(term.field_)); - ui_->op->setCurrentIndex(ui_->op->findData(term.operator_)); + ui_->field->setCurrentIndex(ui_->field->findData(static_cast(term.field_))); + ui_->op->setCurrentIndex(ui_->op->findData(static_cast(term.operator_))); // The value depends on the data type switch (SmartPlaylistSearchTerm::TypeOf(term.field_)) { - case SmartPlaylistSearchTerm::Type_Text: + case SmartPlaylistSearchTerm::Type::Text: if (ui_->value_stack->currentWidget() == ui_->page_empty) { ui_->value_text->setText(""); } @@ -331,34 +331,34 @@ void SmartPlaylistSearchTermWidget::SetTerm(const SmartPlaylistSearchTerm &term) } break; - case SmartPlaylistSearchTerm::Type_Number: + case SmartPlaylistSearchTerm::Type::Number: ui_->value_number->setValue(term.value_.toInt()); break; - case SmartPlaylistSearchTerm::Type_Date: + case SmartPlaylistSearchTerm::Type::Date: if (ui_->value_stack->currentWidget() == ui_->page_date_numeric) { ui_->value_date_numeric->setValue(term.value_.toInt()); - ui_->date_type->setCurrentIndex(term.date_); + ui_->date_type->setCurrentIndex(static_cast(term.datetype_)); } else if (ui_->value_stack->currentWidget() == ui_->page_date_relative) { ui_->value_date_numeric1->setValue(term.value_.toInt()); ui_->value_date_numeric2->setValue(term.second_value_.toInt()); - ui_->date_type_relative->setCurrentIndex(term.date_); + ui_->date_type_relative->setCurrentIndex(static_cast(term.datetype_)); } else if (ui_->value_stack->currentWidget() == ui_->page_date) { ui_->value_date->setDateTime(QDateTime::fromSecsSinceEpoch(term.value_.toInt())); } break; - case SmartPlaylistSearchTerm::Type_Time: + case SmartPlaylistSearchTerm::Type::Time: ui_->value_time->setTime(QTime(0, 0).addSecs(term.value_.toInt())); break; - case SmartPlaylistSearchTerm::Type_Rating: + case SmartPlaylistSearchTerm::Type::Rating: ui_->value_rating->set_rating(term.value_.toFloat()); break; - case SmartPlaylistSearchTerm::Type_Invalid: + case SmartPlaylistSearchTerm::Type::Invalid: break; } @@ -391,11 +391,11 @@ SmartPlaylistSearchTerm SmartPlaylistSearchTermWidget::Term() const { ret.value_ = QTime(0, 0).secsTo(ui_->value_time->time()); } else if (value_page == ui_->page_date_numeric) { - ret.date_ = static_cast(ui_->date_type->currentIndex()); + ret.datetype_ = static_cast(ui_->date_type->currentIndex()); ret.value_ = ui_->value_date_numeric->value(); } else if (value_page == ui_->page_date_relative) { - ret.date_ = static_cast(ui_->date_type_relative->currentIndex()); + ret.datetype_ = static_cast(ui_->date_type_relative->currentIndex()); ret.value_ = ui_->value_date_numeric1->value(); ret.second_value_ = ui_->value_date_numeric2->value(); } diff --git a/src/smartplaylists/smartplaylistsitem.h b/src/smartplaylists/smartplaylistsitem.h index d4276ea61..4c2fad20a 100644 --- a/src/smartplaylists/smartplaylistsitem.h +++ b/src/smartplaylists/smartplaylistsitem.h @@ -32,7 +32,7 @@ class SmartPlaylistsItem : public SimpleTreeItem { public: enum Type { Type_Root, - Type_SmartPlaylist, + Type_SmartPlaylist }; SmartPlaylistsItem(SimpleTreeModel *_model) : SimpleTreeItem(Type_Root, _model) {} @@ -44,4 +44,6 @@ class SmartPlaylistsItem : public SimpleTreeItem { Q_DISABLE_COPY(SmartPlaylistsItem) }; +Q_DECLARE_METATYPE(SmartPlaylistsItem::Type) + #endif // SMARTPLAYLISTSITEM_H diff --git a/src/smartplaylists/smartplaylistsmodel.cpp b/src/smartplaylists/smartplaylistsmodel.cpp index 13bd5596f..6e40f26a1 100644 --- a/src/smartplaylists/smartplaylistsmodel.cpp +++ b/src/smartplaylists/smartplaylistsmodel.cpp @@ -64,57 +64,57 @@ void SmartPlaylistsModel::Init() { << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Newest tracks"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), - SmartPlaylistSearch::Sort_FieldDesc, - SmartPlaylistSearchTerm::Field_DateCreated) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), + SmartPlaylistSearch::SortType::FieldDesc, + SmartPlaylistSearchTerm::Field::DateCreated) ) ) << PlaylistGeneratorPtr(new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "50 random tracks"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_Random, SmartPlaylistSearchTerm::Field_Title, 50) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title, 50) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Ever played"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm( SmartPlaylistSearchTerm::Field_PlayCount, SmartPlaylistSearchTerm::Op_GreaterThan, 0), SmartPlaylistSearch::Sort_Random, SmartPlaylistSearchTerm::Field_Title) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm( SmartPlaylistSearchTerm::Field::PlayCount, SmartPlaylistSearchTerm::Operator::GreaterThan, 0), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Never played"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field_PlayCount, SmartPlaylistSearchTerm::Op_Equals, 0), SmartPlaylistSearch::Sort_Random, SmartPlaylistSearchTerm::Field_Title) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::PlayCount, SmartPlaylistSearchTerm::Operator::Equals, 0), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Last played"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_FieldDesc, SmartPlaylistSearchTerm::Field_LastPlayed) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::LastPlayed) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Most played"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_FieldDesc, SmartPlaylistSearchTerm::Field_PlayCount) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::PlayCount) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Favourite tracks"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_FieldDesc, SmartPlaylistSearchTerm::Field_Rating) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::Rating) ) ) << PlaylistGeneratorPtr( new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("Library", "Least favourite tracks"), - SmartPlaylistSearch(SmartPlaylistSearch::Type_Or, SmartPlaylistSearch::TermList() - << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field_Rating, SmartPlaylistSearchTerm::Op_LessThan, 0.5) - << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field_SkipCount, SmartPlaylistSearchTerm::Op_GreaterThan, 4), SmartPlaylistSearch::Sort_FieldDesc, SmartPlaylistSearchTerm::Field_SkipCount) + SmartPlaylistSearch(SmartPlaylistSearch::SearchType::Or, SmartPlaylistSearch::TermList() + << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::Rating, SmartPlaylistSearchTerm::Operator::LessThan, 0.5) + << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::SkipCount, SmartPlaylistSearchTerm::Operator::GreaterThan, 4), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::SkipCount) ) ) ) - << (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator(QT_TRANSLATE_NOOP("SmartPlaylists", "All tracks"), SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_FieldAsc, SmartPlaylistSearchTerm::Field_Artist, -1)))) - << (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Dynamic random mix"), SmartPlaylistSearch(SmartPlaylistSearch::Type_All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::Sort_Random, SmartPlaylistSearchTerm::Field_Title), true))); + << (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator(QT_TRANSLATE_NOOP("SmartPlaylists", "All tracks"), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldAsc, SmartPlaylistSearchTerm::Field::Artist, -1)))) + << (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Dynamic random mix"), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title), true))); QSettings s; s.beginGroup(kSettingsGroup); @@ -232,7 +232,7 @@ void SmartPlaylistsModel::DeleteGenerator(const QModelIndex &idx) { for (SmartPlaylistsItem *item : root_->children) { s.setArrayIndex(i++); s.setValue("name", item->display_text); - s.setValue("type", item->smart_playlist_type); + s.setValue("type", QVariant::fromValue(item->smart_playlist_type)); s.setValue("data", item->smart_playlist_data); } s.endArray(); @@ -244,7 +244,7 @@ void SmartPlaylistsModel::SaveGenerator(QSettings *s, const int i, PlaylistGener s->setArrayIndex(i); s->setValue("name", generator->name()); - s->setValue("type", generator->type()); + s->setValue("type", QVariant::fromValue(generator->type())); s->setValue("data", generator->Save()); } diff --git a/src/smartplaylists/smartplaylistwizard.cpp b/src/smartplaylists/smartplaylistwizard.cpp index 2237c7c21..d8c99ee29 100644 --- a/src/smartplaylists/smartplaylistwizard.cpp +++ b/src/smartplaylists/smartplaylistwizard.cpp @@ -111,7 +111,7 @@ void SmartPlaylistWizard::SetGenerator(PlaylistGeneratorPtr gen) { } if (type_index_ == -1) { - qLog(Error) << "Plugin was not found for generator type" << gen->type(); + qLog(Error) << "Plugin was not found for generator type" << static_cast(gen->type()); return; } diff --git a/src/subsonic/subsonicbaserequest.cpp b/src/subsonic/subsonicbaserequest.cpp index 6c1122f68..a20cec65c 100644 --- a/src/subsonic/subsonicbaserequest.cpp +++ b/src/subsonic/subsonicbaserequest.cpp @@ -62,7 +62,7 @@ QUrl SubsonicBaseRequest::CreateUrl(const QUrl &server_url, const SubsonicSettin << Param("f", "json") << Param("u", username); - if (auth_method == SubsonicSettingsPage::AuthMethod_Hex) { + if (auth_method == SubsonicSettingsPage::AuthMethod::Hex) { params << Param("p", QString("enc:" + password.toUtf8().toHex())); } else { diff --git a/src/subsonic/subsonicrequest.cpp b/src/subsonic/subsonicrequest.cpp index b428b29f8..fc8efce05 100644 --- a/src/subsonic/subsonicrequest.cpp +++ b/src/subsonic/subsonicrequest.cpp @@ -442,7 +442,7 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin QJsonObject obj_song = value_song.toObject(); ++songs_received; - Song song(Song::Source_Subsonic); + Song song(Song::Source::Subsonic); ParseSong(song, obj_song, artist_id, album_id, album_artist, created); if (!song.is_valid()) continue; if (song.disc() >= 2) multidisc = true; @@ -637,21 +637,21 @@ QString SubsonicRequest::ParseSong(Song &song, const QJsonObject &json_obj, cons } } - Song::FileType filetype(Song::FileType_Stream); + Song::FileType filetype(Song::FileType::Stream); if (!mimetype.isEmpty()) { QMimeDatabase mimedb; QStringList suffixes = mimedb.mimeTypeForName(mimetype.toUtf8()).suffixes(); for (const QString &suffix : suffixes) { filetype = Song::FiletypeByExtension(suffix); - if (filetype != Song::FileType_Unknown) break; + if (filetype != Song::FileType::Unknown) break; } - if (filetype == Song::FileType_Unknown) { + if (filetype == Song::FileType::Unknown) { qLog(Debug) << "Subsonic: Unknown mimetype" << mimetype; - filetype = Song::FileType_Stream; + filetype = Song::FileType::Stream; } } - song.set_source(Song::Source_Subsonic); + song.set_source(Song::Source::Subsonic); song.set_song_id(song_id); if (!album_id.isEmpty()) song.set_album_id(album_id); if (!artist_id.isEmpty()) song.set_artist_id(artist_id); @@ -714,7 +714,7 @@ void SubsonicRequest::AddAlbumCoverRequest(const Song &song) { return; } - QString cover_path = Song::ImageCacheDir(Song::Source_Subsonic); + QString cover_path = Song::ImageCacheDir(Song::Source::Subsonic); QDir dir(cover_path); if (!dir.exists()) dir.mkpath(cover_path); diff --git a/src/subsonic/subsonicservice.cpp b/src/subsonic/subsonicservice.cpp index daa83991b..dbeb955b9 100644 --- a/src/subsonic/subsonicservice.cpp +++ b/src/subsonic/subsonicservice.cpp @@ -58,7 +58,7 @@ #include "settings/settingsdialog.h" #include "settings/subsonicsettingspage.h" -const Song::Source SubsonicService::kSource = Song::Source_Subsonic; +const Song::Source SubsonicService::kSource = Song::Source::Subsonic; const char *SubsonicService::kClientName = "Strawberry"; const char *SubsonicService::kApiVersion = "1.11.0"; const char *SubsonicService::kSongsTable = "subsonic_songs"; @@ -66,7 +66,7 @@ const char *SubsonicService::kSongsFtsTable = "subsonic_songs_fts"; const int SubsonicService::kMaxRedirects = 3; SubsonicService::SubsonicService(Application *app, QObject *parent) - : InternetService(Song::Source_Subsonic, "Subsonic", "subsonic", SubsonicSettingsPage::kSettingsGroup, SettingsDialog::Page_Subsonic, app, parent), + : InternetService(Song::Source::Subsonic, "Subsonic", "subsonic", SubsonicSettingsPage::kSettingsGroup, SettingsDialog::Page::Subsonic, app, parent), app_(app), url_handler_(new SubsonicUrlHandler(app, this)), collection_backend_(nullptr), @@ -75,7 +75,7 @@ SubsonicService::SubsonicService(Application *app, QObject *parent) http2_(false), verify_certificate_(false), download_album_covers_(true), - auth_method_(SubsonicSettingsPage::AuthMethod_MD5), + auth_method_(SubsonicSettingsPage::AuthMethod::MD5), ping_redirects_(0) { app->player()->RegisterUrlHandler(url_handler_); @@ -84,7 +84,7 @@ SubsonicService::SubsonicService(Application *app, QObject *parent) collection_backend_ = new CollectionBackend(); collection_backend_->moveToThread(app_->database()->thread()); - collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Subsonic, kSongsTable, kSongsFtsTable); + collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Subsonic, kSongsTable, kSongsFtsTable); // Model @@ -120,7 +120,7 @@ void SubsonicService::Exit() { } void SubsonicService::ShowConfig() { - app_->OpenSettingsDialogAtPage(SettingsDialog::Page_Subsonic); + app_->OpenSettingsDialogAtPage(SettingsDialog::Page::Subsonic); } void SubsonicService::ReloadSettings() { @@ -137,7 +137,7 @@ void SubsonicService::ReloadSettings() { http2_ = s.value("http2", false).toBool(); verify_certificate_ = s.value("verifycertificate", false).toBool(); download_album_covers_ = s.value("downloadalbumcovers", true).toBool(); - auth_method_ = static_cast(s.value("authmethod", SubsonicSettingsPage::AuthMethod_MD5).toInt()); + auth_method_ = static_cast(s.value("authmethod", static_cast(SubsonicSettingsPage::AuthMethod::MD5)).toInt()); s.endGroup(); @@ -163,7 +163,7 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username, << Param("f", "json") << Param("u", username); - if (auth_method == SubsonicSettingsPage::AuthMethod_Hex) { + if (auth_method == SubsonicSettingsPage::AuthMethod::Hex) { params << Param("p", QString("enc:" + password.toUtf8().toHex())); } else { diff --git a/src/subsonic/subsonicurlhandler.cpp b/src/subsonic/subsonicurlhandler.cpp index 9be2ca442..7c7a141bb 100644 --- a/src/subsonic/subsonicurlhandler.cpp +++ b/src/subsonic/subsonicurlhandler.cpp @@ -36,17 +36,17 @@ SubsonicUrlHandler::SubsonicUrlHandler(Application *app, SubsonicService *servic UrlHandler::LoadResult SubsonicUrlHandler::StartLoading(const QUrl &url) { if (!server_url().isValid()) { - return LoadResult(url, LoadResult::Error, tr("Subsonic server URL is invalid.")); + return LoadResult(url, LoadResult::Type::Error, tr("Subsonic server URL is invalid.")); } if (username().isEmpty() || password().isEmpty()) { - return LoadResult(url, LoadResult::Error, tr("Missing Subsonic username or password.")); + return LoadResult(url, LoadResult::Type::Error, tr("Missing Subsonic username or password.")); } using Param = QPair; using ParamList = QList; const QUrl stream_url = SubsonicBaseRequest::CreateUrl(server_url(), auth_method(), username(), password(), "stream", ParamList() << Param("id", url.path())); - return LoadResult(url, LoadResult::TrackAvailable, stream_url); + return LoadResult(url, LoadResult::Type::TrackAvailable, stream_url); } diff --git a/src/tidal/tidalbaserequest.h b/src/tidal/tidalbaserequest.h index 58ecc4fa6..a3ca38f14 100644 --- a/src/tidal/tidalbaserequest.h +++ b/src/tidal/tidalbaserequest.h @@ -47,15 +47,15 @@ class TidalBaseRequest : public QObject { public: explicit TidalBaseRequest(TidalService *service, NetworkAccessManager *network, QObject *parent = nullptr); - enum QueryType { - QueryType_None, - QueryType_Artists, - QueryType_Albums, - QueryType_Songs, - QueryType_SearchArtists, - QueryType_SearchAlbums, - QueryType_SearchSongs, - QueryType_StreamURL, + enum class QueryType { + None, + Artists, + Albums, + Songs, + SearchArtists, + SearchAlbums, + SearchSongs, + StreamURL }; protected: diff --git a/src/tidal/tidalfavoriterequest.cpp b/src/tidal/tidalfavoriterequest.cpp index 3b84cb91a..61ba8e140 100644 --- a/src/tidal/tidalfavoriterequest.cpp +++ b/src/tidal/tidalfavoriterequest.cpp @@ -58,11 +58,11 @@ TidalFavoriteRequest::~TidalFavoriteRequest() { QString TidalFavoriteRequest::FavoriteText(const FavoriteType type) { switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: return "artists"; - case FavoriteType_Albums: + case FavoriteType::Albums: return "albums"; - case FavoriteType_Songs: + case FavoriteType::Songs: return "tracks"; } @@ -73,11 +73,11 @@ QString TidalFavoriteRequest::FavoriteText(const FavoriteType type) { QString TidalFavoriteRequest::FavoriteMethod(const FavoriteType type) { switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: return "artistIds"; - case FavoriteType_Albums: + case FavoriteType::Albums: return "albumIds"; - case FavoriteType_Songs: + case FavoriteType::Songs: return "trackIds"; } @@ -86,19 +86,19 @@ QString TidalFavoriteRequest::FavoriteMethod(const FavoriteType type) { } void TidalFavoriteRequest::AddArtists(const SongList &songs) { - AddFavorites(FavoriteType_Artists, songs); + AddFavorites(FavoriteType::Artists, songs); } void TidalFavoriteRequest::AddAlbums(const SongList &songs) { - AddFavorites(FavoriteType_Albums, songs); + AddFavorites(FavoriteType::Albums, songs); } void TidalFavoriteRequest::AddSongs(const SongList &songs) { - AddFavorites(FavoriteType_Songs, songs); + AddFavorites(FavoriteType::Songs, songs); } void TidalFavoriteRequest::AddSongs(const SongMap &songs) { - AddFavoritesRequest(FavoriteType_Songs, songs.keys(), songs.values()); + AddFavoritesRequest(FavoriteType::Songs, songs.keys(), songs.values()); } void TidalFavoriteRequest::AddFavorites(const FavoriteType type, const SongList &songs) { @@ -107,15 +107,15 @@ void TidalFavoriteRequest::AddFavorites(const FavoriteType type, const SongList for (const Song &song : songs) { QString id; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: if (song.artist_id().isEmpty()) continue; id = song.artist_id(); break; - case FavoriteType_Albums: + case FavoriteType::Albums: if (song.album_id().isEmpty()) continue; id = song.album_id(); break; - case FavoriteType_Songs: + case FavoriteType::Songs: if (song.song_id().isEmpty()) continue; id = song.song_id(); break; @@ -176,13 +176,13 @@ void TidalFavoriteRequest::AddFavoritesReply(QNetworkReply *reply, const Favorit qLog(Debug) << "Tidal:" << songs.count() << "songs added to" << FavoriteText(type) << "favorites."; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: emit ArtistsAdded(songs); break; - case FavoriteType_Albums: + case FavoriteType::Albums: emit AlbumsAdded(songs); break; - case FavoriteType_Songs: + case FavoriteType::Songs: emit SongsAdded(songs); break; } @@ -190,22 +190,22 @@ void TidalFavoriteRequest::AddFavoritesReply(QNetworkReply *reply, const Favorit } void TidalFavoriteRequest::RemoveArtists(const SongList &songs) { - RemoveFavorites(FavoriteType_Artists, songs); + RemoveFavorites(FavoriteType::Artists, songs); } void TidalFavoriteRequest::RemoveAlbums(const SongList &songs) { - RemoveFavorites(FavoriteType_Albums, songs); + RemoveFavorites(FavoriteType::Albums, songs); } void TidalFavoriteRequest::RemoveSongs(const SongList &songs) { - RemoveFavorites(FavoriteType_Songs, songs); + RemoveFavorites(FavoriteType::Songs, songs); } void TidalFavoriteRequest::RemoveSongs(const SongMap &songs) { SongList songs_list = songs.values(); for (const Song &song : songs_list) { - RemoveFavoritesRequest(FavoriteType_Songs, song.song_id(), SongList() << song); + RemoveFavoritesRequest(FavoriteType::Songs, song.song_id(), SongList() << song); } } @@ -216,15 +216,15 @@ void TidalFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongLi for (const Song &song : songs) { QString id; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: if (song.artist_id().isEmpty()) continue; id = song.artist_id(); break; - case FavoriteType_Albums: + case FavoriteType::Albums: if (song.album_id().isEmpty()) continue; id = song.album_id(); break; - case FavoriteType_Songs: + case FavoriteType::Songs: if (song.song_id().isEmpty()) continue; id = song.song_id(); break; @@ -288,13 +288,13 @@ void TidalFavoriteRequest::RemoveFavoritesReply(QNetworkReply *reply, const Favo qLog(Debug) << "Tidal:" << songs.count() << "songs removed from" << FavoriteText(type) << "favorites."; switch (type) { - case FavoriteType_Artists: + case FavoriteType::Artists: emit ArtistsRemoved(songs); break; - case FavoriteType_Albums: + case FavoriteType::Albums: emit AlbumsRemoved(songs); break; - case FavoriteType_Songs: + case FavoriteType::Songs: emit SongsRemoved(songs); break; } diff --git a/src/tidal/tidalfavoriterequest.h b/src/tidal/tidalfavoriterequest.h index c95d3d5fc..7698aff1b 100644 --- a/src/tidal/tidalfavoriterequest.h +++ b/src/tidal/tidalfavoriterequest.h @@ -41,15 +41,16 @@ class TidalFavoriteRequest : public TidalBaseRequest { explicit TidalFavoriteRequest(TidalService *service, NetworkAccessManager *network, QObject *parent = nullptr); ~TidalFavoriteRequest() override; - enum FavoriteType { - FavoriteType_Artists, - FavoriteType_Albums, - FavoriteType_Songs - }; - bool need_login() { return need_login_; } void set_need_login() override { need_login_ = true; } + private: + enum class FavoriteType { + Artists, + Albums, + Songs + }; + signals: void ArtistsAdded(SongList); void AlbumsAdded(SongList); diff --git a/src/tidal/tidalrequest.cpp b/src/tidal/tidalrequest.cpp index 2aaa870c1..24b7e6374 100644 --- a/src/tidal/tidalrequest.cpp +++ b/src/tidal/tidalrequest.cpp @@ -52,14 +52,14 @@ constexpr int TidalRequest::kMaxConcurrentAlbumSongsRequests = 3; constexpr int TidalRequest::kMaxConcurrentAlbumCoverRequests = 1; constexpr int TidalRequest::kFlushRequestsDelay = 200; -TidalRequest::TidalRequest(TidalService *service, TidalUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType type, QObject *parent) +TidalRequest::TidalRequest(TidalService *service, TidalUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType query_type, QObject *parent) : TidalBaseRequest(service, network, parent), service_(service), url_handler_(url_handler), app_(app), network_(network), timer_flush_requests_(new QTimer(this)), - type_(type), + query_type_(query_type), fetchalbums_(service->fetchalbums()), coversize_(service->coversize()), query_id_(-1), @@ -141,23 +141,23 @@ void TidalRequest::Process() { return; } - switch (type_) { - case QueryType::QueryType_Artists: + switch (query_type_) { + case QueryType::Artists: GetArtists(); break; - case QueryType::QueryType_Albums: + case QueryType::Albums: GetAlbums(); break; - case QueryType::QueryType_Songs: + case QueryType::Songs: GetSongs(); break; - case QueryType::QueryType_SearchArtists: + case QueryType::SearchArtists: ArtistsSearch(); break; - case QueryType::QueryType_SearchAlbums: + case QueryType::SearchAlbums: AlbumsSearch(); break; - case QueryType::QueryType_SearchSongs: + case QueryType::SearchSongs: SongsSearch(); break; default: @@ -244,14 +244,14 @@ void TidalRequest::FlushArtistsRequests() { Request request = artists_requests_queue_.dequeue(); ParamList parameters; - if (type_ == QueryType_SearchArtists) parameters << Param("query", search_text_); + if (query_type_ == QueryType::SearchArtists) parameters << Param("query", search_text_); if (request.limit > 0) parameters << Param("limit", QString::number(request.limit)); if (request.offset > 0) parameters << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Artists) { + if (query_type_ == QueryType::Artists) { reply = CreateRequest(QString("users/%1/favorites/artists").arg(service_->user_id()), parameters); } - if (type_ == QueryType_SearchArtists) { + if (query_type_ == QueryType::SearchArtists) { reply = CreateRequest("search/artists", parameters); } if (!reply) continue; @@ -292,14 +292,14 @@ void TidalRequest::FlushAlbumsRequests() { Request request = albums_requests_queue_.dequeue(); ParamList parameters; - if (type_ == QueryType_SearchAlbums) parameters << Param("query", search_text_); + if (query_type_ == QueryType::SearchAlbums) parameters << Param("query", search_text_); if (request.limit > 0) parameters << Param("limit", QString::number(request.limit)); if (request.offset > 0) parameters << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Albums) { + if (query_type_ == QueryType::Albums) { reply = CreateRequest(QString("users/%1/favorites/albums").arg(service_->user_id()), parameters); } - if (type_ == QueryType_SearchAlbums) { + if (query_type_ == QueryType::SearchAlbums) { reply = CreateRequest("search/albums", parameters); } if (!reply) continue; @@ -340,14 +340,14 @@ void TidalRequest::FlushSongsRequests() { Request request = songs_requests_queue_.dequeue(); ParamList parameters; - if (type_ == QueryType_SearchSongs) parameters << Param("query", search_text_); + if (query_type_ == QueryType::SearchSongs) parameters << Param("query", search_text_); if (request.limit > 0) parameters << Param("limit", QString::number(request.limit)); if (request.offset > 0) parameters << Param("offset", QString::number(request.offset)); QNetworkReply *reply = nullptr; - if (type_ == QueryType_Songs) { + if (query_type_ == QueryType::Songs) { reply = CreateRequest(QString("users/%1/favorites/tracks").arg(service_->user_id()), parameters); } - if (type_ == QueryType_SearchSongs) { + if (query_type_ == QueryType::SearchSongs) { reply = CreateRequest("search/tracks", parameters); } if (!reply) continue; @@ -526,8 +526,8 @@ void TidalRequest::ArtistsFinishCheck(const int limit, const int offset, const i if ((limit == 0 || limit > artists_received) && artists_received_ < artists_total_) { int offset_next = offset + artists_received; if (offset_next > 0 && offset_next < artists_total_) { - if (type_ == QueryType_Artists) AddArtistsRequest(offset_next); - else if (type_ == QueryType_SearchArtists) AddArtistsSearchRequest(offset_next); + if (query_type_ == QueryType::Artists) AddArtistsRequest(offset_next); + else if (query_type_ == QueryType::SearchArtists) AddArtistsSearchRequest(offset_next); } } @@ -760,7 +760,7 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } - if (type_ == QueryType_Albums || type_ == QueryType_SearchAlbums) { + if (query_type_ == QueryType::Albums || query_type_ == QueryType::SearchAlbums) { albums_received_ += albums_received; emit UpdateProgress(query_id_, GetProgress(albums_received_, albums_total_)); } @@ -776,15 +776,15 @@ void TidalRequest::AlbumsFinishCheck(const Artist &artist, const int limit, cons if (limit == 0 || limit > albums_received) { int offset_next = offset + albums_received; if (offset_next > 0 && offset_next < albums_total) { - switch (type_) { - case QueryType_Albums: + switch (query_type_) { + case QueryType::Albums: AddAlbumsRequest(offset_next); break; - case QueryType_SearchAlbums: + case QueryType::SearchAlbums: AddAlbumsSearchRequest(offset_next); break; - case QueryType_Artists: - case QueryType_SearchArtists: + case QueryType::Artists: + case QueryType::SearchArtists: AddArtistAlbumsRequest(artist, offset_next); break; default: @@ -826,7 +826,7 @@ void TidalRequest::SongsReplyReceived(QNetworkReply *reply, const int limit_requ --songs_requests_active_; ++songs_requests_received_; - if (type_ == QueryType_SearchSongs && fetchalbums_) { + if (query_type_ == QueryType::SearchSongs && fetchalbums_) { AlbumsReceived(reply, Artist(), limit_requested, offset_requested, offset_requested == 0); } else { @@ -952,7 +952,7 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con } ++songs_received; - Song song(Song::Source_Tidal); + Song song(Song::Source::Tidal); ParseSong(song, obj_item, artist, album); if (!song.is_valid()) continue; if (song.disc() >= 2) multidisc = true; @@ -966,7 +966,7 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con songs_.insert(song.song_id(), song); } - if (type_ == QueryType_Songs || type_ == QueryType_SearchSongs) { + if (query_type_ == QueryType::Songs || query_type_ == QueryType::SearchSongs) { songs_received_ += songs_received; emit UpdateProgress(query_id_, GetProgress(songs_received_, songs_total_)); } @@ -982,21 +982,21 @@ void TidalRequest::SongsFinishCheck(const Artist &artist, const Album &album, co if (limit == 0 || limit > songs_received) { int offset_next = offset + songs_received; if (offset_next > 0 && offset_next < songs_total) { - switch (type_) { - case QueryType_Songs: + switch (query_type_) { + case QueryType::Songs: AddSongsRequest(offset_next); break; - case QueryType_SearchSongs: + case QueryType::SearchSongs: // If artist_id and album_id isn't zero it means that it's a songs search where we fetch all albums too. So fallthrough. if (artist.artist_id.isEmpty() && album.album_id.isEmpty()) { AddSongsSearchRequest(offset_next); break; } [[fallthrough]]; - case QueryType_Artists: - case QueryType_SearchArtists: - case QueryType_Albums: - case QueryType_SearchAlbums: + case QueryType::Artists: + case QueryType::SearchArtists: + case QueryType::Albums: + case QueryType::SearchAlbums: AddAlbumSongsRequest(artist, album, offset_next); break; default: @@ -1129,7 +1129,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti //qLog(Debug) << "id" << song_id << "track" << track << "disc" << disc << "title" << title << "album" << album << "album artist" << album_artist << "artist" << artist << cover << allow_streaming << url; - song.set_source(Song::Source_Tidal); + song.set_source(Song::Source::Tidal); song.set_song_id(song_id); song.set_album_id(album_id); song.set_artist_id(artist_id); @@ -1146,7 +1146,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti } song.set_comment(copyright); song.set_directory_id(0); - song.set_filetype(Song::FileType_Stream); + song.set_filetype(Song::FileType::Stream); song.set_filesize(0); song.set_mtime(0); song.set_ctime(0); diff --git a/src/tidal/tidalrequest.h b/src/tidal/tidalrequest.h index c5f3a21ea..e6c14b144 100644 --- a/src/tidal/tidalrequest.h +++ b/src/tidal/tidalrequest.h @@ -51,7 +51,7 @@ class TidalRequest : public TidalBaseRequest { Q_OBJECT public: - explicit TidalRequest(TidalService *service, TidalUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType type, QObject *parent); + explicit TidalRequest(TidalService *service, TidalUrlHandler *url_handler, Application *app, NetworkAccessManager *network, QueryType query_type, QObject *parent); ~TidalRequest() override; void ReloadSettings(); @@ -122,8 +122,8 @@ class TidalRequest : public TidalBaseRequest { void LoginComplete(const bool success, const QString &error = QString()); private: - bool IsQuery() { return (type_ == QueryType_Artists || type_ == QueryType_Albums || type_ == QueryType_Songs); } - bool IsSearch() { return (type_ == QueryType_SearchArtists || type_ == QueryType_SearchAlbums || type_ == QueryType_SearchSongs); } + bool IsQuery() { return (query_type_ == QueryType::Artists || query_type_ == QueryType::Albums || query_type_ == QueryType::Songs); } + bool IsSearch() { return (query_type_ == QueryType::SearchArtists || query_type_ == QueryType::SearchAlbums || query_type_ == QueryType::SearchSongs); } void StartRequests(); void FlushRequests(); @@ -185,7 +185,7 @@ class TidalRequest : public TidalBaseRequest { NetworkAccessManager *network_; QTimer *timer_flush_requests_; - const QueryType type_; + const QueryType query_type_; const bool fetchalbums_; const QString coversize_; diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index 03fe6c00d..a0c611baa 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -61,7 +61,7 @@ #include "settings/settingsdialog.h" #include "settings/tidalsettingspage.h" -const Song::Source TidalService::kSource = Song::Source_Tidal; +const Song::Source TidalService::kSource = Song::Source::Tidal; const char TidalService::kApiUrl[] = "https://api.tidalhifi.com/v1"; const char TidalService::kResourcesUrl[] = "https://resources.tidal.com"; @@ -85,7 +85,7 @@ constexpr char TidalService::kSongsFtsTable[] = "tidal_songs_fts"; using namespace std::chrono_literals; TidalService::TidalService(Application *app, QObject *parent) - : InternetService(Song::Source_Tidal, "Tidal", "tidal", TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, app, parent), + : InternetService(Song::Source::Tidal, "Tidal", "tidal", TidalSettingsPage::kSettingsGroup, SettingsDialog::Page::Tidal, app, parent), app_(app), network_(new NetworkAccessManager(this)), url_handler_(new TidalUrlHandler(app, this)), @@ -110,13 +110,13 @@ TidalService::TidalService(Application *app, QObject *parent) songssearchlimit_(1), fetchalbums_(true), download_album_covers_(true), - stream_url_method_(TidalSettingsPage::StreamUrlMethod_StreamUrl), + stream_url_method_(TidalSettingsPage::StreamUrlMethod::StreamUrl), album_explicit_(false), expires_in_(0), login_time_(0), pending_search_id_(0), next_pending_search_id_(1), - pending_search_type_(InternetSearchView::SearchType_Artists), + pending_search_type_(InternetSearchView::SearchType::Artists), search_id_(0), login_sent_(false), login_attempts_(0), @@ -128,15 +128,15 @@ TidalService::TidalService(Application *app, QObject *parent) artists_collection_backend_ = new CollectionBackend(); artists_collection_backend_->moveToThread(app_->database()->thread()); - artists_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Tidal, kArtistsSongsTable, kArtistsSongsFtsTable); + artists_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Tidal, kArtistsSongsTable, kArtistsSongsFtsTable); albums_collection_backend_ = new CollectionBackend(); albums_collection_backend_->moveToThread(app_->database()->thread()); - albums_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Tidal, kAlbumsSongsTable, kAlbumsSongsFtsTable); + albums_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Tidal, kAlbumsSongsTable, kAlbumsSongsFtsTable); songs_collection_backend_ = new CollectionBackend(); songs_collection_backend_->moveToThread(app_->database()->thread()); - songs_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source_Tidal, kSongsTable, kSongsFtsTable); + songs_collection_backend_->Init(app_->database(), app->task_manager(), Song::Source::Tidal, kSongsTable, kSongsFtsTable); artists_collection_model_ = new CollectionModel(artists_collection_backend_, app_, this); albums_collection_model_ = new CollectionModel(albums_collection_backend_, app_, this); @@ -244,7 +244,7 @@ void TidalService::ExitReceived() { } void TidalService::ShowConfig() { - app_->OpenSettingsDialogAtPage(SettingsDialog::Page_Tidal); + app_->OpenSettingsDialogAtPage(SettingsDialog::Page::Tidal); } void TidalService::LoadSession() { @@ -296,7 +296,7 @@ void TidalService::ReloadSettings() { fetchalbums_ = s.value("fetchalbums", false).toBool(); coversize_ = s.value("coversize", "640x640").toString(); download_album_covers_ = s.value("downloadalbumcovers", true).toBool(); - stream_url_method_ = static_cast(s.value("streamurl").toInt()); + stream_url_method_ = static_cast(s.value("streamurl", static_cast(TidalSettingsPage::StreamUrlMethod::StreamUrl)).toInt()); album_explicit_ = s.value("album_explicit").toBool(); s.endGroup(); @@ -752,7 +752,7 @@ void TidalService::GetArtists() { } ResetArtistsRequest(); - artists_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType_Artists, this), [](TidalRequest *request) { request->deleteLater(); }); + artists_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType::Artists, this), [](TidalRequest *request) { request->deleteLater(); }); QObject::connect(artists_request_.get(), &TidalRequest::RequestLogin, this, &TidalService::SendLogin); QObject::connect(artists_request_.get(), &TidalRequest::Results, this, &TidalService::ArtistsResultsReceived); QObject::connect(artists_request_.get(), &TidalRequest::UpdateStatus, this, &TidalService::ArtistsUpdateStatusReceived); @@ -807,7 +807,7 @@ void TidalService::GetAlbums() { } ResetAlbumsRequest(); - albums_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType_Albums, this), [](TidalRequest *request) { request->deleteLater(); }); + albums_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType::Albums, this), [](TidalRequest *request) { request->deleteLater(); }); QObject::connect(albums_request_.get(), &TidalRequest::RequestLogin, this, &TidalService::SendLogin); QObject::connect(albums_request_.get(), &TidalRequest::Results, this, &TidalService::AlbumsResultsReceived); QObject::connect(albums_request_.get(), &TidalRequest::UpdateStatus, this, &TidalService::AlbumsUpdateStatusReceived); @@ -862,7 +862,7 @@ void TidalService::GetSongs() { } ResetSongsRequest(); - songs_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType_Songs, this), [](TidalRequest *request) { request->deleteLater(); }); + songs_request_.reset(new TidalRequest(this, url_handler_, app_, network_, TidalBaseRequest::QueryType::Songs, this), [](TidalRequest *request) { request->deleteLater(); }); QObject::connect(songs_request_.get(), &TidalRequest::RequestLogin, this, &TidalService::SendLogin); QObject::connect(songs_request_.get(), &TidalRequest::Results, this, &TidalService::SongsResultsReceived); QObject::connect(songs_request_.get(), &TidalRequest::UpdateStatus, this, &TidalService::SongsUpdateStatusReceived); @@ -936,24 +936,24 @@ void TidalService::CancelSearch() { void TidalService::SendSearch() { - TidalBaseRequest::QueryType type = TidalBaseRequest::QueryType_None; + TidalBaseRequest::QueryType query_type = TidalBaseRequest::QueryType::None; switch (pending_search_type_) { - case InternetSearchView::SearchType_Artists: - type = TidalBaseRequest::QueryType_SearchArtists; + case InternetSearchView::SearchType::Artists: + query_type = TidalBaseRequest::QueryType::SearchArtists; break; - case InternetSearchView::SearchType_Albums: - type = TidalBaseRequest::QueryType_SearchAlbums; + case InternetSearchView::SearchType::Albums: + query_type = TidalBaseRequest::QueryType::SearchAlbums; break; - case InternetSearchView::SearchType_Songs: - type = TidalBaseRequest::QueryType_SearchSongs; + case InternetSearchView::SearchType::Songs: + query_type = TidalBaseRequest::QueryType::SearchSongs; break; default: //Error("Invalid search type."); return; } - search_request_.reset(new TidalRequest(this, url_handler_, app_, network_, type, this), [](TidalRequest *request) { request->deleteLater(); }); + search_request_.reset(new TidalRequest(this, url_handler_, app_, network_, query_type, this), [](TidalRequest *request) { request->deleteLater(); }); QObject::connect(search_request_.get(), &TidalRequest::RequestLogin, this, &TidalService::SendLogin); QObject::connect(search_request_.get(), &TidalRequest::Results, this, &TidalService::SearchResultsReceived); diff --git a/src/tidal/tidalstreamurlrequest.cpp b/src/tidal/tidalstreamurlrequest.cpp index cbbad6d6f..ed76cff93 100644 --- a/src/tidal/tidalstreamurlrequest.cpp +++ b/src/tidal/tidalstreamurlrequest.cpp @@ -119,12 +119,12 @@ void TidalStreamURLRequest::GetStreamURL() { ParamList params; switch (stream_url_method()) { - case TidalSettingsPage::StreamUrlMethod_StreamUrl: + case TidalSettingsPage::StreamUrlMethod::StreamUrl: params << Param("soundQuality", quality()); reply_ = CreateRequest(QString("tracks/%1/streamUrl").arg(song_id_), params); QObject::connect(reply_, &QNetworkReply::finished, this, &TidalStreamURLRequest::StreamURLReceived); break; - case TidalSettingsPage::StreamUrlMethod_UrlPostPaywall: + case TidalSettingsPage::StreamUrlMethod::UrlPostPaywall: params << Param("audioquality", quality()); params << Param("playbackmode", "STREAM"); params << Param("assetpresentation", "FULL"); @@ -132,7 +132,7 @@ void TidalStreamURLRequest::GetStreamURL() { reply_ = CreateRequest(QString("tracks/%1/urlpostpaywall").arg(song_id_), params); QObject::connect(reply_, &QNetworkReply::finished, this, &TidalStreamURLRequest::StreamURLReceived); break; - case TidalSettingsPage::StreamUrlMethod_PlaybackInfoPostPaywall: + case TidalSettingsPage::StreamUrlMethod::PlaybackInfoPostPaywall: params << Param("audioquality", quality()); params << Param("playbackmode", "STREAM"); params << Param("assetpresentation", "FULL"); @@ -180,16 +180,16 @@ void TidalStreamURLRequest::StreamURLReceived() { return; } - Song::FileType filetype(Song::FileType_Stream); + Song::FileType filetype(Song::FileType::Stream); if (json_obj.contains("codec") || json_obj.contains("codecs")) { QString codec; if (json_obj.contains("codec")) codec = json_obj["codec"].toString().toLower(); if (json_obj.contains("codecs")) codec = json_obj["codecs"].toString().toLower(); filetype = Song::FiletypeByExtension(codec); - if (filetype == Song::FileType_Unknown) { + if (filetype == Song::FileType::Unknown) { qLog(Debug) << "Tidal: Unknown codec" << codec; - filetype = Song::FileType_Stream; + filetype = Song::FileType::Stream; } } @@ -237,11 +237,11 @@ void TidalStreamURLRequest::StreamURLReceived() { QStringList suffixes = mimedb.mimeTypeForName(mimetype.toUtf8()).suffixes(); for (const QString &suffix : suffixes) { filetype = Song::FiletypeByExtension(suffix); - if (filetype != Song::FileType_Unknown) break; + if (filetype != Song::FileType::Unknown) break; } - if (filetype == Song::FileType_Unknown) { + if (filetype == Song::FileType::Unknown) { qLog(Debug) << "Tidal: Unknown mimetype" << mimetype; - filetype = Song::FileType_Stream; + filetype = Song::FileType::Stream; } } @@ -263,10 +263,10 @@ void TidalStreamURLRequest::StreamURLReceived() { else if (json_obj.contains("url")) { QUrl new_url(json_obj["url"].toString()); urls << new_url; - if (filetype == Song::FileType_Stream) { + if (filetype == Song::FileType::Stream) { // Guess filetype by filename extension in URL. filetype = Song::FiletypeByExtension(QFileInfo(new_url.path()).suffix()); - if (filetype == Song::FileType_Unknown) filetype = Song::FileType_Stream; + if (filetype == Song::FileType::Unknown) filetype = Song::FileType::Stream; } } diff --git a/src/tidal/tidalurlhandler.cpp b/src/tidal/tidalurlhandler.cpp index 9283dd33d..de78f703d 100644 --- a/src/tidal/tidalurlhandler.cpp +++ b/src/tidal/tidalurlhandler.cpp @@ -47,13 +47,13 @@ UrlHandler::LoadResult TidalUrlHandler::StartLoading(const QUrl &url) { req.id = service_->GetStreamURL(url, error); if (req.id == 0) { CancelTask(req.task_id); - return LoadResult(url, LoadResult::Error, error); + return LoadResult(url, LoadResult::Type::Error, error); } requests_.insert(req.id, req); LoadResult ret(url); - ret.type_ = LoadResult::WillLoadAsynchronously; + ret.type_ = LoadResult::Type::WillLoadAsynchronously; return ret; @@ -65,7 +65,7 @@ void TidalUrlHandler::GetStreamURLFailure(const uint id, const QUrl &original_ur Request req = requests_.take(id); CancelTask(req.task_id); - emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Error, error)); + emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Type::Error, error)); } @@ -75,7 +75,7 @@ void TidalUrlHandler::GetStreamURLSuccess(const uint id, const QUrl &original_ur Request req = requests_.take(id); CancelTask(req.task_id); - emit AsyncLoadComplete(LoadResult(original_url, LoadResult::TrackAvailable, stream_url, filetype, samplerate, bit_depth, duration)); + emit AsyncLoadComplete(LoadResult(original_url, LoadResult::Type::TrackAvailable, stream_url, filetype, samplerate, bit_depth, duration)); } diff --git a/src/transcoder/transcoder.cpp b/src/transcoder/transcoder.cpp index dd1f96dbd..b55e4c1d9 100644 --- a/src/transcoder/transcoder.cpp +++ b/src/transcoder/transcoder.cpp @@ -224,16 +224,16 @@ Transcoder::Transcoder(QObject *parent, const QString &settings_postfix) QList Transcoder::GetAllPresets() { QList ret; - ret << PresetForFileType(Song::FileType_WAV); - ret << PresetForFileType(Song::FileType_FLAC); - ret << PresetForFileType(Song::FileType_WavPack); - ret << PresetForFileType(Song::FileType_OggFlac); - ret << PresetForFileType(Song::FileType_OggVorbis); - ret << PresetForFileType(Song::FileType_OggOpus); - ret << PresetForFileType(Song::FileType_OggSpeex); - ret << PresetForFileType(Song::FileType_MPEG); - ret << PresetForFileType(Song::FileType_MP4); - ret << PresetForFileType(Song::FileType_ASF); + ret << PresetForFileType(Song::FileType::WAV); + ret << PresetForFileType(Song::FileType::FLAC); + ret << PresetForFileType(Song::FileType::WavPack); + ret << PresetForFileType(Song::FileType::OggFlac); + ret << PresetForFileType(Song::FileType::OggVorbis); + ret << PresetForFileType(Song::FileType::OggOpus); + ret << PresetForFileType(Song::FileType::OggSpeex); + ret << PresetForFileType(Song::FileType::MPEG); + ret << PresetForFileType(Song::FileType::MP4); + ret << PresetForFileType(Song::FileType::ASF); return ret; @@ -242,28 +242,28 @@ QList Transcoder::GetAllPresets() { TranscoderPreset Transcoder::PresetForFileType(const Song::FileType filetype) { switch (filetype) { - case Song::FileType_WAV: + case Song::FileType::WAV: return TranscoderPreset(filetype, "Wav", "wav", QString(), "audio/x-wav"); - case Song::FileType_FLAC: + case Song::FileType::FLAC: return TranscoderPreset(filetype, "FLAC", "flac", "audio/x-flac"); - case Song::FileType_WavPack: + case Song::FileType::WavPack: return TranscoderPreset(filetype, "WavPack", "wv", "audio/x-wavpack"); - case Song::FileType_OggFlac: + case Song::FileType::OggFlac: return TranscoderPreset(filetype, "Ogg FLAC", "ogg", "audio/x-flac", "application/ogg"); - case Song::FileType_OggVorbis: + case Song::FileType::OggVorbis: return TranscoderPreset(filetype, "Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg"); - case Song::FileType_OggOpus: + case Song::FileType::OggOpus: return TranscoderPreset(filetype, "Ogg Opus", "opus", "audio/x-opus", "application/ogg"); - case Song::FileType_OggSpeex: + case Song::FileType::OggSpeex: return TranscoderPreset(filetype, "Ogg Speex", "spx", "audio/x-speex", "application/ogg"); - case Song::FileType_MPEG: + case Song::FileType::MPEG: return TranscoderPreset(filetype, "MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3"); - case Song::FileType_MP4: + case Song::FileType::MP4: return TranscoderPreset(filetype, "M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4"); - case Song::FileType_ASF: + case Song::FileType::ASF: return TranscoderPreset(filetype, "Windows Media audio", "wma", "audio/x-wma", "video/x-ms-asf"); default: - qLog(Warning) << "Unsupported format in PresetForFileType:" << filetype; + qLog(Warning) << "Unsupported format in PresetForFileType:" << static_cast(filetype); return TranscoderPreset(); } @@ -271,12 +271,12 @@ TranscoderPreset Transcoder::PresetForFileType(const Song::FileType filetype) { Song::FileType Transcoder::PickBestFormat(const QList &supported) { - if (supported.isEmpty()) return Song::FileType_Unknown; + if (supported.isEmpty()) return Song::FileType::Unknown; QList best_formats; - best_formats << Song::FileType_FLAC; - best_formats << Song::FileType_OggFlac; - best_formats << Song::FileType_WavPack; + best_formats << Song::FileType::FLAC; + best_formats << Song::FileType::OggFlac; + best_formats << Song::FileType::WavPack; for (Song::FileType type : best_formats) { if (supported.isEmpty() || supported.contains(type)) return type; @@ -337,29 +337,29 @@ void Transcoder::Start() { forever { StartJobStatus status = MaybeStartNextJob(); - if (status == AllThreadsBusy || status == NoMoreJobs) break; + if (status == StartJobStatus::AllThreadsBusy || status == StartJobStatus::NoMoreJobs) break; } } Transcoder::StartJobStatus Transcoder::MaybeStartNextJob() { - if (current_jobs_.count() >= max_threads()) return AllThreadsBusy; + if (current_jobs_.count() >= max_threads()) return StartJobStatus::AllThreadsBusy; if (queued_jobs_.isEmpty()) { if (current_jobs_.isEmpty()) { emit AllJobsComplete(); } - return NoMoreJobs; + return StartJobStatus::NoMoreJobs; } Job job = queued_jobs_.takeFirst(); if (StartJob(job)) { - return StartedSuccessfully; + return StartJobStatus::StartedSuccessfully; } emit JobComplete(job.input, job.output, false); - return FailedToStart; + return StartJobStatus::FailedToStart; } diff --git a/src/transcoder/transcoder.h b/src/transcoder/transcoder.h index 3cfe496fe..45c69c1a1 100644 --- a/src/transcoder/transcoder.h +++ b/src/transcoder/transcoder.h @@ -40,7 +40,7 @@ #include "core/song.h" struct TranscoderPreset { - explicit TranscoderPreset() : filetype_(Song::FileType_Unknown) {} + explicit TranscoderPreset() : filetype_(Song::FileType::Unknown) {} TranscoderPreset(const Song::FileType filetype, const QString &name, const QString &extension, const QString &codec_mimetype, const QString &muxer_mimetype_ = QString()); Song::FileType filetype_; @@ -122,7 +122,7 @@ class Transcoder : public QObject { Q_DISABLE_COPY(JobFinishedEvent) }; - enum StartJobStatus { + enum class StartJobStatus { StartedSuccessfully, FailedToStart, NoMoreJobs, diff --git a/src/transcoder/transcoderoptionsdialog.cpp b/src/transcoder/transcoderoptionsdialog.cpp index cc4b923b2..ebbb59c39 100644 --- a/src/transcoder/transcoderoptionsdialog.cpp +++ b/src/transcoder/transcoderoptionsdialog.cpp @@ -47,15 +47,15 @@ TranscoderOptionsDialog::TranscoderOptionsDialog(Song::FileType type, QWidget *p ui_->setupUi(this); switch (type) { - case Song::FileType_FLAC: - case Song::FileType_OggFlac: options_ = new TranscoderOptionsFLAC(this); break; - case Song::FileType_WavPack: options_ = new TranscoderOptionsWavPack(this); break; - case Song::FileType_OggVorbis: options_ = new TranscoderOptionsVorbis(this); break; - case Song::FileType_OggOpus: options_ = new TranscoderOptionsOpus(this); break; - case Song::FileType_OggSpeex: options_ = new TranscoderOptionsSpeex(this); break; - case Song::FileType_MP4: options_ = new TranscoderOptionsAAC(this); break; - case Song::FileType_MPEG: options_ = new TranscoderOptionsMP3(this); break; - case Song::FileType_ASF: options_ = new TranscoderOptionsASF(this); break; + case Song::FileType::FLAC: + case Song::FileType::OggFlac: options_ = new TranscoderOptionsFLAC(this); break; + case Song::FileType::WavPack: options_ = new TranscoderOptionsWavPack(this); break; + case Song::FileType::OggVorbis: options_ = new TranscoderOptionsVorbis(this); break; + case Song::FileType::OggOpus: options_ = new TranscoderOptionsOpus(this); break; + case Song::FileType::OggSpeex: options_ = new TranscoderOptionsSpeex(this); break; + case Song::FileType::MP4: options_ = new TranscoderOptionsAAC(this); break; + case Song::FileType::MPEG: options_ = new TranscoderOptionsMP3(this); break; + case Song::FileType::ASF: options_ = new TranscoderOptionsASF(this); break; default: break; } diff --git a/src/utilities/threadutils.cpp b/src/utilities/threadutils.cpp index 334ee4d9e..2d688787f 100644 --- a/src/utilities/threadutils.cpp +++ b/src/utilities/threadutils.cpp @@ -36,9 +36,9 @@ namespace Utilities { long SetThreadIOPriority(const IoPriority priority) { #ifdef Q_OS_LINUX - return syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, GetThreadId(), 4 | priority << IOPRIO_CLASS_SHIFT); + return syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, GetThreadId(), 4 | static_cast(priority) << IOPRIO_CLASS_SHIFT); #elif defined(Q_OS_MACOS) - return setpriority(PRIO_DARWIN_THREAD, 0, priority == IOPRIO_CLASS_IDLE ? PRIO_DARWIN_BG : 0); + return setpriority(PRIO_DARWIN_THREAD, 0, priority == IoPriority::IOPRIO_CLASS_IDLE ? PRIO_DARWIN_BG : 0); #else Q_UNUSED(priority); return 0; diff --git a/src/utilities/threadutils.h b/src/utilities/threadutils.h index 78f41a5c9..a6bb61401 100644 --- a/src/utilities/threadutils.h +++ b/src/utilities/threadutils.h @@ -24,7 +24,7 @@ namespace Utilities { // Borrowed from schedutils -enum IoPriority { +enum class IoPriority { IOPRIO_CLASS_NONE = 0, IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, diff --git a/src/widgets/fancytabwidget.cpp b/src/widgets/fancytabwidget.cpp index c622978e9..5d9c45191 100644 --- a/src/widgets/fancytabwidget.cpp +++ b/src/widgets/fancytabwidget.cpp @@ -84,7 +84,7 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro QSize sizeHint() const override { FancyTabWidget *tabWidget = qobject_cast(parentWidget()); - if (tabWidget->mode() == FancyTabWidget::Mode_Tabs || tabWidget->mode() == FancyTabWidget::Mode_IconOnlyTabs) { + if (tabWidget->mode() == FancyTabWidget::Mode::Tabs || tabWidget->mode() == FancyTabWidget::Mode::IconOnlyTabs) { return QTabBar::sizeHint(); } @@ -102,7 +102,7 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro int width() const { FancyTabWidget *tabWidget = qobject_cast(parentWidget()); - if (tabWidget->mode() == FancyTabWidget::Mode_LargeSidebar || tabWidget->mode() == FancyTabWidget::Mode_SmallSidebar) { + if (tabWidget->mode() == FancyTabWidget::Mode::LargeSidebar || tabWidget->mode() == FancyTabWidget::Mode::SmallSidebar) { int w = 0; for (int i = 0; i < count(); ++i) { if (tabSizeHint(i).width() > w) w = tabSizeHint(i).width(); @@ -120,7 +120,7 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro FancyTabWidget *tabWidget = qobject_cast(parentWidget()); QSize size; - if (tabWidget->mode() == FancyTabWidget::Mode_LargeSidebar) { + if (tabWidget->mode() == FancyTabWidget::Mode::LargeSidebar) { QFont bold_font(font()); bold_font.setBold(true); @@ -137,7 +137,7 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro QRect rect = fm.boundingRect(QRect(0, 0, w, height()), Qt::TextWordWrap, QTabBar::tabText(index)); size = QSize(w, tabWidget->iconsize_largesidebar() + rect.height() + 10); } - else if (tabWidget->mode() == FancyTabWidget::Mode_SmallSidebar) { + else if (tabWidget->mode() == FancyTabWidget::Mode::SmallSidebar) { QFont bold_font(font()); bold_font.setBold(true); @@ -180,12 +180,12 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro bool verticalTextTabs = false; - if (tabWidget->mode() == FancyTabWidget::Mode_SmallSidebar) { + if (tabWidget->mode() == FancyTabWidget::Mode::SmallSidebar) { verticalTextTabs = true; } // if LargeSidebar, restore spacers - if (tabWidget->mode() == FancyTabWidget::Mode_LargeSidebar && spacers.count() > 0) { + if (tabWidget->mode() == FancyTabWidget::Mode::LargeSidebar && spacers.count() > 0) { QList keys = spacers.keys(); for (const int index : keys) { tabWidget->insertTab(index, spacers[index], QIcon(), QString()); @@ -193,7 +193,7 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro } spacers.clear(); } - else if (tabWidget->mode() != FancyTabWidget::Mode_LargeSidebar) { + else if (tabWidget->mode() != FancyTabWidget::Mode::LargeSidebar) { // traverse in the opposite order to save indices of spacers for (int i = count() - 1; i >= 0; --i) { // spacers are disabled tabs @@ -206,16 +206,16 @@ class FancyTabBar : public QTabBar { // clazy:exclude=missing-qobject-macro } // Restore any label text that was hidden/cached for the IconOnlyTabs mode - if (labelCache.count() > 0 && tabWidget->mode() != FancyTabWidget::Mode_IconOnlyTabs) { + if (labelCache.count() > 0 && tabWidget->mode() != FancyTabWidget::Mode::IconOnlyTabs) { for (int i = 0; i < count(); ++i) { setTabToolTip(i, ""); setTabText(i, labelCache[tabWidget->widget(i)]); } labelCache.clear(); } - if (tabWidget->mode() != FancyTabWidget::Mode_LargeSidebar && tabWidget->mode() != FancyTabWidget::Mode_SmallSidebar) { + if (tabWidget->mode() != FancyTabWidget::Mode::LargeSidebar && tabWidget->mode() != FancyTabWidget::Mode::SmallSidebar) { // Cache and hide label text for IconOnlyTabs mode - if (tabWidget->mode() == FancyTabWidget::Mode_IconOnlyTabs && labelCache.count() == 0) { + if (tabWidget->mode() == FancyTabWidget::Mode::IconOnlyTabs && labelCache.count() == 0) { for (int i = 0; i < count(); ++i) { labelCache[tabWidget->widget(i)] = tabText(i); setTabToolTip(i, tabText(i)); @@ -448,7 +448,7 @@ FancyTabWidget::FancyTabWidget(QWidget *parent) : QTabWidget(parent), style_(nullptr), menu_(nullptr), - mode_(Mode_None), + mode_(Mode::None), bottom_widget_(nullptr), bg_color_system_(true), bg_gradient_(true), @@ -504,7 +504,7 @@ void FancyTabWidget::SaveSettings(const QString &kSettingsGroup) { QSettings s; s.beginGroup(kSettingsGroup); - s.setValue("tab_mode", mode_); + s.setValue("tab_mode", static_cast(mode_)); s.setValue("current_tab", currentIndex()); for (TabData *tab : std::as_const(tabs_)) { @@ -537,7 +537,7 @@ void FancyTabWidget::ReloadSettings() { s.endGroup(); #ifndef Q_OS_MACOS - if (mode() == FancyTabWidget::Mode_LargeSidebar) { + if (mode() == FancyTabWidget::Mode::LargeSidebar) { setIconSize(QSize(iconsize_largesidebar_, iconsize_largesidebar_)); } else { @@ -595,7 +595,7 @@ int FancyTabWidget::IndexOfTab(QWidget *widget) { void FancyTabWidget::paintEvent(QPaintEvent *pe) { - if (mode() != FancyTabWidget::Mode_LargeSidebar && mode() != FancyTabWidget::Mode_SmallSidebar) { + if (mode() != FancyTabWidget::Mode::LargeSidebar && mode() != FancyTabWidget::Mode::SmallSidebar) { QTabWidget::paintEvent(pe); return; } @@ -675,7 +675,7 @@ void FancyTabWidget::SetMode(FancyTabWidget::Mode mode) { mode_ = mode; - if (mode == FancyTabWidget::Mode_Tabs || mode == FancyTabWidget::Mode_IconOnlyTabs) { + if (mode == FancyTabWidget::Mode::Tabs || mode == FancyTabWidget::Mode::IconOnlyTabs) { setTabPosition(QTabWidget::North); } else { @@ -683,7 +683,7 @@ void FancyTabWidget::SetMode(FancyTabWidget::Mode mode) { } #ifndef Q_OS_MACOS - if (mode_ == FancyTabWidget::Mode_LargeSidebar) { + if (mode_ == FancyTabWidget::Mode::LargeSidebar) { setIconSize(QSize(iconsize_largesidebar_, iconsize_largesidebar_)); } else { @@ -721,11 +721,11 @@ void FancyTabWidget::contextMenuEvent(QContextMenuEvent *e) { if (!menu_) { menu_ = new QMenu(this); QActionGroup *group = new QActionGroup(this); - addMenuItem(group, tr("Large sidebar"), Mode_LargeSidebar); - addMenuItem(group, tr("Small sidebar"), Mode_SmallSidebar); - addMenuItem(group, tr("Plain sidebar"), Mode_PlainSidebar); - addMenuItem(group, tr("Tabs on top"), Mode_Tabs); - addMenuItem(group, tr("Icons on top"), Mode_IconOnlyTabs); + addMenuItem(group, tr("Large sidebar"), Mode::LargeSidebar); + addMenuItem(group, tr("Small sidebar"), Mode::SmallSidebar); + addMenuItem(group, tr("Plain sidebar"), Mode::PlainSidebar); + addMenuItem(group, tr("Tabs on top"), Mode::Tabs); + addMenuItem(group, tr("Icons on top"), Mode::IconOnlyTabs); menu_->addActions(group->actions()); } diff --git a/src/widgets/fancytabwidget.h b/src/widgets/fancytabwidget.h index ce76573eb..09b55f40e 100644 --- a/src/widgets/fancytabwidget.h +++ b/src/widgets/fancytabwidget.h @@ -60,13 +60,13 @@ class FancyTabWidget : public QTabWidget { void ReloadSettings(); // Values are persisted - only add to the end - enum Mode { - Mode_None = 0, - Mode_LargeSidebar, - Mode_SmallSidebar, - Mode_Tabs, - Mode_IconOnlyTabs, - Mode_PlainSidebar, + enum class Mode { + None = 0, + LargeSidebar, + SmallSidebar, + Tabs, + IconOnlyTabs, + PlainSidebar }; static const int TabSize_LargeSidebarMinWidth; diff --git a/src/widgets/fileview.cpp b/src/widgets/fileview.cpp index 361910886..63d5837c5 100644 --- a/src/widgets/fileview.cpp +++ b/src/widgets/fileview.cpp @@ -60,7 +60,7 @@ FileView::FileView(QWidget *parent) model_(nullptr), undo_stack_(new QUndoStack(this)), task_manager_(nullptr), - storage_(new FilesystemMusicStorage(Song::Source_LocalFile, "/")) { + storage_(new FilesystemMusicStorage(Song::Source::LocalFile, "/")) { ui_->setupUi(this); @@ -255,7 +255,7 @@ void FileView::DeleteFinished(const SongList &songs_with_errors) { if (songs_with_errors.isEmpty()) return; OrganizeErrorDialog *dialog = new OrganizeErrorDialog(this); - dialog->Show(OrganizeErrorDialog::Type_Delete, songs_with_errors); + dialog->Show(OrganizeErrorDialog::OperationType::Delete, songs_with_errors); // It deletes itself when the user closes it } diff --git a/src/widgets/loginstatewidget.cpp b/src/widgets/loginstatewidget.cpp index b8b34f947..c43617137 100644 --- a/src/widgets/loginstatewidget.cpp +++ b/src/widgets/loginstatewidget.cpp @@ -34,7 +34,7 @@ LoginStateWidget::LoginStateWidget(QWidget *parent) : QWidget(parent), ui_(new Ui_LoginStateWidget), - state_(LoggedOut) { + state_(State::LoggedOut) { ui_->setupUi(this); ui_->signed_in->hide(); @@ -58,7 +58,7 @@ LoginStateWidget::LoginStateWidget(QWidget *parent) LoginStateWidget::~LoginStateWidget() { delete ui_; } void LoginStateWidget::Logout() { - SetLoggedIn(LoggedOut); + SetLoggedIn(State::LoggedOut); emit LogoutClicked(); } @@ -75,19 +75,19 @@ void LoginStateWidget::SetLoggedIn(const State state, const QString &account_nam State last_state = state_; state_ = state; - ui_->signed_in->setVisible(state == LoggedIn); - ui_->signed_out->setVisible(state != LoggedIn); - ui_->busy->setVisible(state == LoginInProgress); + ui_->signed_in->setVisible(state == State::LoggedIn); + ui_->signed_out->setVisible(state != State::LoggedIn); + ui_->busy->setVisible(state == State::LoginInProgress); if (account_name.isEmpty()) ui_->signed_in_label->setText("" + tr("You are signed in.") + ""); else ui_->signed_in_label->setText(tr("You are signed in as %1.").arg("" + account_name + "")); for (QWidget *widget : credential_groups_) { - widget->setVisible(state != LoggedIn); - widget->setEnabled(state != LoginInProgress); + widget->setVisible(state != State::LoggedIn); + widget->setEnabled(state != State::LoginInProgress); } - if (state == LoggedOut && last_state == LoginInProgress) { + if (state == State::LoggedOut && last_state == State::LoginInProgress) { // A login just failed - give focus back to the last crediental field (usually password). // We have to do this after control gets back to the // event loop because the user might have just closed a dialog and our widget might not be active yet. diff --git a/src/widgets/loginstatewidget.h b/src/widgets/loginstatewidget.h index 113cffb62..a00c2fa8a 100644 --- a/src/widgets/loginstatewidget.h +++ b/src/widgets/loginstatewidget.h @@ -38,7 +38,11 @@ class LoginStateWidget : public QWidget { explicit LoginStateWidget(QWidget *parent = nullptr); ~LoginStateWidget() override; - enum State { LoggedIn, LoginInProgress, LoggedOut }; + enum class State { + LoggedIn, + LoginInProgress, + LoggedOut + }; // Installs an event handler on the field so that pressing enter will emit // LoginClicked() instead of doing the default action (closing the dialog). diff --git a/src/widgets/playingwidget.cpp b/src/widgets/playingwidget.cpp index 6a7c91433..27f4c481d 100644 --- a/src/widgets/playingwidget.cpp +++ b/src/widgets/playingwidget.cpp @@ -64,7 +64,7 @@ PlayingWidget::PlayingWidget(QWidget *parent) : QWidget(parent), app_(nullptr), album_cover_choice_controller_(nullptr), - mode_(LargeSongDetails), + mode_(Mode::LargeSongDetails), menu_(new QMenu(this)), above_statusbar_action_(nullptr), fit_cover_width_action_(nullptr), @@ -86,7 +86,7 @@ PlayingWidget::PlayingWidget(QWidget *parent) // Load settings QSettings s; s.beginGroup(kSettingsGroup); - mode_ = Mode(s.value("mode", LargeSongDetails).toInt()); + mode_ = static_cast(s.value("mode", static_cast(Mode::LargeSongDetails)).toInt()); fit_width_ = s.value("fit_cover_width", false).toBool(); s.endGroup(); @@ -95,8 +95,8 @@ PlayingWidget::PlayingWidget(QWidget *parent) // Context menu QActionGroup *mode_group = new QActionGroup(this); - CreateModeAction(SmallSongDetails, tr("Small album cover"), mode_group); - CreateModeAction(LargeSongDetails, tr("Large album cover"), mode_group); + CreateModeAction(Mode::SmallSongDetails, tr("Small album cover"), mode_group); + CreateModeAction(Mode::LargeSongDetails, tr("Large album cover"), mode_group); menu_->addActions(mode_group->actions()); fit_cover_width_action_ = menu_->addAction(tr("Fit cover to width")); @@ -113,7 +113,7 @@ PlayingWidget::PlayingWidget(QWidget *parent) details_->setUndoRedoEnabled(false); // add placeholder text to get the correct height - if (mode_ == LargeSongDetails) { + if (mode_ == Mode::LargeSongDetails) { details_->setDefaultStyleSheet("p { font-size: small; font-weight: bold; }"); details_->setHtml(QString("



")); } @@ -216,11 +216,11 @@ void PlayingWidget::CreateModeAction(const Mode mode, const QString &text, QActi } -void PlayingWidget::SetMode(const int mode) { +void PlayingWidget::SetMode(const Mode mode) { mode_ = static_cast(mode); - fit_cover_width_action_->setEnabled(mode_ != SmallSongDetails); + fit_cover_width_action_->setEnabled(mode_ != Mode::SmallSongDetails); UpdateHeight(); UpdateDetailsText(); @@ -228,7 +228,7 @@ void PlayingWidget::SetMode(const int mode) { QSettings s; s.beginGroup(kSettingsGroup); - s.setValue("mode", mode_); + s.setValue("mode", static_cast(mode_)); s.endGroup(); } @@ -362,11 +362,11 @@ void PlayingWidget::SetHeight(int height) { void PlayingWidget::UpdateHeight() { switch (mode_) { - case SmallSongDetails: + case Mode::SmallSongDetails: cover_loader_options_.desired_height_ = small_ideal_height_; total_height_ = small_ideal_height_; break; - case LargeSongDetails: + case Mode::LargeSongDetails: if (fit_width_) cover_loader_options_.desired_height_ = width(); else cover_loader_options_.desired_height_ = qMin(kMaxCoverSize, width()); total_height_ = kTopBorder + cover_loader_options_.desired_height_ + kBottomOffset + static_cast(details_->size().height()); @@ -394,11 +394,11 @@ void PlayingWidget::UpdateDetailsText() { QString html; details_->setDefaultStyleSheet("p { font-size: small; font-weight: bold; }"); switch (mode_) { - case SmallSongDetails: + case Mode::SmallSongDetails: details_->setTextWidth(-1); html += "

"; break; - case LargeSongDetails: + case Mode::LargeSongDetails: details_->setTextWidth(cover_loader_options_.desired_height_); html += "

"; break; @@ -410,7 +410,7 @@ void PlayingWidget::UpdateDetailsText() { details_->setHtml(html); // if something spans multiple lines the height needs to change - if (mode_ == LargeSongDetails) UpdateHeight(); + if (mode_ == Mode::LargeSongDetails) UpdateHeight(); update(); @@ -437,7 +437,7 @@ void PlayingWidget::DrawContents(QPainter *p) { p->setRenderHint(QPainter::SmoothPixmapTransform); switch (mode_) { - case SmallSongDetails: + case Mode::SmallSongDetails: // Draw the cover p->drawPixmap(0, 0, small_ideal_height_, small_ideal_height_, pixmap_cover_); if (downloading_covers_) { @@ -450,7 +450,7 @@ void PlayingWidget::DrawContents(QPainter *p) { p->translate(-small_ideal_height_ - kPadding, 0); break; - case LargeSongDetails: + case Mode::LargeSongDetails: // Work out how high the text is going to be const int text_height = static_cast(details_->size().height()); const int cover_size = fit_width_ ? width() : qMin(kMaxCoverSize, width()); @@ -491,7 +491,7 @@ void PlayingWidget::resizeEvent(QResizeEvent *e) { //if (visible_ && e->oldSize() != e->size()) { if (e->oldSize() != e->size()) { - if (mode_ == LargeSongDetails) { + if (mode_ == Mode::LargeSongDetails) { UpdateHeight(); UpdateDetailsText(); } diff --git a/src/widgets/playingwidget.h b/src/widgets/playingwidget.h index ee17259d5..462f4b0c9 100644 --- a/src/widgets/playingwidget.h +++ b/src/widgets/playingwidget.h @@ -86,9 +86,15 @@ class PlayingWidget : public QWidget { void dragEnterEvent(QDragEnterEvent *e) override; void dropEvent(QDropEvent *e) override; + private: + enum class Mode { + SmallSongDetails = 0, + LargeSongDetails = 1 + }; + private slots: void Update() { update(); } - void SetMode(const int mode); + void SetMode(const Mode mode); void ShowAboveStatusBar(const bool above); void FitCoverWidth(const bool fit); @@ -98,12 +104,6 @@ class PlayingWidget : public QWidget { void FadePreviousTrack(const qreal value); private: - - enum Mode { - SmallSongDetails = 0, - LargeSongDetails = 1, - }; - static const char *kSettingsGroup; static const int kPadding; static const int kGradientHead; diff --git a/src/widgets/prettyslider.cpp b/src/widgets/prettyslider.cpp index af4202743..0bde5e9fe 100644 --- a/src/widgets/prettyslider.cpp +++ b/src/widgets/prettyslider.cpp @@ -28,7 +28,7 @@ PrettySlider::PrettySlider(const Qt::Orientation orientation, const SliderMode mode, QWidget *parent, const uint max) : SliderSlider(orientation, parent, static_cast(max)), m_mode(mode) { - if (m_mode == SliderMode_Pretty) { + if (m_mode == SliderMode::Pretty) { setFocusPolicy(Qt::NoFocus); } @@ -44,7 +44,7 @@ void PrettySlider::mousePressEvent(QMouseEvent *e) { void PrettySlider::slideEvent(QMouseEvent *e) { - if (m_mode == SliderMode_Pretty) { + if (m_mode == SliderMode::Pretty) { QSlider::setValue(orientation() == Qt::Horizontal ? QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().x(), width() - 2) : QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().y(), height() - 2)); // clazy:exclude=skipped-base-method } else { diff --git a/src/widgets/prettyslider.h b/src/widgets/prettyslider.h index 4da369824..2e11114f6 100644 --- a/src/widgets/prettyslider.h +++ b/src/widgets/prettyslider.h @@ -32,9 +32,9 @@ class PrettySlider : public SliderSlider { Q_OBJECT public: - enum SliderMode { - SliderMode_Normal, // Same behavior as Slider *unless* there's a moodbar - SliderMode_Pretty + enum class SliderMode { + Normal, // Same behavior as Slider *unless* there's a moodbar + Pretty }; explicit PrettySlider(const Qt::Orientation orientation, const SliderMode mode, QWidget *parent, const uint max = 0); diff --git a/tests/src/collectionbackend_test.cpp b/tests/src/collectionbackend_test.cpp index ef1cba673..4a1e9cf81 100644 --- a/tests/src/collectionbackend_test.cpp +++ b/tests/src/collectionbackend_test.cpp @@ -46,7 +46,7 @@ class CollectionBackendTest : public ::testing::Test { void SetUp() override { database_.reset(new MemoryDatabase(nullptr)); backend_ = std::make_unique(); - backend_->Init(database_.get(), nullptr, Song::Source_Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); + backend_->Init(database_.get(), nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); } static Song MakeDummySong(int directory_id) { @@ -372,7 +372,7 @@ TEST_F(TestUrls, TestUrls) { EXPECT_EQ(url, QUrl::fromEncoded(url.toString(QUrl::FullyEncoded).toUtf8())); EXPECT_EQ(url.toString(QUrl::FullyEncoded), url.toEncoded()); - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_directory_id(1); song.set_title("Test Title"); song.set_album("Test Album"); @@ -456,7 +456,7 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) { url.setScheme("file"); url.setPath("/music/" + song_id); - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_song_id(song_id); song.set_directory_id(1); song.set_title("Test Title " + song_id); @@ -500,7 +500,7 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) { EXPECT_EQ(songs.count(), song_ids.count()); - for (QMap::const_iterator it = songs.constBegin() ; it != songs.constEnd() ; ++it) { + for (SongMap::const_iterator it = songs.constBegin() ; it != songs.constEnd() ; ++it) { EXPECT_EQ(it.key(), it.value().song_id()); } @@ -527,7 +527,7 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) { url.setScheme("file"); url.setPath("/music/" + song_id); - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_song_id(song_id); song.set_directory_id(1); song.set_title("Test Title " + song_id); @@ -572,7 +572,7 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) { url.setScheme("file"); url.setPath("/music/" + song_id); - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_song_id(song_id); song.set_directory_id(1); song.set_title("Test Title " + song_id); diff --git a/tests/src/collectionmodel_test.cpp b/tests/src/collectionmodel_test.cpp index 4461f668c..91a234ae1 100644 --- a/tests/src/collectionmodel_test.cpp +++ b/tests/src/collectionmodel_test.cpp @@ -51,7 +51,7 @@ class CollectionModelTest : public ::testing::Test { void SetUp() override { database_ = std::make_shared(nullptr); backend_ = std::make_unique(); - backend_->Init(database_.get(), nullptr, Song::Source_Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); + backend_->Init(database_.get(), nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); model_ = std::make_unique(backend_.get(), nullptr); added_dir_ = false; @@ -359,7 +359,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { int year = 1960; // Add some normal albums. for (int artist_number = 1; artist_number <= 3 ; ++artist_number) { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_artist(QString("Artist %1").arg(artist_number)); song.set_composer(QString("Composer %1").arg(artist_number)); song.set_performer(QString("Performer %1").arg(artist_number)); @@ -385,7 +385,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Add some albums with 'album artist'. for (int album_artist_number = 1; album_artist_number <= 3 ; ++album_artist_number) { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_albumartist(QString("Album Artist %1").arg(album_artist_number)); song.set_composer(QString("Composer %1").arg(album_artist_number)); song.set_performer(QString("Performer %1").arg(album_artist_number)); @@ -415,7 +415,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Add some compilation albums. for (int album_number = 1; album_number <= 3 ; ++album_number) { if (year > 2020) year = 1960; - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_mtime(1); song.set_ctime(1); song.set_directory_id(1); @@ -441,7 +441,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Songs with only title { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_mtime(1); song.set_ctime(1); song.set_directory_id(1); @@ -457,7 +457,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Song with only artist, album and title. { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_url(QUrl(QString("file:///tmp/artist-album-title-song"))); song.set_artist("Not Only Artist"); song.set_album("Not Only Album"); @@ -474,7 +474,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Add possible Various artists conflicting songs. { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_url(QUrl(QString("file:///tmp/song-va-conflicting-1"))); song.set_artist("Various artists"); song.set_album("VA Album"); @@ -490,7 +490,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { } { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_url(QUrl(QString("file:///tmp/song-va-conflicting-2"))); song.set_artist("Various artists"); song.set_albumartist("Various artists"); @@ -507,7 +507,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { } { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_url(QUrl(QString("file:///tmp/song-va-conflicting-3"))); song.set_albumartist("Various artists"); song.set_album("VA Album"); @@ -524,7 +524,7 @@ TEST_F(CollectionModelTest, TestContainerNodes) { // Albums with Album ID. for (int album_id = 0; album_id <= 2 ; ++album_id) { - Song song(Song::Source_Collection); + Song song(Song::Source::Collection); song.set_url(QUrl(QString("file:///tmp/song-with-album-id-1"))); song.set_artist("Artist with Album ID"); song.set_album(QString("Album %1 with Album ID").arg(album_id)); @@ -564,9 +564,9 @@ TEST_F(CollectionModelTest, TestContainerNodes) { backend1 = std::make_unique(); backend2= std::make_unique(); backend3 = std::make_unique(); - backend1->Init(database1.get(), Song::Source_Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); - backend2->Init(database2.get(), Song::Source_Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); - backend3->Init(database3.get(), Song::Source_Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); + backend1->Init(database1.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); + backend2->Init(database2.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); + backend3->Init(database3.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable); model1 = std::make_unique(backend1.get(), nullptr); model2 = std::make_unique(backend2.get(), nullptr); model3 = std::make_unique(backend3.get(), nullptr); diff --git a/tests/src/metatypes_env.h b/tests/src/metatypes_env.h index fd210e616..61cdf1fe2 100644 --- a/tests/src/metatypes_env.h +++ b/tests/src/metatypes_env.h @@ -34,10 +34,10 @@ class MetatypesEnvironment : public ::testing::Environment { public: MetatypesEnvironment() = default; void SetUp() override { - qRegisterMetaType("Directory"); - qRegisterMetaType("DirectoryList"); - qRegisterMetaType("Subdirectory"); - qRegisterMetaType("SubdirectoryList"); + qRegisterMetaType("CollectionDirectory"); + qRegisterMetaType("CollectionDirectoryList"); + qRegisterMetaType("CollectionSubdirectory"); + qRegisterMetaType("CollectionSubdirectoryList"); qRegisterMetaType("SongList"); qRegisterMetaType("QModelIndex"); qRegisterMetaType("SongLoader::Result"); diff --git a/tests/src/mock_playlistitem.cpp b/tests/src/mock_playlistitem.cpp index 165285404..dad20a951 100644 --- a/tests/src/mock_playlistitem.cpp +++ b/tests/src/mock_playlistitem.cpp @@ -22,4 +22,4 @@ #include "mock_playlistitem.h" -MockPlaylistItem::MockPlaylistItem() : PlaylistItem(Song::Source_LocalFile) {} +MockPlaylistItem::MockPlaylistItem() : PlaylistItem(Song::Source::LocalFile) {} diff --git a/tests/src/playlist_test.cpp b/tests/src/playlist_test.cpp index a940dbbed..ee1111bea 100644 --- a/tests/src/playlist_test.cpp +++ b/tests/src/playlist_test.cpp @@ -81,7 +81,7 @@ TEST_F(PlaylistTest, InsertItems) { // Insert the item EXPECT_EQ(0, playlist_.rowCount(QModelIndex())); - playlist_.InsertItems(PlaylistItemList() << item_ptr, -1); + playlist_.InsertItems(PlaylistItemPtrList() << item_ptr, -1); ASSERT_EQ(1, playlist_.rowCount(QModelIndex())); // Get the metadata @@ -94,7 +94,7 @@ TEST_F(PlaylistTest, InsertItems) { TEST_F(PlaylistTest, Indexes) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); // Start "playing" track 1 @@ -128,10 +128,10 @@ TEST_F(PlaylistTest, Indexes) { TEST_F(PlaylistTest, RepeatPlaylist) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); - playlist_.sequence()->SetRepeatMode(PlaylistSequence::Repeat_Playlist); + playlist_.sequence()->SetRepeatMode(PlaylistSequence::RepeatMode::Playlist); playlist_.set_current_row(0); EXPECT_EQ(1, playlist_.next_row()); @@ -146,10 +146,10 @@ TEST_F(PlaylistTest, RepeatPlaylist) { TEST_F(PlaylistTest, RepeatTrack) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); - playlist_.sequence()->SetRepeatMode(PlaylistSequence::Repeat_Track); + playlist_.sequence()->SetRepeatMode(PlaylistSequence::RepeatMode::Track); playlist_.set_current_row(0); EXPECT_EQ(0, playlist_.next_row()); @@ -158,13 +158,13 @@ TEST_F(PlaylistTest, RepeatTrack) { TEST_F(PlaylistTest, RepeatAlbum) { - playlist_.InsertItems(PlaylistItemList() + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One", "Album one") << MakeMockItemP("Two", "Album two") << MakeMockItemP("Three", "Album one")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); - playlist_.sequence()->SetRepeatMode(PlaylistSequence::Repeat_Album); + playlist_.sequence()->SetRepeatMode(PlaylistSequence::RepeatMode::Album); playlist_.set_current_row(0); EXPECT_EQ(2, playlist_.next_row()); @@ -176,7 +176,7 @@ TEST_F(PlaylistTest, RepeatAlbum) { TEST_F(PlaylistTest, RemoveBeforeCurrent) { - playlist_.InsertItems(PlaylistItemList() + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); @@ -193,7 +193,7 @@ TEST_F(PlaylistTest, RemoveBeforeCurrent) { TEST_F(PlaylistTest, RemoveAfterCurrent) { - playlist_.InsertItems(PlaylistItemList() + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); @@ -213,7 +213,7 @@ TEST_F(PlaylistTest, RemoveAfterCurrent) { TEST_F(PlaylistTest, RemoveCurrent) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); // Remove the currently playing track's row @@ -229,12 +229,12 @@ TEST_F(PlaylistTest, RemoveCurrent) { TEST_F(PlaylistTest, InsertBeforeCurrent) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); playlist_.set_current_row(1); EXPECT_EQ(1, playlist_.current_row()); - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Four"), 0); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Four"), 0); ASSERT_EQ(4, playlist_.rowCount(QModelIndex())); EXPECT_EQ(2, playlist_.current_row()); @@ -249,12 +249,12 @@ TEST_F(PlaylistTest, InsertBeforeCurrent) { TEST_F(PlaylistTest, InsertAfterCurrent) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); playlist_.set_current_row(1); EXPECT_EQ(1, playlist_.current_row()); - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Four"), 2); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Four"), 2); ASSERT_EQ(4, playlist_.rowCount(QModelIndex())); EXPECT_EQ(1, playlist_.current_row()); @@ -270,7 +270,7 @@ TEST_F(PlaylistTest, InsertAfterCurrent) { TEST_F(PlaylistTest, Clear) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); playlist_.set_current_row(1); @@ -290,7 +290,7 @@ TEST_F(PlaylistTest, UndoAdd) { EXPECT_FALSE(playlist_.undo_stack()->canUndo()); EXPECT_FALSE(playlist_.undo_stack()->canRedo()); - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Title")); EXPECT_EQ(1, playlist_.rowCount(QModelIndex())); EXPECT_FALSE(playlist_.undo_stack()->canRedo()); ASSERT_TRUE(playlist_.undo_stack()->canUndo()); @@ -312,10 +312,10 @@ TEST_F(PlaylistTest, UndoAdd) { TEST_F(PlaylistTest, UndoMultiAdd) { // Add 1 item - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One")); // Add 2 items - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Two") << MakeMockItemP("Three")); // Undo adding 2 items ASSERT_TRUE(playlist_.undo_stack()->canUndo()); @@ -336,7 +336,7 @@ TEST_F(PlaylistTest, UndoRemove) { EXPECT_FALSE(playlist_.undo_stack()->canUndo()); EXPECT_FALSE(playlist_.undo_stack()->canRedo()); - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Title")); EXPECT_TRUE(playlist_.undo_stack()->canUndo()); EXPECT_FALSE(playlist_.undo_stack()->canRedo()); @@ -363,7 +363,7 @@ TEST_F(PlaylistTest, UndoRemove) { TEST_F(PlaylistTest, UndoMultiRemove) { // Add 3 items - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); // Remove 1 item @@ -385,7 +385,7 @@ TEST_F(PlaylistTest, UndoMultiRemove) { TEST_F(PlaylistTest, UndoClear) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three")); ASSERT_EQ(3, playlist_.rowCount(QModelIndex())); playlist_.Clear(); @@ -400,7 +400,7 @@ TEST_F(PlaylistTest, UndoClear) { TEST_F(PlaylistTest, UndoRemoveCurrent) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Title")); playlist_.set_current_row(0); EXPECT_EQ(0, playlist_.current_row()); EXPECT_EQ(0, playlist_.last_played_row()); @@ -417,7 +417,7 @@ TEST_F(PlaylistTest, UndoRemoveCurrent) { TEST_F(PlaylistTest, UndoRemoveOldCurrent) { - playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title")); + playlist_.InsertItems(PlaylistItemPtrList() << MakeMockItemP("Title")); playlist_.set_current_row(0); EXPECT_EQ(0, playlist_.current_row()); EXPECT_EQ(0, playlist_.last_played_row()); @@ -437,7 +437,7 @@ TEST_F(PlaylistTest, UndoRemoveOldCurrent) { TEST_F(PlaylistTest, ShuffleThenNext) { // Add 100 items - PlaylistItemList items; + PlaylistItemPtrList items; items.reserve(100); for (int i=0 ; i<100 ; ++i) items << MakeMockItemP("Item " + QString::number(i)); @@ -481,7 +481,7 @@ TEST_F(PlaylistTest, CollectionIdMapSingle) { song.set_id(1); PlaylistItemPtr item(std::make_shared(song)); - playlist_.InsertItems(PlaylistItemList() << item); + playlist_.InsertItems(PlaylistItemPtrList() << item); EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count()); EXPECT_EQ(0, playlist_.collection_items_by_id(0).count()); @@ -502,7 +502,7 @@ TEST_F(PlaylistTest, CollectionIdMapInvalid) { ASSERT_EQ(-1, invalid.id()); PlaylistItemPtr item(std::make_shared(invalid)); - playlist_.InsertItems(PlaylistItemList() << item); + playlist_.InsertItems(PlaylistItemPtrList() << item); EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count()); EXPECT_EQ(0, playlist_.collection_items_by_id(0).count()); @@ -524,7 +524,7 @@ TEST_F(PlaylistTest, CollectionIdMapMulti) { PlaylistItemPtr item_one(std::make_shared(one)); PlaylistItemPtr item_two(std::make_shared(two)); PlaylistItemPtr item_three(std::make_shared(one)); - playlist_.InsertItems(PlaylistItemList() << item_one << item_two << item_three); + playlist_.InsertItems(PlaylistItemPtrList() << item_one << item_two << item_three); EXPECT_EQ(2, playlist_.collection_items_by_id(1).count()); EXPECT_EQ(1, playlist_.collection_items_by_id(2).count());