From 1295033faeea408033485559dd2978f825e94843 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 20 Jun 2021 19:04:08 +0200 Subject: [PATCH] Clang-Tidy and Clazy fixes --- .../singleapplication/singleapplication.cpp | 2 +- .../singleapplication/singleapplication.h | 4 +- .../singleapplication/singleapplication_p.cpp | 4 +- .../singlecoreapplication.cpp | 2 +- .../singleapplication/singlecoreapplication.h | 2 +- .../singlecoreapplication_p.cpp | 4 +- ext/libstrawberry-common/CMakeLists.txt | 1 + ext/libstrawberry-common/core/logging.cpp | 6 +- ext/libstrawberry-common/core/logging.h | 5 + ext/libstrawberry-common/core/workerpool.h | 3 +- ext/libstrawberry-tagreader/tagreader.cpp | 7 ++ ext/strawberry-tagreader/CMakeLists.txt | 1 + ext/strawberry-tagreader/tagreaderworker.h | 2 + src/CMakeLists.txt | 26 ++++- src/analyzer/analyzercontainer.cpp | 6 +- src/analyzer/blockanalyzer.cpp | 2 + src/analyzer/fht.cpp | 2 +- src/analyzer/rainbowanalyzer.cpp | 4 +- src/analyzer/rainbowanalyzer.h | 2 +- src/collection/collection.cpp | 2 +- src/collection/collectionbackend.cpp | 7 +- src/collection/collectionfilterwidget.cpp | 6 +- src/collection/collectionfilterwidget.h | 6 +- src/collection/collectionitem.h | 3 + src/collection/collectionitemdelegate.cpp | 9 +- src/collection/collectionmodel.cpp | 8 +- src/collection/collectionmodel.h | 14 +-- src/collection/collectionplaylistitem.h | 3 + src/collection/collectionquery.cpp | 4 +- src/collection/collectionview.cpp | 12 +- src/collection/collectionwatcher.cpp | 6 +- src/collection/groupbydialog.cpp | 2 +- src/collection/groupbydialog.h | 2 +- src/collection/savedgroupingmanager.cpp | 2 +- src/collection/savedgroupingmanager.h | 2 +- src/context/contextalbumsview.cpp | 13 ++- src/core/appearance.h | 2 + src/core/application.cpp | 7 +- src/core/commandlineoptions.cpp | 2 +- src/core/database.cpp | 4 +- src/core/database.h | 4 +- src/core/deletefiles.cpp | 6 +- src/core/deletefiles.h | 2 +- src/core/filesystemmusicstorage.h | 2 + src/core/iconmapper.h | 2 +- src/core/mac_startup.h | 6 +- src/core/mainwindow.cpp | 19 +++- src/core/mainwindow.h | 4 +- src/core/mergedproxymodel.cpp | 4 +- src/core/mimedata.h | 2 +- src/core/mpris2.cpp | 28 ++--- src/core/mpris_common.h | 12 +- src/core/multisortfilterproxy.h | 2 + src/core/musicstorage.h | 3 + src/core/networkproxyfactory.cpp | 13 ++- src/core/potranslator.h | 3 + src/core/settingsprovider.h | 5 + src/core/song.cpp | 2 +- src/core/song.h | 2 +- src/core/standarditemiconloader.cpp | 4 +- src/core/standarditemiconloader.h | 2 +- src/core/stylehelper.cpp | 18 +-- src/core/stylehelper.h | 10 +- src/core/stylesheetloader.cpp | 8 +- src/core/stylesheetloader.h | 2 +- src/core/thread.h | 2 + src/core/translations.cpp | 2 +- src/core/translations.h | 4 +- src/core/urlhandler.cpp | 4 +- src/core/urlhandler.h | 4 +- src/core/utilities.cpp | 34 +++--- src/core/utilities.h | 18 +-- .../albumcoverchoicecontroller.cpp | 4 +- src/covermanager/albumcoverchoicecontroller.h | 2 +- src/covermanager/albumcoverexporter.cpp | 2 +- src/covermanager/albumcoverexporter.h | 2 +- src/covermanager/albumcoverfetcher.cpp | 6 +- src/covermanager/albumcoverloader.cpp | 28 ++--- src/covermanager/albumcoverloader.h | 24 ++-- src/covermanager/albumcovermanager.cpp | 3 +- src/covermanager/albumcovermanager.h | 3 + src/covermanager/albumcovermanagerlist.cpp | 1 + src/covermanager/albumcoversearcher.cpp | 2 +- src/covermanager/albumcoversearcher.h | 2 + src/covermanager/coverexportrunnable.cpp | 3 +- src/covermanager/coverexportrunnable.h | 2 +- src/covermanager/coverproviders.cpp | 4 +- src/covermanager/deezercoverprovider.cpp | 2 +- src/covermanager/discogscoverprovider.cpp | 12 +- src/covermanager/discogscoverprovider.h | 2 +- src/covermanager/spotifycoverprovider.cpp | 4 +- src/covermanager/spotifycoverprovider.h | 4 +- src/device/cddadevice.cpp | 4 +- src/device/cddadevice.h | 2 +- src/device/cddalister.h | 2 +- src/device/cddasongloader.cpp | 6 +- src/device/connecteddevice.cpp | 4 +- src/device/connecteddevice.h | 2 +- src/device/deviceinfo.cpp | 1 + src/device/deviceinfo.h | 2 + src/device/devicelister.cpp | 3 +- src/device/devicelister.h | 5 +- src/device/devicemanager.cpp | 32 +++--- src/device/devicemanager.h | 26 ++--- src/device/deviceproperties.cpp | 6 +- src/device/deviceproperties.h | 2 +- src/device/devicestatefiltermodel.cpp | 2 +- src/device/devicestatefiltermodel.h | 4 +- src/device/deviceview.cpp | 7 +- src/device/deviceview.h | 4 +- src/device/filesystemdevice.cpp | 6 +- src/device/filesystemdevice.h | 6 +- src/device/giolister.cpp | 8 +- src/device/giolister.h | 2 +- src/device/gpoddevice.cpp | 4 +- src/device/gpoddevice.h | 2 +- src/device/gpodloader.cpp | 4 +- src/device/gpodloader.h | 2 +- src/device/macosdevicelister.h | 3 +- src/device/macosdevicelister.mm | 4 +- src/device/mtpconnection.cpp | 4 +- src/device/mtpconnection.h | 4 +- src/device/mtpdevice.cpp | 4 +- src/device/mtpdevice.h | 2 +- src/device/mtploader.cpp | 4 +- src/device/mtploader.h | 2 +- src/device/udisks2lister.cpp | 12 +- src/device/udisks2lister.h | 2 +- src/dialogs/console.cpp | 3 +- src/dialogs/edittagdialog.cpp | 7 +- src/dialogs/trackselectiondialog.cpp | 2 +- src/engine/alsadevicefinder.cpp | 6 +- src/engine/alsadevicefinder.h | 3 + src/engine/alsapcmdevicefinder.cpp | 4 +- src/engine/alsapcmdevicefinder.h | 3 + src/engine/devicefinder.h | 4 +- src/engine/enginebase.cpp | 7 +- src/engine/enginebase.h | 2 +- src/engine/enginetype.cpp | 4 +- src/engine/enginetype.h | 6 +- src/engine/gstbufferconsumer.h | 6 +- src/engine/gstengine.cpp | 11 +- src/engine/gstengine.h | 2 +- src/engine/gstenginepipeline.cpp | 7 +- src/engine/gstenginepipeline.h | 6 +- src/engine/pulsedevicefinder.cpp | 2 +- src/engine/pulsedevicefinder.h | 1 + src/engine/vlcengine.cpp | 10 +- src/engine/vlcengine.h | 2 +- src/equalizer/equalizer.cpp | 3 + src/globalshortcuts/globalshortcut.cpp | 2 +- src/globalshortcuts/globalshortcut.h | 2 +- .../globalshortcutsbackend-gnome.cpp | 4 +- .../globalshortcutsbackend-gnome.h | 2 +- .../globalshortcutsbackend-kde.cpp | 4 +- .../globalshortcutsbackend-kde.h | 2 +- .../globalshortcutsbackend-macos.h | 2 +- .../globalshortcutsbackend-macos.mm | 4 +- .../globalshortcutsbackend-mate.cpp | 4 +- .../globalshortcutsbackend-mate.h | 2 +- .../globalshortcutsbackend-system.cpp | 4 +- .../globalshortcutsbackend-system.h | 2 +- .../globalshortcutsbackend.cpp | 4 +- src/globalshortcuts/globalshortcutsbackend.h | 2 +- .../globalshortcutsmanager.cpp | 2 +- src/globalshortcuts/keymapper_x11.h | 2 +- src/internet/internetplaylistitem.h | 2 + src/internet/internetsearchitemdelegate.h | 2 + src/internet/internetsearchmodel.cpp | 5 +- src/internet/internetsearchmodel.h | 2 +- src/internet/internetsearchsortmodel.h | 2 + src/internet/internetsearchview.cpp | 11 +- src/internet/internetsearchview.h | 4 +- src/internet/internetservices.cpp | 2 +- src/internet/internetservices.h | 2 +- src/internet/internetsongmimedata.h | 2 +- src/lyrics/geniuslyricsprovider.cpp | 4 +- src/lyrics/geniuslyricsprovider.h | 4 +- src/lyrics/lyricsfetcher.cpp | 6 +- src/lyrics/lyricsproviders.cpp | 4 +- src/moodbar/moodbaritemdelegate.cpp | 2 +- src/moodbar/moodbaritemdelegate.h | 2 +- src/moodbar/moodbarloader.cpp | 5 +- src/moodbar/moodbarpipeline.cpp | 4 +- src/moodbar/moodbarpipeline.h | 2 +- src/moodbar/moodbarproxystyle.cpp | 6 +- src/moodbar/moodbarproxystyle.h | 6 +- src/moodbar/moodbarrenderer.cpp | 11 +- src/moodbar/moodbarrenderer.h | 4 +- src/musicbrainz/acoustidclient.cpp | 1 + src/musicbrainz/musicbrainzclient.cpp | 3 +- src/musicbrainz/musicbrainzclient.h | 2 +- src/musicbrainz/tagfetcher.cpp | 2 +- src/organize/organize.cpp | 15 ++- src/organize/organize.h | 4 +- src/organize/organizedialog.cpp | 8 +- src/organize/organizedialog.h | 2 +- src/organize/organizeerrordialog.cpp | 1 + src/organize/organizeformat.h | 4 +- src/osd/osdbase.cpp | 2 +- src/osd/osdbase.h | 2 +- src/osd/osddbus.cpp | 8 +- src/osd/osdpretty.cpp | 10 +- src/osd/osdpretty.h | 4 +- src/playlist/playlist.cpp | 107 +++++++++++------- src/playlist/playlistbackend.cpp | 2 +- src/playlist/playlistdelegates.cpp | 13 +-- src/playlist/playlistdelegates.h | 32 +++++- src/playlist/playlistfilterparser.cpp | 31 ++++- src/playlist/playlistfilterparser.h | 11 +- src/playlist/playlistitem.cpp | 8 +- src/playlist/playlistitem.h | 18 +-- src/playlist/playlistitemmimedata.h | 4 +- src/playlist/playlistlistcontainer.cpp | 23 +--- src/playlist/playlistlistcontainer.h | 2 +- src/playlist/playlistlistmodel.cpp | 2 +- src/playlist/playlistlistsortfiltermodel.h | 40 +++++++ src/playlist/playlistmanager.cpp | 4 +- src/playlist/playlisttabbar.cpp | 1 + src/playlist/playlistview.cpp | 11 +- src/playlist/playlistview.h | 12 +- src/playlist/songloaderinserter.cpp | 5 +- src/playlist/songloaderinserter.h | 2 +- src/playlist/songmimedata.h | 2 +- src/playlist/songplaylistitem.h | 2 + src/playlistparsers/playlistparser.cpp | 14 ++- src/playlistparsers/playlistparser.h | 2 +- src/playlistparsers/plsparser.cpp | 2 +- src/playlistparsers/wplparser.h | 1 + src/playlistparsers/xmlparser.h | 1 + src/qobuz/qobuzbaserequest.cpp | 4 +- src/qobuz/qobuzbaserequest.h | 2 +- src/qobuz/qobuzrequest.cpp | 2 +- src/qobuz/qobuzrequest.h | 2 +- src/qobuz/qobuzservice.cpp | 8 +- src/qobuz/qobuzservice.h | 4 +- src/qobuz/qobuzurlhandler.cpp | 2 +- src/qobuz/qobuzurlhandler.h | 2 +- src/queue/queue.cpp | 18 +-- src/queue/queue.h | 8 +- src/scrobbler/audioscrobbler.cpp | 2 +- src/scrobbler/audioscrobbler.h | 3 +- src/scrobbler/listenbrainzscrobbler.cpp | 5 +- src/scrobbler/listenbrainzscrobbler.h | 2 +- src/scrobbler/scrobblercache.cpp | 7 +- src/scrobbler/scrobblercache.h | 2 +- src/scrobbler/scrobblercacheitem.cpp | 3 +- src/scrobbler/scrobblercacheitem.h | 2 +- src/scrobbler/scrobblingapi20.cpp | 9 +- src/scrobbler/scrobblingapi20.h | 4 +- src/settings/appearancesettingspage.cpp | 4 +- src/settings/appearancesettingspage.h | 2 +- src/settings/backendsettingspage.cpp | 18 +-- src/settings/backendsettingspage.h | 2 +- src/settings/behavioursettingspage.cpp | 2 +- src/settings/behavioursettingspage.h | 2 +- src/settings/collectionsettingspage.cpp | 4 +- src/settings/collectionsettingspage.h | 2 +- src/settings/contextsettingspage.cpp | 2 +- src/settings/contextsettingspage.h | 2 +- src/settings/coverssettingspage.cpp | 6 +- src/settings/coverssettingspage.h | 2 +- src/settings/globalshortcutssettingspage.cpp | 4 +- src/settings/globalshortcutssettingspage.h | 2 +- src/settings/lyricssettingspage.cpp | 6 +- src/settings/lyricssettingspage.h | 2 +- src/settings/moodbarsettingspage.cpp | 4 +- src/settings/moodbarsettingspage.h | 2 +- src/settings/networkproxysettingspage.cpp | 5 +- src/settings/networkproxysettingspage.h | 2 +- src/settings/notificationssettingspage.cpp | 4 +- src/settings/notificationssettingspage.h | 2 +- src/settings/playlistsettingspage.cpp | 2 +- src/settings/playlistsettingspage.h | 2 +- src/settings/qobuzsettingspage.cpp | 11 +- src/settings/qobuzsettingspage.h | 4 +- src/settings/scrobblersettingspage.cpp | 24 ++-- src/settings/scrobblersettingspage.h | 14 +-- src/settings/settingsdialog.cpp | 38 +++---- src/settings/settingsdialog.h | 4 +- src/settings/settingspage.cpp | 2 +- src/settings/settingspage.h | 2 +- src/settings/subsonicsettingspage.cpp | 11 +- src/settings/subsonicsettingspage.h | 4 +- src/settings/tidalsettingspage.cpp | 9 +- src/settings/tidalsettingspage.h | 2 +- src/settings/transcodersettingspage.cpp | 4 +- src/settings/transcodersettingspage.h | 2 +- src/smartplaylists/playlistgenerator.cpp | 2 +- src/smartplaylists/playlistgenerator.h | 2 +- .../playlistgeneratormimedata.h | 2 +- src/smartplaylists/playlistquerygenerator.cpp | 7 +- src/smartplaylists/playlistquerygenerator.h | 6 +- .../smartplaylistquerywizardplugin.cpp | 6 +- src/smartplaylists/smartplaylistsearch.cpp | 3 +- src/smartplaylists/smartplaylistsearch.h | 2 +- .../smartplaylistsearchtermwidget.cpp | 22 ++-- src/smartplaylists/smartplaylistsitem.h | 2 + src/smartplaylists/smartplaylistsmodel.cpp | 2 +- .../smartplaylistsviewcontainer.cpp | 2 +- .../smartplaylistsviewcontainer.h | 2 +- src/smartplaylists/smartplaylistwizard.cpp | 4 +- src/subsonic/subsonicbaserequest.cpp | 4 +- src/subsonic/subsonicbaserequest.h | 2 +- src/subsonic/subsonicrequest.cpp | 4 +- src/subsonic/subsonicrequest.h | 4 +- src/subsonic/subsonicscrobblerequest.cpp | 2 +- src/subsonic/subsonicscrobblerequest.h | 2 +- src/subsonic/subsonicservice.cpp | 6 +- src/subsonic/subsonicservice.h | 4 +- src/tidal/tidalbaserequest.cpp | 6 +- src/tidal/tidalbaserequest.h | 2 +- src/tidal/tidalfavoriterequest.cpp | 2 +- src/tidal/tidalfavoriterequest.h | 2 +- src/tidal/tidalrequest.cpp | 2 +- src/tidal/tidalrequest.h | 2 +- src/tidal/tidalservice.cpp | 10 +- src/tidal/tidalservice.h | 6 +- src/tidal/tidalstreamurlrequest.cpp | 3 +- src/tidal/tidalstreamurlrequest.h | 2 +- src/tidal/tidalurlhandler.cpp | 2 +- src/tidal/tidalurlhandler.h | 2 +- src/transcoder/transcodedialog.cpp | 6 +- src/transcoder/transcodedialog.h | 2 +- src/transcoder/transcoder.cpp | 40 +++---- src/transcoder/transcoder.h | 18 +-- src/transcoder/transcoderoptionsaac.h | 2 + src/transcoder/transcoderoptionsasf.h | 2 + src/transcoder/transcoderoptionsflac.h | 2 + src/transcoder/transcoderoptionsinterface.h | 2 + src/transcoder/transcoderoptionsopus.h | 2 + src/transcoder/transcoderoptionsspeex.h | 2 + src/transcoder/transcoderoptionsvorbis.cpp | 6 +- src/transcoder/transcoderoptionsvorbis.h | 2 + src/transcoder/transcoderoptionswavpack.h | 2 + src/widgets/fancytabwidget.cpp | 15 ++- src/widgets/forcescrollperpixel.h | 2 + src/widgets/freespacebar.cpp | 4 +- src/widgets/freespacebar.h | 4 +- src/widgets/groupediconview.cpp | 10 +- src/widgets/groupediconview.h | 4 +- src/widgets/lineedit.h | 3 + src/widgets/loginstatewidget.cpp | 2 +- src/widgets/loginstatewidget.h | 2 +- src/widgets/multiloadingindicator.cpp | 3 +- src/widgets/qsearchfield_nonmac.cpp | 3 +- src/widgets/ratingwidget.cpp | 6 +- src/widgets/ratingwidget.h | 7 +- src/widgets/stretchheaderview.cpp | 7 ++ src/widgets/trackslider.cpp | 3 +- src/widgets/tracksliderpopup.cpp | 2 +- src/widgets/tracksliderpopup.h | 2 +- src/widgets/volumeslider.cpp | 12 +- src/widgets/volumeslider.h | 2 +- tests/src/collectionbackend_test.cpp | 10 +- tests/src/collectionmodel_test.cpp | 16 +-- tests/src/logging_env.h | 5 +- tests/src/mergedproxymodel_test.cpp | 22 ++-- tests/src/metatypes_env.h | 5 +- tests/src/mock_networkaccessmanager.cpp | 23 ++-- tests/src/mock_networkaccessmanager.h | 13 ++- tests/src/mock_playlistitem.cpp | 3 - tests/src/mock_playlistitem.h | 6 +- tests/src/mock_settingsprovider.h | 14 ++- tests/src/organizeformat_test.cpp | 2 + tests/src/playlist_test.cpp | 15 ++- tests/src/resources_env.h | 5 +- tests/src/songplaylistitem_test.cpp | 12 +- tests/src/sqlite_test.cpp | 2 + tests/src/tagreader_test.cpp | 2 + tests/src/test_utils.cpp | 18 +-- tests/src/test_utils.h | 9 +- tests/src/testobjectdecorators.cpp | 3 +- tests/src/testobjectdecorators.h | 4 +- 374 files changed, 1304 insertions(+), 900 deletions(-) create mode 100644 src/playlist/playlistlistsortfiltermodel.h diff --git a/3rdparty/singleapplication/singleapplication.cpp b/3rdparty/singleapplication/singleapplication.cpp index a4b2dfc85..1dc4c7c8a 100644 --- a/3rdparty/singleapplication/singleapplication.cpp +++ b/3rdparty/singleapplication/singleapplication.cpp @@ -236,7 +236,7 @@ QString SingleApplication::currentUser() { * @param timeout the maximum timeout in milliseconds for blocking functions. * @return true if the message was sent successfuly, false otherwise. */ -bool SingleApplication::sendMessage(QByteArray message, int timeout) { +bool SingleApplication::sendMessage(const QByteArray &message, const int timeout) { Q_D(SingleApplication); diff --git a/3rdparty/singleapplication/singleapplication.h b/3rdparty/singleapplication/singleapplication.h index 217a30b25..8a3ca290e 100644 --- a/3rdparty/singleapplication/singleapplication.h +++ b/3rdparty/singleapplication/singleapplication.h @@ -45,7 +45,7 @@ class SingleApplicationPrivate; * @brief The SingleApplication class handles multipe instances of the same Application * @see QApplication */ -class SingleApplication : public QApplication { +class SingleApplication : public QApplication { // clazy:exclude=ctor-missing-parent-argument Q_OBJECT typedef QApplication app_t; @@ -136,7 +136,7 @@ class SingleApplication : public QApplication { * @note sendMessage() will return false if invoked from the primary * instance. */ - bool sendMessage(QByteArray message, int timeout = 1000); + bool sendMessage(const QByteArray &message, const int timeout = 1000); signals: void instanceStarted(); diff --git a/3rdparty/singleapplication/singleapplication_p.cpp b/3rdparty/singleapplication/singleapplication_p.cpp index c858c2640..09ab68bd1 100644 --- a/3rdparty/singleapplication/singleapplication_p.cpp +++ b/3rdparty/singleapplication/singleapplication_p.cpp @@ -327,7 +327,7 @@ void SingleApplicationPrivate::slotConnectionEstablished() { connectionMap_.insert(nextConnSocket, ConnectionInfo()); QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, this, [nextConnSocket, this]() { - auto &info = connectionMap_[nextConnSocket]; + const ConnectionInfo info = connectionMap_[nextConnSocket]; slotClientConnectionClosed(nextConnSocket, info.instanceId); }); @@ -337,7 +337,7 @@ void SingleApplicationPrivate::slotConnectionEstablished() { }); QObject::connect(nextConnSocket, &QLocalSocket::readyRead, this, [nextConnSocket, this]() { - auto &info = connectionMap_[nextConnSocket]; + const ConnectionInfo info = connectionMap_[nextConnSocket]; switch (info.stage) { case StageHeader: readInitMessageHeader(nextConnSocket); diff --git a/3rdparty/singleapplication/singlecoreapplication.cpp b/3rdparty/singleapplication/singlecoreapplication.cpp index 75a76cded..2268622f5 100644 --- a/3rdparty/singleapplication/singlecoreapplication.cpp +++ b/3rdparty/singleapplication/singlecoreapplication.cpp @@ -236,7 +236,7 @@ QString SingleCoreApplication::currentUser() { * @param timeout the maximum timeout in milliseconds for blocking functions. * @return true if the message was sent successfuly, false otherwise. */ -bool SingleCoreApplication::sendMessage(QByteArray message, int timeout) { +bool SingleCoreApplication::sendMessage(const QByteArray &message, const int timeout) { Q_D(SingleCoreApplication); diff --git a/3rdparty/singleapplication/singlecoreapplication.h b/3rdparty/singleapplication/singlecoreapplication.h index d5f1802da..670f1a41b 100644 --- a/3rdparty/singleapplication/singlecoreapplication.h +++ b/3rdparty/singleapplication/singlecoreapplication.h @@ -135,7 +135,7 @@ class SingleCoreApplication : public QCoreApplication { * @note sendMessage() will return false if invoked from the primary * instance. */ - bool sendMessage(QByteArray message, int timeout = 1000); + bool sendMessage(const QByteArray &message, const int timeout = 1000); signals: void instanceStarted(); diff --git a/3rdparty/singleapplication/singlecoreapplication_p.cpp b/3rdparty/singleapplication/singlecoreapplication_p.cpp index ee460e1b5..67a3800ab 100644 --- a/3rdparty/singleapplication/singlecoreapplication_p.cpp +++ b/3rdparty/singleapplication/singlecoreapplication_p.cpp @@ -327,7 +327,7 @@ void SingleCoreApplicationPrivate::slotConnectionEstablished() { connectionMap_.insert(nextConnSocket, ConnectionInfo()); QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, this, [nextConnSocket, this]() { - auto &info = connectionMap_[nextConnSocket]; + const ConnectionInfo info = connectionMap_[nextConnSocket]; slotClientConnectionClosed(nextConnSocket, info.instanceId); }); @@ -337,7 +337,7 @@ void SingleCoreApplicationPrivate::slotConnectionEstablished() { }); QObject::connect(nextConnSocket, &QLocalSocket::readyRead, this, [nextConnSocket, this]() { - auto &info = connectionMap_[nextConnSocket]; + const ConnectionInfo info = connectionMap_[nextConnSocket]; switch (info.stage) { case StageHeader: readInitMessageHeader(nextConnSocket); diff --git a/ext/libstrawberry-common/CMakeLists.txt b/ext/libstrawberry-common/CMakeLists.txt index 0630f7889..540a67145 100644 --- a/ext/libstrawberry-common/CMakeLists.txt +++ b/ext/libstrawberry-common/CMakeLists.txt @@ -8,6 +8,7 @@ set(SOURCES ) set(HEADERS + core/logging.h core/messagehandler.h core/messagereply.h core/workerpool.h diff --git a/ext/libstrawberry-common/core/logging.cpp b/ext/libstrawberry-common/core/logging.cpp index 11373b6bc..c23790df2 100644 --- a/ext/libstrawberry-common/core/logging.cpp +++ b/ext/libstrawberry-common/core/logging.cpp @@ -54,10 +54,10 @@ static QMap* sClassLevels = nullptr; static QIODevice *sNullDevice = nullptr; //const char* kDefaultLogLevels = "*:3"; -const char* kDefaultLogLevels = "GstEnginePipeline:2,*:3"; +const char *kDefaultLogLevels = "GstEnginePipeline:2,*:3"; static const char *kMessageHandlerMagic = "__logging_message__"; -static const int kMessageHandlerMagicLength = strlen(kMessageHandlerMagic); +static const size_t kMessageHandlerMagicLength = strlen(kMessageHandlerMagic); static QtMessageHandler sOriginalMessageHandler = nullptr; template @@ -280,7 +280,7 @@ QString CXXDemangle(const QString &mangled_function); QString CXXDemangle(const QString &mangled_function) { int status = 0; - char* demangled_function = abi::__cxa_demangle(mangled_function.toLatin1().constData(), nullptr, nullptr, &status); + char *demangled_function = abi::__cxa_demangle(mangled_function.toLatin1().constData(), nullptr, nullptr, &status); if (status == 0) { QString ret = QString::fromLatin1(demangled_function); free(demangled_function); diff --git a/ext/libstrawberry-common/core/logging.h b/ext/libstrawberry-common/core/logging.h index 891baa8bc..b122f0e77 100644 --- a/ext/libstrawberry-common/core/logging.h +++ b/ext/libstrawberry-common/core/logging.h @@ -41,6 +41,11 @@ namespace logging { class NullDevice : public QIODevice { + Q_OBJECT + + public: + NullDevice(QObject *parent = nullptr) : QIODevice(parent) {} + protected: qint64 readData(char*, qint64) override { return -1; } qint64 writeData(const char*, qint64 len) override { return len; } diff --git a/ext/libstrawberry-common/core/workerpool.h b/ext/libstrawberry-common/core/workerpool.h index 7149cf939..3813c9fd9 100644 --- a/ext/libstrawberry-common/core/workerpool.h +++ b/ext/libstrawberry-common/core/workerpool.h @@ -164,8 +164,9 @@ WorkerPool::WorkerPool(QObject *parent) worker_count_ = qBound(1, QThread::idealThreadCount() / 2, 4); local_server_name_ = qApp->applicationName().toLower(); - if (local_server_name_.isEmpty()) + if (local_server_name_.isEmpty()) { local_server_name_ = "workerpool"; + } } diff --git a/ext/libstrawberry-tagreader/tagreader.cpp b/ext/libstrawberry-tagreader/tagreader.cpp index 31d2770f7..42fc5eb48 100644 --- a/ext/libstrawberry-tagreader/tagreader.cpp +++ b/ext/libstrawberry-tagreader/tagreader.cpp @@ -90,12 +90,17 @@ class FileRefFactory { public: + FileRefFactory() = default; virtual ~FileRefFactory() {} virtual TagLib::FileRef *GetFileRef(const QString &filename) = 0; + + private: + Q_DISABLE_COPY(FileRefFactory) }; class TagLibFileRefFactory : public FileRefFactory { public: + TagLibFileRefFactory() = default; TagLib::FileRef *GetFileRef(const QString &filename) override { #ifdef Q_OS_WIN32 return new TagLib::FileRef(filename.toStdWString().c_str()); @@ -103,6 +108,8 @@ class TagLibFileRefFactory : public FileRefFactory { return new TagLib::FileRef(QFile::encodeName(filename).constData()); #endif } + private: + Q_DISABLE_COPY(TagLibFileRefFactory) }; namespace { diff --git a/ext/strawberry-tagreader/CMakeLists.txt b/ext/strawberry-tagreader/CMakeLists.txt index 10e9be05a..a7a761f50 100644 --- a/ext/strawberry-tagreader/CMakeLists.txt +++ b/ext/strawberry-tagreader/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.0) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) set(SOURCES main.cpp tagreaderworker.cpp) +set(HEADERS tagreaderworker.h) if(BUILD_WITH_QT6) qt6_wrap_cpp(MOC ${HEADERS}) diff --git a/ext/strawberry-tagreader/tagreaderworker.h b/ext/strawberry-tagreader/tagreaderworker.h index d43819b44..f962ff021 100644 --- a/ext/strawberry-tagreader/tagreaderworker.h +++ b/ext/strawberry-tagreader/tagreaderworker.h @@ -30,6 +30,8 @@ class QIODevice; class TagReaderWorker : public AbstractMessageHandler { + Q_OBJECT + public: explicit TagReaderWorker(QIODevice *socket, QObject *parent = nullptr); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 09431dfee..31cfd4575 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -249,11 +249,13 @@ set(SOURCES set(HEADERS core/mainwindow.h core/application.h + core/appearance.h core/player.h core/database.h core/deletefiles.h core/filesystemwatcherinterface.h core/mergedproxymodel.h + core/multisortfilterproxy.h core/networkaccessmanager.h core/threadsafenetworkdiskcache.h core/networktimeouts.h @@ -261,8 +263,11 @@ set(HEADERS core/songloader.h core/tagreaderclient.h core/taskmanager.h + core/thread.h core/urlhandler.h core/standarditemiconloader.h + core/translations.h + core/potranslator.h core/mimedata.h core/stylesheetloader.h @@ -304,6 +309,7 @@ set(HEADERS playlist/playlistlistcontainer.h playlist/playlistlistmodel.h playlist/playlistlistview.h + playlist/playlistlistsortfiltermodel.h playlist/playlistmanager.h playlist/playlistsaveoptionsdialog.h playlist/playlistsequence.h @@ -324,10 +330,13 @@ set(HEADERS playlistparsers/parserbase.h playlistparsers/playlistparser.h playlistparsers/plsparser.h + playlistparsers/wplparser.h + playlistparsers/xmlparser.h playlistparsers/xspfparser.h smartplaylists/playlistgenerator.h smartplaylists/playlistgeneratorinserter.h + smartplaylists/playlistquerygenerator.h smartplaylists/playlistgeneratormimedata.h smartplaylists/smartplaylistquerywizardplugin.h smartplaylists/smartplaylistsearchpreview.h @@ -422,6 +431,7 @@ set(HEADERS widgets/loginstatewidget.h widgets/qsearchfield.h widgets/ratingwidget.h + widgets/forcescrollperpixel.h osd/osdbase.h osd/osdpretty.h @@ -429,14 +439,15 @@ set(HEADERS internet/internetservices.h internet/internetservice.h internet/internetsongmimedata.h - internet/internetsearchview.h internet/internetsearchmodel.h + internet/internetsearchsortmodel.h + internet/internetsearchitemdelegate.h + internet/internetsearchview.h internet/localredirectserver.h internet/internetsongsview.h internet/internettabsview.h internet/internetcollectionview.h internet/internetcollectionviewcontainer.h - internet/internetsearchview.h scrobbler/audioscrobbler.h scrobbler/scrobblerservices.h @@ -808,13 +819,14 @@ optional_source(HAVE_GIO HEADERS device/giolister.h ) -# mtp device +# MTP device optional_source(HAVE_LIBMTP SOURCES device/mtpconnection.cpp device/mtpdevice.cpp device/mtploader.cpp HEADERS + device/mtpconnection.h device/mtpdevice.h device/mtploader.h ) @@ -844,6 +856,14 @@ HEADERS transcoder/transcoder.h transcoder/transcodedialog.h transcoder/transcoderoptionsdialog.h + transcoder/transcoderoptionsinterface.h + transcoder/transcoderoptionsflac.h + transcoder/transcoderoptionswavpack.h + transcoder/transcoderoptionsvorbis.h + transcoder/transcoderoptionsopus.h + transcoder/transcoderoptionsspeex.h + transcoder/transcoderoptionsaac.h + transcoder/transcoderoptionsasf.h transcoder/transcoderoptionsmp3.h settings/transcodersettingspage.h UI diff --git a/src/analyzer/analyzercontainer.cpp b/src/analyzer/analyzercontainer.cpp index f1af1de37..4ee908a0b 100644 --- a/src/analyzer/analyzercontainer.cpp +++ b/src/analyzer/analyzercontainer.cpp @@ -19,6 +19,8 @@ #include "config.h" +#include + #include #include #include @@ -44,6 +46,8 @@ #include "engine/enginebase.h" #include "engine/enginetype.h" +using namespace std::chrono_literals; + const char *AnalyzerContainer::kSettingsGroup = "Analyzer"; const char *AnalyzerContainer::kSettingsFramerate = "framerate"; @@ -90,7 +94,7 @@ AnalyzerContainer::AnalyzerContainer(QWidget *parent) context_menu_->addSeparator(); double_click_timer_->setSingleShot(true); - double_click_timer_->setInterval(250); + double_click_timer_->setInterval(250ms); QObject::connect(double_click_timer_, &QTimer::timeout, this, &AnalyzerContainer::ShowPopupMenu); Load(); diff --git a/src/analyzer/blockanalyzer.cpp b/src/analyzer/blockanalyzer.cpp index 74f589795..f356b0003 100644 --- a/src/analyzer/blockanalyzer.cpp +++ b/src/analyzer/blockanalyzer.cpp @@ -248,6 +248,8 @@ QColor ensureContrast(const QColor &bg, const QColor &fg, int amount) { private: const QColor &c; + + Q_DISABLE_COPY(OutputOnExit) }; OutputOnExit allocateOnTheStack(fg); diff --git a/src/analyzer/fht.cpp b/src/analyzer/fht.cpp index e51357153..d8a72cea3 100644 --- a/src/analyzer/fht.cpp +++ b/src/analyzer/fht.cpp @@ -49,7 +49,7 @@ void FHT::makeCasTable(void) { float *sintab = tab_() + num_ / 2 + 1; for (int ul = 0; ul < num_; ul++) { - float d = M_PI * ul / (num_ / 2); + float d = M_PI * ul / (num_ / 2); // NOLINT(bugprone-integer-division) *costab = *sintab = cos(d); costab += 2; diff --git a/src/analyzer/rainbowanalyzer.cpp b/src/analyzer/rainbowanalyzer.cpp index df9797751..ea7cf8a8a 100644 --- a/src/analyzer/rainbowanalyzer.cpp +++ b/src/analyzer/rainbowanalyzer.cpp @@ -56,7 +56,7 @@ const float Rainbow::RainbowAnalyzer::kPixelScale = 0.02f; Rainbow::RainbowAnalyzer::RainbowType Rainbow::RainbowAnalyzer::rainbowtype; -Rainbow::RainbowAnalyzer::RainbowAnalyzer(const RainbowType &rbtype, QWidget *parent) +Rainbow::RainbowAnalyzer::RainbowAnalyzer(const RainbowType rbtype, QWidget *parent) : Analyzer::Base(parent, 9), timer_id_(startTimer(kFrameIntervalMs)), frame_(0), @@ -73,7 +73,7 @@ Rainbow::RainbowAnalyzer::RainbowAnalyzer(const RainbowType &rbtype, QWidget *pa memset(history_, 0, sizeof(history_)); for (int i = 0; i < kRainbowBands; ++i) { - colors_[i] = QPen(QColor::fromHsv(i * 255 / kRainbowBands, 255, 255), kRainbowHeight[rainbowtype] / kRainbowBands, Qt::SolidLine, Qt::FlatCap, Qt::RoundJoin); + colors_[i] = QPen(QColor::fromHsv(i * 255 / kRainbowBands, 255, 255), kRainbowHeight[rainbowtype] / kRainbowBands, Qt::SolidLine, Qt::FlatCap, Qt::RoundJoin); // NOLINT(bugprone-integer-division) // pow constants computed so that // | band_scale(0) | ~= .5 and | band_scale(5) | ~= 32 diff --git a/src/analyzer/rainbowanalyzer.h b/src/analyzer/rainbowanalyzer.h index c5e9309e7..0d6c484b8 100644 --- a/src/analyzer/rainbowanalyzer.h +++ b/src/analyzer/rainbowanalyzer.h @@ -50,7 +50,7 @@ class RainbowAnalyzer : public Analyzer::Base { Dash = 1 }; - RainbowAnalyzer(const RainbowType &rbtype, QWidget *parent); + RainbowAnalyzer(const RainbowType rbtype, QWidget *parent); protected: void transform(Analyzer::Scope&) override; diff --git a/src/collection/collection.cpp b/src/collection/collection.cpp index 2bdc7f077..55c871a46 100644 --- a/src/collection/collection.cpp +++ b/src/collection/collection.cpp @@ -133,7 +133,7 @@ void SCollection::Exit() { void SCollection::ExitReceived() { - QObject *obj = qobject_cast(sender()); + QObject *obj = sender(); QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully exited."; wait_for_exit_.removeAll(obj); diff --git a/src/collection/collectionbackend.cpp b/src/collection/collectionbackend.cpp index 419834549..91cd9c6d0 100644 --- a/src/collection/collectionbackend.cpp +++ b/src/collection/collectionbackend.cpp @@ -768,7 +768,8 @@ SongList CollectionBackend::GetSongsById(const QList &ids) { QSqlDatabase db(db_->Connect()); QStringList str_ids; - for (int id : ids) { + str_ids.reserve(ids.count()); + for (const int id : ids) { str_ids << QString::number(id); } @@ -915,6 +916,7 @@ Song CollectionBackend::GetSongBySongId(const QString &song_id, QSqlDatabase &db SongList CollectionBackend::GetSongsBySongId(const QStringList &song_ids, QSqlDatabase &db) { QStringList song_ids2; + song_ids2.reserve(song_ids.count()); for (const QString &song_id : song_ids) { song_ids2 << "'" + song_id + "'"; } @@ -1164,7 +1166,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist, } - return albums.values(); + return albums.values(); // clazy:exclude=qt6-deprecated-api-fixes } @@ -1570,6 +1572,7 @@ void CollectionBackend::UpdateSongsRating(const QList &id_list, const doubl QSqlDatabase db(db_->Connect()); QStringList id_str_list; + id_str_list.reserve(id_list.count()); for (int i : id_list) { id_str_list << QString::number(i); } diff --git a/src/collection/collectionfilterwidget.cpp b/src/collection/collectionfilterwidget.cpp index 26da43b14..9b802ca09 100644 --- a/src/collection/collectionfilterwidget.cpp +++ b/src/collection/collectionfilterwidget.cpp @@ -255,7 +255,7 @@ QActionGroup *CollectionFilterWidget::CreateGroupByActions(QObject *parent) { } -QAction *CollectionFilterWidget::CreateGroupByAction(const QString &text, QObject *parent, const CollectionModel::Grouping &grouping) { +QAction *CollectionFilterWidget::CreateGroupByAction(const QString &text, QObject *parent, const CollectionModel::Grouping grouping) { QAction *ret = new QAction(text, parent); ret->setCheckable(true); @@ -354,7 +354,7 @@ void CollectionFilterWidget::GroupByClicked(QAction *action) { } -void CollectionFilterWidget::GroupingChanged(const CollectionModel::Grouping &g) { +void CollectionFilterWidget::GroupingChanged(const CollectionModel::Grouping g) { if (!settings_group_.isEmpty()) { // Save the settings @@ -372,7 +372,7 @@ void CollectionFilterWidget::GroupingChanged(const CollectionModel::Grouping &g) } -void CollectionFilterWidget::CheckCurrentGrouping(const CollectionModel::Grouping &g) { +void CollectionFilterWidget::CheckCurrentGrouping(CollectionModel::Grouping g) { for (QAction *action : group_by_group_->actions()) { if (action->property("group_by").isNull()) continue; diff --git a/src/collection/collectionfilterwidget.h b/src/collection/collectionfilterwidget.h index f190ed45f..c3109ecc3 100644 --- a/src/collection/collectionfilterwidget.h +++ b/src/collection/collectionfilterwidget.h @@ -96,7 +96,7 @@ class CollectionFilterWidget : public QWidget { void keyReleaseEvent(QKeyEvent *e) override; private slots: - void GroupingChanged(const CollectionModel::Grouping &g); + void GroupingChanged(const CollectionModel::Grouping g); void GroupByClicked(QAction *action); void SaveGroupBy(); void ShowGroupingManager(); @@ -105,8 +105,8 @@ class CollectionFilterWidget : public QWidget { void FilterDelayTimeout(); private: - static QAction *CreateGroupByAction(const QString &text, QObject *parent, const CollectionModel::Grouping &grouping); - void CheckCurrentGrouping(const CollectionModel::Grouping &g); + static QAction *CreateGroupByAction(const QString &text, QObject *parent, const CollectionModel::Grouping grouping); + void CheckCurrentGrouping(CollectionModel::Grouping g); private: Ui_CollectionFilterWidget *ui_; diff --git a/src/collection/collectionitem.h b/src/collection/collectionitem.h index 0c47ae9f1..3cb9e19c9 100644 --- a/src/collection/collectionitem.h +++ b/src/collection/collectionitem.h @@ -50,6 +50,9 @@ class CollectionItem : public SimpleTreeItem { int container_level; Song metadata; CollectionItem *compilation_artist_node_; + + private: + Q_DISABLE_COPY(CollectionItem) }; #endif // COLLECTIONITEM_H diff --git a/src/collection/collectionitemdelegate.cpp b/src/collection/collectionitemdelegate.cpp index a1275087b..e3d9a8a40 100644 --- a/src/collection/collectionitemdelegate.cpp +++ b/src/collection/collectionitemdelegate.cpp @@ -125,10 +125,9 @@ bool CollectionItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *vie if (!event || !view) return false; - QHelpEvent *he = static_cast(event); QString text = displayText(idx.data(), QLocale::system()); - if (text.isEmpty() || !he) return false; + if (text.isEmpty() || !event) return false; switch (event->type()) { case QEvent::ToolTip: { @@ -138,12 +137,12 @@ bool CollectionItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *vie bool is_elided = displayed_text.width() < real_text.width(); if (is_elided) { - QToolTip::showText(he->globalPos(), text, view); + QToolTip::showText(event->globalPos(), text, view); } else if (idx.data(Qt::ToolTipRole).isValid()) { // If the item has a tooltip text, display it QString tooltip_text = idx.data(Qt::ToolTipRole).toString(); - QToolTip::showText(he->globalPos(), tooltip_text, view); + QToolTip::showText(event->globalPos(), tooltip_text, view); } else { // in case that another text was previously displayed @@ -156,7 +155,7 @@ bool CollectionItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *vie return true; case QEvent::WhatsThis: - QWhatsThis::showText(he->globalPos(), text, view); + QWhatsThis::showText(event->globalPos(), text, view); return true; default: diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index d02a6aba8..501fcb91d 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -159,7 +159,7 @@ void CollectionModel::set_show_dividers(const bool show_dividers) { } -void CollectionModel::SaveGrouping(QString name) { +void CollectionModel::SaveGrouping(const QString &name) { qLog(Debug) << "Model, save to: " << name; @@ -571,7 +571,7 @@ void CollectionModel::SongsDeleted(const SongList &songs) { QMap::iterator i = pending_art_.begin(); while (i != pending_art_.end()) { if (i.value().first == node) { - i = pending_art_.erase(i); + i = pending_art_.erase(i); // clazy:exclude=strict-iterators } else { ++i; @@ -1846,7 +1846,7 @@ bool CollectionModel::canFetchMore(const QModelIndex &parent) const { } -void CollectionModel::SetGroupBy(const Grouping &g) { +void CollectionModel::SetGroupBy(const Grouping g) { group_by_ = g; @@ -1916,7 +1916,7 @@ void CollectionModel::ExpandAll(CollectionItem *item) const { } -QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping &g) { +QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping g) { s << quint32(g.first) << quint32(g.second) << quint32(g.third); return s; } diff --git a/src/collection/collectionmodel.h b/src/collection/collectionmodel.h index 41303335b..93b02ec2a 100644 --- a/src/collection/collectionmodel.h +++ b/src/collection/collectionmodel.h @@ -60,7 +60,7 @@ class CollectionDirectoryModel; class CollectionModel : public SimpleTreeModel { Q_OBJECT - Q_ENUMS(GroupBy) + Q_ENUMS(GroupBy) // clazy:exclude=qenums public: explicit CollectionModel(CollectionBackend *backend, Application *app, QObject *parent = nullptr); @@ -118,10 +118,10 @@ class CollectionModel : public SimpleTreeModel { const GroupBy &operator[](const int i) const; GroupBy &operator[](const int i); - bool operator==(const Grouping &other) const { + bool operator==(const Grouping other) const { return first == other.first && second == other.second && third == other.third; } - bool operator!=(const Grouping &other) const { return !(*this == other); } + bool operator!=(const Grouping other) const { return !(*this == other); } }; struct QueryResult { @@ -162,7 +162,7 @@ class CollectionModel : public SimpleTreeModel { void set_show_dividers(const bool show_dividers); // Save the current grouping - void SaveGrouping(QString name); + void SaveGrouping(const QString &name); // Reload settings. void ReloadSettings(); @@ -195,8 +195,8 @@ class CollectionModel : public SimpleTreeModel { void ExpandAll(CollectionItem *item = nullptr) const; - const CollectionModel::Grouping &GetGroupBy() const { return group_by_; } - void SetGroupBy(const CollectionModel::Grouping &g); + const CollectionModel::Grouping GetGroupBy() const { return group_by_; } + void SetGroupBy(const CollectionModel::Grouping g); signals: void TotalSongCountUpdated(int count); @@ -317,7 +317,7 @@ class CollectionModel : public SimpleTreeModel { Q_DECLARE_METATYPE(CollectionModel::Grouping) -QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping &g); +QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping g); QDataStream &operator>>(QDataStream &s, CollectionModel::Grouping &g); #endif // COLLECTIONMODEL_H diff --git a/src/collection/collectionplaylistitem.h b/src/collection/collectionplaylistitem.h index ec71bf641..f64c84874 100644 --- a/src/collection/collectionplaylistitem.h +++ b/src/collection/collectionplaylistitem.h @@ -56,6 +56,9 @@ class CollectionPlaylistItem : public PlaylistItem { protected: Song song_; + + private: + Q_DISABLE_COPY(CollectionPlaylistItem) }; #endif // COLLECTIONPLAYLISTITEM_H diff --git a/src/collection/collectionquery.cpp b/src/collection/collectionquery.cpp index f1044c941..447eaa0cf 100644 --- a/src/collection/collectionquery.cpp +++ b/src/collection/collectionquery.cpp @@ -134,8 +134,10 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con // Ignore 'literal' for IN if (!op.compare("IN", Qt::CaseInsensitive)) { + QStringList values = value.toStringList(); QStringList final; - for (const QString &single_value : value.toStringList()) { + final.reserve(values.count()); + for (const QString &single_value : values) { final.append("?"); bound_values_ << single_value; } diff --git a/src/collection/collectionview.cpp b/src/collection/collectionview.cpp index 2280532b8..74151ef3c 100644 --- a/src/collection/collectionview.cpp +++ b/src/collection/collectionview.cpp @@ -564,13 +564,16 @@ SongList CollectionView::GetSelectedSongs() const { void CollectionView::Organize() { - if (!organize_dialog_) + if (!organize_dialog_) { organize_dialog_.reset(new OrganizeDialog(app_->task_manager(), app_->collection_backend(), this)); + } organize_dialog_->SetDestinationModel(app_->collection_model()->directory_model()); organize_dialog_->SetCopy(false); - if (organize_dialog_->SetSongs(GetSelectedSongs())) + const SongList songs = GetSelectedSongs(); + if (organize_dialog_->SetSongs(songs)) { organize_dialog_->show(); + } else { QMessageBox::warning(this, tr("Error"), tr("None of the selected songs were suitable for copying to a device")); } @@ -583,7 +586,8 @@ void CollectionView::EditTracks() { edit_tag_dialog_.reset(new EditTagDialog(app_, this)); QObject::connect(edit_tag_dialog_.get(), &EditTagDialog::Error, this, &CollectionView::EditTagError); } - edit_tag_dialog_->SetSongs(GetSelectedSongs()); + const SongList songs = GetSelectedSongs(); + edit_tag_dialog_->SetSongs(songs); edit_tag_dialog_->show(); } @@ -634,6 +638,7 @@ void CollectionView::ShowInBrowser() { SongList songs = GetSelectedSongs(); QList urls; + urls.reserve(songs.count()); for (const Song &song : songs) { urls << song.url(); } @@ -658,6 +663,7 @@ void CollectionView::Delete() { SongList selected_songs = GetSelectedSongs(); QStringList files; + files.reserve(selected_songs.count()); for (const Song &song : selected_songs) { files << song.url().toString(); } diff --git a/src/collection/collectionwatcher.cpp b/src/collection/collectionwatcher.cpp index 214a37f4d..9ed4bc830 100644 --- a/src/collection/collectionwatcher.cpp +++ b/src/collection/collectionwatcher.cpp @@ -21,6 +21,7 @@ #include "config.h" +#include #include #include @@ -65,6 +66,8 @@ #undef RemoveDirectory #endif +using namespace std::chrono_literals; + namespace { static const char *kNoMediaFile = ".nomedia"; static const char *kNoMusicFile = ".nomusic"; @@ -95,7 +98,7 @@ CollectionWatcher::CollectionWatcher(Song::Source source, QObject *parent) original_thread_ = thread(); - rescan_timer_->setInterval(2000); + rescan_timer_->setInterval(2s); rescan_timer_->setSingleShot(true); periodic_scan_timer_->setInterval(86400 * kMsecPerSec); @@ -789,6 +792,7 @@ SongList CollectionWatcher::ScanNewFile(const QString &file, const QString &path // Playlist parser for CUEs considers every entry in sheet valid and we don't want invalid media getting into collection! QString file_nfd = file.normalized(QString::NormalizationForm_D); SongList cue_congs = cue_parser_->Load(&cue_file, matching_cue, path, false); + songs.reserve(cue_congs.count()); for (Song &cue_song : cue_congs) { cue_song.set_source(source_); cue_song.set_fingerprint(fingerprint); diff --git a/src/collection/groupbydialog.cpp b/src/collection/groupbydialog.cpp index 86ecb2f09..38c3ae9a2 100644 --- a/src/collection/groupbydialog.cpp +++ b/src/collection/groupbydialog.cpp @@ -122,7 +122,7 @@ void GroupByDialog::accept() { QDialog::accept(); } -void GroupByDialog::CollectionGroupingChanged(const CollectionModel::Grouping &g) { +void GroupByDialog::CollectionGroupingChanged(const CollectionModel::Grouping g) { ui_->combobox_first->setCurrentIndex(p_->mapping_.get().find(g[0])->combo_box_index); ui_->combobox_second->setCurrentIndex(p_->mapping_.get().find(g[1])->combo_box_index); ui_->combobox_third->setCurrentIndex(p_->mapping_.get().find(g[2])->combo_box_index); diff --git a/src/collection/groupbydialog.h b/src/collection/groupbydialog.h index 4cfae68ab..3a0d7428c 100644 --- a/src/collection/groupbydialog.h +++ b/src/collection/groupbydialog.h @@ -45,7 +45,7 @@ class GroupByDialog : public QDialog { ~GroupByDialog() override; public slots: - void CollectionGroupingChanged(const CollectionModel::Grouping &g); + void CollectionGroupingChanged(const CollectionModel::Grouping g); void accept() override; signals: diff --git a/src/collection/savedgroupingmanager.cpp b/src/collection/savedgroupingmanager.cpp index 5a5bbb31b..b5b33cd11 100644 --- a/src/collection/savedgroupingmanager.cpp +++ b/src/collection/savedgroupingmanager.cpp @@ -73,7 +73,7 @@ SavedGroupingManager::~SavedGroupingManager() { delete model_; } -QString SavedGroupingManager::GroupByToString(const CollectionModel::GroupBy &g) { +QString SavedGroupingManager::GroupByToString(const CollectionModel::GroupBy g) { switch (g) { case CollectionModel::GroupBy_None: diff --git a/src/collection/savedgroupingmanager.h b/src/collection/savedgroupingmanager.h index 3f42e0ffc..3da213f83 100644 --- a/src/collection/savedgroupingmanager.h +++ b/src/collection/savedgroupingmanager.h @@ -46,7 +46,7 @@ class SavedGroupingManager : public QDialog { void UpdateModel(); void SetFilter(CollectionFilterWidget *filter) { filter_ = filter; } - static QString GroupByToString(const CollectionModel::GroupBy &g); + static QString GroupByToString(const CollectionModel::GroupBy g); private slots: void UpdateButtonState(); diff --git a/src/context/contextalbumsview.cpp b/src/context/contextalbumsview.cpp index ab076d5b8..c5586ffb5 100644 --- a/src/context/contextalbumsview.cpp +++ b/src/context/contextalbumsview.cpp @@ -71,10 +71,9 @@ bool ContextItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, if (!event || !view) return false; - QHelpEvent *he = static_cast(event); QString text = displayText(idx.data(), QLocale::system()); - if (text.isEmpty() || !he) return false; + if (text.isEmpty() || !event) return false; switch (event->type()) { case QEvent::ToolTip: { @@ -84,12 +83,12 @@ bool ContextItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, bool is_elided = displayed_text.width() < real_text.width(); if (is_elided) { - QToolTip::showText(he->globalPos(), text, view); + QToolTip::showText(event->globalPos(), text, view); } else if (idx.data(Qt::ToolTipRole).isValid()) { // If the item has a tooltip text, display it QString tooltip_text = idx.data(Qt::ToolTipRole).toString(); - QToolTip::showText(he->globalPos(), tooltip_text, view); + QToolTip::showText(event->globalPos(), tooltip_text, view); } else { // in case that another text was previously displayed @@ -102,7 +101,7 @@ bool ContextItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, return true; case QEvent::WhatsThis: - QWhatsThis::showText(he->globalPos(), text, view); + QWhatsThis::showText(event->globalPos(), text, view); return true; default: @@ -408,8 +407,10 @@ void ContextAlbumsView::CopyToDevice() { void ContextAlbumsView::ShowInBrowser() { + const SongList songs = GetSelectedSongs(); QList urls; - for (const Song &song : GetSelectedSongs()) { + urls.reserve(songs.count()); + for (const Song &song : songs) { urls << song.url(); } diff --git a/src/core/appearance.h b/src/core/appearance.h index 2227c8fa1..e14766445 100644 --- a/src/core/appearance.h +++ b/src/core/appearance.h @@ -28,6 +28,8 @@ #include class Appearance : public QObject { + Q_OBJECT + public: explicit Appearance(QObject *parent = nullptr); diff --git a/src/core/application.cpp b/src/core/application.cpp index 381de0f08..3fe594dbd 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -25,6 +25,7 @@ #include "application.h" #include +#include #include #include @@ -90,6 +91,8 @@ # include "moodbar/moodbarloader.h" #endif +using namespace std::chrono_literals; + class ApplicationImpl { public: explicit ApplicationImpl(Application *app) : @@ -102,7 +105,7 @@ class ApplicationImpl { database_([=]() { Database *db = new Database(app, app); app->MoveToNewThread(db); - QTimer::singleShot(30000, db, &Database::DoBackup); + QTimer::singleShot(30s, db, &Database::DoBackup); return db; }), appearance_([=]() { return new Appearance(app); }), @@ -288,7 +291,7 @@ void Application::Exit() { void Application::ExitReceived() { - QObject *obj = static_cast(sender()); + QObject *obj = sender(); QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully exited."; diff --git a/src/core/commandlineoptions.cpp b/src/core/commandlineoptions.cpp index a2eea256a..2605caa7e 100644 --- a/src/core/commandlineoptions.cpp +++ b/src/core/commandlineoptions.cpp @@ -362,7 +362,7 @@ void CommandlineOptions::Load(const QByteArray &serialized) { } QString CommandlineOptions::tr(const char *source_text) { - return QObject::tr(source_text); + return QObject::tr(source_text); // clazy:exclude=tr-non-literal } QDataStream &operator<<(QDataStream &s, const CommandlineOptions &a) { diff --git a/src/core/database.cpp b/src/core/database.cpp index 3db8bebee..b248fb6ae 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -487,7 +487,7 @@ bool Database::CheckErrors(const QSqlQuery &query) { } -bool Database::IntegrityCheck(QSqlDatabase db) { +bool Database::IntegrityCheck(const QSqlDatabase &db) { qLog(Debug) << "Starting database integrity check"; int task_id = app_->task_manager()->StartTask(tr("Integrity check")); @@ -559,7 +559,7 @@ void Database::BackupFile(const QString &filename) { sqlite3 *source_connection = nullptr; sqlite3 *dest_connection = nullptr; - BOOST_SCOPE_EXIT((&source_connection)(&dest_connection)(task_id)(app_)) { + BOOST_SCOPE_EXIT((&source_connection)(&dest_connection)(task_id)(app_)) { // clazy:exclude=rule-of-three NOLINT(google-explicit-constructor) // Harmless to call sqlite3_close() with a nullptr pointer. sqlite3_close(source_connection); sqlite3_close(dest_connection); diff --git a/src/core/database.h b/src/core/database.h index b57223d9f..7dff069e9 100644 --- a/src/core/database.h +++ b/src/core/database.h @@ -103,7 +103,7 @@ class Database : public QObject { void UpdateDatabaseSchema(int version, QSqlDatabase &db); void UrlEncodeFilenameColumn(const QString &table, QSqlDatabase &db); QStringList SongsTables(QSqlDatabase &db, int schema_version) const; - bool IntegrityCheck(QSqlDatabase db); + bool IntegrityCheck(const QSqlDatabase &db); void BackupFile(const QString &filename); bool OpenDatabase(const QString &filename, sqlite3 **connection) const; @@ -140,6 +140,8 @@ class Database : public QObject { }; class MemoryDatabase : public Database { + Q_OBJECT + public: explicit MemoryDatabase(Application *app, QObject *parent = nullptr) : Database(app, parent, ":memory:") {} diff --git a/src/core/deletefiles.cpp b/src/core/deletefiles.cpp index 56852dde4..3ec4326e9 100644 --- a/src/core/deletefiles.cpp +++ b/src/core/deletefiles.cpp @@ -35,8 +35,9 @@ const int DeleteFiles::kBatchSize = 50; -DeleteFiles::DeleteFiles(TaskManager *task_manager, std::shared_ptr storage, const bool use_trash) - : thread_(nullptr), +DeleteFiles::DeleteFiles(TaskManager *task_manager, std::shared_ptr storage, const bool use_trash, QObject *parent) + : QObject(parent), + thread_(nullptr), task_manager_(task_manager), storage_(storage), use_trash_(use_trash), @@ -68,6 +69,7 @@ void DeleteFiles::Start(const SongList &songs) { void DeleteFiles::Start(const QStringList &filenames) { SongList songs; + songs.reserve(filenames.count()); for (const QString &filename : filenames) { Song song; song.set_url(QUrl::fromLocalFile(filename)); diff --git a/src/core/deletefiles.h b/src/core/deletefiles.h index 0bfd52346..6533c20dd 100644 --- a/src/core/deletefiles.h +++ b/src/core/deletefiles.h @@ -39,7 +39,7 @@ class DeleteFiles : public QObject { Q_OBJECT public: - explicit DeleteFiles(TaskManager *task_manager, std::shared_ptr storage, const bool use_trash); + explicit DeleteFiles(TaskManager *task_manager, std::shared_ptr storage, const bool use_trash, QObject *parent = nullptr); ~DeleteFiles() override; static const int kBatchSize; diff --git a/src/core/filesystemmusicstorage.h b/src/core/filesystemmusicstorage.h index 53bb02d78..27cda1a2c 100644 --- a/src/core/filesystemmusicstorage.h +++ b/src/core/filesystemmusicstorage.h @@ -39,6 +39,8 @@ class FilesystemMusicStorage : public virtual MusicStorage { private: QString root_; + + Q_DISABLE_COPY(FilesystemMusicStorage) }; #endif // FILESYSTEMMUSICSTORAGE_H diff --git a/src/core/iconmapper.h b/src/core/iconmapper.h index 54ef6ce82..b9149306b 100644 --- a/src/core/iconmapper.h +++ b/src/core/iconmapper.h @@ -35,7 +35,7 @@ struct IconProperties { bool allow_system_icon; }; -static const QMap iconmapper_ = { +static const QMap iconmapper_ = { // clazy:exclude=non-pod-global-static { "albums", { {"media-optical"}} }, { "alsa", { {}} }, diff --git a/src/core/mac_startup.h b/src/core/mac_startup.h index 8720643c2..331899f74 100644 --- a/src/core/mac_startup.h +++ b/src/core/mac_startup.h @@ -13,11 +13,15 @@ class GlobalShortcutsBackendMacOS; class PlatformInterface { public: + PlatformInterface() = default; + virtual ~PlatformInterface() {} + // Called when the application should show itself. virtual void Activate() = 0; virtual bool LoadUrl(const QString &url) = 0; - virtual ~PlatformInterface() {} + private: + Q_DISABLE_COPY(PlatformInterface) }; namespace mac { diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index c5c7ee531..436002371 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -1745,7 +1745,7 @@ void MainWindow::PlaylistMenuHidden() { } -void MainWindow::PlaylistRightClick(const QPoint &global_pos, const QModelIndex &index) { +void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &index) { QModelIndex source_index = index; if (index.model() == app_->playlist_manager()->current()->proxy()) { @@ -2148,6 +2148,7 @@ void MainWindow::AddFile() { // Convert to URLs QList urls; + urls.reserve(file_names.count()); for (const QString &path : file_names) { urls << QUrl::fromLocalFile(QFileInfo(path).canonicalFilePath()); } @@ -2550,6 +2551,7 @@ void MainWindow::CopyFilesToDevice(const QList &urls) { void MainWindow::EditFileTags(const QList &urls) { SongList songs; + songs.reserve(urls.count()); for (const QUrl &url : urls) { Song song; song.set_url(url); @@ -2628,8 +2630,10 @@ void MainWindow::PlaylistCopyUrl() { void MainWindow::PlaylistQueue() { + const QModelIndexList selected_rows = ui_->playlist->view()->selectionModel()->selectedRows(); QModelIndexList indexes; - for (const QModelIndex &proxy_index : ui_->playlist->view()->selectionModel()->selectedRows()) { + indexes.reserve(selected_rows.count()); + for (const QModelIndex &proxy_index : selected_rows) { indexes << app_->playlist_manager()->current()->proxy()->mapToSource(proxy_index); } @@ -2639,8 +2643,10 @@ void MainWindow::PlaylistQueue() { void MainWindow::PlaylistQueuePlayNext() { + QModelIndexList selected_rows = ui_->playlist->view()->selectionModel()->selectedRows(); QModelIndexList indexes; - for (const QModelIndex &proxy_index : ui_->playlist->view()->selectionModel()->selectedRows()) { + indexes.reserve(selected_rows.count()); + for (const QModelIndex &proxy_index : selected_rows) { indexes << app_->playlist_manager()->current()->proxy()->mapToSource(proxy_index); } @@ -2650,9 +2656,10 @@ void MainWindow::PlaylistQueuePlayNext() { void MainWindow::PlaylistSkip() { + const QModelIndexList selected_rows = ui_->playlist->view()->selectionModel()->selectedRows(); QModelIndexList indexes; - - for (const QModelIndex &proxy_index : ui_->playlist->view()->selectionModel()->selectedRows()) { + indexes.reserve(selected_rows.count()); + for (const QModelIndex &proxy_index : selected_rows) { indexes << app_->playlist_manager()->current()->proxy()->mapToSource(proxy_index); } @@ -2904,7 +2911,7 @@ void MainWindow::AutoCompleteTagsAccepted() { } -void MainWindow::HandleNotificationPreview(OSDBase::Behaviour type, QString line1, QString line2) { +void MainWindow::HandleNotificationPreview(const OSDBase::Behaviour type, const QString &line1, const QString &line2) { if (!app_->playlist_manager()->current()->GetAllSongs().isEmpty()) { // Show a preview notification for the first song in the current playlist diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 95b2f9cab..9dc660a9c 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -149,7 +149,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { void ForceShowOSD(const Song &song, const bool toggle); void PlaylistMenuHidden(); - void PlaylistRightClick(const QPoint &global_pos, const QModelIndex &idx); + void PlaylistRightClick(const QPoint global_pos, const QModelIndex &idx); void PlaylistCurrentChanged(const QModelIndex ¤t); void PlaylistViewSelectionModelChanged(); void PlaylistPlay(); @@ -246,7 +246,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { void Exit(); void DoExit(); - void HandleNotificationPreview(const OSDBase::Behaviour type, QString line1, QString line2); + void HandleNotificationPreview(const OSDBase::Behaviour type, const QString &line1, const QString &line2); void ShowConsole(); diff --git a/src/core/mergedproxymodel.cpp b/src/core/mergedproxymodel.cpp index 3749d9180..3924be0e8 100644 --- a/src/core/mergedproxymodel.cpp +++ b/src/core/mergedproxymodel.cpp @@ -53,7 +53,7 @@ using boost::multi_index::multi_index_container; using boost::multi_index::ordered_unique; using boost::multi_index::tag; -std::size_t hash_value(const QModelIndex &idx) { return qHash(idx); } +size_t hash_value(const QModelIndex &idx) { return qHash(idx); } namespace { @@ -543,6 +543,7 @@ bool MergedProxyModel::IsKnownModel(const QAbstractItemModel *model) const { QModelIndexList MergedProxyModel::mapFromSource(const QModelIndexList &source_indexes) const { QModelIndexList ret; + ret.reserve(source_indexes.count()); for (const QModelIndex &idx : source_indexes) { ret << mapFromSource(idx); } @@ -553,6 +554,7 @@ QModelIndexList MergedProxyModel::mapFromSource(const QModelIndexList &source_in QModelIndexList MergedProxyModel::mapToSource(const QModelIndexList &proxy_indexes) const { QModelIndexList ret; + ret.reserve(proxy_indexes.count()); for (const QModelIndex &idx : proxy_indexes) { ret << mapToSource(idx); } diff --git a/src/core/mimedata.h b/src/core/mimedata.h index e16e39ace..d3233fb5b 100644 --- a/src/core/mimedata.h +++ b/src/core/mimedata.h @@ -31,7 +31,7 @@ class MimeData : public QMimeData { Q_OBJECT public: - explicit MimeData(bool clear = false, bool play_now = false, bool enqueue = false, bool enqueue_next_now = false, bool open_in_new_playlist = false) + explicit MimeData(const bool clear = false, const bool play_now = false, const bool enqueue = false, const bool enqueue_next_now = false, const bool open_in_new_playlist = false, QObject* = nullptr) : override_user_settings_(false), clear_first_(clear), play_now_(play_now), diff --git a/src/core/mpris2.cpp b/src/core/mpris2.cpp index 3e9eff5c2..8528f6d80 100644 --- a/src/core/mpris2.cpp +++ b/src/core/mpris2.cpp @@ -143,7 +143,7 @@ Mpris2::Mpris2(Application *app, QObject *parent) desktop_files_ << QCoreApplication::applicationName().toLower(); desktop_file_ = desktop_files_.first(); - data_dirs_ = QString(getenv("XDG_DATA_DIRS")).split(":"); + data_dirs_ = QString(qgetenv("XDG_DATA_DIRS")).split(":"); data_dirs_.append("/usr/local/share"); data_dirs_.append("/usr/share"); @@ -208,17 +208,17 @@ void Mpris2::EmitNotification(const QString &name, const QVariant &val, const QS void Mpris2::EmitNotification(const QString &name) { QVariant value; - if (name == "PlaybackStatus") value = PlaybackStatus(); - else if (name == "LoopStatus") value = LoopStatus(); - else if (name == "Shuffle") value = Shuffle(); - else if (name == "Metadata") value = Metadata(); - else if (name == "Volume") value = Volume(); - else if (name == "Position") value = Position(); - else if (name == "CanPlay") value = CanPlay(); - else if (name == "CanPause") value = CanPause(); - else if (name == "CanSeek") value = CanSeek(); - else if (name == "CanGoNext") value = CanGoNext(); - else if (name == "CanGoPrevious") value = CanGoPrevious(); + if (name == "PlaybackStatus") value = PlaybackStatus(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "LoopStatus") value = LoopStatus(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "Shuffle") value = Shuffle(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "Metadata") value = Metadata(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "Volume") value = Volume(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "Position") value = Position(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "CanPlay") value = CanPlay(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "CanPause") value = CanPause(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "CanSeek") value = CanSeek(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "CanGoNext") value = CanGoNext(); // clazy:exclude=qt6-deprecated-api-fixes + else if (name == "CanGoPrevious") value = CanGoPrevious(); // clazy:exclude=qt6-deprecated-api-fixes if (value.isValid()) EmitNotification(name, value); @@ -594,8 +594,10 @@ MprisPlaylistList Mpris2::GetPlaylists(quint32 index, quint32 max_count, const Q Q_UNUSED(order); + QList playlists = app_->playlist_manager()->GetAllPlaylists(); MprisPlaylistList ret; - for (Playlist *p : app_->playlist_manager()->GetAllPlaylists()) { + ret.reserve(playlists.count()); + for (Playlist *p : playlists) { MprisPlaylist mpris_playlist; mpris_playlist.id = MakePlaylistPath(p->id()); mpris_playlist.name = app_->playlist_manager()->GetPlaylistName(p->id()); diff --git a/src/core/mpris_common.h b/src/core/mpris_common.h index 2832452a0..585d95c80 100644 --- a/src/core/mpris_common.h +++ b/src/core/mpris_common.h @@ -32,27 +32,27 @@ namespace mpris { inline void AddMetadata(const QString &key, const QString &metadata, QVariantMap *map) { - if (!metadata.isEmpty()) (*map)[key] = metadata; + if (!metadata.isEmpty()) (*map)[key] = metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline void AddMetadataAsList(const QString &key, const QString &metadata, QVariantMap *map) { - if (!metadata.isEmpty()) (*map)[key] = QStringList() << metadata; + if (!metadata.isEmpty()) (*map)[key] = QStringList() << metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline void AddMetadata(const QString &key, int metadata, QVariantMap *map) { - if (metadata > 0) (*map)[key] = metadata; + if (metadata > 0) (*map)[key] = metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline void AddMetadata(const QString &key, qint64 metadata, QVariantMap *map) { - if (metadata > 0) (*map)[key] = metadata; + if (metadata > 0) (*map)[key] = metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline void AddMetadata(const QString &key, double metadata, QVariantMap *map) { - if (metadata != 0.0) (*map)[key] = metadata; + if (metadata != 0.0) (*map)[key] = metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline void AddMetadata(const QString &key, const QDateTime &metadata, QVariantMap *map) { - if (metadata.isValid()) (*map)[key] = metadata; + if (metadata.isValid()) (*map)[key] = metadata; // clazy:exclude=qt6-deprecated-api-fixes } inline QString AsMPRISDateTimeType(const qint64 time) { diff --git a/src/core/multisortfilterproxy.h b/src/core/multisortfilterproxy.h index e010cddcc..d8d57d704 100644 --- a/src/core/multisortfilterproxy.h +++ b/src/core/multisortfilterproxy.h @@ -31,6 +31,8 @@ class QObject; class MultiSortFilterProxy : public QSortFilterProxyModel { + Q_OBJECT + public: explicit MultiSortFilterProxy(QObject *parent = nullptr); diff --git a/src/core/musicstorage.h b/src/core/musicstorage.h index 5378de54c..f1e38af18 100644 --- a/src/core/musicstorage.h +++ b/src/core/musicstorage.h @@ -92,6 +92,9 @@ class MusicStorage { virtual void FinishDelete(bool success) { Q_UNUSED(success); } virtual void Eject() {} + + private: + Q_DISABLE_COPY(MusicStorage) }; Q_DECLARE_METATYPE(MusicStorage*) diff --git a/src/core/networkproxyfactory.cpp b/src/core/networkproxyfactory.cpp index 686c8cf74..69e032a59 100644 --- a/src/core/networkproxyfactory.cpp +++ b/src/core/networkproxyfactory.cpp @@ -20,8 +20,6 @@ #include "config.h" -#include - #include #include #include @@ -43,14 +41,15 @@ NetworkProxyFactory::NetworkProxyFactory() type_(QNetworkProxy::HttpProxy), port_(8080), use_authentication_(false) { + #ifdef Q_OS_LINUX // Linux uses environment variables to pass proxy configuration information, which systemProxyForQuery doesn't support for some reason. QStringList urls; - urls << QString::fromLocal8Bit(getenv("HTTP_PROXY")); - urls << QString::fromLocal8Bit(getenv("http_proxy")); - urls << QString::fromLocal8Bit(getenv("ALL_PROXY")); - urls << QString::fromLocal8Bit(getenv("all_proxy")); + urls << QString::fromLocal8Bit(qgetenv("HTTP_PROXY")); + urls << QString::fromLocal8Bit(qgetenv("http_proxy")); + urls << QString::fromLocal8Bit(qgetenv("ALL_PROXY")); + urls << QString::fromLocal8Bit(qgetenv("all_proxy")); qLog(Debug) << "Detected system proxy URLs:" << urls; @@ -92,6 +91,8 @@ void NetworkProxyFactory::ReloadSettings() { username_ = s.value("username").toString(); password_ = s.value("password").toString(); + s.endGroup(); + } QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &query) { diff --git a/src/core/potranslator.h b/src/core/potranslator.h index b2f1b8ea6..9a4c03297 100644 --- a/src/core/potranslator.h +++ b/src/core/potranslator.h @@ -27,7 +27,10 @@ // This translator tries loading strings with an empty context if it can't find any others. class PoTranslator : public QTranslator { + Q_OBJECT + public: + PoTranslator(QObject *parent = nullptr) : QTranslator(parent) {} QString translate(const char *context, const char *source_text, const char *disambiguation = nullptr, int n = -1) const override { Q_UNUSED(n); QString ret = QTranslator::translate(context, source_text, disambiguation); diff --git a/src/core/settingsprovider.h b/src/core/settingsprovider.h index 45cec5171..37aebe4a0 100644 --- a/src/core/settingsprovider.h +++ b/src/core/settingsprovider.h @@ -41,6 +41,9 @@ class SettingsProvider { virtual void beginWriteArray(const QString &prefix, int size = -1) = 0; virtual void setArrayIndex(int i) = 0; virtual void endArray() = 0; + + private: + Q_DISABLE_COPY(SettingsProvider) }; class DefaultSettingsProvider : public SettingsProvider { @@ -58,6 +61,8 @@ class DefaultSettingsProvider : public SettingsProvider { private: QSettings backend_; + + Q_DISABLE_COPY(DefaultSettingsProvider) }; #endif // SETTINGSPROVIDER_H diff --git a/src/core/song.cpp b/src/core/song.cpp index 04724e106..0774c96ba 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -1586,7 +1586,7 @@ bool Song::IsSimilar(const Song &other) const { album().compare(other.album(), Qt::CaseInsensitive) == 0; } -uint HashSimilar(const Song &song) { +size_t HashSimilar(const Song &song) { // Should compare the same fields as function IsSimilar return qHash(song.title().toLower()) ^ qHash(song.artist().toLower()) ^ qHash(song.album().toLower()); } diff --git a/src/core/song.h b/src/core/song.h index 4624c7569..33f437479 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -403,6 +403,6 @@ size_t qHash(const Song &song); uint qHash(const Song &song); #endif // Hash function using field checked in IsSimilar function -uint HashSimilar(const Song &song); +size_t HashSimilar(const Song &song); #endif // SONG_H diff --git a/src/core/standarditemiconloader.cpp b/src/core/standarditemiconloader.cpp index 77365fbef..91e8b9dd8 100644 --- a/src/core/standarditemiconloader.cpp +++ b/src/core/standarditemiconloader.cpp @@ -77,7 +77,7 @@ void StandardItemIconLoader::RowsAboutToBeRemoved(const QModelIndex &parent, int if (item_parent && item_parent->index() == parent && item->index().row() >= begin && item->index().row() <= end) { cover_loader_->CancelTask(it.key()); - it = pending_covers_.erase(it); + it = pending_covers_.erase(it); // clazy:exclude=strict-iterators } else { ++ it; @@ -97,7 +97,7 @@ void StandardItemIconLoader::ModelReset() { } -void StandardItemIconLoader::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult result) { +void StandardItemIconLoader::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &result) { QStandardItem *item = pending_covers_.take(id); if (!item) return; diff --git a/src/core/standarditemiconloader.h b/src/core/standarditemiconloader.h index 564d9fc7b..0d135f71f 100644 --- a/src/core/standarditemiconloader.h +++ b/src/core/standarditemiconloader.h @@ -55,7 +55,7 @@ class StandardItemIconLoader : public QObject { void LoadIcon(const Song &song, QStandardItem *for_item); private slots: - void AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult result); + void AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &result); void RowsAboutToBeRemoved(const QModelIndex &parent, int begin, int end); void ModelReset(); diff --git a/src/core/stylehelper.cpp b/src/core/stylehelper.cpp index f7817d2bb..4f49bac0a 100644 --- a/src/core/stylehelper.cpp +++ b/src/core/stylehelper.cpp @@ -175,7 +175,7 @@ void StyleHelper::setBaseColor(const QColor &newcolor) { } -static void verticalGradientHelper(QPainter *p, const QRect &spanRect, const QRect &rect, bool lightColored) { +static void verticalGradientHelper(QPainter *p, const QRect spanRect, const QRect rect, bool lightColored) { QColor highlight = StyleHelper::highlightColor(lightColored); QColor shadow = StyleHelper::shadowColor(lightColored); @@ -193,7 +193,7 @@ static void verticalGradientHelper(QPainter *p, const QRect &spanRect, const QRe } -void StyleHelper::verticalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored) { +void StyleHelper::verticalGradient(QPainter *painter, const QRect spanRect, const QRect clipRect, bool lightColored) { if (StyleHelper::usePixmapCache()) { QColor keyColor = baseColor(lightColored); @@ -216,7 +216,7 @@ void StyleHelper::verticalGradient(QPainter *painter, const QRect &spanRect, con } -static void horizontalGradientHelper(QPainter *p, const QRect &spanRect, const QRect &rect, bool lightColored) { +static void horizontalGradientHelper(QPainter *p, const QRect spanRect, const QRect rect, bool lightColored) { if (lightColored) { QLinearGradient shadowGradient(rect.topLeft(), rect.bottomLeft()); @@ -249,7 +249,7 @@ static void horizontalGradientHelper(QPainter *p, const QRect &spanRect, const Q } -void StyleHelper::horizontalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored) { +void StyleHelper::horizontalGradient(QPainter *painter, const QRect spanRect, const QRect clipRect, bool lightColored) { if (StyleHelper::usePixmapCache()) { QColor keyColor = baseColor(lightColored); @@ -272,7 +272,7 @@ void StyleHelper::horizontalGradient(QPainter *painter, const QRect &spanRect, c } -static void menuGradientHelper(QPainter *p, const QRect &spanRect, const QRect &rect) { +static void menuGradientHelper(QPainter *p, const QRect spanRect, const QRect rect) { QLinearGradient grad(spanRect.topLeft(), spanRect.bottomLeft()); QColor menuColor = StyleHelper::mergedColors(StyleHelper::baseColor(), QColor(244, 244, 244), 25); @@ -301,7 +301,7 @@ void StyleHelper::drawArrow(QStyle::PrimitiveElement element, QPainter *painter, QStyleOption tweakedOption(*option); tweakedOption.state = QStyle::State_Enabled; - auto drawCommonStyleArrow = [&tweakedOption, element, &p](const QRect &rect, const QColor &color) -> void + auto drawCommonStyleArrow = [&tweakedOption, element, &p](const QRect rect, const QColor &color) -> void { static const QCommonStyle* const style = qobject_cast(QApplication::style()); if (!style) @@ -330,7 +330,7 @@ void StyleHelper::drawArrow(QStyle::PrimitiveElement element, QPainter *painter, } -void StyleHelper::menuGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect) { +void StyleHelper::menuGradient(QPainter *painter, const QRect spanRect, const QRect clipRect) { if (StyleHelper::usePixmapCache()) { QString key = QString::asprintf("mh_menu %d %d %d %d %d", spanRect.width(), spanRect.height(), clipRect.width(), clipRect.height(), StyleHelper::baseColor().rgb()); @@ -371,7 +371,7 @@ QPixmap StyleHelper::disabledSideBarIcon(const QPixmap &enabledicon) { // Draws a CSS-like border image where the defined borders are not stretched // Unit for rect, left, top, right and bottom is user pixels -void StyleHelper::drawCornerImage(const QImage &img, QPainter *painter, const QRect &rect, int left, int top, int right, int bottom) { +void StyleHelper::drawCornerImage(const QImage &img, QPainter *painter, const QRect rect, int left, int top, int right, int bottom) { // source rect for drawImage() calls needs to be specified in DIP unit of the image const qreal imagePixelRatio = img.devicePixelRatio(); @@ -429,7 +429,7 @@ void StyleHelper::tintImage(QImage &img, const QColor &tintColor) { } -QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect) { +QLinearGradient StyleHelper::statusBarGradient(const QRect statusBarRect) { QLinearGradient grad(statusBarRect.topLeft(), QPoint(statusBarRect.center().x(), statusBarRect.bottom())); QColor startColor = shadowColor().darker(164); diff --git a/src/core/stylehelper.h b/src/core/stylehelper.h index d0b4a2bd3..8bfc85fd6 100644 --- a/src/core/stylehelper.h +++ b/src/core/stylehelper.h @@ -78,16 +78,16 @@ public: static void drawArrow(QStyle::PrimitiveElement element, QPainter *painter, const QStyleOption *option); // Gradients used for panels - static void horizontalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored = false); - static void verticalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored = false); - static void menuGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect); + static void horizontalGradient(QPainter *painter, const QRect spanRect, const QRect clipRect, bool lightColored = false); + static void verticalGradient(QPainter *painter, const QRect spanRect, const QRect clipRect, bool lightColored = false); + static void menuGradient(QPainter *painter, const QRect spanRect, const QRect clipRect); static bool usePixmapCache() { return true; } static QPixmap disabledSideBarIcon(const QPixmap &enabledicon); - static void drawCornerImage(const QImage &img, QPainter *painter, const QRect &rect, int left = 0, int top = 0, int right = 0, int bottom = 0); + static void drawCornerImage(const QImage &img, QPainter *painter, const QRect rect, int left = 0, int top = 0, int right = 0, int bottom = 0); static void tintImage(QImage &img, const QColor &tintColor); - static QLinearGradient statusBarGradient(const QRect &statusBarRect); + static QLinearGradient statusBarGradient(const QRect statusBarRect); static QString dpiSpecificImageFile(const QString &fileName); static QString imageFileWithResolution(const QString &fileName, int dpr); diff --git a/src/core/stylesheetloader.cpp b/src/core/stylesheetloader.cpp index 51b4825c1..fa63b0d2c 100644 --- a/src/core/stylesheetloader.cpp +++ b/src/core/stylesheetloader.cpp @@ -21,6 +21,8 @@ #include "config.h" +#include + #include #include #include @@ -37,10 +39,12 @@ #include "core/logging.h" #include "stylesheetloader.h" +using namespace std::chrono_literals; + StyleSheetLoader::StyleSheetLoader(QObject *parent) : QObject(parent), timer_reset_counter_(new QTimer(this)) { timer_reset_counter_->setSingleShot(true); - timer_reset_counter_->setInterval(1000); + timer_reset_counter_->setInterval(1s); QObject::connect(timer_reset_counter_, &QTimer::timeout, this, &StyleSheetLoader::ResetCounters); @@ -122,7 +126,7 @@ void StyleSheetLoader::UpdateStyleSheet(QWidget *widget, StyleSheetData styledat } -void StyleSheetLoader::ReplaceColor(QString *css, const QString name, const QPalette &palette, QPalette::ColorRole role) const { +void StyleSheetLoader::ReplaceColor(QString *css, const QString &name, const QPalette &palette, QPalette::ColorRole role) const { css->replace("%palette-" + name + "-lighter", palette.color(role).lighter().name(), Qt::CaseInsensitive); css->replace("%palette-" + name + "-darker", palette.color(role).darker().name(), Qt::CaseInsensitive); diff --git a/src/core/stylesheetloader.h b/src/core/stylesheetloader.h index b4ad86e4f..e72ce1d99 100644 --- a/src/core/stylesheetloader.h +++ b/src/core/stylesheetloader.h @@ -59,7 +59,7 @@ class StyleSheetLoader : public QObject { private: void UpdateStyleSheet(QWidget *widget, StyleSheetData styledata); - void ReplaceColor(QString *css, const QString name, const QPalette &palette, QPalette::ColorRole role) const; + void ReplaceColor(QString *css, const QString &name, const QPalette &palette, QPalette::ColorRole role) const; private slots: void ResetCounters(); diff --git a/src/core/thread.h b/src/core/thread.h index 1a2c97f0c..771f9b2dc 100644 --- a/src/core/thread.h +++ b/src/core/thread.h @@ -28,6 +28,8 @@ class QObject; // Improve QThread by adding a SetIoPriority function class Thread : public QThread { + Q_OBJECT + public: explicit Thread(QObject *parent = nullptr) : QThread(parent), io_priority_(Utilities::IOPRIO_CLASS_NONE) {} diff --git a/src/core/translations.cpp b/src/core/translations.cpp index 730cf77fd..0256be500 100644 --- a/src/core/translations.cpp +++ b/src/core/translations.cpp @@ -26,7 +26,7 @@ #include "translations.h" #include "core/potranslator.h" -Translations::Translations() {} +Translations::Translations(QObject *parent) : QObject(parent) {} Translations::~Translations() { for (QTranslator *t : translations_) { diff --git a/src/core/translations.h b/src/core/translations.h index 0c8103a10..6e1731443 100644 --- a/src/core/translations.h +++ b/src/core/translations.h @@ -28,8 +28,10 @@ class QTranslator; class Translations : public QObject { + Q_OBJECT + public: - explicit Translations(); + explicit Translations(QObject *parent = nullptr); ~Translations() override; void LoadTranslation(const QString &prefix, const QString &path, const QString &language); diff --git a/src/core/urlhandler.cpp b/src/core/urlhandler.cpp index 5ed0fc509..fca86cb61 100644 --- a/src/core/urlhandler.cpp +++ b/src/core/urlhandler.cpp @@ -28,7 +28,7 @@ #include "song.h" #include "urlhandler.h" -UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 length_nanosec, const QString error) : +UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 length_nanosec, const QString &error) : original_url_(original_url), type_(type), stream_url_(stream_url), @@ -39,7 +39,7 @@ UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, co error_(error) {} -UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, const QString error) : +UrlHandler::LoadResult::LoadResult(const QUrl &original_url, const Type type, const QString &error) : original_url_(original_url), type_(type), filetype_(Song::FileType_Stream), diff --git a/src/core/urlhandler.h b/src/core/urlhandler.h index 36bae6897..f5bd97f14 100644 --- a/src/core/urlhandler.h +++ b/src/core/urlhandler.h @@ -57,9 +57,9 @@ 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 = 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); + explicit LoadResult(const QUrl &original_url, const Type type, const QString &error); // The url that the playlist item has in Url(). // Might be something unplayable like lastfm://... diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index 420ca4742..653ad509b 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -109,7 +109,7 @@ static QString tr(const char *str) { return QCoreApplication::translate("", str); } -QString PrettyTimeDelta(int seconds) { +QString PrettyTimeDelta(const int seconds) { return (seconds >= 0 ? "+" : "-") + PrettyTime(seconds); } @@ -130,11 +130,11 @@ QString PrettyTime(int seconds) { } -QString PrettyTimeNanosec(qint64 nanoseconds) { +QString PrettyTimeNanosec(const qint64 nanoseconds) { return PrettyTime(static_cast(nanoseconds / kNsecPerSec)); } -QString WordyTime(quint64 seconds) { +QString WordyTime(const quint64 seconds) { quint64 days = seconds / (60 * 60 * 24); @@ -148,11 +148,11 @@ QString WordyTime(quint64 seconds) { } -QString WordyTimeNanosec(qint64 nanoseconds) { +QString WordyTimeNanosec(const qint64 nanoseconds) { return WordyTime(nanoseconds / kNsecPerSec); } -QString Ago(qint64 seconds_since_epoch, const QLocale &locale) { +QString Ago(const qint64 seconds_since_epoch, const QLocale &locale) { const QDateTime now = QDateTime::currentDateTime(); const QDateTime then = QDateTime::fromSecsSinceEpoch(seconds_since_epoch); @@ -167,7 +167,7 @@ QString Ago(qint64 seconds_since_epoch, const QLocale &locale) { } -QString PrettyFutureDate(const QDate &date) { +QString PrettyFutureDate(const QDate date) { const QDate now = QDate::currentDate(); const qint64 delta_days = now.daysTo(date); @@ -182,7 +182,7 @@ QString PrettyFutureDate(const QDate &date) { } -QString PrettySize(quint64 bytes) { +QString PrettySize(const quint64 bytes) { QString ret; @@ -355,7 +355,7 @@ void OpenInFileManager(const QString &path, const QUrl &url) { #endif proc.waitForFinished(); QString desktop_file = proc.readLine().simplified(); - QStringList data_dirs = QString(getenv("XDG_DATA_DIRS")).split(":"); + QStringList data_dirs = QString(qgetenv("XDG_DATA_DIRS")).split(":"); QString command; QStringList command_params; @@ -384,23 +384,25 @@ void OpenInFileManager(const QString &path, const QUrl &url) { command = command.split("/").last(); } + // Three is no QProcess::startDetachedCommand function in Qt 6, so ignore the Clazy Qt 6 deprecated API fixes for QProcess::startDetached(). + if (command.isEmpty() || command == "exo-open") { QDesktopServices::openUrl(QUrl::fromLocalFile(path)); } else if (command.startsWith("nautilus")) { - proc.startDetached(command, QStringList() << command_params << "--select" << url.toLocalFile()); + proc.startDetached(command, QStringList() << command_params << "--select" << url.toLocalFile()); // clazy:exclude=qt6-deprecated-api-fixes } else if (command.startsWith("dolphin") || command.startsWith("konqueror") || command.startsWith("kfmclient")) { - proc.startDetached(command, QStringList() << command_params << "--select" << "--new-window" << url.toLocalFile()); + proc.startDetached(command, QStringList() << command_params << "--select" << "--new-window" << url.toLocalFile()); // clazy:exclude=qt6-deprecated-api-fixes } else if (command.startsWith("caja")) { - proc.startDetached(command, QStringList() << command_params << "--no-desktop" << path); + proc.startDetached(command, QStringList() << command_params << "--no-desktop" << path); // clazy:exclude=qt6-deprecated-api-fixes } else if (command.startsWith("pcmanfm") || command.startsWith("thunar")) { - proc.startDetached(command, QStringList() << command_params << path); + proc.startDetached(command, QStringList() << command_params << path); // clazy:exclude=qt6-deprecated-api-fixes } else { - proc.startDetached(command, QStringList() << command_params << url.toLocalFile()); + proc.startDetached(command, QStringList() << command_params << url.toLocalFile()); // clazy:exclude=qt6-deprecated-api-fixes } } @@ -515,7 +517,7 @@ QByteArray Sha1CoverHash(const QString &artist, const QString &album) { } -QString PrettySize(const QSize &size) { +QString PrettySize(const QSize size) { return QString::number(size.width()) + "x" + QString::number(size.height()); } @@ -614,7 +616,7 @@ QDateTime ParseRFC822DateTime(const QString &text) { } -const char *EnumToString(const QMetaObject &meta, const char *name, int value) { +const char *EnumToString(const QMetaObject &meta, const char *name, const int value) { int index = meta.indexOfEnumerator(name); if (index == -1) return "[UnknownEnum]"; @@ -659,7 +661,7 @@ QString DecodeHtmlEntities(const QString &text) { } -int SetThreadIOPriority(IoPriority priority) { +int SetThreadIOPriority(const IoPriority priority) { #ifdef Q_OS_LINUX return syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, GetThreadId(), 4 | priority << IOPRIO_CLASS_SHIFT); diff --git a/src/core/utilities.h b/src/core/utilities.h index 4a256c0a2..4c3b57d87 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h @@ -50,14 +50,14 @@ class QXmlStreamReader; namespace Utilities { QString PrettyTime(int seconds); -QString PrettyTimeDelta(int seconds); -QString PrettyTimeNanosec(qint64 nanoseconds); -QString PrettySize(quint64 bytes); -QString PrettySize(const QSize &size); -QString WordyTime(quint64 seconds); -QString WordyTimeNanosec(qint64 nanoseconds); -QString Ago(qint64 seconds_since_epoch, const QLocale &locale); -QString PrettyFutureDate(const QDate &date); +QString PrettyTimeDelta(const int seconds); +QString PrettyTimeNanosec(const qint64 nanoseconds); +QString PrettySize(const quint64 bytes); +QString PrettySize(const QSize size); +QString WordyTime(const quint64 seconds); +QString WordyTimeNanosec(const qint64 nanoseconds); +QString Ago(const qint64 seconds_since_epoch, const QLocale &locale); +QString PrettyFutureDate(const QDate date); QString ColorToRgba(const QColor &color); @@ -126,7 +126,7 @@ enum IoPriority { }; static const int IOPRIO_CLASS_SHIFT = 13; -int SetThreadIOPriority(IoPriority priority); +int SetThreadIOPriority(const IoPriority priority); int GetThreadId(); QString GetRandomStringWithChars(const int len); diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 58ba20246..baf6a0e1c 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -621,6 +621,7 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co SongList songs = watcher->result(); watcher->deleteLater(); QList urls; + urls.reserve(songs.count()); for (const Song &s : songs) urls << s.url(); if (result.is_jpeg()) { qint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image_data); @@ -665,6 +666,7 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co SongList songs = watcher->result(); watcher->deleteLater(); QList urls; + urls.reserve(songs.count()); for (const Song &s : songs) urls << s.url(); qint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, cover_filename); QMutexLocker l(&mutex_cover_save_tasks_); @@ -678,7 +680,7 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co } -void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const QList urls, const QImage &image) { +void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const QList &urls, const QImage &image) { app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, image); diff --git a/src/covermanager/albumcoverchoicecontroller.h b/src/covermanager/albumcoverchoicecontroller.h index 35fbcdf40..82599406d 100644 --- a/src/covermanager/albumcoverchoicecontroller.h +++ b/src/covermanager/albumcoverchoicecontroller.h @@ -145,7 +145,7 @@ class AlbumCoverChoiceController : public QWidget { void SaveCoverEmbeddedAutomatic(const Song &song, const AlbumCoverImageResult &result); void SaveCoverEmbeddedAutomatic(const Song &song, const QUrl &cover_url); void SaveCoverEmbeddedAutomatic(const Song &song, const QString &cover_filename); - void SaveCoverEmbeddedAutomatic(const QList urls, const QImage &image); + void SaveCoverEmbeddedAutomatic(const QList &urls, const QImage &image); static bool CanAcceptDrag(const QDragEnterEvent *e); diff --git a/src/covermanager/albumcoverexporter.cpp b/src/covermanager/albumcoverexporter.cpp index ea875d378..889f77d90 100644 --- a/src/covermanager/albumcoverexporter.cpp +++ b/src/covermanager/albumcoverexporter.cpp @@ -43,7 +43,7 @@ void AlbumCoverExporter::SetDialogResult(const AlbumCoverExport::DialogResult &d dialog_result_ = dialog_result; } -void AlbumCoverExporter::AddExportRequest(Song song) { +void AlbumCoverExporter::AddExportRequest(const Song &song) { requests_.append(new CoverExportRunnable(dialog_result_, song)); all_ = requests_.count(); } diff --git a/src/covermanager/albumcoverexporter.h b/src/covermanager/albumcoverexporter.h index f50f79ff4..fa3f22198 100644 --- a/src/covermanager/albumcoverexporter.h +++ b/src/covermanager/albumcoverexporter.h @@ -42,7 +42,7 @@ class AlbumCoverExporter : public QObject { static const int kMaxConcurrentRequests; void SetDialogResult(const AlbumCoverExport::DialogResult &dialog_result); - void AddExportRequest(Song song); + void AddExportRequest(const Song &song); void StartExporting(); void Cancel(); diff --git a/src/covermanager/albumcoverfetcher.cpp b/src/covermanager/albumcoverfetcher.cpp index 1188cc9dd..23d3e1d9b 100644 --- a/src/covermanager/albumcoverfetcher.cpp +++ b/src/covermanager/albumcoverfetcher.cpp @@ -21,6 +21,8 @@ #include "config.h" +#include + #include #include #include @@ -32,6 +34,8 @@ #include "albumcoverfetcher.h" #include "albumcoverfetchersearch.h" +using namespace std::chrono_literals; + const int AlbumCoverFetcher::kMaxConcurrentRequests = 5; AlbumCoverFetcher::AlbumCoverFetcher(CoverProviders *cover_providers, QObject *parent, NetworkAccessManager *network) @@ -41,7 +45,7 @@ AlbumCoverFetcher::AlbumCoverFetcher(CoverProviders *cover_providers, QObject *p next_id_(0), request_starter_(new QTimer(this)) { - request_starter_->setInterval(1000); + request_starter_->setInterval(1s); QObject::connect(request_starter_, &QTimer::timeout, this, &AlbumCoverFetcher::StartRequests); } diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp index 0580d2249..22957e8f8 100644 --- a/src/covermanager/albumcoverloader.cpp +++ b/src/covermanager/albumcoverloader.cpp @@ -233,7 +233,7 @@ void AlbumCoverLoader::CancelTask(const quint64 id) { QMutexLocker l(&mutex_load_image_async_); for (QQueue::iterator it = tasks_.begin(); it != tasks_.end(); ++it) { if (it->id == id) { - tasks_.erase(it); + tasks_.erase(it); // clazy:exclude=strict-iterators break; } } @@ -245,7 +245,7 @@ void AlbumCoverLoader::CancelTasks(const QSet &ids) { QMutexLocker l(&mutex_load_image_async_); for (QQueue::iterator it = tasks_.begin(); it != tasks_.end();) { if (ids.contains(it->id)) { - it = tasks_.erase(it); + it = tasks_.erase(it); // clazy:exclude=strict-iterators } else { ++it; @@ -531,7 +531,7 @@ void AlbumCoverLoader::RemoteFetchFinished(QNetworkReply *reply, const QUrl &cov } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, const QString &cover_filename) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -540,7 +540,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, con } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, const QImage &image) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -549,7 +549,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, con } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, const QByteArray &image_data) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -558,7 +558,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString song_filename, con } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QString &cover_filename) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -567,7 +567,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QS } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QImage &image) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QImage &image) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -576,7 +576,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QI } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QByteArray &image_data) { +qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data) { QMutexLocker l(&mutex_save_image_async_); qint64 id = ++save_image_async_id_; @@ -585,7 +585,7 @@ qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList urls, const QB } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_filename, const QByteArray &image_data) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QByteArray &image_data) { TagReaderReply *reply = TagReaderClient::Instance()->SaveEmbeddedArt(song_filename, image_data); tagreader_save_embedded_art_requests_.insert(id, reply); @@ -594,7 +594,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_fil } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_filename, const QImage &image) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QImage &image) { QByteArray image_data; @@ -610,7 +610,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_fil } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_filename, const QString &cover_filename) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QString &cover_filename) { QFile file(cover_filename); @@ -626,7 +626,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_fil } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls, const QImage &image) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList &urls, const QImage &image) { if (image.isNull()) { for (const QUrl &url : urls) { @@ -651,7 +651,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls, const QString &cover_filename) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList &urls, const QString &cover_filename) { QFile file(cover_filename); @@ -666,7 +666,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls } -void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls, const QByteArray &image_data) { +void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList &urls, const QByteArray &image_data) { for (const QUrl &url : urls) { SaveEmbeddedCover(id, url.toLocalFile(), image_data); diff --git a/src/covermanager/albumcoverloader.h b/src/covermanager/albumcoverloader.h index 937ffeba1..dc63a6575 100644 --- a/src/covermanager/albumcoverloader.h +++ b/src/covermanager/albumcoverloader.h @@ -81,12 +81,12 @@ class AlbumCoverLoader : public QObject { void CancelTask(const quint64 id); void CancelTasks(const QSet &ids); - qint64 SaveEmbeddedCoverAsync(const QString song_filename, const QString &cover_filename); - qint64 SaveEmbeddedCoverAsync(const QString song_filename, const QImage &image); - qint64 SaveEmbeddedCoverAsync(const QString song_filename, const QByteArray &image_data); - qint64 SaveEmbeddedCoverAsync(const QList urls, const QString &cover_filename); - qint64 SaveEmbeddedCoverAsync(const QList urls, const QImage &image); - qint64 SaveEmbeddedCoverAsync(const QList urls, const QByteArray &image_data); + qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename); + qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image); + qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data); + qint64 SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename); + qint64 SaveEmbeddedCoverAsync(const QList &urls, const QImage &image); + qint64 SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data); signals: void ExitFinished(); @@ -98,12 +98,12 @@ class AlbumCoverLoader : public QObject { void ProcessTasks(); void RemoteFetchFinished(QNetworkReply *reply, const QUrl &cover_url); - void SaveEmbeddedCover(const qint64 id, const QString song_filename, const QString &cover_filename); - void SaveEmbeddedCover(const qint64 id, const QString song_filename, const QImage &image); - void SaveEmbeddedCover(const qint64 id, const QString song_filename, const QByteArray &image_data); - void SaveEmbeddedCover(const qint64 id, const QList urls, const QImage &image); - void SaveEmbeddedCover(const qint64 id, const QList urls, const QString &cover_filename); - void SaveEmbeddedCover(const qint64 id, const QList urls, const QByteArray &image_data); + void SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QString &cover_filename); + void SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QImage &image); + void SaveEmbeddedCover(const qint64 id, const QString &song_filename, const QByteArray &image_data); + void SaveEmbeddedCover(const qint64 id, const QList &urls, const QImage &image); + void SaveEmbeddedCover(const qint64 id, const QList &urls, const QString &cover_filename); + void SaveEmbeddedCover(const qint64 id, const QList &urls, const QByteArray &image_data); void SaveEmbeddedArtFinished(const qint64 id, TagReaderReply *reply, const bool cleared); diff --git a/src/covermanager/albumcovermanager.cpp b/src/covermanager/albumcovermanager.cpp index 9af9daa09..0250bcc34 100644 --- a/src/covermanager/albumcovermanager.cpp +++ b/src/covermanager/albumcovermanager.cpp @@ -594,7 +594,7 @@ bool AlbumCoverManager::eventFilter(QObject *obj, QEvent *e) { if (obj == ui_->albums && e->type() == QEvent::ContextMenu) { context_menu_items_ = ui_->albums->selectedItems(); - if (context_menu_items_.isEmpty()) return false; + if (context_menu_items_.isEmpty()) return QMainWindow::eventFilter(obj, e); bool some_with_covers = false; bool some_unset = false; @@ -624,6 +624,7 @@ bool AlbumCoverManager::eventFilter(QObject *obj, QEvent *e) { context_menu_->popup(context_menu_event->globalPos()); return true; } + return QMainWindow::eventFilter(obj, e); } diff --git a/src/covermanager/albumcovermanager.h b/src/covermanager/albumcovermanager.h index c04b7dc39..5eb9d3441 100644 --- a/src/covermanager/albumcovermanager.h +++ b/src/covermanager/albumcovermanager.h @@ -67,6 +67,9 @@ class AlbumItem : public QListWidgetItem { public: AlbumItem(const QIcon &icon, const QString &text, QListWidget *parent = nullptr, int type = Type) : QListWidgetItem(icon, text, parent, type) {}; QList urls; + + private: + Q_DISABLE_COPY(AlbumItem) }; class AlbumCoverManager : public QMainWindow { diff --git a/src/covermanager/albumcovermanagerlist.cpp b/src/covermanager/albumcovermanagerlist.cpp index c02ac7971..4e9400bb9 100644 --- a/src/covermanager/albumcovermanagerlist.cpp +++ b/src/covermanager/albumcovermanagerlist.cpp @@ -57,6 +57,7 @@ QMimeData *AlbumCoverManagerList::mimeData(const QList items) // Get URLs from the songs QList urls; + urls.reserve(songs.count()); for (const Song &song : songs) { urls << song.url(); } diff --git a/src/covermanager/albumcoversearcher.cpp b/src/covermanager/albumcoversearcher.cpp index 40eda38a6..8f5991e26 100644 --- a/src/covermanager/albumcoversearcher.cpp +++ b/src/covermanager/albumcoversearcher.cpp @@ -178,7 +178,7 @@ AlbumCoverImageResult AlbumCoverSearcher::Exec(const QString &artist, const QStr return AlbumCoverImageResult(); AlbumCoverImageResult result; - result.image_data = selected.data(Role_ImageData).value(); + result.image_data = selected.data(Role_ImageData).toByteArray(); result.image = selected.data(Role_Image).value(); result.mime_type = Utilities::MimeTypeFromData(result.image_data); diff --git a/src/covermanager/albumcoversearcher.h b/src/covermanager/albumcoversearcher.h index 6ad716ed9..2e78180cd 100644 --- a/src/covermanager/albumcoversearcher.h +++ b/src/covermanager/albumcoversearcher.h @@ -52,6 +52,8 @@ class Application; class Ui_AlbumCoverSearcher; class SizeOverlayDelegate : public QStyledItemDelegate { + Q_OBJECT + public: static const int kMargin; static const int kPaddingX; diff --git a/src/covermanager/coverexportrunnable.cpp b/src/covermanager/coverexportrunnable.cpp index 72ba9ae31..e1fb154bd 100644 --- a/src/covermanager/coverexportrunnable.cpp +++ b/src/covermanager/coverexportrunnable.cpp @@ -32,7 +32,8 @@ #include "albumcoverexport.h" #include "coverexportrunnable.h" -CoverExportRunnable::CoverExportRunnable(const AlbumCoverExport::DialogResult &dialog_result, const Song &song) : +CoverExportRunnable::CoverExportRunnable(const AlbumCoverExport::DialogResult &dialog_result, const Song &song, QObject *parent) : + QObject(parent), dialog_result_(dialog_result), song_(song) {} diff --git a/src/covermanager/coverexportrunnable.h b/src/covermanager/coverexportrunnable.h index 6f817309e..feaa71383 100644 --- a/src/covermanager/coverexportrunnable.h +++ b/src/covermanager/coverexportrunnable.h @@ -34,7 +34,7 @@ class CoverExportRunnable : public QObject, public QRunnable { Q_OBJECT public: - explicit CoverExportRunnable(const AlbumCoverExport::DialogResult &dialog_result, const Song &song); + explicit CoverExportRunnable(const AlbumCoverExport::DialogResult &dialog_result, const Song &song, QObject *parent = nullptr); void run() override; diff --git a/src/covermanager/coverproviders.cpp b/src/covermanager/coverproviders.cpp index c4edae6f7..4a046c45a 100644 --- a/src/covermanager/coverproviders.cpp +++ b/src/covermanager/coverproviders.cpp @@ -61,7 +61,7 @@ void CoverProviders::ReloadSettings() { QSettings s; s.beginGroup(CoversSettingsPage::kSettingsGroup); - QStringList providers_enabled = s.value("providers", QStringList() << all_providers.values()).toStringList(); + QStringList providers_enabled = s.value("providers", QStringList() << all_providers.values()).toStringList(); // clazy:exclude=qt6-deprecated-api-fixes s.endGroup(); int i = 0; @@ -71,7 +71,7 @@ void CoverProviders::ReloadSettings() { if (provider) { provider->set_enabled(true); provider->set_order(++i); - new_providers << provider; + new_providers << provider; // clazy:exclude=reserve-candidates } } diff --git a/src/covermanager/deezercoverprovider.cpp b/src/covermanager/deezercoverprovider.cpp index 45f3ef5de..adc99b97d 100644 --- a/src/covermanager/deezercoverprovider.cpp +++ b/src/covermanager/deezercoverprovider.cpp @@ -310,7 +310,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) emit SearchFinished(id, CoverProviderSearchResults()); } else { - CoverProviderSearchResults cover_results = results.values(); + CoverProviderSearchResults cover_results = results.values(); // clazy:exclude=qt6-deprecated-api-fixes std::stable_sort(cover_results.begin(), cover_results.end(), AlbumCoverFetcherSearch::CoverProviderSearchResultCompareNumber); emit SearchFinished(id, cover_results); } diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index d38fd90a8..c88451c8a 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -268,12 +268,14 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) return; } - QJsonArray array_results; - if (value_results.isArray()) { - array_results = value_results.toArray(); + if (!value_results.isArray()) { + Error("Missing results array.", value_results); + EndSearch(search); + return; } - for (const QJsonValueRef value_result : array_results) { + QJsonArray array_results = value_results.toArray(); + for (QJsonValueRef value_result : array_results) { if (!value_result.isObject()) { Error("Invalid Json reply, results value is not a object."); @@ -328,7 +330,7 @@ void DiscogsCoverProvider::StartReleaseRequest(std::shared_ptr ParamList; void SendSearchRequest(std::shared_ptr search); - void SendReleaseRequest(const DiscogsCoverReleaseContext release); + void SendReleaseRequest(const DiscogsCoverReleaseContext &release); QNetworkReply *CreateRequest(QUrl url, const ParamList ¶ms_provided = ParamList()); QByteArray GetReplyData(QNetworkReply *reply); void StartReleaseRequest(std::shared_ptr search, const quint64 release_id, const QUrl &url); diff --git a/src/covermanager/spotifycoverprovider.cpp b/src/covermanager/spotifycoverprovider.cpp index ea65c2016..dd4cd7b7e 100644 --- a/src/covermanager/spotifycoverprovider.cpp +++ b/src/covermanager/spotifycoverprovider.cpp @@ -205,7 +205,7 @@ void SpotifyCoverProvider::RedirectArrived() { } -void SpotifyCoverProvider::RequestAccessToken(const QString code, const QUrl redirect_url) { +void SpotifyCoverProvider::RequestAccessToken(const QString &code, const QUrl &redirect_url) { refresh_login_timer_.stop(); @@ -250,7 +250,7 @@ void SpotifyCoverProvider::RequestAccessToken(const QString code, const QUrl red } -void SpotifyCoverProvider::HandleLoginSSLErrors(QList ssl_errors) { +void SpotifyCoverProvider::HandleLoginSSLErrors(const QList &ssl_errors) { for (const QSslError &ssl_error : ssl_errors) { login_errors_ += ssl_error.errorString(); diff --git a/src/covermanager/spotifycoverprovider.h b/src/covermanager/spotifycoverprovider.h index 3fa31cb18..cc3030fde 100644 --- a/src/covermanager/spotifycoverprovider.h +++ b/src/covermanager/spotifycoverprovider.h @@ -56,7 +56,7 @@ class SpotifyCoverProvider : public JsonCoverProvider { bool IsAuthenticated() const override { return !access_token_.isEmpty(); } private slots: - void HandleLoginSSLErrors(QList ssl_errors); + void HandleLoginSSLErrors(const QList &ssl_errors); void RedirectArrived(); void AccessTokenRequestFinished(QNetworkReply *reply); void HandleSearchReply(QNetworkReply *reply, const int id, const QString &extract); @@ -66,7 +66,7 @@ class SpotifyCoverProvider : public JsonCoverProvider { QByteArray GetReplyData(QNetworkReply *reply); void AuthError(const QString &error = QString(), const QVariant &debug = QVariant()); void Error(const QString &error, const QVariant &debug = QVariant()) override; - void RequestAccessToken(const QString code = QString(), const QUrl redirect_url = QUrl()); + void RequestAccessToken(const QString &code = QString(), const QUrl &redirect_url = QUrl()); private: typedef QPair Param; diff --git a/src/device/cddadevice.cpp b/src/device/cddadevice.cpp index 46624a6a4..119555c52 100644 --- a/src/device/cddadevice.cpp +++ b/src/device/cddadevice.cpp @@ -33,8 +33,8 @@ class Application; class DeviceLister; class DeviceManager; -CddaDevice::CddaDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time) - : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time), cdda_song_loader_(url) { +CddaDevice::CddaDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time, QObject *parent) + : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), cdda_song_loader_(url) { QObject::connect(&cdda_song_loader_, &CddaSongLoader::SongsLoaded, this, &CddaDevice::SongsLoaded); QObject::connect(&cdda_song_loader_, &CddaSongLoader::SongsDurationLoaded, this, &CddaDevice::SongsLoaded); diff --git a/src/device/cddadevice.h b/src/device/cddadevice.h index ca6579262..5def49bc7 100644 --- a/src/device/cddadevice.h +++ b/src/device/cddadevice.h @@ -46,7 +46,7 @@ class CddaDevice : public ConnectedDevice { Q_OBJECT public: - Q_INVOKABLE explicit CddaDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time); + Q_INVOKABLE explicit CddaDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr); bool Init() override; void Refresh() override; diff --git a/src/device/cddalister.h b/src/device/cddalister.h index ef91a6913..de6adef0e 100644 --- a/src/device/cddalister.h +++ b/src/device/cddalister.h @@ -38,7 +38,7 @@ class CddaLister : public DeviceLister { Q_OBJECT public: - explicit CddaLister() {} + explicit CddaLister(QObject *parent = nullptr) : DeviceLister(parent) {} QStringList DeviceUniqueIDs() override; QVariantList DeviceIcons(const QString &id) override; diff --git a/src/device/cddasongloader.cpp b/src/device/cddasongloader.cpp index 16151a88a..cdc0670b7 100644 --- a/src/device/cddasongloader.cpp +++ b/src/device/cddasongloader.cpp @@ -126,7 +126,8 @@ void CddaSongLoader::LoadSongs() { } SongList songs; - for (int track_number = 1; track_number <= num_tracks; track_number++) { + songs.reserve(num_tracks); + for (int track_number = 1; track_number <= num_tracks; ++track_number) { // Init song Song song(Song::Source_CDDA); song.set_id(track_number); @@ -216,8 +217,9 @@ void CddaSongLoader::AudioCDTagsLoaded(const QString &artist, const QString &alb MusicBrainzClient *musicbrainz_client = qobject_cast(sender()); musicbrainz_client->deleteLater(); - SongList songs; if (results.empty()) return; + SongList songs; + songs.reserve(results.count()); int track_number = 1; for (const MusicBrainzClient::Result &ret : results) { Song song(Song::Source_CDDA); diff --git a/src/device/connecteddevice.cpp b/src/device/connecteddevice.cpp index 4a266dcc0..3351b308c 100644 --- a/src/device/connecteddevice.cpp +++ b/src/device/connecteddevice.cpp @@ -38,8 +38,8 @@ #include "devicemanager.h" #include "deviceinfo.h" -ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time) - : QObject(manager), +ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent) + : QObject(parent), app_(app), url_(url), first_time_(first_time), diff --git a/src/device/connecteddevice.h b/src/device/connecteddevice.h index 080c6eca2..05dce83b4 100644 --- a/src/device/connecteddevice.h +++ b/src/device/connecteddevice.h @@ -43,7 +43,7 @@ class ConnectedDevice : public QObject, public virtual MusicStorage, public std: Q_OBJECT public: - explicit ConnectedDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time); + 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; virtual bool Init() = 0; diff --git a/src/device/deviceinfo.cpp b/src/device/deviceinfo.cpp index 51f731692..6c93d2e3a 100644 --- a/src/device/deviceinfo.cpp +++ b/src/device/deviceinfo.cpp @@ -45,6 +45,7 @@ DeviceDatabaseBackend::Device DeviceInfo::SaveToDb() const { ret.transcode_format_ = transcode_format_; QStringList unique_ids; + unique_ids.reserve(backends_.count()); for (const Backend &backend : backends_) { unique_ids << backend.unique_id_; } diff --git a/src/device/deviceinfo.h b/src/device/deviceinfo.h index b2fb29dbf..9d7f5fe1a 100644 --- a/src/device/deviceinfo.h +++ b/src/device/deviceinfo.h @@ -121,6 +121,8 @@ class DeviceInfo : public SimpleTreeItem { bool unmount_; bool forget_; + Q_DISABLE_COPY(DeviceInfo) + }; #endif // DEVICEINFO_H diff --git a/src/device/devicelister.cpp b/src/device/devicelister.cpp index c873e3f74..604074054 100644 --- a/src/device/devicelister.cpp +++ b/src/device/devicelister.cpp @@ -37,7 +37,8 @@ #include "core/logging.h" -DeviceLister::DeviceLister() : +DeviceLister::DeviceLister(QObject *parent) : + QObject(parent), thread_(nullptr), original_thread_(nullptr), next_mount_request_id_(0) { diff --git a/src/device/devicelister.h b/src/device/devicelister.h index 6339dee7b..10689062a 100644 --- a/src/device/devicelister.h +++ b/src/device/devicelister.h @@ -40,7 +40,7 @@ class DeviceLister : public QObject { Q_OBJECT public: - DeviceLister(); + DeviceLister(QObject *parent = nullptr); ~DeviceLister() override; // Tries to start the thread and initialize the engine. This object will be moved to the new thread. @@ -103,6 +103,9 @@ class DeviceLister : public QObject { private slots: void ThreadStarted(); + + private: + Q_DISABLE_COPY(DeviceLister) }; #endif // DEVICELISTER_H diff --git a/src/device/devicemanager.cpp b/src/device/devicemanager.cpp index 1fa161e4b..c6396089e 100644 --- a/src/device/devicemanager.cpp +++ b/src/device/devicemanager.cpp @@ -198,7 +198,7 @@ void DeviceManager::CloseBackend() { void DeviceManager::BackendClosed() { - QObject *obj = qobject_cast(sender()); + QObject *obj = sender(); QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully closed."; wait_for_exit_.removeAll(obj); @@ -248,6 +248,7 @@ void DeviceManager::AddDeviceFromDB(DeviceInfo *info) { QStringList icon_names = info->icon_name_.split(','); QVariantList icons; + icons.reserve(icon_names.count()); for (const QString &icon_name : icon_names) { icons << icon_name; } @@ -548,7 +549,7 @@ void DeviceManager::PhysicalDeviceChanged(const QString &id) { } -std::shared_ptr DeviceManager::Connect(QModelIndex idx) { +std::shared_ptr DeviceManager::Connect(const QModelIndex &idx) { std::shared_ptr ret; @@ -620,6 +621,7 @@ std::shared_ptr DeviceManager::Connect(DeviceInfo *info) { if (device_url.isEmpty()) { // Munge the URL list into a string list QStringList url_strings; + url_strings.reserve(urls.count()); for (const QUrl &url : urls) { url_strings << url.toString(); } @@ -666,7 +668,7 @@ std::shared_ptr DeviceManager::Connect(DeviceInfo *info) { } -void DeviceManager::DeviceConnectFinished(const QString &id, bool success) { +void DeviceManager::DeviceConnectFinished(const QString &id, const bool success) { DeviceInfo *info = FindDeviceById(id); if (!info) return; @@ -706,14 +708,14 @@ void DeviceManager::DeviceCloseFinished(const QString &id) { } -DeviceInfo *DeviceManager::GetDevice(QModelIndex idx) const { +DeviceInfo *DeviceManager::GetDevice(const QModelIndex &idx) const { DeviceInfo *info = IndexToItem(idx); return info; } -std::shared_ptr DeviceManager::GetConnectedDevice(QModelIndex idx) const { +std::shared_ptr DeviceManager::GetConnectedDevice(const QModelIndex &idx) const { std::shared_ptr ret; DeviceInfo *info = IndexToItem(idx); @@ -730,7 +732,7 @@ std::shared_ptr DeviceManager::GetConnectedDevice(DeviceInfo *i } -int DeviceManager::GetDatabaseId(QModelIndex idx) const { +int DeviceManager::GetDatabaseId(const QModelIndex &idx) const { if (!idx.isValid()) return -1; @@ -740,7 +742,7 @@ int DeviceManager::GetDatabaseId(QModelIndex idx) const { } -DeviceLister *DeviceManager::GetLister(QModelIndex idx) const { +DeviceLister *DeviceManager::GetLister(const QModelIndex &idx) const { if (!idx.isValid()) return nullptr; @@ -750,7 +752,7 @@ DeviceLister *DeviceManager::GetLister(QModelIndex idx) const { } -void DeviceManager::Disconnect(DeviceInfo *info, QModelIndex idx) { +void DeviceManager::Disconnect(DeviceInfo *info, const QModelIndex &idx) { Q_UNUSED(idx); @@ -758,7 +760,7 @@ void DeviceManager::Disconnect(DeviceInfo *info, QModelIndex idx) { } -void DeviceManager::Forget(QModelIndex idx) { +void DeviceManager::Forget(const QModelIndex &idx) { if (!idx.isValid()) return; @@ -777,7 +779,7 @@ void DeviceManager::Forget(QModelIndex idx) { } -void DeviceManager::RemoveFromDB(DeviceInfo *info, QModelIndex idx) { +void DeviceManager::RemoveFromDB(DeviceInfo *info, const QModelIndex &idx) { backend_->RemoveDevice(info->database_id_); info->database_id_ = -1; @@ -798,7 +800,7 @@ void DeviceManager::RemoveFromDB(DeviceInfo *info, QModelIndex idx) { } -void DeviceManager::SetDeviceOptions(QModelIndex idx, const QString &friendly_name, const QString &icon_name, MusicStorage::TranscodeMode mode, Song::FileType format) { +void DeviceManager::SetDeviceOptions(const QModelIndex &idx, const QString &friendly_name, const QString &icon_name, const MusicStorage::TranscodeMode mode, const Song::FileType format) { if (!idx.isValid()) return; @@ -817,7 +819,7 @@ void DeviceManager::SetDeviceOptions(QModelIndex idx, const QString &friendly_na } -void DeviceManager::DeviceTaskStarted(int id) { +void DeviceManager::DeviceTaskStarted(const int id) { ConnectedDevice *device = qobject_cast(sender()); if (!device) return; @@ -873,11 +875,11 @@ void DeviceManager::TasksChanged() { } -void DeviceManager::UnmountAsync(QModelIndex idx) { +void DeviceManager::UnmountAsync(const QModelIndex &idx) { Q_ASSERT(QMetaObject::invokeMethod(this, "Unmount", Q_ARG(QModelIndex, idx))); } -void DeviceManager::Unmount(QModelIndex idx) { +void DeviceManager::Unmount(const QModelIndex &idx) { if (!idx.isValid()) return; @@ -896,7 +898,7 @@ void DeviceManager::Unmount(QModelIndex idx) { } -void DeviceManager::DeviceSongCountUpdated(int count) { +void DeviceManager::DeviceSongCountUpdated(const int count) { Q_UNUSED(count); diff --git a/src/device/devicemanager.h b/src/device/devicemanager.h index ce4d22105..675934c56 100644 --- a/src/device/devicemanager.h +++ b/src/device/devicemanager.h @@ -92,10 +92,10 @@ class DeviceManager : public SimpleTreeModel { DeviceStateFilterModel *connected_devices_model() const { return connected_devices_model_; } // Get info about devices - int GetDatabaseId(QModelIndex idx) const; - DeviceLister *GetLister(QModelIndex idx) const; - DeviceInfo *GetDevice(QModelIndex idx) const; - std::shared_ptr GetConnectedDevice(QModelIndex idx) const; + int GetDatabaseId(const QModelIndex &idx) const; + DeviceLister *GetLister(const QModelIndex &idx) const; + DeviceInfo *GetDevice(const QModelIndex &idx) const; + std::shared_ptr GetConnectedDevice(const QModelIndex &idx) const; std::shared_ptr GetConnectedDevice(DeviceInfo *info) const; DeviceInfo *FindDeviceById(const QString &id) const; @@ -105,18 +105,18 @@ class DeviceManager : public SimpleTreeModel { // Actions on devices std::shared_ptr Connect(DeviceInfo *info); - std::shared_ptr Connect(QModelIndex idx); - void Disconnect(DeviceInfo *info, QModelIndex idx); - void Forget(QModelIndex idx); - void UnmountAsync(QModelIndex idx); + std::shared_ptr Connect(const QModelIndex &idx); + void Disconnect(DeviceInfo *info, const QModelIndex &idx); + void Forget(const QModelIndex &idx); + void UnmountAsync(const QModelIndex &idx); - void SetDeviceOptions(QModelIndex idx, const QString &friendly_name, const QString &icon_name, MusicStorage::TranscodeMode mode, Song::FileType format); + void SetDeviceOptions(const QModelIndex &idx, const QString &friendly_name, const QString &icon_name, const MusicStorage::TranscodeMode mode, const Song::FileType format); // QAbstractItemModel QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override; public slots: - void Unmount(QModelIndex idx); + void Unmount(const QModelIndex &idx); signals: void ExitFinished(); @@ -128,9 +128,9 @@ class DeviceManager : public SimpleTreeModel { void PhysicalDeviceAdded(const QString &id); void PhysicalDeviceRemoved(const QString &id); void PhysicalDeviceChanged(const QString &id); - void DeviceTaskStarted(int id); + void DeviceTaskStarted(const int id); void TasksChanged(); - void DeviceSongCountUpdated(int count); + void DeviceSongCountUpdated(const int count); void LoadAllDevices(); void DeviceConnectFinished(const QString &id, bool success); void DeviceCloseFinished(const QString &id); @@ -149,7 +149,7 @@ class DeviceManager : public SimpleTreeModel { DeviceDatabaseBackend::Device InfoToDatabaseDevice(const DeviceInfo &info) const; - void RemoveFromDB(DeviceInfo *info, QModelIndex idx); + void RemoveFromDB(DeviceInfo *info, const QModelIndex &idx); void CloseDevices(); void CloseListers(); diff --git a/src/device/deviceproperties.cpp b/src/device/deviceproperties.cpp index 19b737a80..0540bb39d 100644 --- a/src/device/deviceproperties.cpp +++ b/src/device/deviceproperties.cpp @@ -86,7 +86,7 @@ void DeviceProperties::SetDeviceManager(DeviceManager *manager) { } -void DeviceProperties::ShowDevice(QModelIndex idx) { +void DeviceProperties::ShowDevice(const QModelIndex &idx) { if (ui_->icon->count() == 0) { // Only load the icons the first time the dialog is shown @@ -108,7 +108,7 @@ void DeviceProperties::ShowDevice(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.type_); + ui_->transcode_format->addItem(preset.name_, preset.filetype_); } ui_->transcode_format->model()->sort(0); #endif @@ -317,7 +317,7 @@ void DeviceProperties::UpdateFormatsFinished() { #ifdef HAVE_GSTREAMER // Set the format combobox item TranscoderPreset preset = Transcoder::PresetForFileType(Song::FileType(index_.data(DeviceManager::Role_TranscodeFormat).toInt())); - if (preset.type_ == 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/deviceproperties.h b/src/device/deviceproperties.h index 2ebcb57a0..2485f2cc3 100644 --- a/src/device/deviceproperties.h +++ b/src/device/deviceproperties.h @@ -46,7 +46,7 @@ class DeviceProperties : public QDialog { ~DeviceProperties() override; void SetDeviceManager(DeviceManager *manager); - void ShowDevice(QModelIndex idx); + void ShowDevice(const QModelIndex &idx); public slots: void accept() override; diff --git a/src/device/devicestatefiltermodel.cpp b/src/device/devicestatefiltermodel.cpp index a91c5f2b8..4743fd54b 100644 --- a/src/device/devicestatefiltermodel.cpp +++ b/src/device/devicestatefiltermodel.cpp @@ -44,7 +44,7 @@ bool DeviceStateFilterModel::filterAcceptsRow(int row, const QModelIndex&) const return sourceModel()->index(row, 0).data(DeviceManager::Role_State).toInt() != state_ && sourceModel()->index(row, 0).data(DeviceManager::Role_CopyMusic).toBool(); } -void DeviceStateFilterModel::ProxyRowCountChanged(QModelIndex, int, int) { +void DeviceStateFilterModel::ProxyRowCountChanged(const QModelIndex&, const int, const int) { emit IsEmptyChanged(rowCount() == 0); diff --git a/src/device/devicestatefiltermodel.h b/src/device/devicestatefiltermodel.h index 7360907c3..c87d46818 100644 --- a/src/device/devicestatefiltermodel.h +++ b/src/device/devicestatefiltermodel.h @@ -42,14 +42,14 @@ class DeviceStateFilterModel : public QSortFilterProxyModel { void setSourceModel(QAbstractItemModel *sourceModel) override; signals: - void IsEmptyChanged(bool is_empty); + void IsEmptyChanged(const bool is_empty); protected: bool filterAcceptsRow(int row, const QModelIndex &parent) const override; private slots: void ProxyReset(); - void ProxyRowCountChanged(QModelIndex idx, int first, int last); + void ProxyRowCountChanged(const QModelIndex &idx, const int first, const int last); private: DeviceManager::State state_; diff --git a/src/device/deviceview.cpp b/src/device/deviceview.cpp index 3831ba872..28d129c1b 100644 --- a/src/device/deviceview.cpp +++ b/src/device/deviceview.cpp @@ -301,7 +301,7 @@ void DeviceView::Connect() { app_->device_manager()->data(device_idx, MusicStorage::Role_StorageForceConnect); } -void DeviceView::DeviceConnected(QModelIndex idx) { +void DeviceView::DeviceConnected(const QModelIndex &idx) { if (!idx.isValid()) return; @@ -322,7 +322,7 @@ void DeviceView::DeviceConnected(QModelIndex idx) { } -void DeviceView::DeviceDisconnected(QModelIndex idx) { +void DeviceView::DeviceDisconnected(const QModelIndex &idx) { if (!idx.isValid()) return; merged_model_->RemoveSubModel(sort_model_->mapFromSource(idx)); } @@ -430,8 +430,9 @@ void DeviceView::Delete() { void DeviceView::Organize() { - SongList songs = GetSelectedSongs(); + const SongList songs = GetSelectedSongs(); QStringList filenames; + filenames.reserve(songs.count()); for (const Song &song : songs) { filenames << song.url().toLocalFile(); } diff --git a/src/device/deviceview.h b/src/device/deviceview.h index 70633aa5a..15bde7841 100644 --- a/src/device/deviceview.h +++ b/src/device/deviceview.h @@ -91,8 +91,8 @@ class DeviceView : public AutoExpandingTreeView { void Organize(); void Delete(); - void DeviceConnected(QModelIndex idx); - void DeviceDisconnected(QModelIndex idx); + void DeviceConnected(const QModelIndex &idx); + void DeviceDisconnected(const QModelIndex &idx); void DeleteFinished(const SongList &songs_with_errors); diff --git a/src/device/filesystemdevice.cpp b/src/device/filesystemdevice.cpp index 26e93ae36..a16d1f0f2 100644 --- a/src/device/filesystemdevice.cpp +++ b/src/device/filesystemdevice.cpp @@ -41,9 +41,9 @@ class DeviceLister; -FilesystemDevice::FilesystemDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, int database_id, bool first_time) +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(url.toLocalFile()), - ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time), + ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), watcher_(new CollectionWatcher(Song::Source_Device)), watcher_thread_(new QThread(this)) { @@ -106,7 +106,7 @@ void FilesystemDevice::Close() { void FilesystemDevice::ExitFinished() { - QObject *obj = qobject_cast(sender()); + QObject *obj = sender(); if (!obj) return; QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully exited."; diff --git a/src/device/filesystemdevice.h b/src/device/filesystemdevice.h index 53b4827a7..c7fa54f98 100644 --- a/src/device/filesystemdevice.h +++ b/src/device/filesystemdevice.h @@ -43,11 +43,7 @@ class FilesystemDevice : public ConnectedDevice, public virtual FilesystemMusicS Q_OBJECT public: - Q_INVOKABLE FilesystemDevice( - const QUrl &url, DeviceLister *lister, - const QString &unique_id, DeviceManager *manager, - Application *app, - int database_id, bool first_time); + 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; bool Init() override; diff --git a/src/device/giolister.cpp b/src/device/giolister.cpp index eaa7669bd..77870c17f 100644 --- a/src/device/giolister.cpp +++ b/src/device/giolister.cpp @@ -182,9 +182,9 @@ QVariantMap GioLister::DeviceHardwareInfo(const QString &id) { if (!devices_.contains(id)) return ret; const DeviceInfo &info = devices_[id]; - ret[QT_TR_NOOP("Mount point")] = info.mount_path; - ret[QT_TR_NOOP("Device")] = info.volume_unix_device; - ret[QT_TR_NOOP("URI")] = info.mount_uri; + ret[QT_TR_NOOP("Mount point")] = info.mount_path; // clazy:exclude=qt6-deprecated-api-fixes + ret[QT_TR_NOOP("Device")] = info.volume_unix_device; // clazy:exclude=qt6-deprecated-api-fixes + ret[QT_TR_NOOP("URI")] = info.mount_uri; // clazy:exclude=qt6-deprecated-api-fixes return ret; } @@ -243,7 +243,7 @@ QList GioLister::MakeDeviceUrls(const QString &id) { url.setQuery(url_query); } - ret << url; + ret << url; // clazy:exclude=reserve-candidates } } diff --git a/src/device/giolister.h b/src/device/giolister.h index bbf997738..7f53f8063 100644 --- a/src/device/giolister.h +++ b/src/device/giolister.h @@ -50,7 +50,7 @@ class GioLister : public DeviceLister { Q_OBJECT public: - explicit GioLister() {} + explicit GioLister(QObject *parent = nullptr) : DeviceLister(parent) {} ~GioLister() override; int priority() const override { return 50; } diff --git a/src/device/gpoddevice.cpp b/src/device/gpoddevice.cpp index 59fc820e4..cb943cb18 100644 --- a/src/device/gpoddevice.cpp +++ b/src/device/gpoddevice.cpp @@ -51,8 +51,8 @@ class DeviceLister; class DeviceManager; -GPodDevice::GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time) - : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time), +GPodDevice::GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent) + : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), loader_(nullptr), loader_thread_(nullptr), db_(nullptr), diff --git a/src/device/gpoddevice.h b/src/device/gpoddevice.h index b2c39b4ef..0f976aa13 100644 --- a/src/device/gpoddevice.h +++ b/src/device/gpoddevice.h @@ -51,7 +51,7 @@ class GPodDevice : public ConnectedDevice, public virtual MusicStorage { Q_OBJECT public: - Q_INVOKABLE GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time); + Q_INVOKABLE GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr); ~GPodDevice() override; bool Init() override; diff --git a/src/device/gpodloader.cpp b/src/device/gpodloader.cpp index 3b1a09a8b..0d256ef97 100644 --- a/src/device/gpodloader.cpp +++ b/src/device/gpodloader.cpp @@ -36,8 +36,8 @@ #include "core/taskmanager.h" #include "gpodloader.h" -GPodLoader::GPodLoader(const QString &mount_point, TaskManager *task_manager, CollectionBackend *backend, std::shared_ptr device) - : QObject(nullptr), +GPodLoader::GPodLoader(const QString &mount_point, TaskManager *task_manager, CollectionBackend *backend, std::shared_ptr device, QObject *parent) + : QObject(parent), device_(device), mount_point_(mount_point), type_(Song::FileType_Unknown), diff --git a/src/device/gpodloader.h b/src/device/gpodloader.h index 56871d020..7ce84f844 100644 --- a/src/device/gpodloader.h +++ b/src/device/gpodloader.h @@ -41,7 +41,7 @@ class GPodLoader : public QObject { Q_OBJECT public: - explicit GPodLoader(const QString &mount_point, TaskManager *task_manager, CollectionBackend *backend, std::shared_ptr device); + explicit GPodLoader(const QString &mount_point, TaskManager *task_manager, CollectionBackend *backend, std::shared_ptr device, QObject *parent = nullptr); ~GPodLoader() override; void set_music_path_prefix(const QString &prefix) { path_prefix_ = prefix; } diff --git a/src/device/macosdevicelister.h b/src/device/macosdevicelister.h index 940d405c7..534b5d16e 100644 --- a/src/device/macosdevicelister.h +++ b/src/device/macosdevicelister.h @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -43,7 +44,7 @@ class MacOsDeviceLister : public DeviceLister { Q_OBJECT public: - explicit MacOsDeviceLister(); + explicit MacOsDeviceLister(QObject *parent = nullptr); ~MacOsDeviceLister(); QStringList DeviceUniqueIDs(); diff --git a/src/device/macosdevicelister.mm b/src/device/macosdevicelister.mm index ae14256c7..fbfb5201f 100644 --- a/src/device/macosdevicelister.mm +++ b/src/device/macosdevicelister.mm @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include #include @@ -109,7 +109,7 @@ uint qHash(const MacOsDeviceLister::MTPDevice &d) { return qHash(d.vendor_id) ^ qHash(d.product_id); } -MacOsDeviceLister::MacOsDeviceLister() {} +MacOsDeviceLister::MacOsDeviceLister(QObject *parent) : DeviceLister(parent) {} MacOsDeviceLister::~MacOsDeviceLister() { CFRelease(loop_session_); } diff --git a/src/device/mtpconnection.cpp b/src/device/mtpconnection.cpp index 826311bd4..600ebfe1f 100644 --- a/src/device/mtpconnection.cpp +++ b/src/device/mtpconnection.cpp @@ -36,7 +36,7 @@ #include "core/logging.h" #include "mtpconnection.h" -MtpConnection::MtpConnection(const QUrl &url) : device_(nullptr) { +MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent), device_(nullptr) { QString hostname = url.host(); // Parse the URL @@ -72,7 +72,7 @@ MtpConnection::MtpConnection(const QUrl &url) : device_(nullptr) { raw_device->bus_location = bus_location; raw_device->devnum = device_num; - device_ = LIBMTP_Open_Raw_Device(raw_device); + device_ = LIBMTP_Open_Raw_Device(raw_device); // NOLINT(clang-analyzer-unix.Malloc) return; } diff --git a/src/device/mtpconnection.h b/src/device/mtpconnection.h index 2e1003e18..8fb558a7a 100644 --- a/src/device/mtpconnection.h +++ b/src/device/mtpconnection.h @@ -35,8 +35,10 @@ #include "core/song.h" class MtpConnection : public QObject, public std::enable_shared_from_this { + Q_OBJECT + public: - explicit MtpConnection(const QUrl &url); + explicit MtpConnection(const QUrl &url, QObject *parent = nullptr); ~MtpConnection() override; bool is_valid() const { return device_; } diff --git a/src/device/mtpdevice.cpp b/src/device/mtpdevice.cpp index b8c41a58b..37dfad86f 100644 --- a/src/device/mtpdevice.cpp +++ b/src/device/mtpdevice.cpp @@ -49,8 +49,8 @@ class DeviceManager; bool MtpDevice::sInitializedLibMTP = false; -MtpDevice::MtpDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time) - : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time), +MtpDevice::MtpDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent) + : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), loader_(nullptr), loader_thread_(nullptr), closing_(false) { diff --git a/src/device/mtpdevice.h b/src/device/mtpdevice.h index d3958124f..07d2989ac 100644 --- a/src/device/mtpdevice.h +++ b/src/device/mtpdevice.h @@ -48,7 +48,7 @@ class MtpDevice : public ConnectedDevice { Q_OBJECT public: - Q_INVOKABLE MtpDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time); + Q_INVOKABLE MtpDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, DeviceManager *manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr); ~MtpDevice() override; static QStringList url_schemes() { return QStringList() << "mtp"; } diff --git a/src/device/mtploader.cpp b/src/device/mtploader.cpp index 2ebe30ee6..3b1e2b19d 100644 --- a/src/device/mtploader.cpp +++ b/src/device/mtploader.cpp @@ -32,8 +32,8 @@ #include "mtpconnection.h" #include "mtploader.h" -MtpLoader::MtpLoader(const QUrl &url, TaskManager *task_manager, CollectionBackend *backend) - : QObject(nullptr), +MtpLoader::MtpLoader(const QUrl &url, TaskManager *task_manager, CollectionBackend *backend, QObject *parent) + : QObject(parent), url_(url), task_manager_(task_manager), backend_(backend), diff --git a/src/device/mtploader.h b/src/device/mtploader.h index 518f569ad..b6a18119e 100644 --- a/src/device/mtploader.h +++ b/src/device/mtploader.h @@ -39,7 +39,7 @@ class MtpLoader : public QObject { Q_OBJECT public: - explicit MtpLoader(const QUrl &url, TaskManager *task_manager, CollectionBackend *backend); + explicit MtpLoader(const QUrl &url, TaskManager *task_manager, CollectionBackend *backend, QObject *parent = nullptr); ~MtpLoader() override; bool Init(); diff --git a/src/device/udisks2lister.cpp b/src/device/udisks2lister.cpp index bf831b920..080503cf7 100644 --- a/src/device/udisks2lister.cpp +++ b/src/device/udisks2lister.cpp @@ -52,7 +52,7 @@ constexpr char Udisks2Lister::udisks2_service_[]; -Udisks2Lister::Udisks2Lister() {} +Udisks2Lister::Udisks2Lister(QObject *parent) : DeviceLister(parent) {} Udisks2Lister::~Udisks2Lister() {} @@ -111,11 +111,11 @@ QVariantMap Udisks2Lister::DeviceHardwareInfo(const QString &id) { QVariantMap result; const auto &data = device_data_[id]; - result[QT_TR_NOOP("D-Bus path")] = data.dbus_path; - result[QT_TR_NOOP("Serial number")] = data.serial; - result[QT_TR_NOOP("Mount points")] = data.mount_paths.join(", "); - result[QT_TR_NOOP("Partition label")] = data.label; - result[QT_TR_NOOP("UUID")] = data.uuid; + result[QT_TR_NOOP("D-Bus path")] = data.dbus_path; // clazy:exclude=qt6-deprecated-api-fixes + result[QT_TR_NOOP("Serial number")] = data.serial; // clazy:exclude=qt6-deprecated-api-fixes + result[QT_TR_NOOP("Mount points")] = data.mount_paths.join(", "); // clazy:exclude=qt6-deprecated-api-fixes + result[QT_TR_NOOP("Partition label")] = data.label; // clazy:exclude=qt6-deprecated-api-fixes + result[QT_TR_NOOP("UUID")] = data.uuid; // clazy:exclude=qt6-deprecated-api-fixes return result; diff --git a/src/device/udisks2lister.h b/src/device/udisks2lister.h index 67493171d..f1359e385 100644 --- a/src/device/udisks2lister.h +++ b/src/device/udisks2lister.h @@ -50,7 +50,7 @@ class Udisks2Lister : public DeviceLister { Q_OBJECT public: - explicit Udisks2Lister(); + explicit Udisks2Lister(QObject *parent = nullptr); ~Udisks2Lister() override; QStringList DeviceUniqueIDs() override; diff --git a/src/dialogs/console.cpp b/src/dialogs/console.cpp index 488f3fedf..082574b08 100644 --- a/src/dialogs/console.cpp +++ b/src/dialogs/console.cpp @@ -68,7 +68,8 @@ void Console::RunQuery() { while (query.isValid()) { QSqlRecord record = query.record(); - QStringList values; + QStringList values; // clazy:exclude=container-inside-loop + values.reserve(record.count()); for (int i = 0; i < record.count(); ++i) { values.append(record.value(i).toString()); } diff --git a/src/dialogs/edittagdialog.cpp b/src/dialogs/edittagdialog.cpp index f0bc0db9e..edcf262f3 100644 --- a/src/dialogs/edittagdialog.cpp +++ b/src/dialogs/edittagdialog.cpp @@ -148,7 +148,7 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent) QWidget *widget = label->buddy(); if (widget) { // Store information about the field - fields_ << FieldData(label, widget, widget->objectName()); + fields_ << FieldData(label, widget, widget->objectName()); // clazy:exclude=reserve-candidates // Connect the edited signal if (LineEdit *lineedit = qobject_cast(widget)) { @@ -355,7 +355,8 @@ bool EditTagDialog::eventFilter(QObject *o, QEvent *e) { break; } } - return false; + + return QDialog::eventFilter(o, e); } @@ -555,7 +556,7 @@ void EditTagDialog::UpdateFieldValue(const FieldData &field, const QModelIndexLi QVariant value; if (ExtendedEditor *editor = dynamic_cast(field.editor_)) { - value = editor->value(); + value = editor->value(); // clazy:exclude=qt6-deprecated-api-fixes } else if (field.editor_) { qLog(Error) << "Missing editor for" << field.editor_->objectName(); diff --git a/src/dialogs/trackselectiondialog.cpp b/src/dialogs/trackselectiondialog.cpp index f5a09768a..93c22b044 100644 --- a/src/dialogs/trackselectiondialog.cpp +++ b/src/dialogs/trackselectiondialog.cpp @@ -314,7 +314,7 @@ void TrackSelectionDialog::accept() { void TrackSelectionDialog::AcceptFinished() { - QFutureWatcher *watcher = dynamic_cast*>(sender()); + QFutureWatcher *watcher = static_cast*>(sender()); if (!watcher) return; watcher->deleteLater(); diff --git a/src/engine/alsadevicefinder.cpp b/src/engine/alsadevicefinder.cpp index 2d868b938..53c78716a 100644 --- a/src/engine/alsadevicefinder.cpp +++ b/src/engine/alsadevicefinder.cpp @@ -64,7 +64,7 @@ QList AlsaDeviceFinder::ListDevices() { qLog(Error) << "Unable to open soundcard" << card << ":" << snd_strerror(result); continue; } - BOOST_SCOPE_EXIT(&handle) { snd_ctl_close(handle); } + BOOST_SCOPE_EXIT(&handle) { snd_ctl_close(handle); } // clazy:exclude=rule-of-three NOLINT(google-explicit-constructor) BOOST_SCOPE_EXIT_END result = snd_ctl_card_info(handle, cardinfo); @@ -101,9 +101,9 @@ QList AlsaDeviceFinder::ListDevices() { device.card = card; device.device = dev; - device.value = QString("hw:%1,%2").arg(card).arg(dev); + device.value = QString("hw:%1,%2").arg(card).arg(dev); // clazy:exclude=qt6-deprecated-api-fixes ret.append(device); - device.value = QString("plughw:%1,%2").arg(card).arg(dev); + device.value = QString("plughw:%1,%2").arg(card).arg(dev); // clazy:exclude=qt6-deprecated-api-fixes ret.append(device); } diff --git a/src/engine/alsadevicefinder.h b/src/engine/alsadevicefinder.h index b877da77c..cd3a587d0 100644 --- a/src/engine/alsadevicefinder.h +++ b/src/engine/alsadevicefinder.h @@ -32,6 +32,9 @@ class AlsaDeviceFinder : public DeviceFinder { bool Initialize() override { return true; } QList ListDevices() override; + + private: + Q_DISABLE_COPY(AlsaDeviceFinder) }; #endif // ALSADEVICEFINDER_H diff --git a/src/engine/alsapcmdevicefinder.cpp b/src/engine/alsapcmdevicefinder.cpp index 5e234f70f..833dfd415 100644 --- a/src/engine/alsapcmdevicefinder.cpp +++ b/src/engine/alsapcmdevicefinder.cpp @@ -68,10 +68,10 @@ QList AlsaPCMDeviceFinder::ListDevices() { } Device device; - device.value = name; + device.value = name; // clazy:exclude=qt6-deprecated-api-fixes device.description = description; device.iconname = GuessIconName(device.description); - ret << device; + ret << device; // clazy:exclude=reserve-candidates } if (io) free(io); if (name) free(name); diff --git a/src/engine/alsapcmdevicefinder.h b/src/engine/alsapcmdevicefinder.h index 5d569602f..04bbf8bb7 100644 --- a/src/engine/alsapcmdevicefinder.h +++ b/src/engine/alsapcmdevicefinder.h @@ -32,6 +32,9 @@ class AlsaPCMDeviceFinder : public DeviceFinder { bool Initialize() override { return true; } QList ListDevices() override; + + private: + Q_DISABLE_COPY(AlsaPCMDeviceFinder) }; #endif // ALSAPCMDEVICEFINDER_H diff --git a/src/engine/devicefinder.h b/src/engine/devicefinder.h index 9a932e800..7743f75d6 100644 --- a/src/engine/devicefinder.h +++ b/src/engine/devicefinder.h @@ -33,6 +33,7 @@ class DeviceFinder { public: struct Device { + Device() : card(0), device(0) {} QString description; QVariant value; QString iconname; @@ -44,7 +45,7 @@ class DeviceFinder { QString name() const { return name_; } QStringList outputs() const { return outputs_; } - void add_output(const QString output) { outputs_.append(output); } + void add_output(const QString &output) { outputs_.append(output); } // Does any necessary setup, returning false if this DeviceFinder cannot be used. virtual bool Initialize() = 0; @@ -61,6 +62,7 @@ class DeviceFinder { QString name_; QStringList outputs_; + Q_DISABLE_COPY(DeviceFinder) }; #endif // DEVICEFINDER_H diff --git a/src/engine/enginebase.cpp b/src/engine/enginebase.cpp index 4bad6b359..30bba8ef4 100644 --- a/src/engine/enginebase.cpp +++ b/src/engine/enginebase.cpp @@ -37,8 +37,11 @@ #include "settings/backendsettingspage.h" #include "settings/networkproxysettingspage.h" -Engine::Base::Base() - : volume_(100), +Engine::Base::Base(const EngineType type, QObject *parent) + : QObject(parent), + type_(type), + volume_control_(true), + volume_(100), beginning_nanosec_(0), end_nanosec_(0), scope_(kScopeSize), diff --git a/src/engine/enginebase.h b/src/engine/enginebase.h index e85eddd3f..4742c58a1 100644 --- a/src/engine/enginebase.h +++ b/src/engine/enginebase.h @@ -53,7 +53,7 @@ class Base : public QObject { Q_OBJECT protected: - Base(); + Base(const EngineType type = EngineType::None, QObject *parent = nullptr); public: ~Base() override; diff --git a/src/engine/enginetype.cpp b/src/engine/enginetype.cpp index cb7cf9e5c..6a9b5aacb 100644 --- a/src/engine/enginetype.cpp +++ b/src/engine/enginetype.cpp @@ -25,14 +25,14 @@ namespace Engine { -Engine::EngineType EngineTypeFromName(QString enginename) { +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; } -QString EngineName(Engine::EngineType enginetype) { +QString EngineName(const Engine::EngineType enginetype) { switch (enginetype) { case Engine::GStreamer: return QString("gstreamer"); case Engine::VLC: return QString("vlc"); diff --git a/src/engine/enginetype.h b/src/engine/enginetype.h index 08a54eaa2..48f511fb3 100644 --- a/src/engine/enginetype.h +++ b/src/engine/enginetype.h @@ -34,9 +34,9 @@ enum EngineType { Xine }; -Engine::EngineType EngineTypeFromName(QString enginename); -QString EngineName(Engine::EngineType enginetype); -QString EngineDescription(Engine::EngineType enginetype); +Engine::EngineType EngineTypeFromName(const QString &enginename); +QString EngineName(const Engine::EngineType enginetype); +QString EngineDescription(const Engine::EngineType enginetype); } Q_DECLARE_METATYPE(Engine::EngineType) diff --git a/src/engine/gstbufferconsumer.h b/src/engine/gstbufferconsumer.h index 2bd78173c..d74d27dbe 100644 --- a/src/engine/gstbufferconsumer.h +++ b/src/engine/gstbufferconsumer.h @@ -30,12 +30,16 @@ class GstEnginePipeline; class GstBufferConsumer { -public: + public: + GstBufferConsumer() {} virtual ~GstBufferConsumer() {} // This is called in some unspecified GStreamer thread. // Ownership of the buffer is transferred to the BufferConsumer and it should gst_buffer_unref it. virtual void ConsumeBuffer(GstBuffer *buffer, const int pipeline_id, const QString &format) = 0; + + private: + Q_DISABLE_COPY(GstBufferConsumer) }; #endif // GSTBUFFERCONSUMER_H diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 0eb89d6ec..e216589ae 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -75,8 +75,9 @@ const char *GstEngine::kDirectSoundSink = "directsoundsink"; const char *GstEngine::kOSXAudioSink = "osxaudiosink"; const int GstEngine::kDiscoveryTimeoutS = 10; -GstEngine::GstEngine(TaskManager *task_manager) - : task_manager_(task_manager), +GstEngine::GstEngine(TaskManager *task_manager, QObject *parent) + : Engine::Base(Engine::GStreamer, parent), + task_manager_(task_manager), gst_startup_(nullptr), discoverer_(nullptr), buffering_task_id_(-1), @@ -96,7 +97,6 @@ GstEngine::GstEngine(TaskManager *task_manager) discovery_discovered_cb_id_(-1) { - type_ = Engine::GStreamer; seek_timer_->setSingleShot(true); seek_timer_->setInterval(kSeekDelayNanosec / kNsecPerMsec); QObject::connect(seek_timer_, &QTimer::timeout, this, &GstEngine::SeekNow); @@ -397,10 +397,9 @@ EngineBase::OutputDetailsList GstEngine::GetOutputsList() const { const_cast(this)->EnsureInitialized(); - EngineBase::OutputDetailsList ret; - PluginDetailsList plugins = GetPluginList("Sink/Audio"); - + EngineBase::OutputDetailsList ret; + ret.reserve(plugins.count()); for (const PluginDetails &plugin : plugins) { OutputDetails output; output.name = plugin.name; diff --git a/src/engine/gstengine.h b/src/engine/gstengine.h index 4064e2958..f2e159100 100644 --- a/src/engine/gstengine.h +++ b/src/engine/gstengine.h @@ -58,7 +58,7 @@ class GstEngine : public Engine::Base, public GstBufferConsumer { Q_OBJECT public: - explicit GstEngine(TaskManager *task_manager); + explicit GstEngine(TaskManager *task_manager, QObject *parent = nullptr); ~GstEngine() override; bool Init() override; diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 11bca6113..b95d15ac8 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -66,8 +66,8 @@ const int GstEnginePipeline::kEqBandFrequencies[] = { 60, 170, 310, 600, 1000, 3 int GstEnginePipeline::sId = 1; GstElementDeleter *GstEnginePipeline::sElementDeleter = nullptr; -GstEnginePipeline::GstEnginePipeline(GstEngine *engine) - : QObject(nullptr), +GstEnginePipeline::GstEnginePipeline(GstEngine *engine, QObject *parent) + : QObject(parent), engine_(engine), id_(sId++), valid_(false), @@ -121,6 +121,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine *engine) sElementDeleter = new GstElementDeleter(engine_); } + eq_band_gains_.reserve(kEqBandCount); for (int i = 0; i < kEqBandCount; ++i) eq_band_gains_ << 0; } @@ -213,7 +214,7 @@ void GstEnginePipeline::set_channels(const bool enabled, const int channels) { channels_ = channels; } -bool GstEnginePipeline::InitFromUrl(const QByteArray &stream_url, const QUrl original_url, const qint64 end_nanosec) { +bool GstEnginePipeline::InitFromUrl(const QByteArray &stream_url, const QUrl &original_url, const qint64 end_nanosec) { stream_url_ = stream_url; original_url_ = original_url; diff --git a/src/engine/gstenginepipeline.h b/src/engine/gstenginepipeline.h index db42eb98b..898f06c4d 100644 --- a/src/engine/gstenginepipeline.h +++ b/src/engine/gstenginepipeline.h @@ -58,7 +58,7 @@ class GstEnginePipeline : public QObject { Q_OBJECT public: - explicit GstEnginePipeline(GstEngine *engine); + explicit GstEnginePipeline(GstEngine *engine, QObject *parent = nullptr); ~GstEnginePipeline() override; // Globally unique across all pipelines. @@ -77,7 +77,7 @@ class GstEnginePipeline : public QObject { void set_channels(const bool enabled, const int channels); // Creates the pipeline, returns false on error - bool InitFromUrl(const QByteArray &stream_url, const QUrl original_url, const qint64 end_nanosec); + bool InitFromUrl(const QByteArray &stream_url, const QUrl &original_url, const qint64 end_nanosec); // GstBufferConsumers get fed audio data. Thread-safe. void AddBufferConsumer(GstBufferConsumer *consumer); @@ -97,7 +97,7 @@ class GstEnginePipeline : public QObject { void SetNextUrl(const QByteArray &stream_url, const QUrl &original_url, qint64 beginning_nanosec, qint64 end_nanosec); bool has_next_valid_url() const { return !next_stream_url_.isEmpty(); } - void SetSourceDevice(QString device) { source_device_ = device; } + void SetSourceDevice(const QString &device) { source_device_ = device; } // Get information about the music playback QByteArray stream_url() const { return stream_url_; } diff --git a/src/engine/pulsedevicefinder.cpp b/src/engine/pulsedevicefinder.cpp index ff9eb66ff..fb18977c6 100644 --- a/src/engine/pulsedevicefinder.cpp +++ b/src/engine/pulsedevicefinder.cpp @@ -125,7 +125,7 @@ void PulseDeviceFinder::GetSinkInfoCallback(pa_context *c, const pa_sink_info *i if (info) { Device dev; dev.description = QString::fromUtf8(info->description); - dev.value = QString::fromUtf8(info->name); + dev.value = QString::fromUtf8(info->name); // clazy:exclude=qt6-deprecated-api-fixes dev.iconname = GuessIconName(dev.description); state->devices.append(dev); diff --git a/src/engine/pulsedevicefinder.h b/src/engine/pulsedevicefinder.h index 8bb0312b8..a40150bcf 100644 --- a/src/engine/pulsedevicefinder.h +++ b/src/engine/pulsedevicefinder.h @@ -54,6 +54,7 @@ class PulseDeviceFinder : public DeviceFinder { pa_mainloop *mainloop_; pa_context *context_; + Q_DISABLE_COPY(PulseDeviceFinder) }; #endif // PULSEDEVICEFINDER_H diff --git a/src/engine/vlcengine.cpp b/src/engine/vlcengine.cpp index d43e3eb08..266d2b09c 100644 --- a/src/engine/vlcengine.cpp +++ b/src/engine/vlcengine.cpp @@ -39,14 +39,14 @@ #include "vlcengine.h" #include "vlcscopedref.h" -VLCEngine::VLCEngine(TaskManager *task_manager) - : instance_(nullptr), +VLCEngine::VLCEngine(TaskManager *task_manager, QObject *parent) + : Engine::Base(Engine::VLC, parent), + instance_(nullptr), player_(nullptr), state_(Engine::Empty) { Q_UNUSED(task_manager); - type_ = Engine::VLC; ReloadSettings(); } @@ -215,9 +215,9 @@ qint64 VLCEngine::length_nanosec() const { EngineBase::OutputDetailsList VLCEngine::GetOutputsList() const { - OutputDetailsList ret; - PluginDetailsList plugins = GetPluginList(); + OutputDetailsList ret; + ret.reserve(plugins.count()); for (const PluginDetails &plugin : plugins) { OutputDetails output; output.name = plugin.name; diff --git a/src/engine/vlcengine.h b/src/engine/vlcengine.h index 3603ab54e..e959b2176 100644 --- a/src/engine/vlcengine.h +++ b/src/engine/vlcengine.h @@ -42,7 +42,7 @@ class VLCEngine : public Engine::Base { Q_OBJECT public: - explicit VLCEngine(TaskManager *task_manager); + explicit VLCEngine(TaskManager *task_manager, QObject *parent = nullptr); ~VLCEngine() override; bool Init() override; diff --git a/src/equalizer/equalizer.cpp b/src/equalizer/equalizer.cpp index 578abb98f..5fb280d74 100644 --- a/src/equalizer/equalizer.cpp +++ b/src/equalizer/equalizer.cpp @@ -258,11 +258,14 @@ int Equalizer::preamp_value() const { } QList Equalizer::gain_values() const { + QList ret; + ret.reserve(kBands); for (int i = 0; i < kBands; ++i) { ret << gain_[i]->value(); } return ret; + } Equalizer::Params Equalizer::current_params() const { diff --git a/src/globalshortcuts/globalshortcut.cpp b/src/globalshortcuts/globalshortcut.cpp index ce4fa009c..bda8ec8b3 100644 --- a/src/globalshortcuts/globalshortcut.cpp +++ b/src/globalshortcuts/globalshortcut.cpp @@ -51,7 +51,7 @@ GlobalShortcut::GlobalShortcut(QObject *parent) : QObject(parent), } -GlobalShortcut::GlobalShortcut(QKeySequence shortcut, GlobalShortcutsBackend *backend, QObject *parent) : QObject(parent), +GlobalShortcut::GlobalShortcut(const QKeySequence &shortcut, GlobalShortcutsBackend *backend, QObject *parent) : QObject(parent), backend_(backend), shortcut_(shortcut), qt_key_(Qt::Key(0)), diff --git a/src/globalshortcuts/globalshortcut.h b/src/globalshortcuts/globalshortcut.h index bfdac1551..1cff3945f 100644 --- a/src/globalshortcuts/globalshortcut.h +++ b/src/globalshortcuts/globalshortcut.h @@ -39,7 +39,7 @@ class GlobalShortcut : public QObject, QAbstractNativeEventFilter { public: explicit GlobalShortcut(QObject *parent = nullptr); - explicit GlobalShortcut(QKeySequence shortcut, GlobalShortcutsBackend *backend, QObject *parent = nullptr); + explicit GlobalShortcut(const QKeySequence &shortcut, GlobalShortcutsBackend *backend, QObject *parent = nullptr); ~GlobalShortcut() override; GlobalShortcutsBackend *backend() const { return backend_; } diff --git a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp index 64fcdd19c..02cbb080d 100644 --- a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp @@ -42,8 +42,8 @@ const char *GlobalShortcutsBackendGnome::kService1 = "org.gnome.SettingsDaemon.M const char *GlobalShortcutsBackendGnome::kService2 = "org.gnome.SettingsDaemon"; const char *GlobalShortcutsBackendGnome::kPath = "/org/gnome/SettingsDaemon/MediaKeys"; -GlobalShortcutsBackendGnome::GlobalShortcutsBackendGnome(GlobalShortcutsManager *parent) - : GlobalShortcutsBackend(parent), +GlobalShortcutsBackendGnome::GlobalShortcutsBackendGnome(GlobalShortcutsManager *manager, QObject *parent) + : GlobalShortcutsBackend(manager, parent), interface_(nullptr), is_connected_(false) {} diff --git a/src/globalshortcuts/globalshortcutsbackend-gnome.h b/src/globalshortcuts/globalshortcutsbackend-gnome.h index 1327319bc..d725b7a32 100644 --- a/src/globalshortcuts/globalshortcutsbackend-gnome.h +++ b/src/globalshortcuts/globalshortcutsbackend-gnome.h @@ -37,7 +37,7 @@ class GlobalShortcutsBackendGnome : public GlobalShortcutsBackend { Q_OBJECT public: - explicit GlobalShortcutsBackendGnome(GlobalShortcutsManager *parent); + explicit GlobalShortcutsBackendGnome(GlobalShortcutsManager *manager, QObject *parent = nullptr); bool IsAvailable() override; diff --git a/src/globalshortcuts/globalshortcutsbackend-kde.cpp b/src/globalshortcuts/globalshortcutsbackend-kde.cpp index 8a774287e..b3e03ecc0 100644 --- a/src/globalshortcuts/globalshortcutsbackend-kde.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-kde.cpp @@ -41,7 +41,7 @@ const char *GlobalShortcutsBackendKDE::kKdeService = "org.kde.kglobalaccel"; const char *GlobalShortcutsBackendKDE::kKdePath = "/kglobalaccel"; -GlobalShortcutsBackendKDE::GlobalShortcutsBackendKDE(GlobalShortcutsManager *parent) : GlobalShortcutsBackend(parent), interface_(nullptr), component_(nullptr) {} +GlobalShortcutsBackendKDE::GlobalShortcutsBackendKDE(GlobalShortcutsManager *manager, QObject *parent) : GlobalShortcutsBackend(manager, parent), interface_(nullptr), component_(nullptr) {} bool GlobalShortcutsBackendKDE::IsAvailable() { @@ -174,6 +174,7 @@ QStringList GlobalShortcutsBackendKDE::GetActionId(const QString &id, const QAct QList GlobalShortcutsBackendKDE::ToIntList(const QList &sequence_list) { QList ret; + ret.reserve(sequence_list.count()); for (const QKeySequence &sequence : sequence_list) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) ret.append(sequence[0].toCombined()); @@ -189,6 +190,7 @@ QList GlobalShortcutsBackendKDE::ToIntList(const QList &seque QList GlobalShortcutsBackendKDE::ToKeySequenceList(const QList &sequence_list) { QList ret; + ret.reserve(sequence_list.count()); for (int sequence : sequence_list) { ret.append(sequence); } diff --git a/src/globalshortcuts/globalshortcutsbackend-kde.h b/src/globalshortcuts/globalshortcutsbackend-kde.h index 8c50e6926..58c7a52ad 100644 --- a/src/globalshortcuts/globalshortcutsbackend-kde.h +++ b/src/globalshortcuts/globalshortcutsbackend-kde.h @@ -41,7 +41,7 @@ class GlobalShortcutsBackendKDE : public GlobalShortcutsBackend { Q_OBJECT public: - explicit GlobalShortcutsBackendKDE(GlobalShortcutsManager *parent); + explicit GlobalShortcutsBackendKDE(GlobalShortcutsManager *manager, QObject *parent = nullptr); bool IsAvailable() override; diff --git a/src/globalshortcuts/globalshortcutsbackend-macos.h b/src/globalshortcuts/globalshortcutsbackend-macos.h index 218603c6f..43d7eb510 100644 --- a/src/globalshortcuts/globalshortcutsbackend-macos.h +++ b/src/globalshortcuts/globalshortcutsbackend-macos.h @@ -40,7 +40,7 @@ class GlobalShortcutsBackendMacOS : public GlobalShortcutsBackend { Q_OBJECT public: - explicit GlobalShortcutsBackendMacOS(GlobalShortcutsManager* parent); + explicit GlobalShortcutsBackendMacOS(GlobalShortcutsManager *manager, QObject *parent = nullptr); virtual ~GlobalShortcutsBackendMacOS(); bool IsAvailable() override { return true; } diff --git a/src/globalshortcuts/globalshortcutsbackend-macos.mm b/src/globalshortcuts/globalshortcutsbackend-macos.mm index 9ed4070ea..e88917a63 100644 --- a/src/globalshortcuts/globalshortcutsbackend-macos.mm +++ b/src/globalshortcuts/globalshortcutsbackend-macos.mm @@ -77,8 +77,8 @@ class GlobalShortcutsBackendMacOSPrivate : boost::noncopyable { GlobalShortcutsBackendMacOS *backend_; }; -GlobalShortcutsBackendMacOS::GlobalShortcutsBackendMacOS(GlobalShortcutsManager *parent) - : GlobalShortcutsBackend(parent), +GlobalShortcutsBackendMacOS::GlobalShortcutsBackendMacOS(GlobalShortcutsManager *manager, QObject *parent) + : GlobalShortcutsBackend(manager, parent), p_(new GlobalShortcutsBackendMacOSPrivate(this)) {} GlobalShortcutsBackendMacOS::~GlobalShortcutsBackendMacOS() {} diff --git a/src/globalshortcuts/globalshortcutsbackend-mate.cpp b/src/globalshortcuts/globalshortcutsbackend-mate.cpp index 91dd29694..f1a8c2222 100644 --- a/src/globalshortcuts/globalshortcutsbackend-mate.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-mate.cpp @@ -40,8 +40,8 @@ const char *GlobalShortcutsBackendMate::kService1 = "org.mate.SettingsDaemon.Med const char *GlobalShortcutsBackendMate::kService2 = "org.mate.SettingsDaemon"; const char *GlobalShortcutsBackendMate::kPath = "/org/mate/SettingsDaemon/MediaKeys"; -GlobalShortcutsBackendMate::GlobalShortcutsBackendMate(GlobalShortcutsManager *parent) - : GlobalShortcutsBackend(parent), +GlobalShortcutsBackendMate::GlobalShortcutsBackendMate(GlobalShortcutsManager *manager, QObject *parent) + : GlobalShortcutsBackend(manager, parent), interface_(nullptr), is_connected_(false) {} diff --git a/src/globalshortcuts/globalshortcutsbackend-mate.h b/src/globalshortcuts/globalshortcutsbackend-mate.h index fdea64cf4..c801c6af8 100644 --- a/src/globalshortcuts/globalshortcutsbackend-mate.h +++ b/src/globalshortcuts/globalshortcutsbackend-mate.h @@ -35,7 +35,7 @@ class GlobalShortcutsBackendMate : public GlobalShortcutsBackend { Q_OBJECT public: - explicit GlobalShortcutsBackendMate(GlobalShortcutsManager *parent); + explicit GlobalShortcutsBackendMate(GlobalShortcutsManager *manager, QObject *parent = nullptr); bool IsAvailable() override; diff --git a/src/globalshortcuts/globalshortcutsbackend-system.cpp b/src/globalshortcuts/globalshortcutsbackend-system.cpp index ca3112e05..0602e0ac4 100644 --- a/src/globalshortcuts/globalshortcutsbackend-system.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-system.cpp @@ -33,9 +33,9 @@ #include "globalshortcutsbackend.h" #include "globalshortcut.h" -GlobalShortcutsBackendSystem::GlobalShortcutsBackendSystem(GlobalShortcutsManager *parent) : GlobalShortcutsBackend(parent), gshortcut_init_(nullptr) {} +GlobalShortcutsBackendSystem::GlobalShortcutsBackendSystem(GlobalShortcutsManager *manager, QObject *parent) : GlobalShortcutsBackend(manager, parent), gshortcut_init_(nullptr) {} -GlobalShortcutsBackendSystem::~GlobalShortcutsBackendSystem() { DoUnregister(); } +GlobalShortcutsBackendSystem::~GlobalShortcutsBackendSystem() { GlobalShortcutsBackendSystem::DoUnregister(); } bool GlobalShortcutsBackendSystem::DoRegister() { diff --git a/src/globalshortcuts/globalshortcutsbackend-system.h b/src/globalshortcuts/globalshortcutsbackend-system.h index fcdfe0785..cb8492323 100644 --- a/src/globalshortcuts/globalshortcutsbackend-system.h +++ b/src/globalshortcuts/globalshortcutsbackend-system.h @@ -38,7 +38,7 @@ class GlobalShortcutsBackendSystem : public GlobalShortcutsBackend { Q_OBJECT public: - explicit GlobalShortcutsBackendSystem(GlobalShortcutsManager *parent = nullptr); + explicit GlobalShortcutsBackendSystem(GlobalShortcutsManager *manager, QObject *parent = nullptr); ~GlobalShortcutsBackendSystem() override; bool IsAvailable() override { return true; } diff --git a/src/globalshortcuts/globalshortcutsbackend.cpp b/src/globalshortcuts/globalshortcutsbackend.cpp index 7f346baeb..9a00e6279 100644 --- a/src/globalshortcuts/globalshortcutsbackend.cpp +++ b/src/globalshortcuts/globalshortcutsbackend.cpp @@ -25,8 +25,8 @@ #include "globalshortcutsbackend.h" #include "globalshortcutsmanager.h" -GlobalShortcutsBackend::GlobalShortcutsBackend(GlobalShortcutsManager *parent) - : QObject(parent), manager_(parent), active_(false) {} +GlobalShortcutsBackend::GlobalShortcutsBackend(GlobalShortcutsManager *manager, QObject *parent) + : QObject(parent), manager_(manager), active_(false) {} bool GlobalShortcutsBackend::Register() { bool ret = DoRegister(); diff --git a/src/globalshortcuts/globalshortcutsbackend.h b/src/globalshortcuts/globalshortcutsbackend.h index 51b0d4b26..f119bc7dc 100644 --- a/src/globalshortcuts/globalshortcutsbackend.h +++ b/src/globalshortcuts/globalshortcutsbackend.h @@ -32,7 +32,7 @@ class GlobalShortcutsBackend : public QObject { Q_OBJECT public: - explicit GlobalShortcutsBackend(GlobalShortcutsManager *parent = nullptr); + explicit GlobalShortcutsBackend(GlobalShortcutsManager *manager, QObject *parent = nullptr); bool is_active() const { return active_; } diff --git a/src/globalshortcuts/globalshortcutsmanager.cpp b/src/globalshortcuts/globalshortcutsmanager.cpp index 18eda9fbe..4ba11b9d8 100644 --- a/src/globalshortcuts/globalshortcutsmanager.cpp +++ b/src/globalshortcuts/globalshortcutsmanager.cpp @@ -123,7 +123,7 @@ void GlobalShortcutsManager::ReloadSettings() { } -void GlobalShortcutsManager::AddShortcut(const QString &id, const QString &name, std::function signal, const QKeySequence &default_key) { +void GlobalShortcutsManager::AddShortcut(const QString &id, const QString &name, std::function signal, const QKeySequence &default_key) { // clazy:exclude=function-args-by-ref Shortcut shortcut = AddShortcut(id, name, default_key); QObject::connect(shortcut.action, &QAction::triggered, this, signal); diff --git a/src/globalshortcuts/keymapper_x11.h b/src/globalshortcuts/keymapper_x11.h index c4eb0c152..c36a139ff 100644 --- a/src/globalshortcuts/keymapper_x11.h +++ b/src/globalshortcuts/keymapper_x11.h @@ -39,7 +39,7 @@ #endif namespace KeyMapperX11 { -static const QMap keymapper_x11_ = { +static const QMap keymapper_x11_ = { // clazy:exclude=non-pod-global-static #ifdef HAVE_KEYSYMDEF_H diff --git a/src/internet/internetplaylistitem.h b/src/internet/internetplaylistitem.h index 05b2c2400..9625e334c 100644 --- a/src/internet/internetplaylistitem.h +++ b/src/internet/internetplaylistitem.h @@ -58,6 +58,8 @@ class InternetPlaylistItem : public PlaylistItem { private: Song::Source source_; Song metadata_; + + Q_DISABLE_COPY(InternetPlaylistItem) }; #endif // INTERNETPLAYLISTITEM_H diff --git a/src/internet/internetsearchitemdelegate.h b/src/internet/internetsearchitemdelegate.h index 64a956b21..114879f2d 100644 --- a/src/internet/internetsearchitemdelegate.h +++ b/src/internet/internetsearchitemdelegate.h @@ -31,6 +31,8 @@ class QModelIndex; class InternetSearchView; class InternetSearchItemDelegate : public CollectionItemDelegate { + Q_OBJECT + public: explicit InternetSearchItemDelegate(InternetSearchView *view); diff --git a/src/internet/internetsearchmodel.cpp b/src/internet/internetsearchmodel.cpp index 993a05a23..e3b944275 100644 --- a/src/internet/internetsearchmodel.cpp +++ b/src/internet/internetsearchmodel.cpp @@ -294,6 +294,7 @@ void InternetSearchModel::Clear() { InternetSearchView::ResultList InternetSearchModel::GetChildResults(const QModelIndexList &indexes) const { QList items; + items.reserve(indexes.count()); for (const QModelIndex &idx : indexes) { items << itemFromIndex(idx); } @@ -363,7 +364,7 @@ void GatherResults(const QStandardItem *parent, InternetSearchView::ResultList * } } -void InternetSearchModel::SetGroupBy(const CollectionModel::Grouping &grouping, const bool regroup_now) { +void InternetSearchModel::SetGroupBy(const CollectionModel::Grouping grouping, const bool regroup_now) { const CollectionModel::Grouping old_group_by = group_by_; group_by_ = grouping; @@ -388,6 +389,8 @@ MimeData *InternetSearchModel::LoadTracks(const InternetSearchView::ResultList & SongList songs; QList urls; + songs.reserve(results.count()); + urls.reserve(results.count()); for (const InternetSearchView::Result &result : results) { songs << result.metadata_; urls << result.metadata_.url(); diff --git a/src/internet/internetsearchmodel.h b/src/internet/internetsearchmodel.h index ec48dbc4b..36dd8a7ed 100644 --- a/src/internet/internetsearchmodel.h +++ b/src/internet/internetsearchmodel.h @@ -64,7 +64,7 @@ class InternetSearchModel : public QStandardItemModel { void set_proxy(QSortFilterProxyModel *proxy) { proxy_ = proxy; } void set_use_pretty_covers(const bool pretty) { use_pretty_covers_ = pretty; } - void SetGroupBy(const CollectionModel::Grouping &grouping, const bool regroup_now); + void SetGroupBy(const CollectionModel::Grouping grouping, const bool regroup_now); void Clear(); diff --git a/src/internet/internetsearchsortmodel.h b/src/internet/internetsearchsortmodel.h index 788e722c1..548322b54 100644 --- a/src/internet/internetsearchsortmodel.h +++ b/src/internet/internetsearchsortmodel.h @@ -27,6 +27,8 @@ class QObject; class QModelIndex; class InternetSearchSortModel : public QSortFilterProxyModel { + Q_OBJECT + public: explicit InternetSearchSortModel(QObject *parent = nullptr); diff --git a/src/internet/internetsearchview.cpp b/src/internet/internetsearchview.cpp index 1b47fb94a..9bf99fc4e 100644 --- a/src/internet/internetsearchview.cpp +++ b/src/internet/internetsearchview.cpp @@ -364,7 +364,7 @@ void InternetSearchView::timerEvent(QTimerEvent *e) { QMap::iterator it = delayed_searches_.find(e->timerId()); if (it != delayed_searches_.end()) { SearchAsync(it.value().id_, it.value().query_, it.value().type_); - delayed_searches_.erase(it); + delayed_searches_.erase(it); // clazy:exclude=strict-iterators return; } @@ -497,6 +497,7 @@ void InternetSearchView::SearchDone(const int service_id, const SongList &songs, } ResultList results; + results.reserve(songs.count()); for (const Song &song : songs) { Result result; result.metadata_ = song; @@ -518,7 +519,7 @@ void InternetSearchView::CancelSearch(const int id) { for (it = delayed_searches_.begin(); it != delayed_searches_.end(); ++it) { if (it.value().id_ == id) { killTimer(it.key()); - delayed_searches_.erase(it); + delayed_searches_.erase(it); // clazy:exclude=strict-iterators return; } } @@ -592,7 +593,7 @@ MimeData *InternetSearchView::SelectedMimeData() { for (int i = 0 ; i < front_proxy_->rowCount() ; ++i) { QModelIndex idx = front_proxy_->index(i, 0); if (!idx.data(CollectionModel::Role_IsDivider).toBool()) { - indexes << idx; + indexes << idx; // clazy:exclude=reserve-candidates ui_->results->setCurrentIndex(idx); break; } @@ -607,7 +608,7 @@ MimeData *InternetSearchView::SelectedMimeData() { // Get items for these indexes QList items; for (const QModelIndex &idx : indexes) { - items << (front_model_->itemFromIndex(front_proxy_->mapToSource(idx))); + items << (front_model_->itemFromIndex(front_proxy_->mapToSource(idx))); // clazy:exclude=reserve-candidates } // Get a MimeData for these items @@ -687,7 +688,7 @@ void InternetSearchView::GroupByClicked(QAction *action) { } -void InternetSearchView::SetGroupBy(const CollectionModel::Grouping &g) { +void InternetSearchView::SetGroupBy(const CollectionModel::Grouping g) { // Clear requests: changing "group by" on the models will cause all the items to be removed/added again, // so all the QModelIndex here will become invalid. New requests will be created for those diff --git a/src/internet/internetsearchview.h b/src/internet/internetsearchview.h index 0cc0dda85..8f77d2300 100644 --- a/src/internet/internetsearchview.h +++ b/src/internet/internetsearchview.h @@ -91,7 +91,7 @@ class InternetSearchView : public QWidget { protected: struct PendingState { PendingState() : orig_id_(-1) {} - PendingState(int orig_id, QStringList tokens) : orig_id_(orig_id), tokens_(tokens) {} + PendingState(int orig_id, const QStringList &tokens) : orig_id_(orig_id), tokens_(tokens) {} int orig_id_; QStringList tokens_; @@ -170,7 +170,7 @@ class InternetSearchView : public QWidget { void SearchAlbumsClicked(const bool); void SearchSongsClicked(const bool); void GroupByClicked(QAction *action); - void SetGroupBy(const CollectionModel::Grouping &g); + void SetGroupBy(const CollectionModel::Grouping g); void AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &albumcover_result); diff --git a/src/internet/internetservices.cpp b/src/internet/internetservices.cpp index ecf47ee4f..e873715be 100644 --- a/src/internet/internetservices.cpp +++ b/src/internet/internetservices.cpp @@ -60,7 +60,7 @@ void InternetServices::RemoveService(InternetService *service) { } -InternetService *InternetServices::ServiceBySource(const Song::Source &source) { +InternetService *InternetServices::ServiceBySource(const Song::Source source) { if (services_.contains(source)) return services_.value(source); return nullptr; diff --git a/src/internet/internetservices.h b/src/internet/internetservices.h index e12cd1db4..75035d723 100644 --- a/src/internet/internetservices.h +++ b/src/internet/internetservices.h @@ -40,7 +40,7 @@ class InternetServices : public QObject { explicit InternetServices(QObject *parent = nullptr); ~InternetServices() override; - InternetService *ServiceBySource(const Song::Source &source); + InternetService *ServiceBySource(const Song::Source source); template T *Service() { return static_cast(this->ServiceBySource(T::kSource)); diff --git a/src/internet/internetsongmimedata.h b/src/internet/internetsongmimedata.h index 0af9c5a60..05fc2a336 100644 --- a/src/internet/internetsongmimedata.h +++ b/src/internet/internetsongmimedata.h @@ -30,7 +30,7 @@ class InternetSongMimeData : public MimeData { Q_OBJECT public: - explicit InternetSongMimeData(InternetService *_service) : service(_service) {} + explicit InternetSongMimeData(InternetService *_service, QObject* = nullptr) : service(_service) {} InternetService *service; SongList songs; diff --git a/src/lyrics/geniuslyricsprovider.cpp b/src/lyrics/geniuslyricsprovider.cpp index 6f5152d96..240abb975 100644 --- a/src/lyrics/geniuslyricsprovider.cpp +++ b/src/lyrics/geniuslyricsprovider.cpp @@ -209,7 +209,7 @@ void GeniusLyricsProvider::RequestAccessToken(const QUrl &url, const QUrl &redir } -void GeniusLyricsProvider::HandleLoginSSLErrors(QList ssl_errors) { +void GeniusLyricsProvider::HandleLoginSSLErrors(const QList &ssl_errors) { for (const QSslError &ssl_error : ssl_errors) { login_errors_ += ssl_error.errorString(); @@ -543,7 +543,7 @@ void GeniusLyricsProvider::Error(const QString &error, const QVariant &debug) { } -void GeniusLyricsProvider::EndSearch(std::shared_ptr search, const GeniusLyricsLyricContext lyric) { +void GeniusLyricsProvider::EndSearch(std::shared_ptr search, const GeniusLyricsLyricContext &lyric) { if (search->requests_lyric_.contains(lyric.url)) { search->requests_lyric_.remove(lyric.url); diff --git a/src/lyrics/geniuslyricsprovider.h b/src/lyrics/geniuslyricsprovider.h index d70c0fcda..0b842188e 100644 --- a/src/lyrics/geniuslyricsprovider.h +++ b/src/lyrics/geniuslyricsprovider.h @@ -76,10 +76,10 @@ class GeniusLyricsProvider : public JsonLyricsProvider { void RequestAccessToken(const QUrl &url, const QUrl &redirect_url); void AuthError(const QString &error = QString(), const QVariant &debug = QVariant()); void Error(const QString &error, const QVariant &debug = QVariant()) override; - void EndSearch(std::shared_ptr search, const GeniusLyricsLyricContext lyric = GeniusLyricsLyricContext()); + void EndSearch(std::shared_ptr search, const GeniusLyricsLyricContext &lyric = GeniusLyricsLyricContext()); private slots: - void HandleLoginSSLErrors(QList ssl_errors); + void HandleLoginSSLErrors(const QList &ssl_errors); void RedirectArrived(); void AccessTokenRequestFinished(QNetworkReply *reply); void HandleSearchReply(QNetworkReply *reply, const quint64 id); diff --git a/src/lyrics/lyricsfetcher.cpp b/src/lyrics/lyricsfetcher.cpp index f28849860..52168033a 100644 --- a/src/lyrics/lyricsfetcher.cpp +++ b/src/lyrics/lyricsfetcher.cpp @@ -19,6 +19,8 @@ #include "config.h" +#include + #include #include #include @@ -28,6 +30,8 @@ #include "lyricsfetcher.h" #include "lyricsfetchersearch.h" +using namespace std::chrono_literals; + const int LyricsFetcher::kMaxConcurrentRequests = 5; LyricsFetcher::LyricsFetcher(LyricsProviders *lyrics_providers, QObject *parent) @@ -36,7 +40,7 @@ LyricsFetcher::LyricsFetcher(LyricsProviders *lyrics_providers, QObject *parent) next_id_(0), request_starter_(new QTimer(this)) { - request_starter_->setInterval(500); + request_starter_->setInterval(500ms); QObject::connect(request_starter_, &QTimer::timeout, this, &LyricsFetcher::StartRequests); } diff --git a/src/lyrics/lyricsproviders.cpp b/src/lyrics/lyricsproviders.cpp index c53f571de..2da936f6c 100644 --- a/src/lyrics/lyricsproviders.cpp +++ b/src/lyrics/lyricsproviders.cpp @@ -59,7 +59,7 @@ void LyricsProviders::ReloadSettings() { QSettings s; s.beginGroup(LyricsSettingsPage::kSettingsGroup); - QStringList providers_enabled = s.value("providers", QStringList() << all_providers.values()).toStringList(); + QStringList providers_enabled = s.value("providers", QStringList() << all_providers.values()).toStringList(); // clazy:exclude=qt6-deprecated-api-fixes s.endGroup(); int i = 0; @@ -69,7 +69,7 @@ void LyricsProviders::ReloadSettings() { if (provider) { provider->set_enabled(true); provider->set_order(++i); - new_providers << provider; + new_providers << provider; // clazy:exclude=reserve-candidates } } diff --git a/src/moodbar/moodbaritemdelegate.cpp b/src/moodbar/moodbaritemdelegate.cpp index f5dc6dad7..9bab4388a 100644 --- a/src/moodbar/moodbaritemdelegate.cpp +++ b/src/moodbar/moodbaritemdelegate.cpp @@ -96,7 +96,7 @@ void MoodbarItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o } -QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize &size) { +QPixmap MoodbarItemDelegate::PixmapForIndex(const QModelIndex &idx, const QSize size) { // Pixmaps are keyed off URL. const QUrl url = idx.sibling(idx.row(), Playlist::Column_Filename).data().toUrl(); diff --git a/src/moodbar/moodbaritemdelegate.h b/src/moodbar/moodbaritemdelegate.h index b1142794e..3fd530a29 100644 --- a/src/moodbar/moodbaritemdelegate.h +++ b/src/moodbar/moodbaritemdelegate.h @@ -76,7 +76,7 @@ class MoodbarItemDelegate : public QItemDelegate { }; private: - QPixmap PixmapForIndex(const QModelIndex &idx, const QSize &size); + QPixmap PixmapForIndex(const QModelIndex &idx, const QSize size); void StartLoadingData(const QUrl &url, Data *data); void StartLoadingColors(const QUrl &url, const QByteArray &bytes, Data *data); void StartLoadingImage(const QUrl &url, Data *data); diff --git a/src/moodbar/moodbarloader.cpp b/src/moodbar/moodbarloader.cpp index 4a2612a92..73e1e06a4 100644 --- a/src/moodbar/moodbarloader.cpp +++ b/src/moodbar/moodbarloader.cpp @@ -18,6 +18,7 @@ #include "moodbarloader.h" #include +#include #include #include @@ -45,6 +46,8 @@ #include "settings/moodbarsettingspage.h" +using namespace std::chrono_literals; + #ifdef Q_OS_WIN32 # include #endif @@ -199,7 +202,7 @@ void MoodbarLoader::RequestFinished(MoodbarPipeline *request, const QUrl &url) { requests_.remove(url); active_requests_.remove(url); - QTimer::singleShot(1000, request, &MoodbarLoader::deleteLater); + QTimer::singleShot(1s, request, &MoodbarLoader::deleteLater); MaybeTakeNextRequest(); diff --git a/src/moodbar/moodbarpipeline.cpp b/src/moodbar/moodbarpipeline.cpp index bfe1a6749..31c636104 100644 --- a/src/moodbar/moodbarpipeline.cpp +++ b/src/moodbar/moodbarpipeline.cpp @@ -37,8 +37,8 @@ bool MoodbarPipeline::sIsAvailable = false; const int MoodbarPipeline::kBands = 128; -MoodbarPipeline::MoodbarPipeline(const QUrl &local_filename) - : QObject(nullptr), +MoodbarPipeline::MoodbarPipeline(const QUrl &local_filename, QObject *parent) + : QObject(parent), local_filename_(local_filename), pipeline_(nullptr), convert_element_(nullptr), diff --git a/src/moodbar/moodbarpipeline.h b/src/moodbar/moodbarpipeline.h index 616e42d00..e2774b272 100644 --- a/src/moodbar/moodbarpipeline.h +++ b/src/moodbar/moodbarpipeline.h @@ -36,7 +36,7 @@ class MoodbarPipeline : public QObject { Q_OBJECT public: - explicit MoodbarPipeline(const QUrl &local_filename); + explicit MoodbarPipeline(const QUrl &local_filename, QObject *parent = nullptr); ~MoodbarPipeline() override; static bool IsAvailable(); diff --git a/src/moodbar/moodbarproxystyle.cpp b/src/moodbar/moodbarproxystyle.cpp index a95cb3f33..5745685b6 100644 --- a/src/moodbar/moodbarproxystyle.cpp +++ b/src/moodbar/moodbarproxystyle.cpp @@ -50,7 +50,7 @@ const int MoodbarProxyStyle::kBorderSize = 1; const int MoodbarProxyStyle::kArrowWidth = 17; const int MoodbarProxyStyle::kArrowHeight = 13; -MoodbarProxyStyle::MoodbarProxyStyle(Application *app, QSlider *slider) +MoodbarProxyStyle::MoodbarProxyStyle(Application *app, QSlider *slider, QObject*) : QProxyStyle(nullptr), app_(app), slider_(slider), @@ -335,7 +335,7 @@ void MoodbarProxyStyle::DrawArrow(const QStyleOptionSlider *option, QPainter *pa } -QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector &colors, const QSize &size, const QPalette &palette, const QStyleOptionSlider *opt) { +QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector &colors, const QSize size, const QPalette &palette, const QStyleOptionSlider *opt) { Q_UNUSED(opt); @@ -367,7 +367,7 @@ QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector &colors, const QSize } -void MoodbarProxyStyle::ShowContextMenu(const QPoint &pos) { +void MoodbarProxyStyle::ShowContextMenu(const QPoint pos) { if (!context_menu_) { context_menu_ = new QMenu(slider_); diff --git a/src/moodbar/moodbarproxystyle.h b/src/moodbar/moodbarproxystyle.h index 928320eff..690df2aa3 100644 --- a/src/moodbar/moodbarproxystyle.h +++ b/src/moodbar/moodbarproxystyle.h @@ -48,7 +48,7 @@ class MoodbarProxyStyle : public QProxyStyle { Q_OBJECT public: - explicit MoodbarProxyStyle(Application *app, QSlider *slider); + explicit MoodbarProxyStyle(Application *app, QSlider *slider, QObject *parent = nullptr); // QProxyStyle void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const override; @@ -78,9 +78,9 @@ class MoodbarProxyStyle : public QProxyStyle { void Render(ComplexControl control, const QStyleOptionSlider *option, QPainter *painter, const QWidget *widget); void EnsureMoodbarRendered(const QStyleOptionSlider *opt); void DrawArrow(const QStyleOptionSlider *option, QPainter *painter) const; - void ShowContextMenu(const QPoint &pos); + void ShowContextMenu(const QPoint pos); - QPixmap MoodbarPixmap(const ColorVector &colors, const QSize &size, const QPalette &palette, const QStyleOptionSlider *opt); + QPixmap MoodbarPixmap(const ColorVector &colors, const QSize size, const QPalette &palette, const QStyleOptionSlider *opt); private slots: void ReloadSettings(); diff --git a/src/moodbar/moodbarrenderer.cpp b/src/moodbar/moodbarrenderer.cpp index df3fb9c1c..66cb710ac 100644 --- a/src/moodbar/moodbarrenderer.cpp +++ b/src/moodbar/moodbarrenderer.cpp @@ -73,7 +73,7 @@ ColorVector MoodbarRenderer::Colors(const QByteArray &data, const MoodbarStyle s memset(hue_distribution, 0, sizeof(hue_distribution)); ColorVector colors; - + colors.reserve(samples); // Read the colors, keeping track of some histograms for (int i = 0; i < samples; ++i) { QColor color; @@ -110,10 +110,11 @@ ColorVector MoodbarRenderer::Colors(const QByteArray &data, const MoodbarStyle s return colors; } -void MoodbarRenderer::Render(const ColorVector &colors, QPainter *p, const QRect &rect) { +void MoodbarRenderer::Render(const ColorVector &colors, QPainter *p, const QRect rect) { // Sample the colors and map them to screen pixels. ColorVector screen_colors; + screen_colors.reserve(rect.width()); for (int x = 0; x < rect.width(); ++x) { int r = 0; int g = 0; @@ -139,8 +140,8 @@ void MoodbarRenderer::Render(const ColorVector &colors, QPainter *p, const QRect int h = 0, s = 0, v = 0; screen_colors[x].getHsv(&h, &s, &v); - for (int y = 0; y <= rect.height() / 2; y++) { - float coeff = float(y) / float(rect.height() / 2); + for (int y = 0; y <= rect.height() / 2; ++y) { + float coeff = float(y) / float(rect.height() / 2); // NOLINT(bugprone-integer-division) float coeff2 = 1.0f - ((1.0f - coeff) * (1.0f - coeff)); coeff = 1.0f - (1.0f - coeff) / 2.0f; coeff2 = 1.f - (1.f - coeff2) / 2.0f; @@ -153,7 +154,7 @@ void MoodbarRenderer::Render(const ColorVector &colors, QPainter *p, const QRect } } -QImage MoodbarRenderer::RenderToImage(const ColorVector &colors, const QSize &size) { +QImage MoodbarRenderer::RenderToImage(const ColorVector &colors, const QSize size) { QImage image(size, QImage::Format_ARGB32_Premultiplied); QPainter p(&image); diff --git a/src/moodbar/moodbarrenderer.h b/src/moodbar/moodbarrenderer.h index 4b9c45166..b00e87985 100644 --- a/src/moodbar/moodbarrenderer.h +++ b/src/moodbar/moodbarrenderer.h @@ -50,8 +50,8 @@ class MoodbarRenderer { static QString StyleName(const MoodbarStyle style); static ColorVector Colors(const QByteArray &data, const MoodbarStyle style, const QPalette &palette); - static void Render(const ColorVector &colors, QPainter *p, const QRect &rect); - static QImage RenderToImage(const ColorVector &colors, const QSize &size); + static void Render(const ColorVector &colors, QPainter *p, const QRect rect); + static QImage RenderToImage(const ColorVector &colors, const QSize size); private: explicit MoodbarRenderer(); diff --git a/src/musicbrainz/acoustidclient.cpp b/src/musicbrainz/acoustidclient.cpp index a981a16cb..653b1e8d0 100644 --- a/src/musicbrainz/acoustidclient.cpp +++ b/src/musicbrainz/acoustidclient.cpp @@ -185,6 +185,7 @@ void AcoustidClient::RequestFinished(QNetworkReply *reply, const int request_id) std::stable_sort(id_source_list.begin(), id_source_list.end()); QList id_list; + id_list.reserve(id_source_list.count()); for (const IdSource &is : id_source_list) { id_list << is.id_; } diff --git a/src/musicbrainz/musicbrainzclient.cpp b/src/musicbrainz/musicbrainzclient.cpp index 6ed8b2715..8184de120 100644 --- a/src/musicbrainz/musicbrainzclient.cpp +++ b/src/musicbrainz/musicbrainzclient.cpp @@ -433,6 +433,7 @@ MusicBrainzClient::ResultList MusicBrainzClient::ParseTrack(QXmlStreamReader *re } else { std::stable_sort(releases.begin(), releases.end()); + ret.reserve(releases.count()); for (const Release &release : releases) { ret << release.CopyAndMergeInto(result); } @@ -523,7 +524,7 @@ MusicBrainzClient::ResultList MusicBrainzClient::UniqueResults(const ResultList } -void MusicBrainzClient::Error(const QString &error, QVariant debug) { +void MusicBrainzClient::Error(const QString &error, const QVariant &debug) { qLog(Error) << "MusicBrainz:" << error; if (debug.isValid()) qLog(Debug) << debug; diff --git a/src/musicbrainz/musicbrainzclient.h b/src/musicbrainz/musicbrainzclient.h index b7a408109..0d445b721 100644 --- a/src/musicbrainz/musicbrainzclient.h +++ b/src/musicbrainz/musicbrainzclient.h @@ -197,7 +197,7 @@ class MusicBrainzClient : public QObject { static void ParseArtist(QXmlStreamReader *reader, QString *artist); static Release ParseRelease(QXmlStreamReader *reader); static ResultList UniqueResults(const ResultList &results, UniqueResultsSortOption opt = SortResults); - void Error(const QString &error, QVariant debug = QVariant()); + void Error(const QString &error, const QVariant &debug = QVariant()); private: diff --git a/src/musicbrainz/tagfetcher.cpp b/src/musicbrainz/tagfetcher.cpp index c4f85401b..18a8b447b 100644 --- a/src/musicbrainz/tagfetcher.cpp +++ b/src/musicbrainz/tagfetcher.cpp @@ -142,7 +142,7 @@ void TagFetcher::TagsFetched(const int index, const MusicBrainzClient::ResultLis const Song &original_song = songs_[index]; SongList songs_guessed; - + songs_guessed.reserve(results.count()); for (const MusicBrainzClient::Result &result : results) { Song song; song.Init(result.title_, result.artist_, result.album_, result.duration_msec_ * kNsecPerMsec); diff --git a/src/organize/organize.cpp b/src/organize/organize.cpp index 0a113bdfb..014c33522 100644 --- a/src/organize/organize.cpp +++ b/src/organize/organize.cpp @@ -20,6 +20,7 @@ */ #include +#include #include #include @@ -45,6 +46,8 @@ # include "transcoder/transcoder.h" #endif +using namespace std::chrono_literals; + class OrganizeFormat; const int Organize::kBatchSize = 10; @@ -52,8 +55,9 @@ const int Organize::kBatchSize = 10; const int Organize::kTranscodeProgressInterval = 500; #endif -Organize::Organize(TaskManager *task_manager, std::shared_ptr destination, const OrganizeFormat &format, bool copy, bool overwrite, bool mark_as_listened, bool albumcover, const NewSongInfoList &songs_info, bool eject_after, const QString &playlist) - : thread_(nullptr), +Organize::Organize(TaskManager *task_manager, std::shared_ptr destination, const OrganizeFormat &format, const bool copy, const bool overwrite, const bool mark_as_listened, const bool albumcover, const NewSongInfoList &songs_info, const bool eject_after, const QString &playlist, QObject *parent) + : QObject(parent), + thread_(nullptr), task_manager_(task_manager), #ifdef HAVE_GSTREAMER transcoder_(new Transcoder(this)), @@ -77,9 +81,10 @@ Organize::Organize(TaskManager *task_manager, std::shared_ptr dest original_thread_ = thread(); process_files_timer_->setSingleShot(true); - process_files_timer_->setInterval(100); + process_files_timer_->setInterval(100ms); QObject::connect(process_files_timer_, &QTimer::timeout, this, &Organize::ProcessSomeFiles); + tasks_pending_.reserve(songs_info.count()); for (const NewSongInfo &song_info : songs_info) { tasks_pending_ << Task(song_info); } @@ -87,10 +92,12 @@ Organize::Organize(TaskManager *task_manager, std::shared_ptr dest } Organize::~Organize() { + if (thread_) { thread_->quit(); thread_->deleteLater(); } + } void Organize::Start() { @@ -380,7 +387,7 @@ void Organize::timerEvent(QTimerEvent *e) { } -void Organize::LogLine(const QString message) { +void Organize::LogLine(const QString &message) { QString date(QDateTime::currentDateTime().toString(Qt::TextDate)); log_.append(QString("%1: %2").arg(date, message)); diff --git a/src/organize/organize.h b/src/organize/organize.h index 10f53dffd..fef6a5e08 100644 --- a/src/organize/organize.h +++ b/src/organize/organize.h @@ -60,7 +60,7 @@ class Organize : public QObject { }; typedef QList NewSongInfoList; - explicit Organize(TaskManager *task_manager, std::shared_ptr destination, const OrganizeFormat &format, bool copy, bool overwrite, bool mark_as_listened, bool albumcover, const NewSongInfoList &songs, bool eject_after, const QString &playlist = QString()); + explicit Organize(TaskManager *task_manager, std::shared_ptr destination, const OrganizeFormat &format, const bool copy, const bool overwrite, const bool mark_as_listened, const bool albumcover, const NewSongInfoList &songs, const bool eject_after, const QString &playlist = QString(), QObject *parent = nullptr); ~Organize() override; static const int kBatchSize; @@ -81,7 +81,7 @@ class Organize : public QObject { private slots: void ProcessSomeFiles(); void FileTranscoded(const QString &input, const QString &output, bool success); - void LogLine(const QString message); + void LogLine(const QString &message); private: void SetSongProgress(float progress, bool transcoded = false); diff --git a/src/organize/organizedialog.cpp b/src/organize/organizedialog.cpp index 51520ef6c..b0ff4bef5 100644 --- a/src/organize/organizedialog.cpp +++ b/src/organize/organizedialog.cpp @@ -369,7 +369,7 @@ bool OrganizeDialog::SetSongs(const SongList &songs) { } songs_future_ = QFuture(); - return songs_.count(); + return !songs_.isEmpty(); } @@ -465,7 +465,7 @@ Organize::NewSongInfoList OrganizeDialog::ComputeNewSongsFilenames(const SongLis // Better to rename them: e.g. foo.bar -> foo(2).bar QHash filenames; Organize::NewSongInfoList new_songs_info; - + new_songs_info.reserve(songs.count()); for (const Song &song : songs) { QString new_filename = format.GetFilenameForSong(song, extension); if (filenames.contains(new_filename)) { @@ -552,11 +552,13 @@ void OrganizeDialog::UpdatePreviews() { } -void OrganizeDialog::OrganizeFinished(const QStringList files_with_errors, const QStringList log) { +void OrganizeDialog::OrganizeFinished(const QStringList &files_with_errors, const QStringList &log) { + if (files_with_errors.isEmpty()) return; error_dialog_.reset(new OrganizeErrorDialog); error_dialog_->Show(OrganizeErrorDialog::Type_Copy, files_with_errors, log); + } void OrganizeDialog::AllowExtASCII(const bool checked) { diff --git a/src/organize/organizedialog.h b/src/organize/organizedialog.h index 6f77b0fd5..d39ae7ea6 100644 --- a/src/organize/organizedialog.h +++ b/src/organize/organizedialog.h @@ -100,7 +100,7 @@ class OrganizeDialog : public QDialog { void InsertTag(const QString &tag); void UpdatePreviews(); - void OrganizeFinished(const QStringList files_with_errors, const QStringList log); + void OrganizeFinished(const QStringList &files_with_errors, const QStringList &log); void AllowExtASCII(const bool checked); diff --git a/src/organize/organizeerrordialog.cpp b/src/organize/organizeerrordialog.cpp index 74bc2a295..4f43f66eb 100644 --- a/src/organize/organizeerrordialog.cpp +++ b/src/organize/organizeerrordialog.cpp @@ -54,6 +54,7 @@ OrganizeErrorDialog::~OrganizeErrorDialog() { void OrganizeErrorDialog::Show(OperationType 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(); } diff --git a/src/organize/organizeformat.h b/src/organize/organizeformat.h index 83cbc1ac6..cbeb3d36e 100644 --- a/src/organize/organizeformat.h +++ b/src/organize/organizeformat.h @@ -68,13 +68,13 @@ class OrganizeFormat { bool IsValid() const; QString GetFilenameForSong(const Song &song, QString extension = QString()) const; - class Validator : public QValidator { + class Validator : public QValidator { // clazy:exclude=missing-qobject-macro public: explicit Validator(QObject *parent = nullptr); QValidator::State validate(QString &input, int&) const override; }; - class SyntaxHighlighter : public QSyntaxHighlighter { + class SyntaxHighlighter : public QSyntaxHighlighter { // clazy:exclude=missing-qobject-macro public: static const QRgb kValidTagColorLight; static const QRgb kInvalidTagColorLight; diff --git a/src/osd/osdbase.cpp b/src/osd/osdbase.cpp index 37543a822..9fd0fd0f8 100644 --- a/src/osd/osdbase.cpp +++ b/src/osd/osdbase.cpp @@ -294,7 +294,7 @@ void OSDBase::VolumeChanged(int value) { } -void OSDBase::ShowMessage(const QString &summary, const QString &message, const QString icon, const QImage &image) { +void OSDBase::ShowMessage(const QString &summary, const QString &message, const QString &icon, const QImage &image) { if (pretty_popup_->toggle_mode()) { pretty_popup_->ShowMessage(summary, message, image); diff --git a/src/osd/osdbase.h b/src/osd/osdbase.h index 535c48801..e2f50ac00 100644 --- a/src/osd/osdbase.h +++ b/src/osd/osdbase.h @@ -88,7 +88,7 @@ class OSDBase : public QObject { Type_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 = QString("strawberry"), const QImage &image = QImage()); + void ShowMessage(const QString &summary, const QString &message = QString(), const QString &icon = "strawberry", const QImage &image = QImage()); QString ReplaceMessage(const MessageType type, const QString &message, const Song &song); virtual void ShowMessageNative(const QString &summary, const QString &message, const QString &icon = QString(), const QImage &image = QImage()); diff --git a/src/osd/osddbus.cpp b/src/osd/osddbus.cpp index 8b9aea87a..0a8696818 100644 --- a/src/osd/osddbus.cpp +++ b/src/osd/osddbus.cpp @@ -147,17 +147,17 @@ void OSDDBus::ShowMessageNative(const QString &summary, const QString &message, if (!image.isNull()) { if (version_ >= QVersionNumber(1, 2)) { - hints["image-data"] = QVariant(image); + hints["image-data"] = QVariant(image); // clazy:exclude=qt6-deprecated-api-fixes } else if (version_ >= QVersionNumber(1, 1)) { - hints["image_data"] = QVariant(image); + hints["image_data"] = QVariant(image); // clazy:exclude=qt6-deprecated-api-fixes } else { - hints["icon_data"] = QVariant(image); + hints["icon_data"] = QVariant(image); // clazy:exclude=qt6-deprecated-api-fixes } } - hints["transient"] = QVariant(true); + hints["transient"] = QVariant(true); // clazy:exclude=qt6-deprecated-api-fixes int id = 0; if (last_notification_time_.secsTo(QDateTime::currentDateTime()) * 1000 < timeout_msec()) { diff --git a/src/osd/osdpretty.cpp b/src/osd/osdpretty.cpp index 8bffe10c6..834ef644d 100644 --- a/src/osd/osdpretty.cpp +++ b/src/osd/osdpretty.cpp @@ -21,6 +21,8 @@ #include "config.h" +#include + #include #include #include @@ -66,6 +68,8 @@ #include "core/utilities.h" +using namespace std::chrono_literals; + const char *OSDPretty::kSettingsGroup = "OSDPretty"; const int OSDPretty::kDropShadowSize = 13; @@ -120,7 +124,7 @@ OSDPretty::OSDPretty(Mode mode, QWidget *parent) // Timeout timeout_->setSingleShot(true); - timeout_->setInterval(5000); + timeout_->setInterval(5s); QObject::connect(timeout_, &QTimer::timeout, this, &OSDPretty::hide); ui_->icon->setMaximumSize(kMaxIconSize, kMaxIconSize); @@ -525,7 +529,7 @@ void OSDPretty::mouseReleaseEvent(QMouseEvent *) { } -QScreen *OSDPretty::current_screen(const QPoint &pos) const { +QScreen *OSDPretty::current_screen(const QPoint pos) const { QScreen *screen(nullptr); #if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) @@ -583,7 +587,7 @@ void OSDPretty::set_popup_duration(const int msec) { timeout_->setInterval(msec); } -void OSDPretty::set_font(const QFont font) { +void OSDPretty::set_font(const QFont &font) { font_ = font; diff --git a/src/osd/osdpretty.h b/src/osd/osdpretty.h index 34e7e3f41..d4160553c 100644 --- a/src/osd/osdpretty.h +++ b/src/osd/osdpretty.h @@ -83,7 +83,7 @@ class OSDPretty : public QWidget { void set_foreground_color(const QRgb color); void set_background_color(const QRgb color); void set_background_opacity(const qreal opacity); - void set_font(const QFont font); + void set_font(const QFont &font); QRgb foreground_color() const { return foreground_color_.rgb(); } QRgb background_color() const { return background_color_.rgb(); } @@ -97,7 +97,7 @@ class OSDPretty : public QWidget { // When the user has been moving the popup, use these to get its current position and screen. // Note that these return invalid values if the popup is hidden. QScreen *current_screen() const; - QScreen *current_screen(const QPoint &pos) const; + QScreen *current_screen(const QPoint pos) const; QPoint current_pos() const; // QWidget diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 6bee68307..0ac761a97 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -91,6 +93,8 @@ #include "internet/internetplaylistitem.h" #include "internet/internetsongmimedata.h" +using namespace std::chrono_literals; + const char *Playlist::kCddaMimeType = "x-content/audio-cdda"; const char *Playlist::kRowsMimetype = "application/x-strawberry-playlist-rows"; const char *Playlist::kPlayNowMimetype = "application/x-strawberry-play-now"; @@ -161,7 +165,7 @@ Playlist::Playlist(PlaylistBackend *backend, TaskManager *task_manager, Collecti column_alignments_ = PlaylistView::DefaultColumnAlignment(); timer_save_->setSingleShot(true); - timer_save_->setInterval(900); + timer_save_->setInterval(900ms); } @@ -174,7 +178,7 @@ template void Playlist::InsertSongItems(const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) { PlaylistItemList items; - + items.reserve(songs.count()); for (const Song &song : songs) { items << PlaylistItemPtr(new T(song)); } @@ -800,7 +804,7 @@ bool Playlist::dropMimeData(const QMimeData *data, Qt::DropAction action, int ro qint64 own_pid = QCoreApplication::applicationPid(); QDataStream stream(data->data(kRowsMimetype)); - stream.readRawData(reinterpret_cast(&source_playlist), sizeof(source_playlist)); + stream.readRawData(reinterpret_cast(&source_playlist), sizeof(source_playlist)); // NOLINT(bugprone-sizeof-expression) stream >> source_rows; if (!stream.atEnd()) { stream.readRawData(reinterpret_cast(&pid), sizeof(pid)); @@ -818,6 +822,7 @@ bool Playlist::dropMimeData(const QMimeData *data, Qt::DropAction action, int ro else if (pid == own_pid) { // Drag from a different playlist PlaylistItemList items; + items.reserve(source_rows.count()); for (const int i : source_rows) items << source_playlist->item_at(i); if (items.count() > kUndoItemLimit) { @@ -896,6 +901,7 @@ void Playlist::MoveItemsWithoutUndo(const QList &source_rows, int pos) { emit layoutAboutToBeChanged(); PlaylistItemList moved_items; + moved_items.reserve(source_rows.count()); if (pos < 0) { pos = items_.count(); @@ -904,12 +910,12 @@ void Playlist::MoveItemsWithoutUndo(const QList &source_rows, int pos) { // Take the items out of the list first, keeping track of whether the insertion point changes int offset = 0; int start = pos; - for (int source_row : source_rows) { + for (const int source_row : source_rows) { moved_items << items_.takeAt(source_row - offset); if (pos > source_row) { - start--; + --start; } - offset++; + ++offset; } // Put the items back in @@ -946,11 +952,13 @@ void Playlist::MoveItemsWithoutUndo(const QList &source_rows, int pos) { void Playlist::MoveItemsWithoutUndo(int start, const QList &dest_rows) { emit layoutAboutToBeChanged(); + PlaylistItemList moved_items; + moved_items.reserve(dest_rows.count()); int pos = start; - for (int dest_row : dest_rows) { - if (dest_row < pos) start--; + for (const int dest_row : dest_rows) { + if (dest_row < pos) --start; } if (start < 0) { @@ -958,8 +966,9 @@ void Playlist::MoveItemsWithoutUndo(int start, const QList &dest_rows) { } // Take the items out of the list first - for (int i = 0; i < dest_rows.count(); i++) + for (int i = 0; i < dest_rows.count(); ++i) { moved_items << items_.takeAt(start); + } // Put the items back in int offset = 0; @@ -974,10 +983,12 @@ void Playlist::MoveItemsWithoutUndo(int start, const QList &dest_rows) { // This index was moved const int i = pidx.row() - start; changePersistentIndex(pidx, index(dest_rows[i], pidx.column(), QModelIndex())); - } else { + } + else { int d = 0; - if (pidx.row() >= start + dest_rows.count()) + if (pidx.row() >= start + dest_rows.count()) { d -= dest_rows.count(); + } for (int dest_row : dest_rows) { if (pidx.row() + d > dest_row) d++; @@ -996,15 +1007,16 @@ 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) { - if (itemsIn.isEmpty()) + if (itemsIn.isEmpty()) { return; + } PlaylistItemList items = itemsIn; - // exercise vetoes + // Exercise vetoes SongList songs; - - for (PlaylistItemPtr item : items) { + songs.reserve(items.count()); + for (PlaylistItemPtr item : items) { // clazy:exclude=range-loop songs << item->Metadata(); } @@ -1012,11 +1024,11 @@ void Playlist::InsertItems(const PlaylistItemList &itemsIn, const int pos, const QSet vetoed; for (SongInsertVetoListener *listener : veto_listeners_) { for (const Song &song : listener->AboutToInsertSongs(GetAllSongs(), songs)) { - // avoid veto-ing a song multiple times + // Avoid veto-ing a song multiple times vetoed.insert(song); } if (vetoed.count() == song_count) { - // all songs were vetoed and there's nothing more to do (there's no need for an undo step) + // All songs were vetoed and there's nothing more to do (there's no need for an undo step) return; } } @@ -1033,7 +1045,7 @@ void Playlist::InsertItems(const PlaylistItemList &itemsIn, const int pos, const } } - // check for empty items once again after veto + // Check for empty items once again after veto if (items.isEmpty()) { return; } @@ -1085,7 +1097,7 @@ void Playlist::InsertItemsWithoutUndo(const PlaylistItemList &items, const int p if (enqueue) { QModelIndexList indexes; for (int i = start; i <= end; ++i) { - indexes << index(i, 0); + indexes << index(i, 0); // clazy:exclude=reserve-candidates } queue_->ToggleTracks(indexes); } @@ -1093,7 +1105,7 @@ void Playlist::InsertItemsWithoutUndo(const PlaylistItemList &items, const int p if (enqueue_next) { QModelIndexList indexes; for (int i = start; i <= end; ++i) { - indexes << index(i, 0); + indexes << index(i, 0); // clazy:exclude=reserve-candidates } queue_->InsertFirst(indexes); } @@ -1135,6 +1147,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; + playlist_items.reserve(songs.count()); for (const Song &song : songs) { playlist_items << std::make_shared(service, song); } @@ -1215,7 +1228,7 @@ QMimeData *Playlist::mimeData(const QModelIndexList &indexes) const { const Playlist *self = this; const qint64 pid = QCoreApplication::applicationPid(); - stream.writeRawData(reinterpret_cast(&self), sizeof(self)); + stream.writeRawData(reinterpret_cast(&self), sizeof(self)); // NOLINT(bugprone-sizeof-expression) stream << rows; stream.writeRawData(reinterpret_cast(&pid), sizeof(pid)); buf.close(); @@ -1393,7 +1406,7 @@ void Playlist::ReOrderWithoutUndo(const PlaylistItemList &new_items) { PlaylistItemList old_items = items_; items_ = new_items; - QMap new_rows; + QHash new_rows; for (int i = 0; i < new_items.length(); ++i) { new_rows[new_items[i].get()] = i; } @@ -1621,6 +1634,7 @@ PlaylistItemList Playlist::RemoveItemsWithoutUndo(const int row, const int count // Remove items PlaylistItemList ret; + ret.reserve(count); for (int i = 0; i < count; ++i) { PlaylistItemPtr item(items_.takeAt(row)); ret << item; @@ -1637,22 +1651,26 @@ PlaylistItemList Playlist::RemoveItemsWithoutUndo(const int row, const int count QList::iterator it = virtual_items_.begin(); while (it != virtual_items_.end()) { - if (*it >= items_.count()) - it = virtual_items_.erase(it); - else + if (*it >= items_.count()) { + it = virtual_items_.erase(it); // clazy:exclude=strict-iterators + } + else { ++it; + } } // Reset current_virtual_index_ - if (current_row() == -1) + if (current_row() == -1) { if (row - 1 > 0 && row - 1 < items_.size()) { current_virtual_index_ = virtual_items_.indexOf(row - 1); } else { current_virtual_index_ = -1; } - else + } + else { current_virtual_index_ = virtual_items_.indexOf(current_row()); + } ScheduleSave(); @@ -1664,15 +1682,19 @@ void Playlist::StopAfter(const int row) { QModelIndex old_stop_after = stop_after_; - if ((stop_after_.isValid() && stop_after_.row() == row) || row == -1) + if ((stop_after_.isValid() && stop_after_.row() == row) || row == -1) { stop_after_ = QModelIndex(); - else + } + else { stop_after_ = index(row, 0); + } - if (old_stop_after.isValid()) + if (old_stop_after.isValid()) { emit dataChanged(old_stop_after, old_stop_after.sibling(old_stop_after.row(), ColumnCount - 1)); - if (stop_after_.isValid()) + } + if (stop_after_.isValid()) { emit dataChanged(stop_after_, stop_after_.sibling(stop_after_.row(), ColumnCount - 1)); + } } @@ -1712,8 +1734,10 @@ bool Playlist::stop_after_current() const { PlaylistItemPtr Playlist::current_item() const { // QList[] runs in constant time, so no need to cache current_item - if (current_item_index_.isValid() && current_item_index_.row() <= items_.length()) + if (current_item_index_.isValid() && current_item_index_.row() <= items_.length()) { return items_[current_item_index_.row()]; + } + return PlaylistItemPtr(); } @@ -1960,7 +1984,8 @@ QSortFilterProxyModel *Playlist::proxy() const { return proxy_; } SongList Playlist::GetAllSongs() const { SongList ret; - for (PlaylistItemPtr item : items_) { + ret.reserve(items_.count()); + for (PlaylistItemPtr item : items_) { // clazy:exclude=range-loop ret << item->Metadata(); } return ret; @@ -1972,7 +1997,7 @@ PlaylistItemList Playlist::GetAllItems() const { return items_; } quint64 Playlist::GetTotalLength() const { quint64 ret = 0; - for (PlaylistItemPtr item : items_) { + for (PlaylistItemPtr item : items_) { // clazy:exclude=range-loop quint64 length = item->Metadata().length_nanosec(); if (length > 0) ret += length; } @@ -2072,11 +2097,11 @@ void Playlist::InvalidateDeletedSongs() { if (!exists && !item->HasForegroundColor(kInvalidSongPriority)) { // gray out the song if it's not there item->SetForegroundColor(kInvalidSongPriority, kInvalidSongColor); - invalidated_rows.append(row); + invalidated_rows.append(row); // clazy:exclude=reserve-candidates } else if (exists && item->HasForegroundColor(kInvalidSongPriority)) { item->RemoveForegroundColor(kInvalidSongPriority); - invalidated_rows.append(row); + invalidated_rows.append(row); // clazy:exclude=reserve-candidates } } } @@ -2101,7 +2126,7 @@ void Playlist::RemoveDeletedSongs() { Song song = item->Metadata(); if (song.url().isLocalFile() && !QFile::exists(song.url().toLocalFile())) { - rows_to_remove.append(row); + rows_to_remove.append(row); // clazy:exclude=reserve-candidates } } @@ -2141,12 +2166,12 @@ void Playlist::RemoveDuplicateSongs() { const Song &uniq_song = uniq_song_it->first; if (song.bitrate() > uniq_song.bitrate()) { - rows_to_remove.append(unique_songs[uniq_song]); + rows_to_remove.append(unique_songs[uniq_song]); // clazy:exclude=reserve-candidates unique_songs.erase(uniq_song); unique_songs.insert(std::make_pair(song, row)); } else { - rows_to_remove.append(row); + rows_to_remove.append(row); // clazy:exclude=reserve-candidates } found_duplicate = true; } @@ -2169,7 +2194,7 @@ void Playlist::RemoveUnavailableSongs() { // Check only local files if (song.url().isLocalFile() && !QFile::exists(song.url().toLocalFile())) { - rows_to_remove.append(row); + rows_to_remove.append(row); // clazy:exclude=reserve-candidates } } @@ -2294,7 +2319,7 @@ void Playlist::RateSongs(const QModelIndexList &index_list, const double rating) if (has_item_at(row)) { PlaylistItemPtr item = item_at(row); if (item && item->IsLocalCollectionItem() && item->Metadata().id() != -1) { - id_list << item->Metadata().id(); + id_list << item->Metadata().id(); // clazy:exclude=reserve-candidates } } } diff --git a/src/playlist/playlistbackend.cpp b/src/playlist/playlistbackend.cpp index b8c162d63..98c14e9c8 100644 --- a/src/playlist/playlistbackend.cpp +++ b/src/playlist/playlistbackend.cpp @@ -340,7 +340,7 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemList &items, if (db_->CheckErrors(clear)) return; // Save the new ones - for (PlaylistItemPtr item : items) { + for (PlaylistItemPtr item : items) { // clazy:exclude=range-loop insert.bindValue(":playlist", playlist); item->BindToQuery(&insert); diff --git a/src/playlist/playlistdelegates.cpp b/src/playlist/playlistdelegates.cpp index a896f53a6..1c72dabd6 100644 --- a/src/playlist/playlistdelegates.cpp +++ b/src/playlist/playlistdelegates.cpp @@ -104,7 +104,7 @@ void QueuedItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op } -void QueuedItemDelegate::DrawBox(QPainter *painter, const QRect &line_rect, const QFont &font, const QString &text, int width, const float opacity) const { +void QueuedItemDelegate::DrawBox(QPainter *painter, const QRect line_rect, const QFont &font, const QString &text, int width, const float opacity) const { QFont smaller = font; smaller.setPointSize(smaller.pointSize() - 1); @@ -255,7 +255,6 @@ bool PlaylistDelegateBase::helpEvent(QHelpEvent *event, QAbstractItemView *view, if (!event || !view) return false; - QHelpEvent *he = static_cast(event); QString text = displayText(idx.data(), QLocale::system()); // Special case: we want newlines in the comment tooltip @@ -267,7 +266,7 @@ bool PlaylistDelegateBase::helpEvent(QHelpEvent *event, QAbstractItemView *view, text.replace("\n", "
"); } - if (text.isEmpty() || !he) return false; + if (text.isEmpty() || !event) return false; switch (event->type()) { case QEvent::ToolTip: { @@ -275,7 +274,7 @@ bool PlaylistDelegateBase::helpEvent(QHelpEvent *event, QAbstractItemView *view, QRect displayed_text = view->visualRect(idx); bool is_elided = displayed_text.width() < real_text.width(); if (is_elided) { - QToolTip::showText(he->globalPos(), text, view); + QToolTip::showText(event->globalPos(), text, view); } else { // in case that another text was previously displayed QToolTip::hideText(); @@ -287,7 +286,7 @@ bool PlaylistDelegateBase::helpEvent(QHelpEvent *event, QAbstractItemView *view, return true; case QEvent::WhatsThis: - QWhatsThis::showText(he->globalPos(), text, view); + QWhatsThis::showText(event->globalPos(), text, view); return true; default: @@ -364,7 +363,7 @@ QWidget *TextItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewI return new QLineEdit(parent); } -TagCompletionModel::TagCompletionModel(CollectionBackend *backend, Playlist::Column column) { +TagCompletionModel::TagCompletionModel(CollectionBackend *backend, const Playlist::Column column, QObject *parent) : QStringListModel(parent) { QString col = database_column(column); if (!col.isEmpty()) { @@ -466,7 +465,7 @@ QString SongSourceDelegate::displayText(const QVariant &value, const QLocale&) c return QString(); } -QPixmap SongSourceDelegate::LookupPixmap(const Song::Source &source, const QSize &size) const { +QPixmap SongSourceDelegate::LookupPixmap(const Song::Source source, const QSize size) const { QPixmap pixmap; QString cache_key = QString("%1-%2x%3").arg(Song::TextForSource(source)).arg(size.width()).arg(size.height()); diff --git a/src/playlist/playlistdelegates.h b/src/playlist/playlistdelegates.h index cc845f3af..191837bdd 100644 --- a/src/playlist/playlistdelegates.h +++ b/src/playlist/playlistdelegates.h @@ -56,11 +56,13 @@ class CollectionBackend; class Player; class QueuedItemDelegate : public QStyledItemDelegate { + Q_OBJECT + public: explicit QueuedItemDelegate(QObject *parent, int indicator_column = Playlist::Column_Title); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const override; - void DrawBox(QPainter *painter, const QRect &line_rect, const QFont &font, const QString &idx, int width = -1, const float opacity = 1.0) const; + void DrawBox(QPainter *painter, const QRect line_rect, const QFont &font, const QString &idx, int width = -1, const float opacity = 1.0) const; int queue_indicator_size(const QModelIndex &idx) const; @@ -99,44 +101,58 @@ class PlaylistDelegateBase : public QueuedItemDelegate { }; class LengthItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit LengthItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class SizeItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit SizeItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class DateItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit DateItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class LastPlayedItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit LastPlayedItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class FileTypeItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit FileTypeItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class TextItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit TextItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &idx) const override; }; class TagCompletionModel : public QStringListModel { + Q_OBJECT + public: - explicit TagCompletionModel(CollectionBackend *backend, Playlist::Column column); + explicit TagCompletionModel(CollectionBackend *backend, const Playlist::Column column, QObject *parent = nullptr); private: static QString database_column(Playlist::Column column); @@ -157,6 +173,8 @@ class TagCompleter : public QCompleter { }; class TagCompletionItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit TagCompletionItemDelegate(QObject *parent, CollectionBackend *backend, Playlist::Column column) : PlaylistDelegateBase(parent), backend_(backend), column_(column) {}; @@ -168,31 +186,37 @@ class TagCompletionItemDelegate : public PlaylistDelegateBase { }; class NativeSeparatorsDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit NativeSeparatorsDelegate(QObject *parent) : PlaylistDelegateBase(parent) {} QString displayText(const QVariant &value, const QLocale &locale) const override; }; class SongSourceDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: explicit SongSourceDelegate(QObject *parent); QString displayText(const QVariant &value, const QLocale &locale) const override; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const override; private: - QPixmap LookupPixmap(const Song::Source &source, const QSize &size) const; + QPixmap LookupPixmap(const Song::Source source, const QSize size) const; mutable QPixmapCache pixmap_cache_; }; class RatingItemDelegate : public PlaylistDelegateBase { + Q_OBJECT + public: RatingItemDelegate(QObject *parent); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &idx) const override; QString displayText(const QVariant &value, const QLocale &locale) const override; - void set_mouse_over(const QModelIndex &idx, const QModelIndexList &selected_indexes, const QPoint &pos) { + void set_mouse_over(const QModelIndex &idx, const QModelIndexList &selected_indexes, const QPoint pos) { mouse_over_index_ = idx; selected_indexes_ = selected_indexes; mouse_over_pos_ = pos; diff --git a/src/playlist/playlistfilterparser.cpp b/src/playlist/playlistfilterparser.cpp index 6907dd1ef..4d65f09b2 100644 --- a/src/playlist/playlistfilterparser.cpp +++ b/src/playlist/playlistfilterparser.cpp @@ -35,8 +35,11 @@ class SearchTermComparator { public: + SearchTermComparator() = default; virtual ~SearchTermComparator() {} virtual bool Matches(const QString &element) const = 0; + private: + Q_DISABLE_COPY(SearchTermComparator) }; // "compares" by checking if the field contains the search term @@ -48,6 +51,8 @@ class DefaultComparator : public SearchTermComparator { } private: QString search_term_; + + Q_DISABLE_COPY(DefaultComparator) }; class EqComparator : public SearchTermComparator { @@ -112,7 +117,7 @@ class LexicalLeComparator : public SearchTermComparator { class GtComparator : public SearchTermComparator { public: - explicit GtComparator(int value) : search_term_(value) {} + explicit GtComparator(const int value) : search_term_(value) {} bool Matches(const QString &element) const override { return element.toInt() > search_term_; } @@ -122,7 +127,7 @@ class GtComparator : public SearchTermComparator { class GeComparator : public SearchTermComparator { public: - explicit GeComparator(int value) : search_term_(value) {} + explicit GeComparator(const int value) : search_term_(value) {} bool Matches(const QString &element) const override { return element.toInt() >= search_term_; } @@ -132,7 +137,7 @@ class GeComparator : public SearchTermComparator { class LtComparator : public SearchTermComparator { public: - explicit LtComparator(int value) : search_term_(value) {} + explicit LtComparator(const int value) : search_term_(value) {} bool Matches(const QString &element) const override { return element.toInt() < search_term_; } @@ -142,7 +147,7 @@ class LtComparator : public SearchTermComparator { class LeComparator : public SearchTermComparator { public: - explicit LeComparator(int value) : search_term_(value) {} + explicit LeComparator(const int value) : search_term_(value) {} bool Matches(const QString &element) const override { return element.toInt() <= search_term_; } @@ -198,7 +203,7 @@ class FilterTerm : public FilterTree { // filter that applies a SearchTermComparator to one specific field of a playlist entry class FilterColumnTerm : public FilterTree { public: - FilterColumnTerm(int column, SearchTermComparator *comparator) : col(column), cmp_(comparator) {} + FilterColumnTerm(const int column, SearchTermComparator *comparator) : col(column), cmp_(comparator) {} bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const override { QModelIndex idx(model->index(row, col, parent)); @@ -261,12 +266,15 @@ FilterTree *FilterParser::parse() { } void FilterParser::advance() { + while (iter_ != end_ && iter_->isSpace()) { ++iter_; } + } FilterTree *FilterParser::parseOrGroup() { + advance(); if (iter_ == end_) return new NopFilter; @@ -278,9 +286,11 @@ FilterTree *FilterParser::parseOrGroup() { advance(); } return group; + } FilterTree *FilterParser::parseAndGroup() { + advance(); if (iter_ == end_) return new NopFilter; @@ -296,9 +306,11 @@ FilterTree *FilterParser::parseAndGroup() { } while (iter_ != end_); return group; + } bool FilterParser::checkAnd() { + if (iter_ != end_) { if (*iter_ == QChar('A')) { buf_ += *iter_; @@ -319,9 +331,11 @@ bool FilterParser::checkAnd() { } } return false; + } -bool FilterParser::checkOr(bool step_over) { +bool FilterParser::checkOr(const bool step_over) { + if (!buf_.isEmpty()) { if (buf_ == "OR") { if (step_over) { @@ -351,9 +365,11 @@ bool FilterParser::checkOr(bool step_over) { } } return false; + } FilterTree *FilterParser::parseSearchExpression() { + advance(); if (iter_ == end_) return new NopFilter; if (*iter_ == '(') { @@ -377,9 +393,11 @@ FilterTree *FilterParser::parseSearchExpression() { else { return parseSearchTerm(); } + } FilterTree *FilterParser::parseSearchTerm() { + QString col; QString search; QString prefix; @@ -425,6 +443,7 @@ FilterTree *FilterParser::parseSearchTerm() { buf_.clear(); return createSearchTermTreeNode(col, prefix, search); + } FilterTree *FilterParser::createSearchTermTreeNode(const QString &col, const QString &prefix, const QString &search) const { diff --git a/src/playlist/playlistfilterparser.h b/src/playlist/playlistfilterparser.h index 64137fd69..8b7a82bda 100644 --- a/src/playlist/playlistfilterparser.h +++ b/src/playlist/playlistfilterparser.h @@ -30,9 +30,10 @@ class QAbstractItemModel; class QModelIndex; -// structure for filter parse tree +// Structure for filter parse tree class FilterTree { public: + FilterTree() = default; virtual ~FilterTree() {} virtual bool accept(int row, const QModelIndex &parent, const QAbstractItemModel *const model) const = 0; enum FilterType { @@ -44,9 +45,11 @@ class FilterTree { Term }; virtual FilterType type() = 0; + private: + Q_DISABLE_COPY(FilterTree) }; -// trivial filter that accepts *anything* +// Trivial filter that accepts *anything* 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; } @@ -77,9 +80,9 @@ class FilterParser { void advance(); FilterTree *parseOrGroup(); FilterTree *parseAndGroup(); - // check if iter is at the start of 'AND' if so, step over it and return true if not, return false and leave iter where it was + // Check if iter is at the start of 'AND' if so, step over it and return true if not, return false and leave iter where it was bool checkAnd(); - // check if iter is at the start of 'OR' + // Check if iter is at the start of 'OR' bool checkOr(bool step_over = true); FilterTree *parseSearchExpression(); FilterTree *parseSearchTerm(); diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 38a6a14bb..c9834f46d 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -143,13 +143,13 @@ bool PlaylistItem::HasCurrentBackgroundColor() const { return !background_colors_.isEmpty(); } -void PlaylistItem::SetForegroundColor(short priority, const QColor &color) { +void PlaylistItem::SetForegroundColor(const short priority, const QColor &color) { foreground_colors_[priority] = color; } -bool PlaylistItem::HasForegroundColor(short priority) const { +bool PlaylistItem::HasForegroundColor(const short priority) const { return foreground_colors_.contains(priority); } -void PlaylistItem::RemoveForegroundColor(short priority) { +void PlaylistItem::RemoveForegroundColor(const short priority) { foreground_colors_.remove(priority); } QColor PlaylistItem::GetCurrentForegroundColor() const { @@ -164,5 +164,5 @@ QColor PlaylistItem::GetCurrentForegroundColor() const { bool PlaylistItem::HasCurrentForegroundColor() const { return !foreground_colors_.isEmpty(); } -void PlaylistItem::SetShouldSkip(bool val) { should_skip_ = val; } +void PlaylistItem::SetShouldSkip(const bool val) { should_skip_ = val; } bool PlaylistItem::GetShouldSkip() const { return should_skip_; } diff --git a/src/playlist/playlistitem.h b/src/playlist/playlistitem.h index fb26c849d..d82ef5dbf 100644 --- a/src/playlist/playlistitem.h +++ b/src/playlist/playlistitem.h @@ -45,7 +45,7 @@ class SqlRow; class PlaylistItem : public std::enable_shared_from_this { public: - explicit PlaylistItem(const Song::Source &source) : should_skip_(false), source_(source) {} + explicit PlaylistItem(const Song::Source source) : should_skip_(false), source_(source) {} virtual ~PlaylistItem(); static PlaylistItem *NewFromSource(const Song::Source source); @@ -93,23 +93,23 @@ class PlaylistItem : public std::enable_shared_from_this { virtual void SetArtManual(const QUrl &cover_url) = 0; // Background colors. - void SetBackgroundColor(short priority, const QColor &color); - bool HasBackgroundColor(short priority) const; - void RemoveBackgroundColor(short priority); + void SetBackgroundColor(const short priority, const QColor &color); + bool HasBackgroundColor(const short priority) const; + void RemoveBackgroundColor(const short priority); QColor GetCurrentBackgroundColor() const; bool HasCurrentBackgroundColor() const; // Foreground colors. - void SetForegroundColor(short priority, const QColor &color); - bool HasForegroundColor(short priority) const; - void RemoveForegroundColor(short priority); + void SetForegroundColor(const short priority, const QColor &color); + bool HasForegroundColor(const short priority) const; + void RemoveForegroundColor(const short priority); QColor GetCurrentForegroundColor() const; bool HasCurrentForegroundColor() const; // Convenience function to find out whether this item is from the local collection, as opposed to a device, a file on disk, or a stream. // Remember that even if this returns true, the collection item might be invalid so you might want to check that its id is not equal to -1 before actually using it. virtual bool IsLocalCollectionItem() const { return false; } - void SetShouldSkip(bool val); + void SetShouldSkip(const bool val); bool GetShouldSkip() const; protected: @@ -128,6 +128,8 @@ class PlaylistItem : public std::enable_shared_from_this { QMap background_colors_; QMap foreground_colors_; + + Q_DISABLE_COPY(PlaylistItem) }; typedef std::shared_ptr PlaylistItemPtr; typedef QList PlaylistItemList; diff --git a/src/playlist/playlistitemmimedata.h b/src/playlist/playlistitemmimedata.h index ab1eed950..08ab69bcb 100644 --- a/src/playlist/playlistitemmimedata.h +++ b/src/playlist/playlistitemmimedata.h @@ -32,8 +32,8 @@ class PlaylistItemMimeData : public MimeData { Q_OBJECT public: - explicit PlaylistItemMimeData(const PlaylistItemPtr &item) : items_(PlaylistItemList() << item) {} - explicit PlaylistItemMimeData(const PlaylistItemList &items) : items_(items) {} + explicit PlaylistItemMimeData(const PlaylistItemPtr &item, QObject* = nullptr) : MimeData(), items_(PlaylistItemList() << item) {} + explicit PlaylistItemMimeData(const PlaylistItemList &items, QObject* = nullptr) : MimeData(), items_(items) {} PlaylistItemList items_; }; diff --git a/src/playlist/playlistlistcontainer.cpp b/src/playlist/playlistlistcontainer.cpp index 632d0ce49..7bf137b28 100644 --- a/src/playlist/playlistlistcontainer.cpp +++ b/src/playlist/playlistlistcontainer.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -52,6 +51,7 @@ #include "playlistlistview.h" #include "playlistlistcontainer.h" #include "playlistlistmodel.h" +#include "playlistlistsortfiltermodel.h" #include "playlistmanager.h" #include "ui_playlistlistcontainer.h" #include "organize/organizedialog.h" @@ -61,23 +61,6 @@ # include "device/devicestatefiltermodel.h" #endif -class PlaylistListSortFilterModel : public QSortFilterProxyModel { -public: - explicit PlaylistListSortFilterModel(QObject *parent) - : QSortFilterProxyModel(parent) {} - - bool lessThan(const QModelIndex &left, const QModelIndex &right) const override { - // Compare the display text first. - const int ret = left.data().toString().localeAwareCompare(right.data().toString()); - if (ret < 0) return true; - if (ret > 0) return false; - - // Now use the source model row order to ensure we always get a deterministic sorting even when two items are named the same. - return left.row() < right.row(); - } -}; - - PlaylistListContainer::PlaylistListContainer(QWidget *parent) : QWidget(parent), app_(nullptr), @@ -350,7 +333,7 @@ void PlaylistListContainer::ItemsSelectedChanged(const bool selected) { ui_->save_playlist->setEnabled(selected); } -void PlaylistListContainer::ItemDoubleClicked(const QModelIndex proxy_idx) { +void PlaylistListContainer::ItemDoubleClicked(const QModelIndex &proxy_idx) { const QModelIndex idx = proxy_->mapToSource(proxy_idx); if (!idx.isValid()) return; @@ -411,7 +394,7 @@ void PlaylistListContainer::Delete() { // Is it a playlist? switch (idx.data(PlaylistListModel::Role_Type).toInt()) { case PlaylistListModel::Type_Playlist: - ids << idx.data(PlaylistListModel::Role_PlaylistId).toInt(); + ids << idx.data(PlaylistListModel::Role_PlaylistId).toInt(); // clazy:exclude=reserve-candidates break; case PlaylistListModel::Type_Folder: diff --git a/src/playlist/playlistlistcontainer.h b/src/playlist/playlistlistcontainer.h index 02e1e6c77..9bc7a6be0 100644 --- a/src/playlist/playlistlistcontainer.h +++ b/src/playlist/playlistlistcontainer.h @@ -62,7 +62,7 @@ class PlaylistListContainer : public QWidget { private slots: // From the UI void NewFolderClicked(); - void ItemDoubleClicked(const QModelIndex proxy_idx); + void ItemDoubleClicked(const QModelIndex &proxy_idx); // From the model void PlaylistPathChanged(const int id, const QString &new_path); diff --git a/src/playlist/playlistlistmodel.cpp b/src/playlist/playlistlistmodel.cpp index 9a3779c81..f3a990d05 100644 --- a/src/playlist/playlistlistmodel.cpp +++ b/src/playlist/playlistlistmodel.cpp @@ -132,7 +132,7 @@ void PlaylistListModel::RowsAboutToBeRemoved(const QModelIndex &parent, const in const int id = idx.data(Role_PlaylistId).toInt(); QMap::iterator it = playlists_by_id_.find(id); if (it != playlists_by_id_.end() && it.value() == item) { - playlists_by_id_.erase(it); + playlists_by_id_.erase(it); // clazy:exclude=strict-iterators } break; } diff --git a/src/playlist/playlistlistsortfiltermodel.h b/src/playlist/playlistlistsortfiltermodel.h new file mode 100644 index 000000000..4ac087c94 --- /dev/null +++ b/src/playlist/playlistlistsortfiltermodel.h @@ -0,0 +1,40 @@ +/* + * Strawberry Music Player + * This file was part of Clementine. + * Copyright 2010, David Sansome + * Copyright 2018-2021, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#include + +class PlaylistListSortFilterModel : public QSortFilterProxyModel { + Q_OBJECT + + public: + explicit PlaylistListSortFilterModel(QObject *parent) + : QSortFilterProxyModel(parent) {} + + bool lessThan(const QModelIndex &left, const QModelIndex &right) const override { + // Compare the display text first. + const int ret = left.data().toString().localeAwareCompare(right.data().toString()); + if (ret < 0) return true; + if (ret > 0) return false; + + // Now use the source model row order to ensure we always get a deterministic sorting even when two items are named the same. + return left.row() < right.row(); + } +}; diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index a47b38916..6e965b01c 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -132,6 +132,7 @@ QList PlaylistManager::GetAllPlaylists() const { QList result; QList datas = playlists_.values(); + result.reserve(datas.count()); for (const Data &data : datas) { result.append(data.p); } @@ -568,7 +569,8 @@ QString PlaylistManager::GetNameForNewPlaylist(const SongList &songs) { QSet artists; QSet albums; - + artists.reserve(songs.count()); + albums.reserve(songs.count()); for (const Song &song : songs) { artists << (song.artist().isEmpty() ? tr("Unknown") : song.artist()); albums << (song.album().isEmpty() ? tr("Unknown") : song.album()); diff --git a/src/playlist/playlisttabbar.cpp b/src/playlist/playlisttabbar.cpp index 9e248ed0d..29b9694fd 100644 --- a/src/playlist/playlisttabbar.cpp +++ b/src/playlist/playlisttabbar.cpp @@ -346,6 +346,7 @@ void PlaylistTabBar::InsertTab(const int id, const int index, const QString &tex void PlaylistTabBar::TabMoved() { QList ids; + ids.reserve(count()); for (int i = 0; i < count(); ++i) { ids << tabData(i).toInt(); } diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 23bdd59c6..d1ea7074b 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -90,7 +90,7 @@ const int PlaylistView::kAutoscrollGraceTimeout = 30; // seconds const int PlaylistView::kDropIndicatorWidth = 2; const int PlaylistView::kDropIndicatorGradientWidth = 5; -PlaylistProxyStyle::PlaylistProxyStyle() : QProxyStyle(nullptr), common_style_(new QCommonStyle) {} +PlaylistProxyStyle::PlaylistProxyStyle(QObject*) : QProxyStyle(nullptr), common_style_(new QCommonStyle) {} void PlaylistProxyStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { @@ -465,6 +465,7 @@ QList PlaylistView::LoadBarPixmap(const QString &filename) { // Animation steps QList ret; + ret.reserve(kGlowIntensitySteps); for (int i = 0; i < kGlowIntensitySteps; ++i) { QImage step(image.copy()); p.begin(&step); @@ -560,7 +561,7 @@ void PlaylistView::drawRow(QPainter *painter, const QStyleOptionViewItem &option } -void PlaylistView::UpdateCachedCurrentRowPixmap(QStyleOptionViewItem option, const QModelIndex &idx) { +void PlaylistView::UpdateCachedCurrentRowPixmap(QStyleOptionViewItem option, const QModelIndex &idx) { // clazy:exclude=function-args-by-ref cached_current_row_rect_ = option.rect; cached_current_row_row_ = idx.row(); @@ -1289,7 +1290,7 @@ void PlaylistView::resizeEvent(QResizeEvent *e) { bool PlaylistView::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::Enter && (object == horizontalScrollBar() || object == verticalScrollBar())) { - return false; + return false; // clazy:exclude=base-class-event } return QAbstractItemView::eventFilter(object, event); @@ -1397,7 +1398,7 @@ void PlaylistView::Stopped() { } -void PlaylistView::AlbumCoverLoaded(const Song &song, AlbumCoverLoaderResult result) { +void PlaylistView::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result) { if ((song != Song() && song_playing_ == Song()) || result.album_cover.image == current_song_cover_art_) return; @@ -1510,7 +1511,7 @@ void PlaylistView::SetRatingLockStatus(const bool state) { } -void PlaylistView::RatingHoverIn(const QModelIndex &idx, const QPoint &pos) { +void PlaylistView::RatingHoverIn(const QModelIndex &idx, const QPoint pos) { if (editTriggers() & QAbstractItemView::NoEditTriggers) { return; diff --git a/src/playlist/playlistview.h b/src/playlist/playlistview.h index b9384016c..9dc2c0655 100644 --- a/src/playlist/playlistview.h +++ b/src/playlist/playlistview.h @@ -82,8 +82,10 @@ class RatingItemDelegate; // This proxy style uses QCommonStyle to paint the affected elements. // This class is used by internet search view as well. class PlaylistProxyStyle : public QProxyStyle { + Q_OBJECT + public: - explicit PlaylistProxyStyle(); + explicit PlaylistProxyStyle(QObject *parent = nullptr); void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override; void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override; @@ -122,7 +124,7 @@ class PlaylistView : public QTreeView { void SaveSettings(); void SetColumnAlignment(const int section, const Qt::Alignment alignment); void JumpToCurrentlyPlayingTrack(); - void edit(const QModelIndex &idx) { return QAbstractItemView::edit(idx); } + void edit(const QModelIndex &idx) { QAbstractItemView::edit(idx); } signals: void PlayItem(QModelIndex idx, Playlist::AutoScroll autoscroll); @@ -181,10 +183,10 @@ class PlaylistView : public QTreeView { void Playing(); void Stopped(); void SongChanged(const Song &song); - void AlbumCoverLoaded(const Song &song, AlbumCoverLoaderResult result = AlbumCoverLoaderResult()); + void AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result = AlbumCoverLoaderResult()); void DynamicModeChanged(const bool dynamic); void SetRatingLockStatus(const bool state); - void RatingHoverIn(const QModelIndex &idx, const QPoint &pos); + void RatingHoverIn(const QModelIndex &idx, const QPoint pos); void RatingHoverOut(); private: @@ -197,7 +199,7 @@ class PlaylistView : public QTreeView { void set_background_image_type(AppearanceSettingsPage::BackgroundImageType bg) { background_image_type_ = bg; - emit BackgroundPropertyChanged(); + emit BackgroundPropertyChanged(); // clazy:exclude=incorrect-emit } // Save image as the background_image_ after applying some modifications (opacity, ...). // Should be used instead of modifying background_image_ directly diff --git a/src/playlist/songloaderinserter.cpp b/src/playlist/songloaderinserter.cpp index b1a73e0df..24a6fc23c 100644 --- a/src/playlist/songloaderinserter.cpp +++ b/src/playlist/songloaderinserter.cpp @@ -32,8 +32,9 @@ #include "playlist.h" #include "songloaderinserter.h" -SongLoaderInserter::SongLoaderInserter(TaskManager *task_manager, CollectionBackendInterface *collection, const Player *player) - : task_manager_(task_manager), +SongLoaderInserter::SongLoaderInserter(TaskManager *task_manager, CollectionBackendInterface *collection, const Player *player, QObject *parent) + : QObject(parent), + task_manager_(task_manager), destination_(nullptr), row_(-1), play_now_(true), diff --git a/src/playlist/songloaderinserter.h b/src/playlist/songloaderinserter.h index 65e9020b7..7515f9117 100644 --- a/src/playlist/songloaderinserter.h +++ b/src/playlist/songloaderinserter.h @@ -41,7 +41,7 @@ class SongLoaderInserter : public QObject { Q_OBJECT public: - explicit SongLoaderInserter(TaskManager *task_manager, CollectionBackendInterface *collection, const Player *player); + explicit SongLoaderInserter(TaskManager *task_manager, CollectionBackendInterface *collection, const Player *player, QObject *parent = nullptr); ~SongLoaderInserter() override; void Load(Playlist *destination, int row, bool play_now, bool enqueue, bool enqueue_next, const QList &urls); diff --git a/src/playlist/songmimedata.h b/src/playlist/songmimedata.h index 26e31f377..7e6421f3c 100644 --- a/src/playlist/songmimedata.h +++ b/src/playlist/songmimedata.h @@ -35,7 +35,7 @@ class SongMimeData : public MimeData { Q_OBJECT public: - explicit SongMimeData() : backend(nullptr) {} + explicit SongMimeData(QObject* = nullptr) : MimeData(), backend(nullptr) {} CollectionBackendInterface *backend; SongList songs; diff --git a/src/playlist/songplaylistitem.h b/src/playlist/songplaylistitem.h index 1793e06fd..5f30dd818 100644 --- a/src/playlist/songplaylistitem.h +++ b/src/playlist/songplaylistitem.h @@ -52,6 +52,8 @@ class SongPlaylistItem : public PlaylistItem { private: Song song_; + + Q_DISABLE_COPY(SongPlaylistItem) }; #endif // SONGPLAYLISTITEM_H diff --git a/src/playlistparsers/playlistparser.cpp b/src/playlistparsers/playlistparser.cpp index 7ffed4855..32d2b7967 100644 --- a/src/playlistparsers/playlistparser.cpp +++ b/src/playlistparsers/playlistparser.cpp @@ -88,6 +88,7 @@ QStringList PlaylistParser::mime_types() const { QString PlaylistParser::filters() const { QStringList filters; + filters.reserve(parsers_.count() + 1); QStringList all_extensions; for (ParserBase *parser : parsers_) { filters << FilterForParser(parser, &all_extensions); @@ -101,9 +102,12 @@ QString PlaylistParser::filters() const { QString PlaylistParser::FilterForParser(const ParserBase *parser, QStringList *all_extensions) const { + const QStringList file_extensions = parser->file_extensions(); QStringList extensions; - for (const QString &extension : parser->file_extensions()) + extensions.reserve(file_extensions.count()); + for (const QString &extension : file_extensions) { extensions << "*." + extension; + } if (all_extensions) *all_extensions << extensions; @@ -181,7 +185,7 @@ SongList PlaylistParser::LoadFromDevice(QIODevice *device, const QString &path_h } -void PlaylistParser::Save(const SongList &songs, const QString &filename, Playlist::Path path_type) const { +void PlaylistParser::Save(const SongList &songs, const QString &filename, const Playlist::Path path_type) const { QFileInfo info(filename); @@ -194,8 +198,10 @@ void PlaylistParser::Save(const SongList &songs, const QString &filename, Playli // Open the file QFile file(filename); - file.open(QIODevice::WriteOnly); + if (!file.open(QIODevice::WriteOnly)) return; - return parser->Save(songs, &file, info.absolutePath(), path_type); + parser->Save(songs, &file, info.absolutePath(), path_type); + + file.close(); } diff --git a/src/playlistparsers/playlistparser.h b/src/playlistparsers/playlistparser.h index 82bf23f64..fc30da7fc 100644 --- a/src/playlistparsers/playlistparser.h +++ b/src/playlistparsers/playlistparser.h @@ -58,7 +58,7 @@ class PlaylistParser : public QObject { SongList LoadFromFile(const QString &filename) const; SongList LoadFromDevice(QIODevice *device, const QString &path_hint = QString(), const QDir &dir_hint = QDir()) const; - void Save(const SongList &songs, const QString &filename, Playlist::Path) const; + void Save(const SongList &songs, const QString &filename, const Playlist::Path) const; private: QString FilterForParser(const ParserBase *parser, QStringList *all_extensions = nullptr) const; diff --git a/src/playlistparsers/plsparser.cpp b/src/playlistparsers/plsparser.cpp index f5ef4622c..614ee9faa 100644 --- a/src/playlistparsers/plsparser.cpp +++ b/src/playlistparsers/plsparser.cpp @@ -81,7 +81,7 @@ SongList PLSParser::Load(QIODevice *device, const QString &playlist_path, const } } - return songs.values(); + return songs.values(); // clazy:exclude=qt6-deprecated-api-fixes } diff --git a/src/playlistparsers/wplparser.h b/src/playlistparsers/wplparser.h index 18c90e145..b73ff6256 100644 --- a/src/playlistparsers/wplparser.h +++ b/src/playlistparsers/wplparser.h @@ -39,6 +39,7 @@ class QXmlStreamWriter; class CollectionBackendInterface; class WplParser : public XMLParser { + Q_OBJECT public: explicit WplParser(CollectionBackendInterface *collection, QObject *parent = nullptr); diff --git a/src/playlistparsers/xmlparser.h b/src/playlistparsers/xmlparser.h index c80ed96da..97dbd459e 100644 --- a/src/playlistparsers/xmlparser.h +++ b/src/playlistparsers/xmlparser.h @@ -33,6 +33,7 @@ class CollectionBackendInterface; class XMLParser : public ParserBase { + Q_OBJECT protected: explicit XMLParser(CollectionBackendInterface *collection, QObject *parent); diff --git a/src/qobuz/qobuzbaserequest.cpp b/src/qobuz/qobuzbaserequest.cpp index f17376e6d..5842fe3fe 100644 --- a/src/qobuz/qobuzbaserequest.cpp +++ b/src/qobuz/qobuzbaserequest.cpp @@ -84,9 +84,9 @@ QNetworkReply *QobuzBaseRequest::CreateRequest(const QString &ressource_name, co } -void QobuzBaseRequest::HandleSSLErrors(QList ssl_errors) { +void QobuzBaseRequest::HandleSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { Error(ssl_error.errorString()); } diff --git a/src/qobuz/qobuzbaserequest.h b/src/qobuz/qobuzbaserequest.h index f73dfdd1b..a2e28eea0 100644 --- a/src/qobuz/qobuzbaserequest.h +++ b/src/qobuz/qobuzbaserequest.h @@ -94,7 +94,7 @@ class QobuzBaseRequest : public QObject { int login_attempts() { return service_->login_attempts(); } private slots: - void HandleSSLErrors(QList ssl_errors); + void HandleSSLErrors(const QList &ssl_errors); private: QobuzService *service_; diff --git a/src/qobuz/qobuzrequest.cpp b/src/qobuz/qobuzrequest.cpp index 9065e6f01..95e14ea81 100644 --- a/src/qobuz/qobuzrequest.cpp +++ b/src/qobuz/qobuzrequest.cpp @@ -510,7 +510,7 @@ void QobuzRequest::FlushArtistAlbumsRequests() { } -void QobuzRequest::ArtistAlbumsReplyReceived(QNetworkReply *reply, const QString artist_id, const int offset_requested) { +void QobuzRequest::ArtistAlbumsReplyReceived(QNetworkReply *reply, const QString &artist_id, const int offset_requested) { --artist_albums_requests_active_; ++artist_albums_received_; diff --git a/src/qobuz/qobuzrequest.h b/src/qobuz/qobuzrequest.h index 9e5742415..96bfd1907 100644 --- a/src/qobuz/qobuzrequest.h +++ b/src/qobuz/qobuzrequest.h @@ -77,7 +77,7 @@ class QobuzRequest : public QobuzBaseRequest { void SongsReplyReceived(QNetworkReply *reply, const int limit_requested, const int offset_requested); void SongsReceived(QNetworkReply *reply, const QString &artist_id_requested, const QString &album_id_requested, const int limit_requested, const int offset_requested, const QString &album_artist_requested = QString(), const QString &album_requested = QString()); - void ArtistAlbumsReplyReceived(QNetworkReply *reply, const QString artist_id, const int offset_requested); + void ArtistAlbumsReplyReceived(QNetworkReply *reply, const QString &artist_id, const int offset_requested); void AlbumSongsReplyReceived(QNetworkReply *reply, const QString &artist_id, const QString &album_id, const int offset_requested, const QString &album_artist, const QString &album); void AlbumCoverReceived(QNetworkReply *reply, const QUrl &cover_url, const QString &filename); diff --git a/src/qobuz/qobuzservice.cpp b/src/qobuz/qobuzservice.cpp index 887e7aee4..566e5ecc0 100644 --- a/src/qobuz/qobuzservice.cpp +++ b/src/qobuz/qobuzservice.cpp @@ -202,7 +202,7 @@ void QobuzService::Exit() { void QobuzService::ExitReceived() { - QObject *obj = qobject_cast(sender()); + QObject *obj = sender(); QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully exited."; wait_for_exit_.removeAll(obj); @@ -287,9 +287,9 @@ void QobuzService::SendLoginWithCredentials(const QString &app_id, const QString } -void QobuzService::HandleLoginSSLErrors(QList ssl_errors) { +void QobuzService::HandleLoginSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { login_errors_ += ssl_error.errorString(); } @@ -728,7 +728,7 @@ void QobuzService::GetStreamURL(const QUrl &url) { } -void QobuzService::HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error) { +void QobuzService::HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error) { QobuzStreamURLRequest *stream_url_req = qobject_cast(sender()); if (!stream_url_req || !stream_url_requests_.contains(stream_url_req)) return; diff --git a/src/qobuz/qobuzservice.h b/src/qobuz/qobuzservice.h index b432f4189..0a4734f6e 100644 --- a/src/qobuz/qobuzservice.h +++ b/src/qobuz/qobuzservice.h @@ -128,7 +128,7 @@ class QobuzService : public InternetService { private slots: void ExitReceived(); - void HandleLoginSSLErrors(QList ssl_errors); + void HandleLoginSSLErrors(const QList &ssl_errors); void HandleAuthReply(QNetworkReply *reply); void ResetLoginAttempts(); void StartSearch(); @@ -145,7 +145,7 @@ class QobuzService : public InternetService { void ArtistsUpdateProgressReceived(const int id, const int progress); void AlbumsUpdateProgressReceived(const int id, const int progress); void SongsUpdateProgressReceived(const int id, const int progress); - void HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error); + void HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error); private: typedef QPair Param; diff --git a/src/qobuz/qobuzurlhandler.cpp b/src/qobuz/qobuzurlhandler.cpp index c8b5502cf..47e422494 100644 --- a/src/qobuz/qobuzurlhandler.cpp +++ b/src/qobuz/qobuzurlhandler.cpp @@ -49,7 +49,7 @@ UrlHandler::LoadResult QobuzUrlHandler::StartLoading(const QUrl &url) { } -void QobuzUrlHandler::GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error) { +void QobuzUrlHandler::GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error) { if (task_id_ == -1) return; CancelTask(); diff --git a/src/qobuz/qobuzurlhandler.h b/src/qobuz/qobuzurlhandler.h index e7ca45f6b..3a0990cf8 100644 --- a/src/qobuz/qobuzurlhandler.h +++ b/src/qobuz/qobuzurlhandler.h @@ -43,7 +43,7 @@ class QobuzUrlHandler : public UrlHandler { void CancelTask(); private slots: - void GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error = QString()); + void GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error = QString()); private: Application *app_; diff --git a/src/queue/queue.cpp b/src/queue/queue.cpp index 505c4e124..7e76ea717 100644 --- a/src/queue/queue.cpp +++ b/src/queue/queue.cpp @@ -45,7 +45,7 @@ const char *Queue::kRowsMimetype = "application/x-strawberry-queue-rows"; -Queue::Queue(Playlist *parent) : QAbstractProxyModel(parent), playlist_(parent), total_length_ns_(0) { +Queue::Queue(Playlist *playlist, QObject *parent) : QAbstractProxyModel(parent), playlist_(playlist), total_length_ns_(0) { signal_item_count_changed_ = QObject::connect(this, &Queue::ItemCountChanged, this, &Queue::UpdateTotalLength); QObject::connect(this, &Queue::TotalLengthChanged, this, &Queue::UpdateSummaryText); @@ -67,7 +67,7 @@ QModelIndex Queue::mapFromSource(const QModelIndex &source_index) const { } -bool Queue::ContainsSourceRow(int source_row) const { +bool Queue::ContainsSourceRow(const int source_row) const { for (int i = 0; i < source_indexes_.count(); ++i) { if (source_indexes_[i].row() == source_row) return true; @@ -254,8 +254,9 @@ void Queue::UpdateSummaryText() { summary += tracks == 1 ? tr("1 track") : tr("%1 tracks").arg(tracks); - if (nanoseconds) + if (nanoseconds) { summary += " - [ " + Utilities::WordyTimeNanosec(nanoseconds) + " ]"; + } emit SummaryTextChanged(summary); @@ -278,10 +279,11 @@ void Queue::Move(const QList &proxy_rows, int pos) { // Take the items out of the list first, keeping track of whether the insertion point changes int offset = 0; - for (int row : proxy_rows) { + moved_items.reserve(proxy_rows.count()); + for (const int row : proxy_rows) { moved_items << source_indexes_.takeAt(row - offset); - if (pos != -1 && pos >= row) pos--; - offset++; + if (pos != -1 && pos >= row) --pos; + ++offset; } // Put the items back in @@ -374,7 +376,7 @@ bool Queue::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, Playlist *playlist = nullptr; QList source_rows; QDataStream stream(data->data(Playlist::kRowsMimetype)); - stream.readRawData(reinterpret_cast(&playlist), sizeof(playlist)); + stream.readRawData(reinterpret_cast(&playlist), sizeof(Playlist)); stream >> source_rows; QModelIndexList source_indexes; @@ -417,8 +419,10 @@ Qt::ItemFlags Queue::flags(const QModelIndex &idx) const { } int Queue::PeekNext() const { + if (source_indexes_.isEmpty()) return -1; return source_indexes_.first().row(); + } int Queue::TakeNext() { diff --git a/src/queue/queue.h b/src/queue/queue.h index a4aae46ba..666b6200c 100644 --- a/src/queue/queue.h +++ b/src/queue/queue.h @@ -39,14 +39,14 @@ class Queue : public QAbstractProxyModel { Q_OBJECT public: - explicit Queue(Playlist *parent = nullptr); + explicit Queue(Playlist *playlist = nullptr, QObject *parent = nullptr); static const char *kRowsMimetype; // Query the queue bool is_empty() const; int PositionOf(const QModelIndex &source_index) const; - bool ContainsSourceRow(int source_row) const; + bool ContainsSourceRow(const int source_row) const; int PeekNext() const; int ItemCount() const; quint64 GetTotalLength() const; @@ -57,8 +57,8 @@ class Queue : public QAbstractProxyModel { void InsertFirst(const QModelIndexList &source_indexes); void Clear(); void Move(const QList &proxy_rows, int pos); - void MoveUp(int row); - void MoveDown(int row); + void MoveUp(const int row); + void MoveDown(const int row); void Remove(QList &proxy_rows); // QAbstractProxyModel diff --git a/src/scrobbler/audioscrobbler.cpp b/src/scrobbler/audioscrobbler.cpp index 4f3dbb67f..7071e78c3 100644 --- a/src/scrobbler/audioscrobbler.cpp +++ b/src/scrobbler/audioscrobbler.cpp @@ -208,6 +208,6 @@ void AudioScrobbler::WriteCache() { } -void AudioScrobbler::ErrorReceived(QString error) { +void AudioScrobbler::ErrorReceived(const QString &error) { emit ErrorMessage(error); } diff --git a/src/scrobbler/audioscrobbler.h b/src/scrobbler/audioscrobbler.h index 895314d57..e90bcb2d9 100644 --- a/src/scrobbler/audioscrobbler.h +++ b/src/scrobbler/audioscrobbler.h @@ -68,7 +68,7 @@ class AudioScrobbler : public QObject { void Submit(); void Love(); void WriteCache(); - void ErrorReceived(QString); + void ErrorReceived(const QString &error); signals: void ErrorMessage(QString); @@ -78,7 +78,6 @@ class AudioScrobbler : public QObject { void LoveButtonVisibilityChanged(bool value); private: - Application *app_; ScrobblerServices *scrobbler_services_; diff --git a/src/scrobbler/listenbrainzscrobbler.cpp b/src/scrobbler/listenbrainzscrobbler.cpp index 70c92cce4..ffa41a569 100644 --- a/src/scrobbler/listenbrainzscrobbler.cpp +++ b/src/scrobbler/listenbrainzscrobbler.cpp @@ -552,7 +552,8 @@ void ListenBrainzScrobbler::Submit() { QJsonArray array; int i(0); QList list; - for (ScrobblerCacheItemPtr item : cache_->List()) { + QList items = cache_->List(); + for (ScrobblerCacheItemPtr item : items) { // clazy:exclude=range-loop if (item->sent_) continue; item->sent_ = true; ++i; @@ -587,7 +588,7 @@ void ListenBrainzScrobbler::Submit() { } -void ListenBrainzScrobbler::ScrobbleRequestFinished(QNetworkReply *reply, QList list) { +void ListenBrainzScrobbler::ScrobbleRequestFinished(QNetworkReply *reply, const QList &list) { if (!replies_.contains(reply)) return; replies_.removeAll(reply); diff --git a/src/scrobbler/listenbrainzscrobbler.h b/src/scrobbler/listenbrainzscrobbler.h index 3428d4ad8..0c745088b 100644 --- a/src/scrobbler/listenbrainzscrobbler.h +++ b/src/scrobbler/listenbrainzscrobbler.h @@ -80,7 +80,7 @@ class ListenBrainzScrobbler : public ScrobblerService { void AuthenticateReplyFinished(QNetworkReply *reply); void RequestNewAccessToken() { RequestAccessToken(); } void UpdateNowPlayingRequestFinished(QNetworkReply *reply); - void ScrobbleRequestFinished(QNetworkReply *reply, QList); + void ScrobbleRequestFinished(QNetworkReply *reply, const QList &list); private: QNetworkReply *CreateRequest(const QUrl &url, const QJsonDocument &json_doc); diff --git a/src/scrobbler/scrobblercache.cpp b/src/scrobbler/scrobblercache.cpp index 517cc5963..f37ff46dc 100644 --- a/src/scrobbler/scrobblercache.cpp +++ b/src/scrobbler/scrobblercache.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -43,6 +44,8 @@ #include "scrobblercache.h" #include "scrobblercacheitem.h" +using namespace std::chrono_literals; + ScrobblerCache::ScrobblerCache(const QString &filename, QObject *parent) : QObject(parent), timer_flush_(new QTimer(this)), @@ -53,7 +56,7 @@ ScrobblerCache::ScrobblerCache(const QString &filename, QObject *parent) : loaded_ = true; timer_flush_->setSingleShot(true); - timer_flush_->setInterval(600000); + timer_flush_->setInterval(10min); QObject::connect(timer_flush_, &QTimer::timeout, this, &ScrobblerCache::WriteCache); } @@ -197,7 +200,7 @@ void ScrobblerCache::WriteCache() { } -ScrobblerCacheItemPtr ScrobblerCache::Add(const Song &song, const quint64 ×tamp) { +ScrobblerCacheItemPtr ScrobblerCache::Add(const Song &song, const quint64 timestamp) { if (scrobbler_cache_.contains(timestamp)) return nullptr; diff --git a/src/scrobbler/scrobblercache.h b/src/scrobbler/scrobblercache.h index 9ab08e34f..822fe8f07 100644 --- a/src/scrobbler/scrobblercache.h +++ b/src/scrobbler/scrobblercache.h @@ -44,7 +44,7 @@ class ScrobblerCache : public QObject { void ReadCache(); - ScrobblerCacheItemPtr Add(const Song &song, const quint64 ×tamp); + ScrobblerCacheItemPtr Add(const Song &song, const quint64 timestamp); ScrobblerCacheItemPtr Get(const quint64 hash); void Remove(const quint64 hash); void Remove(ScrobblerCacheItemPtr item); diff --git a/src/scrobbler/scrobblercacheitem.cpp b/src/scrobbler/scrobblercacheitem.cpp index ec512efbe..de255a038 100644 --- a/src/scrobbler/scrobblercacheitem.cpp +++ b/src/scrobbler/scrobblercacheitem.cpp @@ -24,7 +24,8 @@ #include "scrobblercacheitem.h" -ScrobblerCacheItem::ScrobblerCacheItem(const QString &artist, const QString &album, const QString &song, const QString &albumartist, const int track, const qint64 duration, const quint64 ×tamp) : +ScrobblerCacheItem::ScrobblerCacheItem(const QString &artist, const QString &album, const QString &song, const QString &albumartist, const int track, const qint64 duration, const quint64 timestamp, QObject *parent) : + QObject(parent), artist_(artist), album_(album), song_(song), diff --git a/src/scrobbler/scrobblercacheitem.h b/src/scrobbler/scrobblercacheitem.h index cc18b0733..6c22b2938 100644 --- a/src/scrobbler/scrobblercacheitem.h +++ b/src/scrobbler/scrobblercacheitem.h @@ -34,7 +34,7 @@ class ScrobblerCacheItem : public QObject { Q_OBJECT public: - explicit ScrobblerCacheItem(const QString &artist, const QString &album, const QString &song, const QString &albumartist, const int track, const qint64 duration, const quint64 ×tamp); + explicit ScrobblerCacheItem(const QString &artist, const QString &album, const QString &song, const QString &albumartist, const int track, const qint64 duration, const quint64 timestamp, QObject *parent = nullptr); QString effective_albumartist() const { return albumartist_.isEmpty() || albumartist_.toLower() == Song::kVariousArtists ? artist_ : albumartist_; } diff --git a/src/scrobbler/scrobblingapi20.cpp b/src/scrobbler/scrobblingapi20.cpp index 91c0f87e4..b86598ba8 100644 --- a/src/scrobbler/scrobblingapi20.cpp +++ b/src/scrobbler/scrobblingapi20.cpp @@ -585,7 +585,8 @@ void ScrobblingAPI20::Submit() { int i = 0; QList list; - for (ScrobblerCacheItemPtr item : cache()->List()) { + QList items = cache()->List(); + for (ScrobblerCacheItemPtr item : items) { // clazy:exclude=range-loop if (item->sent_) continue; item->sent_ = true; if (!batch_) { @@ -614,7 +615,7 @@ void ScrobblingAPI20::Submit() { } -void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, QList list) { +void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, const QList &list) { if (!replies_.contains(reply)) return; replies_.removeAll(reply); @@ -720,7 +721,7 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, QList); - void SingleScrobbleRequestFinished(QNetworkReply *reply, quint64 timestamp); + void ScrobbleRequestFinished(QNetworkReply *reply, const QList &list); + void SingleScrobbleRequestFinished(QNetworkReply *reply, const quint64 timestamp); void LoveRequestFinished(QNetworkReply *reply); private: diff --git a/src/settings/appearancesettingspage.cpp b/src/settings/appearancesettingspage.cpp index 60738dd00..0f1381de1 100644 --- a/src/settings/appearancesettingspage.cpp +++ b/src/settings/appearancesettingspage.cpp @@ -87,8 +87,8 @@ const char *AppearanceSettingsPage::kIconSizeConfigureButtons = "icon_size_confi const char *AppearanceSettingsPage::kPlaylistPlayingSongColor = "playlist_playing_song_color"; -AppearanceSettingsPage::AppearanceSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), +AppearanceSettingsPage::AppearanceSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_AppearanceSettingsPage), original_use_a_custom_color_set_(false), background_image_type_(BackgroundImageType_Default) { diff --git a/src/settings/appearancesettingspage.h b/src/settings/appearancesettingspage.h index 597cec095..6f3da4d93 100644 --- a/src/settings/appearancesettingspage.h +++ b/src/settings/appearancesettingspage.h @@ -39,7 +39,7 @@ class AppearanceSettingsPage : public SettingsPage { Q_OBJECT public: - explicit AppearanceSettingsPage(SettingsDialog *dialog); + explicit AppearanceSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~AppearanceSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/backendsettingspage.cpp b/src/settings/backendsettingspage.cpp index 5d550d91e..9f3a4abc9 100644 --- a/src/settings/backendsettingspage.cpp +++ b/src/settings/backendsettingspage.cpp @@ -64,8 +64,8 @@ const qint64 BackendSettingsPage::kDefaultBufferDuration = 4000; const double BackendSettingsPage::kDefaultBufferLowWatermark = 0.33; const double BackendSettingsPage::kDefaultBufferHighWatermark = 0.99; -BackendSettingsPage::BackendSettingsPage(SettingsDialog *dialog) : - SettingsPage(dialog), +BackendSettingsPage::BackendSettingsPage(SettingsDialog *dialog, QWidget *parent) : + SettingsPage(dialog, parent), ui_(new Ui_BackendSettingsPage), configloaded_(false), engineloaded_(false) { @@ -216,9 +216,9 @@ void BackendSettingsPage::Load() { output_name = output.name; } QVariant device_value; - if (ui_->combobox_device->currentText().isEmpty()) device_value = QVariant(); - else if (ui_->combobox_device->currentText() == kOutputCustom) device_value = ui_->lineedit_device->text(); - else device_value = ui_->combobox_device->itemData(ui_->combobox_device->currentIndex()).value(); + if (ui_->combobox_device->currentText().isEmpty()) device_value = QVariant(); // clazy:exclude=qt6-deprecated-api-fixes + else if (ui_->combobox_device->currentText() == kOutputCustom) device_value = ui_->lineedit_device->text(); // clazy:exclude=qt6-deprecated-api-fixes + else device_value = ui_->combobox_device->itemData(ui_->combobox_device->currentIndex()).value(); // clazy:exclude=qt6-deprecated-api-fixes if (enginetype_current_ != enginetype || output_name != output_current_ || device_value != device_current_) { set_changed(); @@ -295,7 +295,7 @@ void BackendSettingsPage::Load_Output(QString output, QVariant device) { } if (!found) { // Output is invalid for this engine, reset to default output. output = engine()->DefaultOutput(); - device = (engine()->CustomDeviceSupport(output) ? QString() : QVariant()); + device = (engine()->CustomDeviceSupport(output) ? QString() : QVariant()); // clazy:exclude=qt6-deprecated-api-fixes for (int i = 0; i < ui_->combobox_output->count(); ++i) { EngineBase::OutputDetails o = ui_->combobox_output->itemData(i).value(); if (o.name == output) { @@ -444,9 +444,9 @@ void BackendSettingsPage::Save() { output_name = output.name; } - if (ui_->combobox_device->currentText().isEmpty()) device_value = QVariant(); - else if (ui_->combobox_device->currentText() == kOutputCustom) device_value = ui_->lineedit_device->text(); - else device_value = ui_->combobox_device->itemData(ui_->combobox_device->currentIndex()).value(); + if (ui_->combobox_device->currentText().isEmpty()) device_value = QVariant(); // clazy:exclude=qt6-deprecated-api-fixes + else if (ui_->combobox_device->currentText() == kOutputCustom) device_value = ui_->lineedit_device->text(); // clazy:exclude=qt6-deprecated-api-fixes + else device_value = ui_->combobox_device->itemData(ui_->combobox_device->currentIndex()).value(); // clazy:exclude=qt6-deprecated-api-fixes QSettings s; s.beginGroup(kSettingsGroup); diff --git a/src/settings/backendsettingspage.h b/src/settings/backendsettingspage.h index eb217e373..d7006e24b 100644 --- a/src/settings/backendsettingspage.h +++ b/src/settings/backendsettingspage.h @@ -41,7 +41,7 @@ class BackendSettingsPage : public SettingsPage { Q_OBJECT public: - explicit BackendSettingsPage(SettingsDialog *dialog); + explicit BackendSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~BackendSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/behavioursettingspage.cpp b/src/settings/behavioursettingspage.cpp index e8883337f..ed270367e 100644 --- a/src/settings/behavioursettingspage.cpp +++ b/src/settings/behavioursettingspage.cpp @@ -58,7 +58,7 @@ bool LocaleAwareCompare(const QString &a, const QString &b) { } // namespace #endif -BehaviourSettingsPage::BehaviourSettingsPage(SettingsDialog *dialog) : SettingsPage(dialog), ui_(new Ui_BehaviourSettingsPage), systemtray_available_(false) { +BehaviourSettingsPage::BehaviourSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui_BehaviourSettingsPage), systemtray_available_(false) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("strawberry")); diff --git a/src/settings/behavioursettingspage.h b/src/settings/behavioursettingspage.h index 3ef01d5a4..ccfc82637 100644 --- a/src/settings/behavioursettingspage.h +++ b/src/settings/behavioursettingspage.h @@ -37,7 +37,7 @@ class BehaviourSettingsPage : public SettingsPage { Q_OBJECT public: - explicit BehaviourSettingsPage(SettingsDialog *dialog); + explicit BehaviourSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~BehaviourSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/collectionsettingspage.cpp b/src/settings/collectionsettingspage.cpp index 3b46f89f9..eed4efa69 100644 --- a/src/settings/collectionsettingspage.cpp +++ b/src/settings/collectionsettingspage.cpp @@ -61,8 +61,8 @@ const char *CollectionSettingsPage::kSettingsDiskCacheSizeUnit = "disk_cache_siz const int CollectionSettingsPage::kSettingsCacheSizeDefault = 160; const int CollectionSettingsPage::kSettingsDiskCacheSizeDefault = 360; -CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), +CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_CollectionSettingsPage), initialized_model_(false) { diff --git a/src/settings/collectionsettingspage.h b/src/settings/collectionsettingspage.h index c455128e7..c3c8623c8 100644 --- a/src/settings/collectionsettingspage.h +++ b/src/settings/collectionsettingspage.h @@ -38,7 +38,7 @@ class CollectionSettingsPage : public SettingsPage { Q_OBJECT public: - explicit CollectionSettingsPage(SettingsDialog *dialog); + explicit CollectionSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~CollectionSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/contextsettingspage.cpp b/src/settings/contextsettingspage.cpp index c065027a3..d429d4979 100644 --- a/src/settings/contextsettingspage.cpp +++ b/src/settings/contextsettingspage.cpp @@ -60,7 +60,7 @@ const char *ContextSettingsPage::kSettingsGroupEnable[ContextSettingsOrder::NELE const qreal ContextSettingsPage::kDefaultFontSizeHeadline = 11; -ContextSettingsPage::ContextSettingsPage(SettingsDialog *dialog) : SettingsPage(dialog), ui_(new Ui_ContextSettingsPage) { +ContextSettingsPage::ContextSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui_ContextSettingsPage) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("view-choose")); diff --git a/src/settings/contextsettingspage.h b/src/settings/contextsettingspage.h index 57dee0313..ce93fa8e3 100644 --- a/src/settings/contextsettingspage.h +++ b/src/settings/contextsettingspage.h @@ -39,7 +39,7 @@ class ContextSettingsPage : public SettingsPage { Q_OBJECT public: - explicit ContextSettingsPage(SettingsDialog *dialog); + explicit ContextSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~ContextSettingsPage() override; enum ContextSettingsOrder { diff --git a/src/settings/coverssettingspage.cpp b/src/settings/coverssettingspage.cpp index ecb84c543..a8c7acfda 100644 --- a/src/settings/coverssettingspage.cpp +++ b/src/settings/coverssettingspage.cpp @@ -46,7 +46,7 @@ const char *CoversSettingsPage::kSettingsGroup = "Covers"; -CoversSettingsPage::CoversSettingsPage(SettingsDialog *parent) : SettingsPage(parent), ui_(new Ui::CoversSettingsPage), provider_selected_(false) { +CoversSettingsPage::CoversSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui::CoversSettingsPage), provider_selected_(false) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("cdcase")); @@ -65,7 +65,7 @@ CoversSettingsPage::CoversSettingsPage(SettingsDialog *parent) : SettingsPage(pa NoProviderSelected(); DisableAuthentication(); - dialog()->installEventFilter(this); + dialog->installEventFilter(this); } @@ -96,7 +96,7 @@ void CoversSettingsPage::Save() { QStringList providers; for (int i = 0 ; i < ui_->providers->count() ; ++i) { const QListWidgetItem *item = ui_->providers->item(i); - if (item->checkState() == Qt::Checked) providers << item->text(); + if (item->checkState() == Qt::Checked) providers << item->text(); // clazy:exclude=reserve-candidates } QSettings s; diff --git a/src/settings/coverssettingspage.h b/src/settings/coverssettingspage.h index 59dea492f..e41bcd8d3 100644 --- a/src/settings/coverssettingspage.h +++ b/src/settings/coverssettingspage.h @@ -38,7 +38,7 @@ class CoversSettingsPage : public SettingsPage { Q_OBJECT public: - explicit CoversSettingsPage(SettingsDialog *parent = nullptr); + explicit CoversSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~CoversSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/globalshortcutssettingspage.cpp b/src/settings/globalshortcutssettingspage.cpp index 0f5b63886..7b9a8959c 100644 --- a/src/settings/globalshortcutssettingspage.cpp +++ b/src/settings/globalshortcutssettingspage.cpp @@ -54,8 +54,8 @@ const char *GlobalShortcutsSettingsPage::kSettingsGroup = "GlobalShortcuts"; -GlobalShortcutsSettingsPage::GlobalShortcutsSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), +GlobalShortcutsSettingsPage::GlobalShortcutsSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_GlobalShortcutsSettingsPage), initialized_(false), grabber_(new GlobalShortcutGrabber) { diff --git a/src/settings/globalshortcutssettingspage.h b/src/settings/globalshortcutssettingspage.h index b582f855e..723e0a42f 100644 --- a/src/settings/globalshortcutssettingspage.h +++ b/src/settings/globalshortcutssettingspage.h @@ -44,7 +44,7 @@ class GlobalShortcutsSettingsPage : public SettingsPage { Q_OBJECT public: - explicit GlobalShortcutsSettingsPage(SettingsDialog *dialog); + explicit GlobalShortcutsSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~GlobalShortcutsSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/lyricssettingspage.cpp b/src/settings/lyricssettingspage.cpp index 31630679a..1fb142f79 100644 --- a/src/settings/lyricssettingspage.cpp +++ b/src/settings/lyricssettingspage.cpp @@ -46,7 +46,7 @@ const char *LyricsSettingsPage::kSettingsGroup = "Lyrics"; -LyricsSettingsPage::LyricsSettingsPage(SettingsDialog *parent) : SettingsPage(parent), ui_(new Ui::LyricsSettingsPage), provider_selected_(false) { +LyricsSettingsPage::LyricsSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui::LyricsSettingsPage), provider_selected_(false) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("view-media-lyrics")); @@ -65,7 +65,7 @@ LyricsSettingsPage::LyricsSettingsPage(SettingsDialog *parent) : SettingsPage(pa NoProviderSelected(); DisableAuthentication(); - dialog()->installEventFilter(this); + dialog->installEventFilter(this); } @@ -96,7 +96,7 @@ void LyricsSettingsPage::Save() { QStringList providers; for (int i = 0 ; i < ui_->providers->count() ; ++i) { const QListWidgetItem *item = ui_->providers->item(i); - if (item->checkState() == Qt::Checked) providers << item->text(); + if (item->checkState() == Qt::Checked) providers << item->text(); // clazy:exclude=reserve-candidates } QSettings s; diff --git a/src/settings/lyricssettingspage.h b/src/settings/lyricssettingspage.h index 629052b4b..2a358e10e 100644 --- a/src/settings/lyricssettingspage.h +++ b/src/settings/lyricssettingspage.h @@ -38,7 +38,7 @@ class LyricsSettingsPage : public SettingsPage { Q_OBJECT public: - explicit LyricsSettingsPage(SettingsDialog *parent = nullptr); + explicit LyricsSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~LyricsSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/moodbarsettingspage.cpp b/src/settings/moodbarsettingspage.cpp index 94863ede4..aab9cc53f 100644 --- a/src/settings/moodbarsettingspage.cpp +++ b/src/settings/moodbarsettingspage.cpp @@ -49,8 +49,8 @@ const char *MoodbarSettingsPage::kSettingsGroup = "Moodbar"; const int MoodbarSettingsPage::kMoodbarPreviewWidth = 150; const int MoodbarSettingsPage::kMoodbarPreviewHeight = 18; -MoodbarSettingsPage::MoodbarSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), +MoodbarSettingsPage::MoodbarSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_MoodbarSettingsPage), initialized_(false) { diff --git a/src/settings/moodbarsettingspage.h b/src/settings/moodbarsettingspage.h index e1df20651..8b18c3df9 100644 --- a/src/settings/moodbarsettingspage.h +++ b/src/settings/moodbarsettingspage.h @@ -34,7 +34,7 @@ class MoodbarSettingsPage : public SettingsPage { Q_OBJECT public: - explicit MoodbarSettingsPage(SettingsDialog *dialog); + explicit MoodbarSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~MoodbarSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/networkproxysettingspage.cpp b/src/settings/networkproxysettingspage.cpp index 2dfa32ad9..bf61933b7 100644 --- a/src/settings/networkproxysettingspage.cpp +++ b/src/settings/networkproxysettingspage.cpp @@ -40,11 +40,12 @@ class SettingsDialog; const char *NetworkProxySettingsPage::kSettingsGroup = "NetworkProxy"; -NetworkProxySettingsPage::NetworkProxySettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), ui_(new Ui_NetworkProxySettingsPage) { +NetworkProxySettingsPage::NetworkProxySettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_NetworkProxySettingsPage) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("applications-internet")); + } NetworkProxySettingsPage::~NetworkProxySettingsPage() { delete ui_; } diff --git a/src/settings/networkproxysettingspage.h b/src/settings/networkproxysettingspage.h index 227b188bd..f8f70ead9 100644 --- a/src/settings/networkproxysettingspage.h +++ b/src/settings/networkproxysettingspage.h @@ -36,7 +36,7 @@ class NetworkProxySettingsPage : public SettingsPage { Q_OBJECT public: - explicit NetworkProxySettingsPage(SettingsDialog *dialog); + explicit NetworkProxySettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~NetworkProxySettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/notificationssettingspage.cpp b/src/settings/notificationssettingspage.cpp index c3179d6d2..93dd6c5b4 100644 --- a/src/settings/notificationssettingspage.cpp +++ b/src/settings/notificationssettingspage.cpp @@ -57,8 +57,8 @@ class QHideEvent; class QShowEvent; -NotificationsSettingsPage::NotificationsSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), ui_(new Ui_NotificationsSettingsPage), pretty_popup_(new OSDPretty(OSDPretty::Mode_Draggable)) { +NotificationsSettingsPage::NotificationsSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_NotificationsSettingsPage), pretty_popup_(new OSDPretty(OSDPretty::Mode_Draggable)) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("help-hint")); diff --git a/src/settings/notificationssettingspage.h b/src/settings/notificationssettingspage.h index c6b15778e..0647d609b 100644 --- a/src/settings/notificationssettingspage.h +++ b/src/settings/notificationssettingspage.h @@ -41,7 +41,7 @@ class NotificationsSettingsPage : public SettingsPage { Q_OBJECT public: - explicit NotificationsSettingsPage(SettingsDialog *dialog); + explicit NotificationsSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~NotificationsSettingsPage() override; void Load() override; diff --git a/src/settings/playlistsettingspage.cpp b/src/settings/playlistsettingspage.cpp index 3c649be4e..4cd26a17e 100644 --- a/src/settings/playlistsettingspage.cpp +++ b/src/settings/playlistsettingspage.cpp @@ -36,7 +36,7 @@ class SettingsDialog; const char *PlaylistSettingsPage::kSettingsGroup = "Playlist"; -PlaylistSettingsPage::PlaylistSettingsPage(SettingsDialog *dialog) : SettingsPage(dialog), ui_(new Ui_PlaylistSettingsPage) { +PlaylistSettingsPage::PlaylistSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog, parent), ui_(new Ui_PlaylistSettingsPage) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("document-new")); diff --git a/src/settings/playlistsettingspage.h b/src/settings/playlistsettingspage.h index 22c547897..013ac7149 100644 --- a/src/settings/playlistsettingspage.h +++ b/src/settings/playlistsettingspage.h @@ -36,7 +36,7 @@ class PlaylistSettingsPage : public SettingsPage { Q_OBJECT public: - explicit PlaylistSettingsPage(SettingsDialog *dialog); + explicit PlaylistSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~PlaylistSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/qobuzsettingspage.cpp b/src/settings/qobuzsettingspage.cpp index f8c85c222..160de206f 100644 --- a/src/settings/qobuzsettingspage.cpp +++ b/src/settings/qobuzsettingspage.cpp @@ -43,10 +43,10 @@ const char *QobuzSettingsPage::kSettingsGroup = "Qobuz"; -QobuzSettingsPage::QobuzSettingsPage(SettingsDialog *parent) - : SettingsPage(parent), +QobuzSettingsPage::QobuzSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui::QobuzSettingsPage), - service_(dialog()->app()->internet_services()->Service()) { + service_(dialog->app()->internet_services()->Service()) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("qobuz")); @@ -59,7 +59,7 @@ QobuzSettingsPage::QobuzSettingsPage(SettingsDialog *parent) QObject::connect(service_, &InternetService::LoginFailure, this, &QobuzSettingsPage::LoginFailure); QObject::connect(service_, &InternetService::LoginSuccess, this, &QobuzSettingsPage::LoginSuccess); - dialog()->installEventFilter(this); + dialog->installEventFilter(this); ui_->format->addItem("MP3 320", 5); ui_->format->addItem("FLAC Lossless", 6); @@ -149,7 +149,6 @@ bool QobuzSettingsPage::eventFilter(QObject *object, QEvent *event) { if (object == dialog() && event->type() == QEvent::Enter) { ui_->button_login->setEnabled(true); - return false; } return SettingsPage::eventFilter(object, event); @@ -168,7 +167,7 @@ void QobuzSettingsPage::LoginSuccess() { ui_->button_login->setEnabled(true); } -void QobuzSettingsPage::LoginFailure(QString failure_reason) { +void QobuzSettingsPage::LoginFailure(const QString &failure_reason) { if (!this->isVisible()) return; QMessageBox::warning(this, tr("Authentication failed"), failure_reason); } diff --git a/src/settings/qobuzsettingspage.h b/src/settings/qobuzsettingspage.h index 301be094e..6e160b3ce 100644 --- a/src/settings/qobuzsettingspage.h +++ b/src/settings/qobuzsettingspage.h @@ -34,7 +34,7 @@ class QobuzSettingsPage : public SettingsPage { Q_OBJECT public: - explicit QobuzSettingsPage(SettingsDialog *parent = nullptr); + explicit QobuzSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~QobuzSettingsPage() override; static const char *kSettingsGroup; @@ -51,7 +51,7 @@ class QobuzSettingsPage : public SettingsPage { void LoginClicked(); void LogoutClicked(); void LoginSuccess(); - void LoginFailure(QString failure_reason); + void LoginFailure(const QString &failure_reason); private: Ui_QobuzSettingsPage *ui_; diff --git a/src/settings/scrobblersettingspage.cpp b/src/settings/scrobblersettingspage.cpp index f7d6dfe51..06879c21c 100644 --- a/src/settings/scrobblersettingspage.cpp +++ b/src/settings/scrobblersettingspage.cpp @@ -43,12 +43,12 @@ const char *ScrobblerSettingsPage::kSettingsGroup = "Scrobbler"; -ScrobblerSettingsPage::ScrobblerSettingsPage(SettingsDialog *parent) - : SettingsPage(parent), - scrobbler_(dialog()->app()->scrobbler()), - lastfmscrobbler_(dialog()->app()->scrobbler()->Service()), - librefmscrobbler_(dialog()->app()->scrobbler()->Service()), - listenbrainzscrobbler_(dialog()->app()->scrobbler()->Service()), +ScrobblerSettingsPage::ScrobblerSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), + scrobbler_(dialog->app()->scrobbler()), + lastfmscrobbler_(dialog->app()->scrobbler()->Service()), + librefmscrobbler_(dialog->app()->scrobbler()->Service()), + listenbrainzscrobbler_(dialog->app()->scrobbler()->Service()), ui_(new Ui_ScrobblerSettingsPage), lastfm_waiting_for_auth_(false), librefm_waiting_for_auth_(false), @@ -188,7 +188,7 @@ void ScrobblerSettingsPage::LastFM_Logout() { } -void ScrobblerSettingsPage::LastFM_AuthenticationComplete(const bool success, QString error) { +void ScrobblerSettingsPage::LastFM_AuthenticationComplete(const bool success, const QString &error) { if (!lastfm_waiting_for_auth_) return; lastfm_waiting_for_auth_ = false; @@ -204,7 +204,7 @@ void ScrobblerSettingsPage::LastFM_AuthenticationComplete(const bool success, QS } -void ScrobblerSettingsPage::LastFM_RefreshControls(bool authenticated) { +void ScrobblerSettingsPage::LastFM_RefreshControls(const bool authenticated) { ui_->widget_lastfm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut, lastfmscrobbler_->username()); } @@ -223,7 +223,7 @@ void ScrobblerSettingsPage::LibreFM_Logout() { } -void ScrobblerSettingsPage::LibreFM_AuthenticationComplete(const bool success, QString error) { +void ScrobblerSettingsPage::LibreFM_AuthenticationComplete(const bool success, const QString &error) { if (!librefm_waiting_for_auth_) return; librefm_waiting_for_auth_ = false; @@ -239,7 +239,7 @@ void ScrobblerSettingsPage::LibreFM_AuthenticationComplete(const bool success, Q } -void ScrobblerSettingsPage::LibreFM_RefreshControls(bool authenticated) { +void ScrobblerSettingsPage::LibreFM_RefreshControls(const bool authenticated) { ui_->widget_librefm_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut, librefmscrobbler_->username()); } @@ -258,7 +258,7 @@ void ScrobblerSettingsPage::ListenBrainz_Logout() { } -void ScrobblerSettingsPage::ListenBrainz_AuthenticationComplete(const bool success, QString error) { +void ScrobblerSettingsPage::ListenBrainz_AuthenticationComplete(const bool success, const QString &error) { if (!listenbrainz_waiting_for_auth_) return; listenbrainz_waiting_for_auth_ = false; @@ -274,6 +274,6 @@ void ScrobblerSettingsPage::ListenBrainz_AuthenticationComplete(const bool succe } -void ScrobblerSettingsPage::ListenBrainz_RefreshControls(bool authenticated) { +void ScrobblerSettingsPage::ListenBrainz_RefreshControls(const bool authenticated) { ui_->widget_listenbrainz_login_state->SetLoggedIn(authenticated ? LoginStateWidget::LoggedIn : LoginStateWidget::LoggedOut); } diff --git a/src/settings/scrobblersettingspage.h b/src/settings/scrobblersettingspage.h index 78c75c11b..5ee806781 100644 --- a/src/settings/scrobblersettingspage.h +++ b/src/settings/scrobblersettingspage.h @@ -36,7 +36,7 @@ class ScrobblerSettingsPage : public SettingsPage { Q_OBJECT public: - explicit ScrobblerSettingsPage(SettingsDialog *parent); + explicit ScrobblerSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~ScrobblerSettingsPage() override; static const char *kSettingsGroup; @@ -47,13 +47,13 @@ class ScrobblerSettingsPage : public SettingsPage { private slots: void LastFM_Login(); void LastFM_Logout(); - void LastFM_AuthenticationComplete(const bool success, QString error = QString()); + void LastFM_AuthenticationComplete(const bool success, const QString &error = QString()); void LibreFM_Login(); void LibreFM_Logout(); - void LibreFM_AuthenticationComplete(const bool success, QString error = QString()); + void LibreFM_AuthenticationComplete(const bool success, const QString &error = QString()); void ListenBrainz_Login(); void ListenBrainz_Logout(); - void ListenBrainz_AuthenticationComplete(const bool success, QString error = QString()); + void ListenBrainz_AuthenticationComplete(const bool success, const QString &error = QString()); private: AudioScrobbler *scrobbler_; @@ -66,9 +66,9 @@ class ScrobblerSettingsPage : public SettingsPage { bool librefm_waiting_for_auth_; bool listenbrainz_waiting_for_auth_; - void LastFM_RefreshControls(bool authenticated); - void LibreFM_RefreshControls(bool authenticated); - void ListenBrainz_RefreshControls(bool authenticated); + void LastFM_RefreshControls(const bool authenticated); + void LibreFM_RefreshControls(const bool authenticated); + void ListenBrainz_RefreshControls(const bool authenticated); }; diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp index ffccee90c..9bdb37ab9 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/settingsdialog.cpp @@ -132,29 +132,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), general); - AddPage(Page_Collection, new CollectionSettingsPage(this), general); - AddPage(Page_Backend, new BackendSettingsPage(this), general); - AddPage(Page_Playlist, new PlaylistSettingsPage(this), general); - AddPage(Page_Scrobbler, new ScrobblerSettingsPage(this), general); - AddPage(Page_Covers, new CoversSettingsPage(this), general); - AddPage(Page_Lyrics, new LyricsSettingsPage(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), general); + AddPage(Page_Transcoding, new TranscoderSettingsPage(this, this), general); #endif - AddPage(Page_Proxy, new NetworkProxySettingsPage(this), general); + AddPage(Page_Proxy, new NetworkProxySettingsPage(this, this), general); QTreeWidgetItem *iface = AddCategory(tr("User interface")); - AddPage(Page_Appearance, new AppearanceSettingsPage(this), iface); - AddPage(Page_Context, new ContextSettingsPage(this), iface); - AddPage(Page_Notifications, new NotificationsSettingsPage(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), iface); + AddPage(Page_GlobalShortcuts, new GlobalShortcutsSettingsPage(this, this), iface); #endif #ifdef HAVE_MOODBAR - AddPage(Page_Moodbar, new MoodbarSettingsPage(this), iface); + AddPage(Page_Moodbar, new MoodbarSettingsPage(this, this), iface); #endif #if defined(HAVE_SUBSONIC) || defined(HAVE_TIDAL) || defined(HAVE_QOBUZ) @@ -162,13 +162,13 @@ SettingsDialog::SettingsDialog(Application *app, OSDBase *osd, QMainWindow *main #endif #ifdef HAVE_SUBSONIC - AddPage(Page_Subsonic, new SubsonicSettingsPage(this), streaming); + AddPage(Page_Subsonic, new SubsonicSettingsPage(this, this), streaming); #endif #ifdef HAVE_TIDAL - AddPage(Page_Tidal, new TidalSettingsPage(this), streaming); + AddPage(Page_Tidal, new TidalSettingsPage(this, this), streaming); #endif #ifdef HAVE_QOBUZ - AddPage(Page_Qobuz, new QobuzSettingsPage(this), streaming); + AddPage(Page_Qobuz, new QobuzSettingsPage(this, this), streaming); #endif // List box @@ -176,7 +176,7 @@ SettingsDialog::SettingsDialog(Application *app, OSDBase *osd, QMainWindow *main 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)); + ui_->list->setMinimumWidth(qobject_cast(ui_->list)->sizeHintForColumn(0)); // clazy:exclude=unneeded-cast ui_->buttonBox->button(QDialogButtonBox::Cancel)->setShortcut(QKeySequence::Close); @@ -285,7 +285,7 @@ QTreeWidgetItem *SettingsDialog::AddCategory(const QString &name) { } -void SettingsDialog::AddPage(Page id, SettingsPage *page, QTreeWidgetItem *parent) { +void SettingsDialog::AddPage(const Page id, SettingsPage *page, QTreeWidgetItem *parent) { if (!parent) parent = ui_->list->invisibleRootItem(); diff --git a/src/settings/settingsdialog.h b/src/settings/settingsdialog.h index e364bce8c..3ec52a8d0 100644 --- a/src/settings/settingsdialog.h +++ b/src/settings/settingsdialog.h @@ -59,6 +59,8 @@ class Ui_SettingsDialog; class SettingsItemDelegate : public QStyledItemDelegate { + Q_OBJECT + public: explicit SettingsItemDelegate(QObject *parent); QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &idx) const override; @@ -131,7 +133,7 @@ class SettingsDialog : public QDialog { void SaveGeometry(); QTreeWidgetItem *AddCategory(const QString &name); - void AddPage(Page id, SettingsPage *page, QTreeWidgetItem *parent = nullptr); + void AddPage(const Page id, SettingsPage *page, QTreeWidgetItem *parent = nullptr); void Apply(); void Save(); diff --git a/src/settings/settingspage.cpp b/src/settings/settingspage.cpp index 92a6cdb70..8dc4601a7 100644 --- a/src/settings/settingspage.cpp +++ b/src/settings/settingspage.cpp @@ -34,7 +34,7 @@ #include "settingsdialog.h" #include "settingspage.h" -SettingsPage::SettingsPage(SettingsDialog *dialog) : QWidget(dialog), dialog_(dialog), ui_widget_(nullptr), changed_(false) {} +SettingsPage::SettingsPage(SettingsDialog *dialog, QWidget *parent) : QWidget(parent), dialog_(dialog), ui_widget_(nullptr), changed_(false) {} void SettingsPage::Init(QWidget *ui_widget) { diff --git a/src/settings/settingspage.h b/src/settings/settingspage.h index ecc64c0ea..f5cf7ea39 100644 --- a/src/settings/settingspage.h +++ b/src/settings/settingspage.h @@ -49,7 +49,7 @@ class SettingsPage : public QWidget { Q_OBJECT public: - explicit SettingsPage(SettingsDialog *dialog); + explicit SettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); void Init(QWidget *ui_widget); diff --git a/src/settings/subsonicsettingspage.cpp b/src/settings/subsonicsettingspage.cpp index aa70bbe28..a5b04f50c 100644 --- a/src/settings/subsonicsettingspage.cpp +++ b/src/settings/subsonicsettingspage.cpp @@ -41,10 +41,10 @@ const char *SubsonicSettingsPage::kSettingsGroup = "Subsonic"; -SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog *parent) - : SettingsPage(parent), +SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui::SubsonicSettingsPage), - service_(dialog()->app()->internet_services()->Service()) { + service_(dialog->app()->internet_services()->Service()) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("subsonic")); @@ -56,7 +56,7 @@ SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog *parent) QObject::connect(service_, &SubsonicService::TestFailure, this, &SubsonicSettingsPage::TestFailure); QObject::connect(service_, &SubsonicService::TestSuccess, this, &SubsonicSettingsPage::TestSuccess); - dialog()->installEventFilter(this); + dialog->installEventFilter(this); #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) ui_->checkbox_http2->hide(); @@ -128,7 +128,6 @@ bool SubsonicSettingsPage::eventFilter(QObject *object, QEvent *event) { if (object == dialog() && event->type() == QEvent::Enter) { ui_->button_test->setEnabled(true); - return false; } return SettingsPage::eventFilter(object, event); @@ -144,7 +143,7 @@ void SubsonicSettingsPage::TestSuccess() { } -void SubsonicSettingsPage::TestFailure(QString failure_reason) { +void SubsonicSettingsPage::TestFailure(const QString &failure_reason) { if (!this->isVisible()) return; ui_->button_test->setEnabled(true); diff --git a/src/settings/subsonicsettingspage.h b/src/settings/subsonicsettingspage.h index 77c510c69..383cf4c8e 100644 --- a/src/settings/subsonicsettingspage.h +++ b/src/settings/subsonicsettingspage.h @@ -37,7 +37,7 @@ class SubsonicSettingsPage : public SettingsPage { Q_OBJECT public: - explicit SubsonicSettingsPage(SettingsDialog *parent = nullptr); + explicit SubsonicSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~SubsonicSettingsPage() override; static const char *kSettingsGroup; @@ -53,7 +53,7 @@ class SubsonicSettingsPage : public SettingsPage { private slots: void TestClicked(); void TestSuccess(); - void TestFailure(QString failure_reason); + void TestFailure(const QString &failure_reason); private: Ui_SubsonicSettingsPage *ui_; diff --git a/src/settings/tidalsettingspage.cpp b/src/settings/tidalsettingspage.cpp index c5aca903b..abe6719d2 100644 --- a/src/settings/tidalsettingspage.cpp +++ b/src/settings/tidalsettingspage.cpp @@ -43,10 +43,10 @@ const char *TidalSettingsPage::kSettingsGroup = "Tidal"; -TidalSettingsPage::TidalSettingsPage(SettingsDialog *parent) - : SettingsPage(parent), +TidalSettingsPage::TidalSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui::TidalSettingsPage), - service_(dialog()->app()->internet_services()->Service()) { + service_(dialog->app()->internet_services()->Service()) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("tidal")); @@ -61,7 +61,7 @@ TidalSettingsPage::TidalSettingsPage(SettingsDialog *parent) QObject::connect(service_, &InternetService::LoginFailure, this, &TidalSettingsPage::LoginFailure); QObject::connect(service_, &InternetService::LoginSuccess, this, &TidalSettingsPage::LoginSuccess); - dialog()->installEventFilter(this); + dialog->installEventFilter(this); ui_->quality->addItem("Low", "LOW"); ui_->quality->addItem("High", "HIGH"); @@ -184,7 +184,6 @@ bool TidalSettingsPage::eventFilter(QObject *object, QEvent *event) { if (object == dialog() && event->type() == QEvent::Enter) { ui_->button_login->setEnabled(true); - return false; } return SettingsPage::eventFilter(object, event); diff --git a/src/settings/tidalsettingspage.h b/src/settings/tidalsettingspage.h index c07784da2..fe80079aa 100644 --- a/src/settings/tidalsettingspage.h +++ b/src/settings/tidalsettingspage.h @@ -36,7 +36,7 @@ class TidalSettingsPage : public SettingsPage { Q_OBJECT public: - explicit TidalSettingsPage(SettingsDialog *parent = nullptr); + explicit TidalSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~TidalSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/settings/transcodersettingspage.cpp b/src/settings/transcodersettingspage.cpp index c42f95198..0623b7109 100644 --- a/src/settings/transcodersettingspage.cpp +++ b/src/settings/transcodersettingspage.cpp @@ -38,8 +38,8 @@ class SettingsDialog; -TranscoderSettingsPage::TranscoderSettingsPage(SettingsDialog *dialog) - : SettingsPage(dialog), ui_(new Ui_TranscoderSettingsPage) { +TranscoderSettingsPage::TranscoderSettingsPage(SettingsDialog *dialog, QWidget *parent) + : SettingsPage(dialog, parent), ui_(new Ui_TranscoderSettingsPage) { ui_->setupUi(this); setWindowIcon(IconLoader::Load("tools-wizard")); diff --git a/src/settings/transcodersettingspage.h b/src/settings/transcodersettingspage.h index 7a34a35ff..abd106adb 100644 --- a/src/settings/transcodersettingspage.h +++ b/src/settings/transcodersettingspage.h @@ -38,7 +38,7 @@ class TranscoderSettingsPage : public SettingsPage { Q_OBJECT public: - explicit TranscoderSettingsPage(SettingsDialog *dialog); + explicit TranscoderSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~TranscoderSettingsPage() override; static const char *kSettingsGroup; diff --git a/src/smartplaylists/playlistgenerator.cpp b/src/smartplaylists/playlistgenerator.cpp index b7e69806b..12dfe5f54 100644 --- a/src/smartplaylists/playlistgenerator.cpp +++ b/src/smartplaylists/playlistgenerator.cpp @@ -32,7 +32,7 @@ const int PlaylistGenerator::kDefaultLimit = 20; const int PlaylistGenerator::kDefaultDynamicHistory = 5; const int PlaylistGenerator::kDefaultDynamicFuture = 15; -PlaylistGenerator::PlaylistGenerator() : QObject(nullptr), backend_(nullptr) {} +PlaylistGenerator::PlaylistGenerator(QObject *parent) : QObject(parent), backend_(nullptr) {} PlaylistGeneratorPtr PlaylistGenerator::Create(const Type type) { diff --git a/src/smartplaylists/playlistgenerator.h b/src/smartplaylists/playlistgenerator.h index a66f563b9..f0df7bdd6 100644 --- a/src/smartplaylists/playlistgenerator.h +++ b/src/smartplaylists/playlistgenerator.h @@ -37,7 +37,7 @@ class PlaylistGenerator : public QObject, public std::enable_shared_from_thisFindSongs(search_copy); PlaylistItemList items; + items.reserve(songs.count()); for (const Song &song : songs) { items << PlaylistItemPtr(PlaylistItem::NewFromSong(song)); previous_ids_ << song.id(); diff --git a/src/smartplaylists/playlistquerygenerator.h b/src/smartplaylists/playlistquerygenerator.h index 6709d4310..1b529e89f 100644 --- a/src/smartplaylists/playlistquerygenerator.h +++ b/src/smartplaylists/playlistquerygenerator.h @@ -31,9 +31,11 @@ #include "smartplaylistsearch.h" class PlaylistQueryGenerator : public PlaylistGenerator { + Q_OBJECT + public: - explicit PlaylistQueryGenerator(); - explicit PlaylistQueryGenerator(const QString &name, const SmartPlaylistSearch &search, const bool dynamic = false); + explicit PlaylistQueryGenerator(QObject *parent = nullptr); + explicit PlaylistQueryGenerator(const QString &name, const SmartPlaylistSearch &search, const bool dynamic = false, QObject *parent = nullptr); Type type() const { return Type_Query; } diff --git a/src/smartplaylists/smartplaylistquerywizardplugin.cpp b/src/smartplaylists/smartplaylistquerywizardplugin.cpp index 1533fa351..96bb9a98b 100644 --- a/src/smartplaylists/smartplaylistquerywizardplugin.cpp +++ b/src/smartplaylists/smartplaylistquerywizardplugin.cpp @@ -33,12 +33,12 @@ #include "ui_smartplaylistquerysearchpage.h" #include "ui_smartplaylistquerysortpage.h" -class SmartPlaylistQueryWizardPlugin::SearchPage : public QWizardPage { +class SmartPlaylistQueryWizardPlugin::SearchPage : public QWizardPage { // clazy:exclude=missing-qobject-macro friend class SmartPlaylistQueryWizardPlugin; public: - SearchPage(QWidget *parent = 0) + explicit SearchPage(QWidget *parent = nullptr) : QWizardPage(parent), ui_(new Ui_SmartPlaylistQuerySearchPage) { ui_->setupUi(this); } @@ -62,7 +62,7 @@ class SmartPlaylistQueryWizardPlugin::SearchPage : public QWizardPage { std::unique_ptr ui_; }; -class SmartPlaylistQueryWizardPlugin::SortPage : public QWizardPage { +class SmartPlaylistQueryWizardPlugin::SortPage : public QWizardPage { // clazy:exclude=missing-qobject-macro public: SortPage(SmartPlaylistQueryWizardPlugin *plugin, QWidget *parent, int next_id) : QWizardPage(parent), next_id_(next_id), plugin_(plugin) {} diff --git a/src/smartplaylists/smartplaylistsearch.cpp b/src/smartplaylists/smartplaylistsearch.cpp index 490e6bd5d..a7f7e3b11 100644 --- a/src/smartplaylists/smartplaylistsearch.cpp +++ b/src/smartplaylists/smartplaylistsearch.cpp @@ -32,7 +32,7 @@ SmartPlaylistSearch::SmartPlaylistSearch() { Reset(); } -SmartPlaylistSearch::SmartPlaylistSearch(const SearchType type, const TermList terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit) +SmartPlaylistSearch::SmartPlaylistSearch(const SearchType type, const TermList &terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit) : search_type_(type), terms_(terms), sort_type_(sort_type), @@ -58,6 +58,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { // Add search terms QStringList where_clauses; QStringList term_where_clauses; + term_where_clauses.reserve(terms_.count()); for (const SmartPlaylistSearchTerm &term : terms_) { term_where_clauses << term.ToSql(); } diff --git a/src/smartplaylists/smartplaylistsearch.h b/src/smartplaylists/smartplaylistsearch.h index cec1fbe5b..465309c2e 100644 --- a/src/smartplaylists/smartplaylistsearch.h +++ b/src/smartplaylists/smartplaylistsearch.h @@ -42,7 +42,7 @@ class SmartPlaylistSearch { enum SortType { Sort_Random = 0, Sort_FieldAsc, Sort_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); + explicit SmartPlaylistSearch(const SearchType type, const TermList &terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit = PlaylistGenerator::kDefaultLimit); bool is_valid() const; bool operator==(const SmartPlaylistSearch &other) const; diff --git a/src/smartplaylists/smartplaylistsearchtermwidget.cpp b/src/smartplaylists/smartplaylistsearchtermwidget.cpp index 4bbcc5c95..8eb28ce7d 100644 --- a/src/smartplaylists/smartplaylistsearchtermwidget.cpp +++ b/src/smartplaylists/smartplaylistsearchtermwidget.cpp @@ -46,7 +46,7 @@ // Exported by QtGui void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); -class SmartPlaylistSearchTermWidget::Overlay : public QWidget { +class SmartPlaylistSearchTermWidget::Overlay : public QWidget { // clazy:exclude=missing-qobject-macro public: explicit Overlay(SmartPlaylistSearchTermWidget *parent); void Grab(); @@ -377,31 +377,31 @@ SmartPlaylistSearchTerm SmartPlaylistSearchTermWidget::Term() const { // The value depends on the data type const QWidget *value_page = ui_->value_stack->currentWidget(); if (value_page == ui_->page_text) { - ret.value_ = ui_->value_text->text(); + ret.value_ = ui_->value_text->text(); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_empty) { - ret.value_ = ""; + ret.value_ = ""; // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_number) { - ret.value_ = ui_->value_number->value(); + ret.value_ = ui_->value_number->value(); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_date) { - ret.value_ = ui_->value_date->dateTime().toSecsSinceEpoch(); + ret.value_ = ui_->value_date->dateTime().toSecsSinceEpoch(); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_time) { - ret.value_ = QTime(0, 0).secsTo(ui_->value_time->time()); + ret.value_ = QTime(0, 0).secsTo(ui_->value_time->time()); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_date_numeric) { ret.date_ = SmartPlaylistSearchTerm::DateType(ui_->date_type->currentIndex()); - ret.value_ = ui_->value_date_numeric->value(); + ret.value_ = ui_->value_date_numeric->value(); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_date_relative) { ret.date_ = SmartPlaylistSearchTerm::DateType(ui_->date_type_relative->currentIndex()); - ret.value_ = ui_->value_date_numeric1->value(); - ret.second_value_ = ui_->value_date_numeric2->value(); + ret.value_ = ui_->value_date_numeric1->value(); // clazy:exclude=qt6-deprecated-api-fixes + ret.second_value_ = ui_->value_date_numeric2->value(); // clazy:exclude=qt6-deprecated-api-fixes } else if (value_page == ui_->page_rating) { - ret.value_ = ui_->value_rating->rating(); + ret.value_ = ui_->value_rating->rating(); // clazy:exclude=qt6-deprecated-api-fixes } return ret; @@ -499,7 +499,7 @@ void SmartPlaylistSearchTermWidget::Overlay::paintEvent(QPaintEvent*) { // Icon and text p.setPen(palette().color(QPalette::Text)); p.drawPixmap(icon, icon_); - p.drawText(text, Qt::TextDontClip | Qt::AlignVCenter, text_); + p.drawText(text, Qt::TextDontClip | Qt::AlignVCenter, text_); // NOLINT(bugprone-suspicious-enum-usage) } diff --git a/src/smartplaylists/smartplaylistsitem.h b/src/smartplaylists/smartplaylistsitem.h index b20daee06..d4276ea61 100644 --- a/src/smartplaylists/smartplaylistsitem.h +++ b/src/smartplaylists/smartplaylistsitem.h @@ -40,6 +40,8 @@ class SmartPlaylistsItem : public SimpleTreeItem { PlaylistGenerator::Type smart_playlist_type; QByteArray smart_playlist_data; + + Q_DISABLE_COPY(SmartPlaylistsItem) }; #endif // SMARTPLAYLISTSITEM_H diff --git a/src/smartplaylists/smartplaylistsmodel.cpp b/src/smartplaylists/smartplaylistsmodel.cpp index 9ed1a3673..0622c6d13 100644 --- a/src/smartplaylists/smartplaylistsmodel.cpp +++ b/src/smartplaylists/smartplaylistsmodel.cpp @@ -138,7 +138,7 @@ void SmartPlaylistsModel::Init() { // Append the new ones s.beginWriteArray(backend_->songs_table(), playlist_index + unwritten_defaults); for (; version < default_smart_playlists_.count(); ++version) { - for (PlaylistGeneratorPtr gen : default_smart_playlists_[version]) { + for (PlaylistGeneratorPtr gen : default_smart_playlists_[version]) { // clazy:exclude=range-loop SaveGenerator(&s, playlist_index++, gen); } } diff --git a/src/smartplaylists/smartplaylistsviewcontainer.cpp b/src/smartplaylists/smartplaylistsviewcontainer.cpp index 8f9d967c9..006141c5f 100644 --- a/src/smartplaylists/smartplaylistsviewcontainer.cpp +++ b/src/smartplaylists/smartplaylistsviewcontainer.cpp @@ -132,7 +132,7 @@ void SmartPlaylistsViewContainer::ItemsSelectedChanged() { } -void SmartPlaylistsViewContainer::RightClicked(const QPoint &global_pos, const QModelIndex &idx) { +void SmartPlaylistsViewContainer::RightClicked(const QPoint global_pos, const QModelIndex &idx) { context_menu_index_ = idx; if (context_menu_index_.isValid()) { diff --git a/src/smartplaylists/smartplaylistsviewcontainer.h b/src/smartplaylists/smartplaylistsviewcontainer.h index 6c515333e..f30c7ab83 100644 --- a/src/smartplaylists/smartplaylistsviewcontainer.h +++ b/src/smartplaylists/smartplaylistsviewcontainer.h @@ -53,7 +53,7 @@ class SmartPlaylistsViewContainer : public QWidget { void ItemsSelectedChanged(); void ItemDoubleClicked(const QModelIndex &idx); - void RightClicked(const QPoint &global_pos, const QModelIndex &idx); + void RightClicked(const QPoint global_pos, const QModelIndex &idx); void AppendToPlaylist(); void ReplaceCurrentPlaylist(); diff --git a/src/smartplaylists/smartplaylistwizard.cpp b/src/smartplaylists/smartplaylistwizard.cpp index 067334154..0b09c6f3a 100644 --- a/src/smartplaylists/smartplaylistwizard.cpp +++ b/src/smartplaylists/smartplaylistwizard.cpp @@ -34,7 +34,7 @@ #include "smartplaylistwizardplugin.h" #include "ui_smartplaylistwizardfinishpage.h" -class SmartPlaylistWizard::TypePage : public QWizardPage { +class SmartPlaylistWizard::TypePage : public QWizardPage { // clazy:exclude=missing-qobject-macro public: explicit TypePage(QWidget *parent) : QWizardPage(parent), next_id_(-1) {} @@ -42,7 +42,7 @@ class SmartPlaylistWizard::TypePage : public QWizardPage { int next_id_; }; -class SmartPlaylistWizard::FinishPage : public QWizardPage { +class SmartPlaylistWizard::FinishPage : public QWizardPage { // clazy:exclude=missing-qobject-macro public: explicit FinishPage(QWidget *parent) : QWizardPage(parent), ui_(new Ui_SmartPlaylistWizardFinishPage) { ui_->setupUi(this); diff --git a/src/subsonic/subsonicbaserequest.cpp b/src/subsonic/subsonicbaserequest.cpp index c7d35fe95..a364ad93e 100644 --- a/src/subsonic/subsonicbaserequest.cpp +++ b/src/subsonic/subsonicbaserequest.cpp @@ -113,9 +113,9 @@ QNetworkReply *SubsonicBaseRequest::CreateGetRequest(const QString &ressource_na } -void SubsonicBaseRequest::HandleSSLErrors(QList ssl_errors) { +void SubsonicBaseRequest::HandleSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { Error(ssl_error.errorString()); } diff --git a/src/subsonic/subsonicbaserequest.h b/src/subsonic/subsonicbaserequest.h index b81fc90d6..0493cca36 100644 --- a/src/subsonic/subsonicbaserequest.h +++ b/src/subsonic/subsonicbaserequest.h @@ -71,7 +71,7 @@ class SubsonicBaseRequest : public QObject { bool download_album_covers() const { return service_->download_album_covers(); } private slots: - void HandleSSLErrors(QList ssl_errors); + void HandleSSLErrors(const QList &ssl_errors); private: SubsonicService *service_; diff --git a/src/subsonic/subsonicrequest.cpp b/src/subsonic/subsonicrequest.cpp index a4aafa95b..57a5be5a3 100644 --- a/src/subsonic/subsonicrequest.cpp +++ b/src/subsonic/subsonicrequest.cpp @@ -355,7 +355,7 @@ void SubsonicRequest::FlushAlbumSongsRequests() { } -void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QString artist_id, const QString album_id, const QString album_artist) { +void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QString &artist_id, const QString &album_id, const QString &album_artist) { if (!replies_.contains(reply)) return; replies_.removeAll(reply); @@ -753,7 +753,7 @@ void SubsonicRequest::FlushAlbumCoverRequests() { } -void SubsonicRequest::AlbumCoverReceived(QNetworkReply *reply, const QUrl url, const QString filename) { +void SubsonicRequest::AlbumCoverReceived(QNetworkReply *reply, const QUrl &url, const QString &filename) { if (album_cover_replies_.contains(reply)) { album_cover_replies_.removeAll(reply); diff --git a/src/subsonic/subsonicrequest.h b/src/subsonic/subsonicrequest.h index f542fe28f..67f1a8fb9 100644 --- a/src/subsonic/subsonicrequest.h +++ b/src/subsonic/subsonicrequest.h @@ -68,8 +68,8 @@ class SubsonicRequest : public SubsonicBaseRequest { private slots: void AlbumsReplyReceived(QNetworkReply *reply, const int offset_requested); - void AlbumSongsReplyReceived(QNetworkReply *reply, const QString artist_id, const QString album_id, const QString album_artist); - void AlbumCoverReceived(QNetworkReply *reply, const QUrl url, const QString filename); + void AlbumSongsReplyReceived(QNetworkReply *reply, const QString &artist_id, const QString &album_id, const QString &album_artist); + void AlbumCoverReceived(QNetworkReply *reply, const QUrl &url, const QString &filename); private: typedef QPair Param; diff --git a/src/subsonic/subsonicscrobblerequest.cpp b/src/subsonic/subsonicscrobblerequest.cpp index 51cf7be8a..1853c9935 100644 --- a/src/subsonic/subsonicscrobblerequest.cpp +++ b/src/subsonic/subsonicscrobblerequest.cpp @@ -58,7 +58,7 @@ SubsonicScrobbleRequest::~SubsonicScrobbleRequest() { } -void SubsonicScrobbleRequest::CreateScrobbleRequest(const QString song_id, const bool submission, const QDateTime start_time) { +void SubsonicScrobbleRequest::CreateScrobbleRequest(const QString &song_id, const bool submission, const QDateTime &start_time) { Request request; request.song_id = song_id; diff --git a/src/subsonic/subsonicscrobblerequest.h b/src/subsonic/subsonicscrobblerequest.h index 80d460da9..4972fa24a 100644 --- a/src/subsonic/subsonicscrobblerequest.h +++ b/src/subsonic/subsonicscrobblerequest.h @@ -48,7 +48,7 @@ class SubsonicScrobbleRequest : public SubsonicBaseRequest { explicit SubsonicScrobbleRequest(SubsonicService *service, SubsonicUrlHandler *url_handler, Application *app, QObject *parent); ~SubsonicScrobbleRequest() override; - void CreateScrobbleRequest(const QString song_id, const bool submission, const QDateTime start_time); + void CreateScrobbleRequest(const QString &song_id, const bool submission, const QDateTime &start_time); private slots: void ScrobbleReplyReceived(QNetworkReply *reply); diff --git a/src/subsonic/subsonicservice.cpp b/src/subsonic/subsonicservice.cpp index 739b672fb..abc124787 100644 --- a/src/subsonic/subsonicservice.cpp +++ b/src/subsonic/subsonicservice.cpp @@ -212,9 +212,9 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username, } -void SubsonicService::HandlePingSSLErrors(QList ssl_errors) { +void SubsonicService::HandlePingSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { errors_ += ssl_error.errorString(); } @@ -387,7 +387,7 @@ void SubsonicService::CheckConfiguration() { } -void SubsonicService::Scrobble(const QString &song_id, const bool submission, const QDateTime time) { +void SubsonicService::Scrobble(const QString &song_id, const bool submission, const QDateTime &time) { if (!server_url().isValid() || username().isEmpty() || password().isEmpty()) { return; diff --git a/src/subsonic/subsonicservice.h b/src/subsonic/subsonicservice.h index aacbbaff0..47d5a8fe3 100644 --- a/src/subsonic/subsonicservice.h +++ b/src/subsonic/subsonicservice.h @@ -82,7 +82,7 @@ class SubsonicService : public InternetService { QSortFilterProxyModel *songs_collection_sort_model() override { return collection_sort_model_; } void CheckConfiguration(); - void Scrobble(const QString &song_id, const bool submission, const QDateTime time); + void Scrobble(const QString &song_id, const bool submission, const QDateTime &time); public slots: void ShowConfig() override; @@ -92,7 +92,7 @@ class SubsonicService : public InternetService { void ResetSongsRequest() override; private slots: - void HandlePingSSLErrors(QList ssl_errors); + void HandlePingSSLErrors(const QList &ssl_errors); void HandlePingReply(QNetworkReply *reply, const QUrl &url, const QString &username, const QString &password); void SongsResultsReceived(const SongList &songs, const QString &error); diff --git a/src/tidal/tidalbaserequest.cpp b/src/tidal/tidalbaserequest.cpp index fd24c0e9b..051935296 100644 --- a/src/tidal/tidalbaserequest.cpp +++ b/src/tidal/tidalbaserequest.cpp @@ -79,9 +79,9 @@ QNetworkReply *TidalBaseRequest::CreateRequest(const QString &ressource_name, co } -void TidalBaseRequest::HandleSSLErrors(QList ssl_errors) { +void TidalBaseRequest::HandleSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { Error(ssl_error.errorString()); } @@ -130,7 +130,7 @@ QByteArray TidalBaseRequest::GetReplyData(QNetworkReply *reply, const bool send_ qLog(Error) << "Tidal:" << error; qLog(Info) << "Tidal:" << "Attempting to login."; NeedLogin(); - emit service_->RequestLogin(); + emit service_->RequestLogin(); // clazy:exclude=incorrect-emit } else { Error(error); diff --git a/src/tidal/tidalbaserequest.h b/src/tidal/tidalbaserequest.h index 89d2a2b73..554077132 100644 --- a/src/tidal/tidalbaserequest.h +++ b/src/tidal/tidalbaserequest.h @@ -95,7 +95,7 @@ class TidalBaseRequest : public QObject { virtual void NeedLogin() = 0; private slots: - void HandleSSLErrors(QList ssl_errors); + void HandleSSLErrors(const QList &ssl_errors); private: static const char *kApiUrl; diff --git a/src/tidal/tidalfavoriterequest.cpp b/src/tidal/tidalfavoriterequest.cpp index e4f34c01a..cc4073aac 100644 --- a/src/tidal/tidalfavoriterequest.cpp +++ b/src/tidal/tidalfavoriterequest.cpp @@ -197,7 +197,7 @@ void TidalFavoriteRequest::RemoveSongs(const SongList &songs) { RemoveFavorites(FavoriteType_Songs, songs); } -void TidalFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongList songs) { +void TidalFavoriteRequest::RemoveFavorites(const FavoriteType type, const SongList &songs) { if (songs.isEmpty()) return; diff --git a/src/tidal/tidalfavoriterequest.h b/src/tidal/tidalfavoriterequest.h index 26a282c4d..60b36ab9f 100644 --- a/src/tidal/tidalfavoriterequest.h +++ b/src/tidal/tidalfavoriterequest.h @@ -76,7 +76,7 @@ class TidalFavoriteRequest : public TidalBaseRequest { void Error(const QString &error, const QVariant &debug = QVariant()) override; QString FavoriteText(const FavoriteType type); void AddFavorites(const FavoriteType type, const SongList &songs); - void RemoveFavorites(const FavoriteType type, const SongList songs); + void RemoveFavorites(const FavoriteType type, const SongList &songs); void RemoveFavorites(const FavoriteType type, const QString &id, const SongList &songs); TidalService *service_; diff --git a/src/tidal/tidalrequest.cpp b/src/tidal/tidalrequest.cpp index d078d2e8e..9a53b67b6 100644 --- a/src/tidal/tidalrequest.cpp +++ b/src/tidal/tidalrequest.cpp @@ -98,7 +98,7 @@ TidalRequest::~TidalRequest() { } -void TidalRequest::LoginComplete(const bool success, QString error) { +void TidalRequest::LoginComplete(const bool success, const QString &error) { if (!need_login_) return; need_login_ = false; diff --git a/src/tidal/tidalrequest.h b/src/tidal/tidalrequest.h index e65a30201..dbc935a9e 100644 --- a/src/tidal/tidalrequest.h +++ b/src/tidal/tidalrequest.h @@ -101,7 +101,7 @@ class TidalRequest : public TidalBaseRequest { void AlbumCoverReceived(QNetworkReply *reply, const QString &album_id, const QUrl &url, const QString &filename); public slots: - void LoginComplete(const bool success, QString error = QString()); + void LoginComplete(const bool success, const QString &error = QString()); private: bool IsQuery() { return (type_ == QueryType_Artists || type_ == QueryType_Albums || type_ == QueryType_Songs); } diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index acf439569..37f57ca4a 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -225,7 +225,7 @@ void TidalService::Exit() { void TidalService::ExitReceived() { - QObject *obj = qobject_cast(sender()); + QObject *obj = sender(); QObject::disconnect(obj, nullptr, this, nullptr); qLog(Debug) << obj << "successfully exited."; wait_for_exit_.removeAll(obj); @@ -291,7 +291,7 @@ void TidalService::ReloadSettings() { } -void TidalService::StartAuthorization(const QString client_id) { +void TidalService::StartAuthorization(const QString &client_id) { client_id_ = client_id; code_verifier_ = Utilities::CryptographicRandomString(44); @@ -406,9 +406,9 @@ void TidalService::RequestAccessToken(const QString &code) { } -void TidalService::HandleLoginSSLErrors(QList ssl_errors) { +void TidalService::HandleLoginSSLErrors(const QList &ssl_errors) { - for (QSslError &ssl_error : ssl_errors) { + for (const QSslError &ssl_error : ssl_errors) { login_errors_ += ssl_error.errorString(); } @@ -992,7 +992,7 @@ void TidalService::GetStreamURL(const QUrl &url) { } -void TidalService::HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error) { +void TidalService::HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error) { TidalStreamURLRequest *stream_url_req = qobject_cast(sender()); if (!stream_url_req || !stream_url_requests_.contains(stream_url_req)) return; diff --git a/src/tidal/tidalservice.h b/src/tidal/tidalservice.h index 29ad95d87..f5d354808 100644 --- a/src/tidal/tidalservice.h +++ b/src/tidal/tidalservice.h @@ -124,7 +124,7 @@ class TidalService : public InternetService { public slots: void ShowConfig() override; - void StartAuthorization(const QString client_id); + void StartAuthorization(const QString &client_id); void TryLogin(); void SendLogin(); void SendLoginWithCredentials(const QString &api_token, const QString &username, const QString &password); @@ -139,7 +139,7 @@ class TidalService : public InternetService { private slots: void ExitReceived(); void RequestNewAccessToken() { RequestAccessToken(); } - void HandleLoginSSLErrors(QList ssl_errors); + void HandleLoginSSLErrors(const QList &ssl_errors); void AccessTokenRequestFinished(QNetworkReply *reply); void HandleAuthReply(QNetworkReply *reply); void ResetLoginAttempts(); @@ -157,7 +157,7 @@ class TidalService : public InternetService { void ArtistsUpdateProgressReceived(const int id, const int progress); void AlbumsUpdateProgressReceived(const int id, const int progress); void SongsUpdateProgressReceived(const int id, const int progress); - void HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error = QString()); + void HandleStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error = QString()); private: typedef QPair Param; diff --git a/src/tidal/tidalstreamurlrequest.cpp b/src/tidal/tidalstreamurlrequest.cpp index 7f7e69867..f77083d7f 100644 --- a/src/tidal/tidalstreamurlrequest.cpp +++ b/src/tidal/tidalstreamurlrequest.cpp @@ -65,7 +65,7 @@ TidalStreamURLRequest::~TidalStreamURLRequest() { } -void TidalStreamURLRequest::LoginComplete(const bool success, QString error) { +void TidalStreamURLRequest::LoginComplete(const bool success, const QString &error) { if (!need_login_) return; need_login_ = false; @@ -270,6 +270,7 @@ void TidalStreamURLRequest::StreamURLReceived() { return; } QJsonArray json_array_urls = json_urls.toArray(); + urls.reserve(json_array_urls.count()); for (const QJsonValueRef value : json_array_urls) { urls << QUrl(value.toString()); } diff --git a/src/tidal/tidalstreamurlrequest.h b/src/tidal/tidalstreamurlrequest.h index 33662ed2b..eaeff63fe 100644 --- a/src/tidal/tidalstreamurlrequest.h +++ b/src/tidal/tidalstreamurlrequest.h @@ -63,7 +63,7 @@ class TidalStreamURLRequest : public TidalBaseRequest { void StreamURLReceived(); public slots: - void LoginComplete(const bool success, QString error = QString()); + void LoginComplete(const bool success, const QString &error = QString()); private: void Error(const QString &error, const QVariant &debug = QVariant()) override; diff --git a/src/tidal/tidalurlhandler.cpp b/src/tidal/tidalurlhandler.cpp index 81468adce..55a04ca67 100644 --- a/src/tidal/tidalurlhandler.cpp +++ b/src/tidal/tidalurlhandler.cpp @@ -51,7 +51,7 @@ UrlHandler::LoadResult TidalUrlHandler::StartLoading(const QUrl &url) { } -void TidalUrlHandler::GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error) { +void TidalUrlHandler::GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error) { if (task_id_ == -1) return; CancelTask(); diff --git a/src/tidal/tidalurlhandler.h b/src/tidal/tidalurlhandler.h index cc237a153..f1bc102a0 100644 --- a/src/tidal/tidalurlhandler.h +++ b/src/tidal/tidalurlhandler.h @@ -45,7 +45,7 @@ class TidalUrlHandler : public UrlHandler { void CancelTask(); private slots: - void GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, QString error = QString()); + void GetStreamURLFinished(const QUrl &original_url, const QUrl &stream_url, const Song::FileType filetype, const int samplerate, const int bit_depth, const qint64 duration, const QString &error = QString()); private: Application *app_; diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 77ef60aac..e9f217a16 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -294,7 +294,7 @@ void TranscodeDialog::UpdateProgress() { int progress = (finished_success_ + finished_failed_) * 100; QMap current_jobs = transcoder_->GetProgress(); - QList values = current_jobs.values(); + QList values = current_jobs.values(); // clazy:exclude=qt6-deprecated-api-fixes for (const float value : values) { progress += qBound(0, int(value * 100), 99); } @@ -389,7 +389,7 @@ void TranscodeDialog::SetFilenames(const QStringList &filenames) { void TranscodeDialog::Remove() { qDeleteAll(ui_->files->selectedItems()); } -void TranscodeDialog::LogLine(const QString message) { +void TranscodeDialog::LogLine(const QString &message) { QString date(QDateTime::currentDateTime().toString(Qt::TextDate)); log_ui_->log->appendPlainText(QString("%1: %2").arg(date, message)); @@ -410,7 +410,7 @@ void TranscodeDialog::Options() { TranscoderPreset preset = ui_->format->itemData(ui_->format->currentIndex()).value(); - TranscoderOptionsDialog dialog(preset.type_, this); + TranscoderOptionsDialog dialog(preset.filetype_, this); if (dialog.is_valid()) { dialog.exec(); } diff --git a/src/transcoder/transcodedialog.h b/src/transcoder/transcodedialog.h index 84bdd17e0..0063c1d26 100644 --- a/src/transcoder/transcodedialog.h +++ b/src/transcoder/transcodedialog.h @@ -76,7 +76,7 @@ class TranscodeDialog : public QDialog { void Cancel(); void JobComplete(const QString &input, const QString &output, bool success); void AllJobsComplete(); - void LogLine(const QString message); + void LogLine(const QString &message); void Options(); void AddDestination(); void accept() override; diff --git a/src/transcoder/transcoder.cpp b/src/transcoder/transcoder.cpp index 4b0ca662f..0c9a1bf97 100644 --- a/src/transcoder/transcoder.cpp +++ b/src/transcoder/transcoder.cpp @@ -48,8 +48,8 @@ int Transcoder::JobFinishedEvent::sEventType = -1; -TranscoderPreset::TranscoderPreset(Song::FileType type, const QString &name, const QString &extension, const QString &codec_mimetype, const QString &muxer_mimetype) - : type_(type), +TranscoderPreset::TranscoderPreset(const Song::FileType filetype, const QString &name, const QString &extension, const QString &codec_mimetype, const QString &muxer_mimetype) + : filetype_(filetype), name_(name), extension_(extension), codec_mimetype_(codec_mimetype), @@ -187,7 +187,7 @@ GstElement *Transcoder::CreateElementForMimeType(const QString &element_type, co Transcoder::JobFinishedEvent::JobFinishedEvent(JobState *state, bool success) : QEvent(QEvent::Type(sEventType)), state_(state), success_(success) {} -void Transcoder::JobState::PostFinished(bool success) { +void Transcoder::JobState::PostFinished(const bool success) { if (success) { emit parent_->LogLine(tr("Successfully written %1").arg(QDir::toNativeSeparators(job_.output))); @@ -235,37 +235,37 @@ QList Transcoder::GetAllPresets() { } -TranscoderPreset Transcoder::PresetForFileType(Song::FileType type) { +TranscoderPreset Transcoder::PresetForFileType(const Song::FileType filetype) { - switch (type) { + switch (filetype) { case Song::FileType_WAV: - return TranscoderPreset(type, "Wav", "wav", QString(), "audio/x-wav"); + return TranscoderPreset(filetype, "Wav", "wav", QString(), "audio/x-wav"); case Song::FileType_FLAC: - return TranscoderPreset(type, "FLAC", "flac", "audio/x-flac"); + return TranscoderPreset(filetype, "FLAC", "flac", "audio/x-flac"); case Song::FileType_WavPack: - return TranscoderPreset(type, "WavPack", "wv", "audio/x-wavpack"); + return TranscoderPreset(filetype, "WavPack", "wv", "audio/x-wavpack"); case Song::FileType_OggFlac: - return TranscoderPreset(type, "Ogg FLAC", "ogg", "audio/x-flac", "application/ogg"); + return TranscoderPreset(filetype, "Ogg FLAC", "ogg", "audio/x-flac", "application/ogg"); case Song::FileType_OggVorbis: - return TranscoderPreset(type, "Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg"); + return TranscoderPreset(filetype, "Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg"); case Song::FileType_OggOpus: - return TranscoderPreset(type, "Ogg Opus", "opus", "audio/x-opus", "application/ogg"); + return TranscoderPreset(filetype, "Ogg Opus", "opus", "audio/x-opus", "application/ogg"); case Song::FileType_OggSpeex: - return TranscoderPreset(type, "Ogg Speex", "spx", "audio/x-speex", "application/ogg"); + return TranscoderPreset(filetype, "Ogg Speex", "spx", "audio/x-speex", "application/ogg"); case Song::FileType_MPEG: - return TranscoderPreset(type, "MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3"); + return TranscoderPreset(filetype, "MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3"); case Song::FileType_MP4: - return TranscoderPreset(type, "M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4"); + return TranscoderPreset(filetype, "M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4"); case Song::FileType_ASF: - return TranscoderPreset(type, "Windows Media audio", "wma", "audio/x-wma", "video/x-ms-asf"); + return TranscoderPreset(filetype, "Windows Media audio", "wma", "audio/x-wma", "video/x-ms-asf"); default: - qLog(Warning) << "Unsupported format in PresetForFileType:" << type; + qLog(Warning) << "Unsupported format in PresetForFileType:" << filetype; return TranscoderPreset(); } } -Song::FileType Transcoder::PickBestFormat(QList supported) { +Song::FileType Transcoder::PickBestFormat(const QList &supported) { if (supported.isEmpty()) return Song::FileType_Unknown; @@ -282,7 +282,7 @@ Song::FileType Transcoder::PickBestFormat(QList supported) { } -QString Transcoder::GetFile(const QString &input, const TranscoderPreset &preset, const QString output) { +QString Transcoder::GetFile(const QString &input, const TranscoderPreset &preset, const QString &output) { QFileInfo fileinfo_output; @@ -500,7 +500,7 @@ bool Transcoder::event(QEvent *e) { gst_bus_set_sync_handler(gst_pipeline_get_bus(GST_PIPELINE(finished_event->state_->pipeline_)), nullptr, nullptr, nullptr); // Remove it from the list - this will also destroy the GStreamer pipeline - current_jobs_.erase(it); + current_jobs_.erase(it); // clazy:exclude=strict-iterators // Emit the finished signal emit JobComplete(input, output, finished_event->success_); @@ -535,7 +535,7 @@ void Transcoder::Cancel() { } // Remove the job, this destroys the GStreamer pipeline too - it = current_jobs_.erase(it); + it = current_jobs_.erase(it); // clazy:exclude=strict-iterators } } diff --git a/src/transcoder/transcoder.h b/src/transcoder/transcoder.h index f9f23c9e4..726ce6db2 100644 --- a/src/transcoder/transcoder.h +++ b/src/transcoder/transcoder.h @@ -40,10 +40,10 @@ #include "core/song.h" struct TranscoderPreset { - explicit TranscoderPreset() : type_(Song::FileType_Unknown) {} - TranscoderPreset(Song::FileType type, const QString &name, const QString &extension, const QString &codec_mimetype, const QString &muxer_mimetype_ = QString()); + 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 type_; + Song::FileType filetype_; QString name_; QString extension_; QString codec_mimetype_; @@ -57,14 +57,14 @@ class Transcoder : public QObject { public: explicit Transcoder(QObject *parent = nullptr, const QString &settings_postfix = ""); - static TranscoderPreset PresetForFileType(Song::FileType type); + static TranscoderPreset PresetForFileType(const Song::FileType filetype); static QList GetAllPresets(); - static Song::FileType PickBestFormat(QList supported); + static Song::FileType PickBestFormat(const QList &supported); int max_threads() const { return max_threads_; } void set_max_threads(int count) { max_threads_ = count; } - QString GetFile(const QString &input, const TranscoderPreset &preset, const QString output = QString()); + QString GetFile(const QString &input, const TranscoderPreset &preset, const QString &output = QString()); void AddJob(const QString &input, const TranscoderPreset &preset, const QString &output); QMap GetProgress() const; @@ -99,13 +99,15 @@ class Transcoder : public QObject { convert_element_(nullptr) {} ~JobState(); - void PostFinished(bool success); + void PostFinished(const bool success); void ReportError(GstMessage *msg); Job job_; Transcoder *parent_; GstElement *pipeline_; GstElement *convert_element_; + private: + Q_DISABLE_COPY(JobState) }; // Event passed from a GStreamer callback to the Transcoder when a job finishes. @@ -116,6 +118,8 @@ class Transcoder : public QObject { JobState *state_; bool success_; + private: + Q_DISABLE_COPY(JobFinishedEvent) }; enum StartJobStatus { diff --git a/src/transcoder/transcoderoptionsaac.h b/src/transcoder/transcoderoptionsaac.h index 2af61aa97..f0892a986 100644 --- a/src/transcoder/transcoderoptionsaac.h +++ b/src/transcoder/transcoderoptionsaac.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsAAC; class TranscoderOptionsAAC : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsAAC(QWidget *parent = nullptr); ~TranscoderOptionsAAC() override; diff --git a/src/transcoder/transcoderoptionsasf.h b/src/transcoder/transcoderoptionsasf.h index 3fbb287e7..fda1e1b17 100644 --- a/src/transcoder/transcoderoptionsasf.h +++ b/src/transcoder/transcoderoptionsasf.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsASF; class TranscoderOptionsASF : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsASF(QWidget *parent = nullptr); ~TranscoderOptionsASF() override; diff --git a/src/transcoder/transcoderoptionsflac.h b/src/transcoder/transcoderoptionsflac.h index 0f0c5eae3..3f77ec65c 100644 --- a/src/transcoder/transcoderoptionsflac.h +++ b/src/transcoder/transcoderoptionsflac.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsFLAC; class TranscoderOptionsFLAC : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsFLAC(QWidget *parent = nullptr); ~TranscoderOptionsFLAC() override; diff --git a/src/transcoder/transcoderoptionsinterface.h b/src/transcoder/transcoderoptionsinterface.h index 385b913ed..e1e094af8 100644 --- a/src/transcoder/transcoderoptionsinterface.h +++ b/src/transcoder/transcoderoptionsinterface.h @@ -27,6 +27,8 @@ #include class TranscoderOptionsInterface : public QWidget { + Q_OBJECT + public: explicit TranscoderOptionsInterface(QWidget *parent) : QWidget(parent) {} ~TranscoderOptionsInterface() override {} diff --git a/src/transcoder/transcoderoptionsopus.h b/src/transcoder/transcoderoptionsopus.h index 738a7bccc..b85137eef 100644 --- a/src/transcoder/transcoderoptionsopus.h +++ b/src/transcoder/transcoderoptionsopus.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsOpus; class TranscoderOptionsOpus : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsOpus(QWidget *parent = nullptr); ~TranscoderOptionsOpus() override; diff --git a/src/transcoder/transcoderoptionsspeex.h b/src/transcoder/transcoderoptionsspeex.h index f6bee8d97..3e2bd907e 100644 --- a/src/transcoder/transcoderoptionsspeex.h +++ b/src/transcoder/transcoderoptionsspeex.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsSpeex; class TranscoderOptionsSpeex : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsSpeex(QWidget *parent = nullptr); ~TranscoderOptionsSpeex() override; diff --git a/src/transcoder/transcoderoptionsvorbis.cpp b/src/transcoder/transcoderoptionsvorbis.cpp index 38b8dd300..3d5f581f1 100644 --- a/src/transcoder/transcoderoptionsvorbis.cpp +++ b/src/transcoder/transcoderoptionsvorbis.cpp @@ -50,7 +50,7 @@ void TranscoderOptionsVorbis::Load() { #define GET_BITRATE(variable, property) \ int variable = s.value(property, -1).toInt(); \ - variable = variable == -1 ? 0 : variable / 1000 + (variable) = ((variable) == -1 ? 0 : (variable) / 1000) GET_BITRATE(bitrate, "bitrate"); GET_BITRATE(min_bitrate, "min-bitrate"); @@ -73,8 +73,8 @@ void TranscoderOptionsVorbis::Save() { s.beginGroup(kSettingsGroup + settings_postfix_); #define GET_BITRATE(variable, ui_slider) \ - int variable = ui_slider->value(); \ - variable = variable == 0 ? -1 : variable * 1000 + int variable = (ui_slider)->value(); \ + (variable) = ((variable) == 0 ? -1 : (variable) * 1000) GET_BITRATE(bitrate, ui_->bitrate_slider); GET_BITRATE(min_bitrate, ui_->min_bitrate_slider); diff --git a/src/transcoder/transcoderoptionsvorbis.h b/src/transcoder/transcoderoptionsvorbis.h index 5608185d0..44a436a8f 100644 --- a/src/transcoder/transcoderoptionsvorbis.h +++ b/src/transcoder/transcoderoptionsvorbis.h @@ -30,6 +30,8 @@ class Ui_TranscoderOptionsVorbis; class TranscoderOptionsVorbis : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsVorbis(QWidget *parent = nullptr); ~TranscoderOptionsVorbis() override; diff --git a/src/transcoder/transcoderoptionswavpack.h b/src/transcoder/transcoderoptionswavpack.h index df70055a0..d361a23fe 100644 --- a/src/transcoder/transcoderoptionswavpack.h +++ b/src/transcoder/transcoderoptionswavpack.h @@ -29,6 +29,8 @@ class Ui_TranscoderOptionsWavPack; class TranscoderOptionsWavPack : public TranscoderOptionsInterface { + Q_OBJECT + public: explicit TranscoderOptionsWavPack(QWidget *parent = nullptr); ~TranscoderOptionsWavPack() override; diff --git a/src/widgets/fancytabwidget.cpp b/src/widgets/fancytabwidget.cpp index 48dadc4af..98bde7ea2 100644 --- a/src/widgets/fancytabwidget.cpp +++ b/src/widgets/fancytabwidget.cpp @@ -22,6 +22,7 @@ #include "config.h" #include +#include #include #include @@ -63,11 +64,13 @@ #include "core/stylehelper.h" #include "settings/appearancesettingspage.h" +using namespace std::chrono_literals; + const int FancyTabWidget::IconSize_LargeSidebar = 40; const int FancyTabWidget::IconSize_SmallSidebar = 32; const int FancyTabWidget::TabSize_LargeSidebarMinWidth = 70; -class FancyTabBar: public QTabBar { +class FancyTabBar: public QTabBar { // clazy:exclude=missing-qobject-macro private: int mouseHoverTabIndex = -1; @@ -340,10 +343,9 @@ class FancyTabBar: public QTabBar { }; -class TabData : public QObject { - +class TabData : public QObject { // clazy:exclude=missing-qobject-macro public: - TabData(QWidget *widget_view, const QString name, const QIcon icon, const QString label, const int idx, QWidget *parent) : + TabData(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label, const int idx, QWidget *parent) : QObject(parent), widget_view_(widget_view), name_(name), icon_(icon), @@ -417,7 +419,8 @@ void FancyTabWidget::currentTabChanged(const int idx) { // The adwaita style is causing the contents of the tabbar to be stretched from top to bottom with space between icons and text. // You can see this on the default Fedora (Gnome) installation. -class FancyTabWidgetProxyStyle : public QProxyStyle { +class FancyTabWidgetProxyStyle : public QProxyStyle { // clazy:exclude=missing-qobject-macro + public: explicit FancyTabWidgetProxyStyle(QStyle *style) : QProxyStyle(style), common_style_(new QCommonStyle()) {} ~FancyTabWidgetProxyStyle() override { common_style_->deleteLater(); } @@ -689,7 +692,7 @@ void FancyTabWidget::SetMode(FancyTabWidget::Mode mode) { updateGeometry(); // There appears to be a bug in QTabBar which causes tabSizeHint to be ignored thus the need for this second shot repaint - QTimer::singleShot(1, this, &FancyTabWidget::tabBarUpdateGeometry); + QTimer::singleShot(1ms, this, &FancyTabWidget::tabBarUpdateGeometry); emit ModeChanged(mode); diff --git a/src/widgets/forcescrollperpixel.h b/src/widgets/forcescrollperpixel.h index 33ef335c1..e85ff3d28 100644 --- a/src/widgets/forcescrollperpixel.h +++ b/src/widgets/forcescrollperpixel.h @@ -31,6 +31,8 @@ class QEvent; // Some KDE styles override the ScrollMode property of QAbstractItemViews. // This helper class forces the mode back to ScrollPerPixel. class ForceScrollPerPixel : public QObject { + Q_OBJECT + public: explicit ForceScrollPerPixel(QAbstractItemView *item_view, QObject *parent = nullptr); diff --git a/src/widgets/freespacebar.cpp b/src/widgets/freespacebar.cpp index 8b44df065..278fab797 100644 --- a/src/widgets/freespacebar.cpp +++ b/src/widgets/freespacebar.cpp @@ -120,7 +120,7 @@ void FreeSpaceBar::paintEvent(QPaintEvent*) { } -void FreeSpaceBar::DrawBar(QPainter *p, const QRect &r) { +void FreeSpaceBar::DrawBar(QPainter *p, const QRect r) { p->setRenderHint(QPainter::Antialiasing, true); @@ -179,7 +179,7 @@ void FreeSpaceBar::DrawBar(QPainter *p, const QRect &r) { } -void FreeSpaceBar::DrawText(QPainter *p, const QRect &r) { +void FreeSpaceBar::DrawText(QPainter *p, const QRect r) { QFont small_font(font()); small_font.setPointSize(small_font.pointSize() - 1); diff --git a/src/widgets/freespacebar.h b/src/widgets/freespacebar.h index 47a08f354..90d63b8df 100644 --- a/src/widgets/freespacebar.h +++ b/src/widgets/freespacebar.h @@ -79,8 +79,8 @@ class FreeSpaceBar : public QWidget { QString TextForSize(const QString &prefix, const qint64 size) const; - void DrawBar(QPainter *p, const QRect &r); - void DrawText(QPainter *p, const QRect &r); + void DrawBar(QPainter *p, const QRect r); + void DrawText(QPainter *p, const QRect r); private: qint64 free_; diff --git a/src/widgets/groupediconview.cpp b/src/widgets/groupediconview.cpp index f57eb7b56..e40e6ea43 100644 --- a/src/widgets/groupediconview.cpp +++ b/src/widgets/groupediconview.cpp @@ -94,7 +94,7 @@ int GroupedIconView::header_height() const { return default_header_height_; } -void GroupedIconView::DrawHeader(QPainter *painter, const QRect &rect, const QFont &font, const QPalette &palette, const QString &text) { +void GroupedIconView::DrawHeader(QPainter *painter, const QRect rect, const QFont &font, const QPalette &palette, const QString &text) { painter->save(); @@ -316,17 +316,22 @@ void GroupedIconView::paintEvent(QPaintEvent *e) { } void GroupedIconView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) { + QVector indexes(IntersectingItems(rect.translated(horizontalOffset(), verticalOffset()))); + QItemSelection selection; + selection.reserve(indexes.count()); for (const QModelIndex &idx : indexes) { selection << QItemSelectionRange(idx); } selectionModel()->select(selection, command); + } -QVector GroupedIconView::IntersectingItems(const QRect &rect) const { +QVector GroupedIconView::IntersectingItems(const QRect rect) const { + QVector ret; const int count = visual_rects_.count(); @@ -337,6 +342,7 @@ QVector GroupedIconView::IntersectingItems(const QRect &rect) const } return ret; + } QRegion GroupedIconView::visualRegionForSelection(const QItemSelection &selection) const { diff --git a/src/widgets/groupediconview.h b/src/widgets/groupediconview.h index 6640d3869..e51a15a45 100644 --- a/src/widgets/groupediconview.h +++ b/src/widgets/groupediconview.h @@ -81,7 +81,7 @@ class GroupedIconView : public QListView { QModelIndex moveCursor(CursorAction action, Qt::KeyboardModifiers modifiers) override; void setModel(QAbstractItemModel *model) override; - static void DrawHeader(QPainter *painter, const QRect &rect, const QFont &font, const QPalette &palette, const QString &text); + static void DrawHeader(QPainter *painter, const QRect rect, const QFont &font, const QPalette &palette, const QString &text); protected: virtual int header_height() const; @@ -112,7 +112,7 @@ class GroupedIconView : public QListView { }; // Returns the items that are wholly or partially inside the rect. - QVector IntersectingItems(const QRect &rect) const; + QVector IntersectingItems(const QRect rect) const; // Returns the index of the item above (d=-1) or below (d=+1) the given item. int IndexAboveOrBelow(int index, const int d) const; diff --git a/src/widgets/lineedit.h b/src/widgets/lineedit.h index 6c194a53d..a5f79a79f 100644 --- a/src/widgets/lineedit.h +++ b/src/widgets/lineedit.h @@ -62,6 +62,9 @@ class LineEditInterface { protected: QWidget *widget_; + + private: + Q_DISABLE_COPY(LineEditInterface) }; class ExtendedEditor : public LineEditInterface { diff --git a/src/widgets/loginstatewidget.cpp b/src/widgets/loginstatewidget.cpp index d07ee83a3..6697ab1b4 100644 --- a/src/widgets/loginstatewidget.cpp +++ b/src/widgets/loginstatewidget.cpp @@ -142,7 +142,7 @@ bool LoginStateWidget::eventFilter(QObject *object, QEvent *event) { return QWidget::eventFilter(object, event); } -void LoginStateWidget::SetExpires(const QDate &expires) { +void LoginStateWidget::SetExpires(const QDate expires) { ui_->expires->setVisible(expires.isValid()); diff --git a/src/widgets/loginstatewidget.h b/src/widgets/loginstatewidget.h index 75f6cac25..4c31763a9 100644 --- a/src/widgets/loginstatewidget.h +++ b/src/widgets/loginstatewidget.h @@ -62,7 +62,7 @@ class LoginStateWidget : public QWidget { void SetAccountTypeText(const QString &text); void SetAccountTypeVisible(const bool visible); - void SetExpires(const QDate &expires); + void SetExpires(const QDate expires); signals: void LogoutClicked(); diff --git a/src/widgets/multiloadingindicator.cpp b/src/widgets/multiloadingindicator.cpp index a50bf591b..9233a4db9 100644 --- a/src/widgets/multiloadingindicator.cpp +++ b/src/widgets/multiloadingindicator.cpp @@ -76,6 +76,7 @@ void MultiLoadingIndicator::UpdateText() { QList tasks = task_manager_->GetTasks(); QStringList strings; + strings.reserve(tasks.count()); for (const TaskManager::Task &task : tasks) { QString task_text(task.name); task_text[0] = task_text[0].toLower(); @@ -108,6 +109,6 @@ void MultiLoadingIndicator::paintEvent(QPaintEvent*) { kHorizontalPadding + spinner_->sizeHint().width() + kSpacing, kVerticalPadding, width() - kHorizontalPadding * 2 - spinner_->sizeHint().width() - kSpacing, height() - kVerticalPadding * 2); - p.drawText(text_rect, Qt::TextSingleLine | Qt::AlignLeft, fontMetrics().elidedText(text_, Qt::ElideRight, text_rect.width())); + p.drawText(text_rect, Qt::TextSingleLine | Qt::AlignLeft, fontMetrics().elidedText(text_, Qt::ElideRight, text_rect.width())); // NOLINT(bugprone-suspicious-enum-usage) } diff --git a/src/widgets/qsearchfield_nonmac.cpp b/src/widgets/qsearchfield_nonmac.cpp index 9d13b26cf..a597a984c 100644 --- a/src/widgets/qsearchfield_nonmac.cpp +++ b/src/widgets/qsearchfield_nonmac.cpp @@ -40,7 +40,8 @@ THE SOFTWARE. #include "core/iconloader.h" -class QSearchFieldPrivate : public QObject { +class QSearchFieldPrivate : public QObject { // clazy:exclude=missing-qobject-macro + public: QSearchFieldPrivate(QSearchField *searchField, QLineEdit *lineedit, QToolButton *clearbutton) : QObject(searchField), lineedit_(lineedit), clearbutton_(clearbutton) {} diff --git a/src/widgets/ratingwidget.cpp b/src/widgets/ratingwidget.cpp index fe92c8f72..ce3a5ecc1 100644 --- a/src/widgets/ratingwidget.cpp +++ b/src/widgets/ratingwidget.cpp @@ -72,7 +72,7 @@ RatingPainter::RatingPainter() { } } -QRect RatingPainter::Contents(const QRect &rect) { +QRect RatingPainter::Contents(const QRect rect) { const int width = kStarSize * kStarCount; const int x = rect.x() + (rect.width() - width) / 2; @@ -81,7 +81,7 @@ QRect RatingPainter::Contents(const QRect &rect) { } -double RatingPainter::RatingForPos(const QPoint &pos, const QRect &rect) { +double RatingPainter::RatingForPos(const QPoint pos, const QRect rect) { const QRect contents = Contents(rect); const double raw = double(pos.x() - contents.left()) / contents.width(); @@ -95,7 +95,7 @@ double RatingPainter::RatingForPos(const QPoint &pos, const QRect &rect) { } -void RatingPainter::Paint(QPainter *painter, const QRect &rect, double rating) const { +void RatingPainter::Paint(QPainter *painter, const QRect rect, double rating) const { QSize size(qMin(kStarSize * kStarCount, rect.width()), qMin(kStarSize, rect.height())); QPoint pos(rect.center() - QPoint(size.width() / 2, size.height() / 2)); diff --git a/src/widgets/ratingwidget.h b/src/widgets/ratingwidget.h index 8f48db37a..43ef90a2d 100644 --- a/src/widgets/ratingwidget.h +++ b/src/widgets/ratingwidget.h @@ -32,10 +32,10 @@ class RatingPainter { static const int kStarCount = 5; static const int kStarSize = 16; - static QRect Contents(const QRect &rect); - static double RatingForPos(const QPoint &pos, const QRect &rect); + static QRect Contents(const QRect rect); + static double RatingForPos(const QPoint pos, const QRect rect); - void Paint(QPainter *painter, const QRect &rect, double rating) const; + void Paint(QPainter *painter, const QRect rect, double rating) const; private: QPixmap stars_[kStarCount * 2 + 1]; @@ -43,6 +43,7 @@ class RatingPainter { class RatingWidget : public QWidget { Q_OBJECT + Q_PROPERTY(double rating READ rating WRITE set_rating) public: diff --git a/src/widgets/stretchheaderview.cpp b/src/widgets/stretchheaderview.cpp index 5f7c93d6d..f06b819c9 100644 --- a/src/widgets/stretchheaderview.cpp +++ b/src/widgets/stretchheaderview.cpp @@ -314,6 +314,9 @@ QByteArray StretchHeaderView::SaveState() const { QList pixel_widths; QList visual_indices; + pixel_widths.reserve(count()); + visual_indices.reserve(count()); + for (int i = 0; i < count(); ++i) { pixel_widths << sectionSize(i); visual_indices << logicalIndex(i); @@ -350,6 +353,10 @@ QByteArray StretchHeaderView::ResetState() { QList visual_indices; QList pixel_widths; + + visual_indices.reserve(count()); + pixel_widths.reserve(count()); + for (int i = 0 ; i < count() ; ++i) { pixel_widths << 10; visual_indices << count(); diff --git a/src/widgets/trackslider.cpp b/src/widgets/trackslider.cpp index 8c9d24ac5..1a5e8e0f7 100644 --- a/src/widgets/trackslider.cpp +++ b/src/widgets/trackslider.cpp @@ -189,7 +189,8 @@ bool TrackSlider::event(QEvent *e) { default: break; } - return false; + + return QWidget::event(e); } diff --git a/src/widgets/tracksliderpopup.cpp b/src/widgets/tracksliderpopup.cpp index 52828bd6a..e47645a36 100644 --- a/src/widgets/tracksliderpopup.cpp +++ b/src/widgets/tracksliderpopup.cpp @@ -71,7 +71,7 @@ void TrackSliderPopup::SetSmallText(const QString &text) { UpdatePixmap(); } -void TrackSliderPopup::SetPopupPosition(const QPoint &pos) { +void TrackSliderPopup::SetPopupPosition(const QPoint pos) { pos_ = pos; UpdatePosition(); } diff --git a/src/widgets/tracksliderpopup.h b/src/widgets/tracksliderpopup.h index aef98623f..d11b924c2 100644 --- a/src/widgets/tracksliderpopup.h +++ b/src/widgets/tracksliderpopup.h @@ -44,7 +44,7 @@ class TrackSliderPopup : public QWidget { public slots: void SetText(const QString &text); void SetSmallText(const QString &small_text); - void SetPopupPosition(const QPoint &pos); + void SetPopupPosition(const QPoint pos); protected: void paintEvent(QPaintEvent*) override; diff --git a/src/widgets/volumeslider.cpp b/src/widgets/volumeslider.cpp index 251478895..b06742ad4 100644 --- a/src/widgets/volumeslider.cpp +++ b/src/widgets/volumeslider.cpp @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include #include @@ -181,7 +181,7 @@ void PrettySlider::mousePressEvent(QMouseEvent *e) { void PrettySlider::slideEvent(QMouseEvent *e) { if (m_mode == Pretty) { - QSlider::setValue(orientation() == Qt::Horizontal ? QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().x(), width() - 2) : QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().y(), height() - 2)); + SliderSlider::setValue(orientation() == Qt::Horizontal ? QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().x(), width() - 2) : QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().y(), height() - 2)); } else { SliderSlider::slideEvent(e); @@ -289,7 +289,7 @@ void VolumeSlider::mousePressEvent(QMouseEvent *e) { void VolumeSlider::contextMenuEvent(QContextMenuEvent *e) { - QMap values; + QHash values; QMenu menu; menu.setTitle("Volume"); values[menu.addAction("100%")] = 100; @@ -301,20 +301,20 @@ void VolumeSlider::contextMenuEvent(QContextMenuEvent *e) { QAction *ret = menu.exec(mapToGlobal(e->pos())); if (ret) { - QSlider::setValue(values[ret]); + SliderSlider::setValue(values[ret]); emit sliderReleased(values[ret]); } } void VolumeSlider::slideEvent(QMouseEvent *e) { - QSlider::setValue(QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().x(), width() - 2)); + SliderSlider::setValue(QStyle::sliderValueFromPosition(minimum(), maximum(), e->pos().x(), width() - 2)); } void VolumeSlider::wheelEvent(QWheelEvent *e) { const uint step = e->angleDelta().y() / (e->angleDelta().x() == 0 ? 30 : -30); - QSlider::setValue(QSlider::value() + step); + SliderSlider::setValue(SliderSlider::value() + step); emit sliderReleased(value()); } diff --git a/src/widgets/volumeslider.h b/src/widgets/volumeslider.h index 4969fcc32..105c316cb 100644 --- a/src/widgets/volumeslider.h +++ b/src/widgets/volumeslider.h @@ -53,7 +53,7 @@ class SliderSlider : public QSlider { signals: // we emit this when the user has specifically changed the slider so connect to it if valueChanged() is too generic Qt also emits valueChanged(int) - void sliderReleased(int); + void sliderReleased(int); // clazy:exclude=overloaded-signal protected: void wheelEvent(QWheelEvent*) override; diff --git a/tests/src/collectionbackend_test.cpp b/tests/src/collectionbackend_test.cpp index bc3a0809d..4110c2c7e 100644 --- a/tests/src/collectionbackend_test.cpp +++ b/tests/src/collectionbackend_test.cpp @@ -37,6 +37,8 @@ #include "collection/collectionbackend.h" #include "collection/collection.h" +// clazy:excludeall=non-pod-global-static,returning-void-expression + namespace { class CollectionBackendTest : public ::testing::Test { @@ -58,8 +60,8 @@ class CollectionBackendTest : public ::testing::Test { return ret; } - std::shared_ptr database_; - std::unique_ptr backend_; + std::shared_ptr database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::unique_ptr backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; TEST_F(CollectionBackendTest, EmptyDatabase) { @@ -180,7 +182,7 @@ class SingleSong : public CollectionBackendTest { EXPECT_EQ(1, list[0].directory_id()); } - Song song_; + Song song_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; @@ -190,7 +192,7 @@ TEST_F(SingleSong, GetSongWithNoAlbum) { AddDummySong(); if (HasFatalFailure()) return; EXPECT_EQ(1, backend_->GetAllArtists().size()); - CollectionBackend::AlbumList albums = backend_->GetAllAlbums(); + //CollectionBackend::AlbumList albums = backend_->GetAllAlbums(); //EXPECT_EQ(1, albums.size()); //EXPECT_EQ("Artist", albums[0].artist); //EXPECT_EQ("", albums[0].album); diff --git a/tests/src/collectionmodel_test.cpp b/tests/src/collectionmodel_test.cpp index 1d49bfb00..0f7484b41 100644 --- a/tests/src/collectionmodel_test.cpp +++ b/tests/src/collectionmodel_test.cpp @@ -39,6 +39,8 @@ #include "collection/collectionbackend.h" #include "collection/collection.h" +// clazy:excludeall=non-pod-global-static,returning-void-expression + namespace { class CollectionModelTest : public ::testing::Test { @@ -83,12 +85,12 @@ class CollectionModelTest : public ::testing::Test { return AddSong(song); } - std::shared_ptr database_; - std::unique_ptr backend_; - std::unique_ptr model_; - std::unique_ptr model_sorted_; + std::shared_ptr database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::unique_ptr backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::unique_ptr model_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::unique_ptr model_sorted_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) - bool added_dir_; + bool added_dir_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; TEST_F(CollectionModelTest, Initialization) { @@ -209,7 +211,7 @@ TEST_F(CollectionModelTest, VariousArtistSongs) { song.Init("Title " + n, "Artist " + n, "Album", 0); song.set_mtime(0); song.set_ctime(0); - songs << song; + songs << song; // clazy:exclude=reserve-candidates } // Different ways of putting songs in "Various Artist". Make sure they all work @@ -218,7 +220,7 @@ TEST_F(CollectionModelTest, VariousArtistSongs) { songs[2].set_compilation_on(true); songs[3].set_compilation_detected(true); songs[3].set_artist("Various Artists"); - for (int i=0 ; i<4 ; ++i) + for (int i=0 ; i < 4 ; ++i) AddSong(songs[i]); model_->Init(false); diff --git a/tests/src/logging_env.h b/tests/src/logging_env.h index 0d14ef813..7669509f5 100644 --- a/tests/src/logging_env.h +++ b/tests/src/logging_env.h @@ -26,11 +26,14 @@ #include "core/logging.h" class LoggingEnvironment : public ::testing::Environment { -public: + public: + LoggingEnvironment() = default; void SetUp() override { logging::Init(); logging::SetLevels("*:4"); } + private: + Q_DISABLE_COPY(LoggingEnvironment) }; #endif // LOGGING_ENV_H diff --git a/tests/src/mergedproxymodel_test.cpp b/tests/src/mergedproxymodel_test.cpp index 03453d193..b53294492 100644 --- a/tests/src/mergedproxymodel_test.cpp +++ b/tests/src/mergedproxymodel_test.cpp @@ -26,14 +26,16 @@ #include #include +// clazy:excludeall=non-pod-global-static,returning-void-expression,function-args-by-value + class MergedProxyModelTest : public ::testing::Test { protected: void SetUp() override { merged_.setSourceModel(&source_); } - QStandardItemModel source_; - MergedProxyModel merged_; + QStandardItemModel source_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + MergedProxyModel merged_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; @@ -105,10 +107,10 @@ TEST_F(MergedProxyModelTest, SourceInsert) { ASSERT_EQ(1, before_spy.count()); ASSERT_EQ(1, after_spy.count()); - EXPECT_FALSE(before_spy[0][0].value().isValid()); + EXPECT_FALSE(before_spy[0][0].toModelIndex().isValid()); EXPECT_EQ(0, before_spy[0][1].toInt()); EXPECT_EQ(0, before_spy[0][2].toInt()); - EXPECT_FALSE(after_spy[0][0].value().isValid()); + EXPECT_FALSE(after_spy[0][0].toModelIndex().isValid()); EXPECT_EQ(0, after_spy[0][1].toInt()); EXPECT_EQ(0, after_spy[0][2].toInt()); @@ -125,10 +127,10 @@ TEST_F(MergedProxyModelTest, SourceRemove) { ASSERT_EQ(1, before_spy.count()); ASSERT_EQ(1, after_spy.count()); - EXPECT_FALSE(before_spy[0][0].value().isValid()); + EXPECT_FALSE(before_spy[0][0].toModelIndex().isValid()); EXPECT_EQ(0, before_spy[0][1].toInt()); EXPECT_EQ(0, before_spy[0][2].toInt()); - EXPECT_FALSE(after_spy[0][0].value().isValid()); + EXPECT_FALSE(after_spy[0][0].toModelIndex().isValid()); EXPECT_EQ(0, after_spy[0][1].toInt()); EXPECT_EQ(0, after_spy[0][2].toInt()); @@ -147,10 +149,10 @@ TEST_F(MergedProxyModelTest, SubInsert) { ASSERT_EQ(1, before_spy.count()); ASSERT_EQ(1, after_spy.count()); - EXPECT_EQ("one", before_spy[0][0].value().data()); + EXPECT_EQ("one", before_spy[0][0].toModelIndex().data()); EXPECT_EQ(0, before_spy[0][1].toInt()); EXPECT_EQ(0, before_spy[0][2].toInt()); - EXPECT_EQ("one", after_spy[0][0].value().data()); + EXPECT_EQ("one", after_spy[0][0].toModelIndex().data()); EXPECT_EQ(0, after_spy[0][1].toInt()); EXPECT_EQ(0, after_spy[0][2].toInt()); @@ -171,10 +173,10 @@ TEST_F(MergedProxyModelTest, SubRemove) { ASSERT_EQ(1, before_spy.count()); ASSERT_EQ(1, after_spy.count()); - EXPECT_EQ("one", before_spy[0][0].value().data()); + EXPECT_EQ("one", before_spy[0][0].toModelIndex().data()); EXPECT_EQ(0, before_spy[0][1].toInt()); EXPECT_EQ(0, before_spy[0][2].toInt()); - EXPECT_EQ("one", after_spy[0][0].value().data()); + EXPECT_EQ("one", after_spy[0][0].toModelIndex().data()); EXPECT_EQ(0, after_spy[0][1].toInt()); EXPECT_EQ(0, after_spy[0][2].toInt()); diff --git a/tests/src/metatypes_env.h b/tests/src/metatypes_env.h index 8981a4fe0..ef6d6115f 100644 --- a/tests/src/metatypes_env.h +++ b/tests/src/metatypes_env.h @@ -31,7 +31,8 @@ #include "collection/directory.h" class MetatypesEnvironment : public ::testing::Environment { -public: + public: + MetatypesEnvironment() = default; void SetUp() override { qRegisterMetaType("Directory"); qRegisterMetaType("DirectoryList"); @@ -41,6 +42,8 @@ public: qRegisterMetaType("QModelIndex"); qRegisterMetaType("SongLoader::Result"); } + private: + Q_DISABLE_COPY(MetatypesEnvironment) }; #endif // RESOURCES_ENV_H diff --git a/tests/src/mock_networkaccessmanager.cpp b/tests/src/mock_networkaccessmanager.cpp index 19814e1d6..fb2bb773f 100644 --- a/tests/src/mock_networkaccessmanager.cpp +++ b/tests/src/mock_networkaccessmanager.cpp @@ -41,7 +41,7 @@ using ::testing::Return; class RequestForUrlMatcher : public MatcherInterface { public: - RequestForUrlMatcher(const QString& contains, const QMap& expected_params) + RequestForUrlMatcher(const QString& contains, const QMap &expected_params) : contains_(contains), expected_params_(expected_params) {} ~RequestForUrlMatcher() override {} @@ -75,13 +75,15 @@ class RequestForUrlMatcher : public MatcherInterface { QString contains_; QMap expected_params_; + Q_DISABLE_COPY(RequestForUrlMatcher) + }; -inline Matcher RequestForUrl(const QString& contains, const QMap& params) { +inline Matcher RequestForUrl(const QString &contains, const QMap ¶ms) { return MakeMatcher(new RequestForUrlMatcher(contains, params)); } -MockNetworkReply* MockNetworkAccessManager::ExpectGet(const QString& contains, const QMap& expected_params, int status, const QByteArray& data) { +MockNetworkReply* MockNetworkAccessManager::ExpectGet(const QString &contains, const QMap &expected_params, int status, const QByteArray &data) { MockNetworkReply* reply = new MockNetworkReply(data); reply->setAttribute(QNetworkRequest::HttpStatusCodeAttribute, status); @@ -92,21 +94,22 @@ MockNetworkReply* MockNetworkAccessManager::ExpectGet(const QString& contains, c } -MockNetworkReply::MockNetworkReply() - : data_(nullptr) { +MockNetworkReply::MockNetworkReply(QObject *parent) + : QNetworkReply(parent), data_(nullptr), pos_(0) { } -MockNetworkReply::MockNetworkReply(const QByteArray& data) - : data_(data), +MockNetworkReply::MockNetworkReply(const QByteArray &data, QObject *parent) + : QNetworkReply(parent), + data_(data), pos_(0) { } -void MockNetworkReply::SetData(const QByteArray& data) { +void MockNetworkReply::SetData(const QByteArray &data) { data_ = data; pos_ = 0; } -qint64 MockNetworkReply::readData(char* data, qint64 size) { +qint64 MockNetworkReply::readData(char *data, qint64 size) { if (data_.size() == pos_) { return -1; @@ -132,6 +135,6 @@ void MockNetworkReply::Done() { } -void MockNetworkReply::setAttribute(QNetworkRequest::Attribute code, const QVariant& value) { +void MockNetworkReply::setAttribute(QNetworkRequest::Attribute code, const QVariant &value) { QNetworkReply::setAttribute(code, value); } diff --git a/tests/src/mock_networkaccessmanager.h b/tests/src/mock_networkaccessmanager.h index edbce6546..b8c5d692e 100644 --- a/tests/src/mock_networkaccessmanager.h +++ b/tests/src/mock_networkaccessmanager.h @@ -38,19 +38,20 @@ class MockNetworkReply : public QNetworkReply { Q_OBJECT + public: - MockNetworkReply(); - explicit MockNetworkReply(const QByteArray& data); + MockNetworkReply(QObject *parent = nullptr); + explicit MockNetworkReply(const QByteArray &data, QObject *parent = nullptr); // Use these to set expectations. - void SetData(const QByteArray& data); - virtual void setAttribute(QNetworkRequest::Attribute code, const QVariant& value); + void SetData(const QByteArray &data); + virtual void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); // Call this when you are ready for the finished() signal. void Done(); protected: - MOCK_METHOD0(abort, void()); + MOCK_METHOD0(abort, void()); // clazy:exclude=returning-void-expression,function-args-by-value qint64 readData(char* data, qint64) override; qint64 writeData(const char* data, qint64) override; @@ -68,7 +69,7 @@ class MockNetworkAccessManager : public QNetworkAccessManager { int status, // Returned HTTP status code. const QByteArray& ret_data); // Returned data. protected: - MOCK_METHOD3(createRequest, QNetworkReply*(Operation, const QNetworkRequest&, QIODevice*)); + MOCK_METHOD3(createRequest, QNetworkReply*(Operation, const QNetworkRequest&, QIODevice*)); // clazy:exclude=function-args-by-value }; #endif // MOCK_NETWORKACCESSMANAGER_H diff --git a/tests/src/mock_playlistitem.cpp b/tests/src/mock_playlistitem.cpp index c7c3b16ab..165285404 100644 --- a/tests/src/mock_playlistitem.cpp +++ b/tests/src/mock_playlistitem.cpp @@ -22,7 +22,4 @@ #include "mock_playlistitem.h" -using ::testing::_; -using ::testing::Return; - MockPlaylistItem::MockPlaylistItem() : PlaylistItem(Song::Source_LocalFile) {} diff --git a/tests/src/mock_playlistitem.h b/tests/src/mock_playlistitem.h index fb50b3bd4..566d85b15 100644 --- a/tests/src/mock_playlistitem.h +++ b/tests/src/mock_playlistitem.h @@ -31,16 +31,18 @@ #include "collection/sqlrow.h" #include "playlist/playlistitem.h" +// clazy:excludeall=returning-void-expression,function-args-by-value + class MockPlaylistItem : public PlaylistItem { public: MockPlaylistItem(); MOCK_CONST_METHOD0(options, Options()); - MOCK_METHOD1(InitFromQuery, bool(const SqlRow& settings)); + MOCK_METHOD1(InitFromQuery, bool(const SqlRow &settings)); MOCK_METHOD0(Reload, void()); MOCK_CONST_METHOD0(Metadata, Song()); MOCK_CONST_METHOD0(OriginalMetadata, Song()); MOCK_CONST_METHOD0(Url, QUrl()); - MOCK_METHOD1(SetTemporaryMetadata, void(const Song& metadata)); + MOCK_METHOD1(SetTemporaryMetadata, void(const Song &metadata)); MOCK_METHOD0(ClearTemporaryMetadata, void()); MOCK_METHOD1(SetArtManual, void(const QUrl &cover_url)); MOCK_CONST_METHOD1(DatabaseValue, QVariant(DatabaseColumn)); diff --git a/tests/src/mock_settingsprovider.h b/tests/src/mock_settingsprovider.h index 0489f8413..c62da6779 100644 --- a/tests/src/mock_settingsprovider.h +++ b/tests/src/mock_settingsprovider.h @@ -25,15 +25,17 @@ #include +// clazy:excludeall=function-args-by-value + class MockSettingsProvider : public SettingsProvider { public: - MOCK_METHOD1(set_group, void(const char* group)); - MOCK_CONST_METHOD2(value, QVariant(const QString& key, const QVariant& default_value)); - MOCK_METHOD2(setValue, void(const QString& key, const QVariant& value)); - MOCK_METHOD1(beginReadArray, int(const QString& prefix)); - MOCK_METHOD2(beginWriteArray, void(const QString& prefix, int size)); + MOCK_METHOD1(set_group, void(const char *group)); + MOCK_CONST_METHOD2(value, QVariant(const QString &key, const QVariant &default_value)); + MOCK_METHOD2(setValue, void(const QString &key, const QVariant &value)); + MOCK_METHOD1(beginReadArray, int(const QString &prefix)); + MOCK_METHOD2(beginWriteArray, void(const QString &prefix, int size)); MOCK_METHOD1(setArrayIndex, void(int i)); - MOCK_METHOD0(endArray, void()); + MOCK_METHOD0(endArray, void()); // clazy:exclude=returning-void-expression }; class DummySettingsProvider : public SettingsProvider { diff --git a/tests/src/organizeformat_test.cpp b/tests/src/organizeformat_test.cpp index bc2f40a52..b92e838df 100644 --- a/tests/src/organizeformat_test.cpp +++ b/tests/src/organizeformat_test.cpp @@ -29,6 +29,8 @@ #include +// clazy:excludeall=returning-void-expression + class OrganizeFormatTest : public ::testing::Test { protected: OrganizeFormat format_; diff --git a/tests/src/playlist_test.cpp b/tests/src/playlist_test.cpp index e4d9fac8b..e4eebdb07 100644 --- a/tests/src/playlist_test.cpp +++ b/tests/src/playlist_test.cpp @@ -35,6 +35,8 @@ using ::testing::Return; +// clazy:excludeall=non-pod-global-static,returning-void-expression + namespace { class PlaylistTest : public ::testing::Test { @@ -45,11 +47,11 @@ class PlaylistTest : public ::testing::Test { { } - void SetUp() { + void SetUp() override { playlist_.set_sequence(&sequence_); } - MockPlaylistItem* MakeMockItem(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const { + MockPlaylistItem* MakeMockItem(const QString &title, const QString &artist = QString(), const QString &album = QString(), int length = 123) const { Song metadata; metadata.Init(title, artist, album, length); @@ -59,12 +61,12 @@ class PlaylistTest : public ::testing::Test { return ret; } - PlaylistItemPtr MakeMockItemP(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const { + PlaylistItemPtr MakeMockItemP(const QString &title, const QString &artist = QString(), const QString &album = QString(), int length = 123) const { return PlaylistItemPtr(MakeMockItem(title, artist, album, length)); } - Playlist playlist_; - PlaylistSequence sequence_; + Playlist playlist_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + PlaylistSequence sequence_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; @@ -436,6 +438,7 @@ TEST_F(PlaylistTest, ShuffleThenNext) { // Add 100 items PlaylistItemList items; + items.reserve(100); for (int i=0 ; i<100 ; ++i) items << MakeMockItemP("Item " + QString::number(i)); playlist_.InsertItems(items); @@ -484,7 +487,7 @@ TEST_F(PlaylistTest, CollectionIdMapSingle) { EXPECT_EQ(0, playlist_.collection_items_by_id(0).count()); EXPECT_EQ(0, playlist_.collection_items_by_id(2).count()); ASSERT_EQ(1, playlist_.collection_items_by_id(1).count()); - EXPECT_EQ(song.title(), playlist_.collection_items_by_id(1)[0]->Metadata().title()); + EXPECT_EQ(song.title(), playlist_.collection_items_by_id(1)[0]->Metadata().title()); // clazy:exclude=detaching-temporary playlist_.Clear(); diff --git a/tests/src/resources_env.h b/tests/src/resources_env.h index 701185e25..9dacda81a 100644 --- a/tests/src/resources_env.h +++ b/tests/src/resources_env.h @@ -28,7 +28,8 @@ #include class ResourcesEnvironment : public ::testing::Environment { -public: + public: + ResourcesEnvironment() = default; void SetUp() override { Q_INIT_RESOURCE(data); Q_INIT_RESOURCE(testdata); @@ -36,6 +37,8 @@ public: Q_INIT_RESOURCE(translations); #endif } + private: + Q_DISABLE_COPY(ResourcesEnvironment) }; #endif // RESOURCES_ENV_H diff --git a/tests/src/songplaylistitem_test.cpp b/tests/src/songplaylistitem_test.cpp index 0c3e9e8d5..443636273 100644 --- a/tests/src/songplaylistitem_test.cpp +++ b/tests/src/songplaylistitem_test.cpp @@ -32,6 +32,8 @@ #include "playlist/songplaylistitem.h" +// clazy:excludeall=non-pod-global-static + namespace { class SongPlaylistItemTest : public ::testing::TestWithParam { @@ -53,13 +55,13 @@ class SongPlaylistItemTest : public ::testing::TestWithParam { absolute_file_name_.prepend('/'); } - Song song_; - QTemporaryFile temp_file_; - QString absolute_file_name_; - std::unique_ptr item_; + Song song_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + QTemporaryFile temp_file_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + QString absolute_file_name_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::unique_ptr item_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; -INSTANTIATE_TEST_CASE_P(RealFiles, SongPlaylistItemTest, testing::Values( +INSTANTIATE_TEST_CASE_P(RealFiles, SongPlaylistItemTest, testing::Values( // clazy:exclude=function-args-by-value,clazy-non-pod-global-static "normalfile.flac", "file with spaces.flac", "file with # hash.flac", diff --git a/tests/src/sqlite_test.cpp b/tests/src/sqlite_test.cpp index 353a0453a..cc328bc5d 100644 --- a/tests/src/sqlite_test.cpp +++ b/tests/src/sqlite_test.cpp @@ -1,6 +1,8 @@ #include #include +// clazy:excludeall=returning-void-expression + TEST(SqliteTest, FTS5SupportEnabled) { sqlite3* db = nullptr; diff --git a/tests/src/tagreader_test.cpp b/tests/src/tagreader_test.cpp index 846ca421e..c986dc9a1 100644 --- a/tests/src/tagreader_test.cpp +++ b/tests/src/tagreader_test.cpp @@ -32,6 +32,8 @@ #include "tagreader.h" #include "test_utils.h" +// clazy:excludeall=non-pod-global-static + namespace { class TagReaderTest : public ::testing::Test { diff --git a/tests/src/test_utils.cpp b/tests/src/test_utils.cpp index 560d659a1..f3851a594 100644 --- a/tests/src/test_utils.cpp +++ b/tests/src/test_utils.cpp @@ -28,39 +28,39 @@ #include #include -std::ostream& operator<<(std::ostream& stream, const QString& str) { +std::ostream &operator<<(std::ostream &stream, const QString &str) { stream << str.toStdString(); return stream; } -std::ostream& operator <<(std::ostream& stream, const QUrl& url) { +std::ostream &operator <<(std::ostream &stream, const QUrl &url) { stream << url.toString().toStdString(); return stream; } -std::ostream& operator <<(std::ostream& stream, const QNetworkRequest& req) { +std::ostream &operator <<(std::ostream &stream, const QNetworkRequest &req) { stream << req.url().toString().toStdString(); return stream; } -std::ostream& operator <<(std::ostream& stream, const QVariant& var) { +std::ostream &operator <<(std::ostream &stream, const QVariant &var) { stream << var.toString().toStdString(); return stream; } -void PrintTo(const ::QString& str, std::ostream& os) { +void PrintTo(const ::QString &str, std::ostream &os) { os << str.toStdString(); } -void PrintTo(const ::QVariant& var, std::ostream& os) { +void PrintTo(const ::QVariant &var, std::ostream &os) { os << var.toString().toStdString(); } -void PrintTo(const ::QUrl& url, std::ostream& os) { +void PrintTo(const ::QUrl &url, std::ostream &os) { os << url.toString().toStdString(); } -TemporaryResource::TemporaryResource(const QString& filename) { +TemporaryResource::TemporaryResource(const QString &filename, QObject *parent) : QTemporaryFile(parent) { setFileTemplate(QDir::tempPath() + "/strawberry_test-XXXXXX." + filename.section('.', -1, -1)); open(); @@ -73,7 +73,7 @@ TemporaryResource::TemporaryResource(const QString& filename) { } -TestQObject::TestQObject(QObject* parent) +TestQObject::TestQObject(QObject *parent) : QObject(parent), invoked_(0) { } diff --git a/tests/src/test_utils.h b/tests/src/test_utils.h index 0cf4ebef2..980878732 100644 --- a/tests/src/test_utils.h +++ b/tests/src/test_utils.h @@ -61,14 +61,17 @@ void PrintTo(const ::QUrl& url, std::ostream& os); Q_DECLARE_METATYPE(QModelIndex) class TemporaryResource : public QTemporaryFile { -public: - explicit TemporaryResource(const QString& filename); + Q_OBJECT + + public: + explicit TemporaryResource(const QString &filename, QObject *parent = nullptr); }; class TestQObject : public QObject { Q_OBJECT + public: - explicit TestQObject(QObject* parent = nullptr); + explicit TestQObject(QObject *parent = nullptr); void Emit(); diff --git a/tests/src/testobjectdecorators.cpp b/tests/src/testobjectdecorators.cpp index 0cd540abd..364473e5e 100644 --- a/tests/src/testobjectdecorators.cpp +++ b/tests/src/testobjectdecorators.cpp @@ -24,7 +24,6 @@ #include "testobjectdecorators.h" - -void TestObjectDecorators::initStyleOption(QProgressBar* self, QStyleOptionProgressBar* opt) { +void TestObjectDecorators::initStyleOption(QProgressBar *self, QStyleOptionProgressBar *opt) { self->initStyleOption(opt); } diff --git a/tests/src/testobjectdecorators.h b/tests/src/testobjectdecorators.h index f9d35d954..46e238388 100644 --- a/tests/src/testobjectdecorators.h +++ b/tests/src/testobjectdecorators.h @@ -29,8 +29,8 @@ class QStyleOptionProgressBar; class TestObjectDecorators : public QObject { Q_OBJECT -public slots: - void initStyleOption(QProgressBar* self, QStyleOptionProgressBar* opt); + public slots: + void initStyleOption(QProgressBar *self, QStyleOptionProgressBar *opt); }; #endif // TESTOBJECTDECORATORS_H