From 33780eaddae9905a36ac96882c1ff1416a508082 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 13:58:44 +0200 Subject: [PATCH 1/8] Make deprecated QMutex::Recursives QRecursiveMutexes. Reading https://doc.qt.io/qt-5/qrecursivemutex.html this should be a pretty straightforward change. --- src/EngineController.cpp | 1 - src/EngineController.h | 4 ++-- src/core-impl/collections/db/sql/SqlMeta.cpp | 1 - src/core-impl/collections/db/sql/SqlMeta.h | 4 ++-- src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp | 1 - src/core-impl/storage/sql/mysql-shared/MySqlStorage.h | 4 ++-- src/core/playlists/Playlist.cpp | 4 +--- src/core/playlists/Playlist.h | 6 +++--- src/core/support/Debug.cpp | 4 ++-- src/core/support/Debug.h | 4 ++-- src/dynamic/biases/EchoNestBias.cpp | 1 - src/dynamic/biases/EchoNestBias.h | 4 ++-- src/importers/ImporterSqlConnection.cpp | 3 --- src/importers/ImporterSqlConnection.h | 4 ++-- src/services/lastfm/biases/LastFmBias.cpp | 1 - src/services/lastfm/biases/LastFmBias.h | 4 ++-- src/statusbar/CompoundProgressBar.cpp | 1 - src/statusbar/CompoundProgressBar.h | 4 ++-- tests/TestExpression.cpp | 2 +- tests/TestQStringx.cpp | 2 +- 20 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/EngineController.cpp b/src/EngineController.cpp index 8eea4c5921..5dd8db9190 100644 --- a/src/EngineController.cpp +++ b/src/EngineController.cpp @@ -84,7 +84,6 @@ EngineController::EngineController() , m_tickInterval( 0 ) , m_lastTickPosition( -1 ) , m_lastTickCount( 0 ) - , m_mutex( QMutex::Recursive ) { DEBUG_BLOCK // ensure this object is created in a main thread diff --git a/src/EngineController.h b/src/EngineController.h index ca4ebfe132..0653868947 100644 --- a/src/EngineController.h +++ b/src/EngineController.h @@ -27,7 +27,7 @@ #include "playback/EqualizerController.h" #include "core/meta/Meta.h" -#include +#include #include #include #include @@ -579,7 +579,7 @@ private: qint64 m_lastTickPosition; qint64 m_lastTickCount; - QMutex m_mutex; + QRecursiveMutex m_mutex; // FIXME: this variable should be updated when // Phonon::BackendCapabilities::notifier()'s capabilitiesChanged signal is emitted diff --git a/src/core-impl/collections/db/sql/SqlMeta.cpp b/src/core-impl/collections/db/sql/SqlMeta.cpp index 5fd0b11abf..45e7513f3d 100644 --- a/src/core-impl/collections/db/sql/SqlMeta.cpp +++ b/src/core-impl/collections/db/sql/SqlMeta.cpp @@ -1471,7 +1471,6 @@ SqlAlbum::SqlAlbum( Collections::SqlCollection *collection, int id, const QStrin , m_unsetImageId( -1 ) , m_tracksLoaded( NotLoaded ) , m_suppressAutoFetch( false ) - , m_mutex( QMutex::Recursive ) { Q_ASSERT( m_collection ); Q_ASSERT( m_id > 0 ); diff --git a/src/core-impl/collections/db/sql/SqlMeta.h b/src/core-impl/collections/db/sql/SqlMeta.h index cf0204ff9e..dd385b1c50 100644 --- a/src/core-impl/collections/db/sql/SqlMeta.h +++ b/src/core-impl/collections/db/sql/SqlMeta.h @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include #include @@ -450,7 +450,7 @@ class AMAROK_SQLCOLLECTION_EXPORT SqlAlbum : public Meta::Album bool m_suppressAutoFetch; Meta::ArtistPtr m_artist; Meta::TrackList m_tracks; - mutable QMutex m_mutex; + mutable QRecursiveMutex m_mutex; //TODO: add album artist diff --git a/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp b/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp index e13a32951d..4b8cf3ca65 100644 --- a/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp +++ b/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp @@ -90,7 +90,6 @@ QThreadStorage< ThreadInitializer* > ThreadInitializer::storage; MySqlStorage::MySqlStorage() : SqlStorage() , m_db( nullptr ) - , m_mutex( QMutex::Recursive ) , m_debugIdent( "MySQL-none" ) { //Relevant code must be implemented in subclasses diff --git a/src/core-impl/storage/sql/mysql-shared/MySqlStorage.h b/src/core-impl/storage/sql/mysql-shared/MySqlStorage.h index 2ff4fa1bec..7027072738 100644 --- a/src/core-impl/storage/sql/mysql-shared/MySqlStorage.h +++ b/src/core-impl/storage/sql/mysql-shared/MySqlStorage.h @@ -22,7 +22,7 @@ #include -#include +#include #include #ifdef Q_WS_WIN @@ -87,7 +87,7 @@ class MySqlStorage: public SqlStorage MYSQL* m_db; /** Mutex protecting the m_lastErrors list */ - mutable QMutex m_mutex; + mutable QRecursiveMutex m_mutex; QString m_debugIdent; QStringList m_lastErrors; diff --git a/src/core/playlists/Playlist.cpp b/src/core/playlists/Playlist.cpp index 06dee458a5..a77c726cd8 100644 --- a/src/core/playlists/Playlist.cpp +++ b/src/core/playlists/Playlist.cpp @@ -21,7 +21,6 @@ using namespace Playlists; PlaylistObserver::PlaylistObserver() - : m_playlistSubscriptionsMutex( QMutex::Recursive ) // prevent deadlocks { } @@ -73,8 +72,7 @@ void PlaylistObserver::tracksLoaded( PlaylistPtr ) } Playlist::Playlist() - : m_observersMutex( QMutex::Recursive ) // prevent deadlocks - , m_async( true ) + : m_async( true ) { } diff --git a/src/core/playlists/Playlist.h b/src/core/playlists/Playlist.h index 1ff92df5a1..6a0b25965a 100644 --- a/src/core/playlists/Playlist.h +++ b/src/core/playlists/Playlist.h @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include #include @@ -128,7 +128,7 @@ namespace Playlists private: QSet m_playlistSubscriptions; - QMutex m_playlistSubscriptionsMutex; // guards access to m_playlistSubscriptions + QRecursiveMutex m_playlistSubscriptionsMutex; // guards access to m_playlistSubscriptions }; class AMAROKCORE_EXPORT Playlist : public virtual QSharedData @@ -292,7 +292,7 @@ namespace Playlists * write, even if it is recursive. This can cause deadlocks, so it would be * never safe to lock it just for read. */ - QMutex m_observersMutex; + QRecursiveMutex m_observersMutex; bool m_async; }; } diff --git a/src/core/support/Debug.cpp b/src/core/support/Debug.cpp index 138c080b9a..50c6e5e830 100644 --- a/src/core/support/Debug.cpp +++ b/src/core/support/Debug.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include @@ -37,7 +37,7 @@ #define DEBUG_INDENT_OBJECTNAME QLatin1String("Debug_Indent_object") -AMAROKCORE_EXPORT QMutex Debug::mutex( QMutex::Recursive ); +AMAROKCORE_EXPORT QRecursiveMutex Debug::mutex; using namespace Debug; diff --git a/src/core/support/Debug.h b/src/core/support/Debug.h index b0872f1b80..1504a8ea2b 100644 --- a/src/core/support/Debug.h +++ b/src/core/support/Debug.h @@ -26,7 +26,7 @@ #include "core/amarokcore_export.h" #include -#include +#include #include // BEGIN: DEBUG_ASSERT @@ -116,7 +116,7 @@ */ namespace Debug { - extern AMAROKCORE_EXPORT QMutex mutex; + extern AMAROKCORE_EXPORT QRecursiveMutex mutex; // from kdebug.h enum DebugLevel { diff --git a/src/dynamic/biases/EchoNestBias.cpp b/src/dynamic/biases/EchoNestBias.cpp index 5831fcd259..c14264326a 100644 --- a/src/dynamic/biases/EchoNestBias.cpp +++ b/src/dynamic/biases/EchoNestBias.cpp @@ -64,7 +64,6 @@ Dynamic::EchoNestBias::EchoNestBias() : SimpleMatchBias() , m_artistSuggestedQuery( nullptr ) , m_match( PreviousTrack ) - , m_mutex( QMutex::Recursive ) { loadDataFromFile(); } diff --git a/src/dynamic/biases/EchoNestBias.h b/src/dynamic/biases/EchoNestBias.h index 413cdb33d0..54eee360f5 100644 --- a/src/dynamic/biases/EchoNestBias.h +++ b/src/dynamic/biases/EchoNestBias.h @@ -20,7 +20,7 @@ #include "dynamic/biases/TagMatchBias.h" -#include +#include namespace KIO { class StoredTransferJob; @@ -104,7 +104,7 @@ namespace Dynamic MatchType m_match; - mutable QMutex m_mutex; // mutex protecting all of the below structures + mutable QRecursiveMutex m_mutex; // mutex protecting all of the below structures mutable QMap< QString, QStringList> m_similarArtistMap; mutable QMap< QString, TrackSet> m_tracksMap; diff --git a/src/importers/ImporterSqlConnection.cpp b/src/importers/ImporterSqlConnection.cpp index 8176baca85..0853279ebb 100644 --- a/src/importers/ImporterSqlConnection.cpp +++ b/src/importers/ImporterSqlConnection.cpp @@ -35,7 +35,6 @@ ImporterSqlConnection::ImporterSqlConnection( const QString &driver, const QString &user, const QString &password ) : m_connectionName( QUuid::createUuid().toString() ) - , m_apiMutex( QMutex::Recursive ) , m_openTransaction( false ) { QSqlDatabase db = QSqlDatabase::addDatabase( driver, m_connectionName ); @@ -48,7 +47,6 @@ ImporterSqlConnection::ImporterSqlConnection( const QString &driver, ImporterSqlConnection::ImporterSqlConnection( const QString &dbPath ) : m_connectionName( QUuid::createUuid().toString() ) - , m_apiMutex( QMutex::Recursive ) , m_openTransaction( false ) { QSqlDatabase db = QSqlDatabase::addDatabase( QStringLiteral("QSQLITE"), m_connectionName ); @@ -57,7 +55,6 @@ ImporterSqlConnection::ImporterSqlConnection( const QString &dbPath ) ImporterSqlConnection::ImporterSqlConnection() : m_connectionName( QUuid::createUuid().toString() ) - , m_apiMutex( QMutex::Recursive ) , m_openTransaction( false ) { } diff --git a/src/importers/ImporterSqlConnection.h b/src/importers/ImporterSqlConnection.h index b0b7c844e9..70896ef223 100644 --- a/src/importers/ImporterSqlConnection.h +++ b/src/importers/ImporterSqlConnection.h @@ -22,7 +22,7 @@ #include "amarok_export.h" #include -#include +#include #include #include #include @@ -130,7 +130,7 @@ private: Qt::ConnectionType blockingConnectionType() const; - QMutex m_apiMutex; + QRecursiveMutex m_apiMutex; bool m_openTransaction; QList m_result; diff --git a/src/services/lastfm/biases/LastFmBias.cpp b/src/services/lastfm/biases/LastFmBias.cpp index af4ae2a987..468ca714aa 100644 --- a/src/services/lastfm/biases/LastFmBias.cpp +++ b/src/services/lastfm/biases/LastFmBias.cpp @@ -64,7 +64,6 @@ Dynamic::LastFmBiasFactory::createBias() Dynamic::LastFmBias::LastFmBias() : SimpleMatchBias() , m_match( SimilarArtist ) - , m_mutex( QMutex::Recursive ) { loadDataFromFile(); } diff --git a/src/services/lastfm/biases/LastFmBias.h b/src/services/lastfm/biases/LastFmBias.h index 2848b38d9a..77509dc9f1 100644 --- a/src/services/lastfm/biases/LastFmBias.h +++ b/src/services/lastfm/biases/LastFmBias.h @@ -20,7 +20,7 @@ #include "dynamic/biases/TagMatchBias.h" -#include +#include namespace Dynamic { @@ -95,7 +95,7 @@ namespace Dynamic MatchType m_match; - mutable QMutex m_mutex; // mutex protecting all of the below structures + mutable QRecursiveMutex m_mutex; // mutex protecting all of the below structures mutable QMap< QString, QStringList> m_similarArtistMap; mutable QMap< TitleArtistPair, QList > m_similarTrackMap; mutable QMap< QString, TrackSet> m_tracksMap; // for artist AND album diff --git a/src/statusbar/CompoundProgressBar.cpp b/src/statusbar/CompoundProgressBar.cpp index 3741ff5b34..3f437ff432 100644 --- a/src/statusbar/CompoundProgressBar.cpp +++ b/src/statusbar/CompoundProgressBar.cpp @@ -26,7 +26,6 @@ CompoundProgressBar::CompoundProgressBar( QWidget *parent ) : ProgressBar( parent ) - , m_mutex( QMutex::Recursive ) { m_progressDetailsWidget = new PopupWidget(); m_progressDetailsWidget->hide(); diff --git a/src/statusbar/CompoundProgressBar.h b/src/statusbar/CompoundProgressBar.h index cfd5070c41..ed9e72012a 100644 --- a/src/statusbar/CompoundProgressBar.h +++ b/src/statusbar/CompoundProgressBar.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include /** * A progress bar that wraps a number of simple progress bars and displays their @@ -75,7 +75,7 @@ private: QMap< const QObject *, ProgressBar *> m_progressMap; PopupWidget *m_progressDetailsWidget; - QMutex m_mutex; // protecting m_progressMap consistency + QRecursiveMutex m_mutex; // protecting m_progressMap consistency }; #endif diff --git a/tests/TestExpression.cpp b/tests/TestExpression.cpp index a84ee6f7f8..ea298c10c5 100644 --- a/tests/TestExpression.cpp +++ b/tests/TestExpression.cpp @@ -27,7 +27,7 @@ QTEST_GUILESS_MAIN( TestExpression ) //required for Debug.h -QMutex Debug::mutex; +QRecursiveMutex Debug::mutex; TestExpression::TestExpression() { diff --git a/tests/TestQStringx.cpp b/tests/TestQStringx.cpp index 7b96d83ae9..010db2252e 100644 --- a/tests/TestQStringx.cpp +++ b/tests/TestQStringx.cpp @@ -28,7 +28,7 @@ QTEST_GUILESS_MAIN( TestQStringx ) //required for Debug.h -QMutex Debug::mutex; +QRecursiveMutex Debug::mutex; TestQStringx::TestQStringx() { -- GitLab From 413efb028f41808e9a59166805f4a8ec73737237 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 17:33:54 +0200 Subject: [PATCH 2/8] Use more-recently-deprecated codepaths. KDeclarative::setupBindings() is deprecated since 5.45 and current KF5_MIN_VERSION is 5.57, so this is probably a feasible thing to do. --- src/context/ContextView.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/context/ContextView.cpp b/src/context/ContextView.cpp index 9e3ba064d2..1aa3fc70af 100644 --- a/src/context/ContextView.cpp +++ b/src/context/ContextView.cpp @@ -60,7 +60,8 @@ ContextView::ContextView( QWidget *parent ) KDeclarative::KDeclarative decl; decl.setDeclarativeEngine( engine() ); - decl.setupBindings(); + engine()->rootContext()->setContextObject( new KLocalizedContext( this ) ); + decl.setupEngine( engine() ); connect( this, &QQuickWidget::statusChanged, this, &ContextView::slotStatusChanged ); connect( The::paletteHandler(), &PaletteHandler::newPalette, this, &ContextView::updatePalette ); -- GitLab From f212bcb2466a2faee48ff43c631a67335c42b2f0 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 17:39:18 +0200 Subject: [PATCH 3/8] Port away from deprecated QDesktopWidget::numScreens. Replace with QGuiApplication::screens() based approaches as instructed on https://doc.qt.io/qt-5/qdesktopwidget-obsolete.html#numScreens --- src/configdialog/dialogs/NotificationsConfig.cpp | 2 +- src/widgets/Osd.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configdialog/dialogs/NotificationsConfig.cpp b/src/configdialog/dialogs/NotificationsConfig.cpp index 0c16fdcb17..00a15f6bef 100644 --- a/src/configdialog/dialogs/NotificationsConfig.cpp +++ b/src/configdialog/dialogs/NotificationsConfig.cpp @@ -55,7 +55,7 @@ NotificationsConfig::NotificationsConfig( Amarok2ConfigDialog* parent ) connect( m_osdPreview, &OSDPreviewWidget::positionChanged, this, &NotificationsConfig::slotPositionChanged ); - const int numScreens = QApplication::desktop()->numScreens(); + const int numScreens = QApplication::screens().size(); for( int i = 0; i < numScreens; i++ ) kcfg_OsdScreen->addItem( QString::number( i ) ); diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp index dc1cf722e3..4de9749a76 100644 --- a/src/widgets/Osd.cpp +++ b/src/widgets/Osd.cpp @@ -463,7 +463,7 @@ OSDWidget::setTextColor(const QColor& color) void OSDWidget::setScreen( int screen ) { - const int n = QApplication::desktop()->numScreens(); + const int n = QApplication::screens().size(); m_screen = ( screen >= n ) ? n - 1 : screen; } -- GitLab From d9cf76b03ea64bc7fa4c40a65f4de2fdc6d57fdc Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 18:34:21 +0200 Subject: [PATCH 4/8] Avoid some warnings from a TODO function. --- src/scripting/scriptengine/AmarokLyricsScript.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scripting/scriptengine/AmarokLyricsScript.cpp b/src/scripting/scriptengine/AmarokLyricsScript.cpp index d4b5eedd5a..fae437130d 100644 --- a/src/scripting/scriptengine/AmarokLyricsScript.cpp +++ b/src/scripting/scriptengine/AmarokLyricsScript.cpp @@ -97,6 +97,8 @@ AmarokLyricsScript::escape( const QString &str ) void AmarokLyricsScript::setLyricsForTrack( const QString &trackUrl, const QString &lyrics ) const { + Q_UNUSED( trackUrl ); + Q_UNUSED( lyrics ); /* TODO - convert method invocation below LyricsManager::instance()->setLyricsForTrack( trackUrl, lyrics ); */ -- GitLab From 3dd0add1d17d52132db13ef74f74034d14c4ffb6 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 18:39:01 +0200 Subject: [PATCH 5/8] Use non-deprecated signals. Introduced in Qt 5.15 ( https://doc.qt.io/qt-5/qsignalmapper.html#mappedObject https://doc.qt.io/qt-5/qsignalmapper.html#mappedString ), which is currently the minimum version for us. --- src/network/NetworkAccessViewer.cpp | 2 +- src/playlistgenerator/PresetEditDialog.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/NetworkAccessViewer.cpp b/src/network/NetworkAccessViewer.cpp index 38f50ed038..5454ab8819 100644 --- a/src/network/NetworkAccessViewer.cpp +++ b/src/network/NetworkAccessViewer.cpp @@ -33,7 +33,7 @@ NetworkAccessViewer::NetworkAccessViewer( QWidget *parent ) networkRequestsDialog->setupUi(dialog); mapper = new QSignalMapper(this); - connect( mapper, QOverload::of(&QSignalMapper::mapped), + connect( mapper, QOverload::of(&QSignalMapper::mappedObject), this, &NetworkAccessViewer::requestFinished ); connect( networkRequestsDialog->requestList, &QTreeWidget::currentItemChanged, this, &NetworkAccessViewer::showItemDetails ); diff --git a/src/playlistgenerator/PresetEditDialog.cpp b/src/playlistgenerator/PresetEditDialog.cpp index 7ef060ce22..fcf0f8e2d0 100644 --- a/src/playlistgenerator/PresetEditDialog.cpp +++ b/src/playlistgenerator/PresetEditDialog.cpp @@ -52,7 +52,7 @@ APG::PresetEditDialog::PresetEditDialog( const PresetPtr &p ) ui.constraintTreeView->expandAll(); QSignalMapper* adderMapper = new QSignalMapper( this ); - connect( adderMapper, QOverload::of(&QSignalMapper::mapped), + connect( adderMapper, QOverload::of(&QSignalMapper::mappedString), this, &PresetEditDialog::addNode ); QMenuBar* menuBar_Actions = new QMenuBar( this ); -- GitLab From 5f27e8531b603b82aa7d3371868e2425a1095b77 Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 18:51:44 +0200 Subject: [PATCH 6/8] Port away from deprecated TagLib::String::Null. As instructed on https://taglib.org/api/classTagLib_1_1String.html#ae5f42b9ceca1b59814cffc2eddff3d09 and https://taglib.org/api/classTagLib_1_1String.html#a8c35a7ec22fdfcf8afaf3edee01a01e0 --- shared/tag_helpers/APETagHelper.cpp | 2 +- shared/tag_helpers/ASFTagHelper.cpp | 2 +- shared/tag_helpers/ID3v2TagHelper.cpp | 2 +- shared/tag_helpers/MP4TagHelper.cpp | 2 +- shared/tag_helpers/StringHelper.cpp | 2 +- shared/tag_helpers/VorbisCommentTagHelper.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/shared/tag_helpers/APETagHelper.cpp b/shared/tag_helpers/APETagHelper.cpp index eee34e05a3..66e8510a53 100644 --- a/shared/tag_helpers/APETagHelper.cpp +++ b/shared/tag_helpers/APETagHelper.cpp @@ -84,7 +84,7 @@ APETagHelper::setTags( const Meta::FieldHash &changes ) QVariant value = changes.value( key ); TagLib::String field = fieldName( key ); - if( !field.isNull() && !field.isEmpty() ) + if( !field.isEmpty() ) { if( key == Meta::valRating ) m_tag->addValue( field, Qt4QStringToTString( QString::number( value.toFloat() / 10.0 ) ) ); diff --git a/shared/tag_helpers/ASFTagHelper.cpp b/shared/tag_helpers/ASFTagHelper.cpp index 241e93d714..772728b58f 100644 --- a/shared/tag_helpers/ASFTagHelper.cpp +++ b/shared/tag_helpers/ASFTagHelper.cpp @@ -107,7 +107,7 @@ ASFTagHelper::setTags( const Meta::FieldHash &changes ) QVariant value = changes.value( key ); TagLib::String field = fieldName( key ); - if( !field.isNull() && !field.isEmpty() ) + if( !field.isEmpty() ) { if( key == Meta::valHasCover ) continue; diff --git a/shared/tag_helpers/ID3v2TagHelper.cpp b/shared/tag_helpers/ID3v2TagHelper.cpp index ea9281dc30..7dd98062bc 100644 --- a/shared/tag_helpers/ID3v2TagHelper.cpp +++ b/shared/tag_helpers/ID3v2TagHelper.cpp @@ -187,7 +187,7 @@ ID3v2TagHelper::setTags( const Meta::FieldHash &changes ) QVariant value = changes.value( key ); TagLib::ByteVector field( fieldName( key ).toCString() ); - if( !field.isNull() && !field.isEmpty() ) + if( !field.isEmpty() ) { if( key == Meta::valHasCover ) continue; diff --git a/shared/tag_helpers/MP4TagHelper.cpp b/shared/tag_helpers/MP4TagHelper.cpp index 7a28b4473c..54d192ffae 100644 --- a/shared/tag_helpers/MP4TagHelper.cpp +++ b/shared/tag_helpers/MP4TagHelper.cpp @@ -106,7 +106,7 @@ MP4TagHelper::setTags( const Meta::FieldHash &changes ) QVariant value = changes.value( key ); TagLib::String field = fieldName( key ); - if( !field.isNull() && !field.isEmpty() ) + if( !field.isEmpty() ) { // http://gitorious.org/~jefferai/xdg-specs/jefferais-xdg-specs/blobs/mediaspecs/specifications/FMPSpecs/specification.txt sais that mp4 tags should be saved as strings if( key == Meta::valHasCover ) diff --git a/shared/tag_helpers/StringHelper.cpp b/shared/tag_helpers/StringHelper.cpp index fd7e49b432..a8d2aa3e97 100644 --- a/shared/tag_helpers/StringHelper.cpp +++ b/shared/tag_helpers/StringHelper.cpp @@ -36,7 +36,7 @@ Meta::Tag::Qt4QStringToTString( const QString &str ) { // Declare new var to prevent double call of trimmed func QString val = str.trimmed(); - return val.isEmpty() ? TagLib::String::null : TagLib::String( val.toUtf8().data(), TagLib::String::UTF8 ); + return val.isEmpty() ? TagLib::String() : TagLib::String( val.toUtf8().data(), TagLib::String::UTF8 ); } QString diff --git a/shared/tag_helpers/VorbisCommentTagHelper.cpp b/shared/tag_helpers/VorbisCommentTagHelper.cpp index f3ff542db6..95dc041d8a 100644 --- a/shared/tag_helpers/VorbisCommentTagHelper.cpp +++ b/shared/tag_helpers/VorbisCommentTagHelper.cpp @@ -151,7 +151,7 @@ VorbisCommentTagHelper::setTags( const Meta::FieldHash &changes ) QVariant value = changes.value( key ); TagLib::String field = fieldName( key ); - if( !field.isNull() && !field.isEmpty() ) + if( !field.isEmpty() ) { if( key == Meta::valHasCover ) continue; -- GitLab From 45fbce7eff1d4e38751db49f6ee0c4ede884e44e Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Thu, 9 Mar 2023 19:22:02 +0200 Subject: [PATCH 7/8] Port away from KDiskFreeSpaceInfo. Deprecated in KF 5.88. QStorageInfo is available since Qt 5.4, and actually provides better functionality with bytesAvailable() instead of just bytesFree(). --- .../db/sql/SqlCollectionLocation.cpp | 24 +++++++------------ .../ipodcollection/IpodCollection.cpp | 8 +++---- .../MediaDeviceCollection.cpp | 2 -- .../umscollection/UmsCollection.cpp | 6 ++--- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp index 7f761432ef..2f6835c073 100644 --- a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp +++ b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp @@ -38,8 +38,8 @@ #include #include #include +#include -#include #include #include #include @@ -90,13 +90,7 @@ SqlCollectionLocation::isWritable() const QStringList folders = actualLocation(); foreach( const QString &path, folders ) { - float used = KDiskFreeSpaceInfo::freeSpaceInfo( path ).used(); - float total = KDiskFreeSpaceInfo::freeSpaceInfo( path ).size(); - - if( total <= 0 ) // protect against div by zero - continue; //How did this happen? - - float free_space = total - used; + float free_space = QStorageInfo( path ).bytesAvailable(); if( free_space >= 500*1000*1000 ) // ~500 megabytes path_exists_with_space = true; @@ -298,18 +292,18 @@ SqlCollectionLocation::showDestinationDialog( const Meta::TrackList &tracks, if( path.isEmpty() ) continue; debug() << "Path" << path; - KDiskFreeSpaceInfo spaceInfo = KDiskFreeSpaceInfo::freeSpaceInfo( path ); + QStorageInfo spaceInfo(path); if( !spaceInfo.isValid() ) continue; - KIO::filesize_t totalCapacity = spaceInfo.size(); - KIO::filesize_t used = spaceInfo.used(); + KIO::filesize_t totalCapacity = spaceInfo.bytesTotal(); + KIO::filesize_t used = totalCapacity - spaceInfo.bytesFree(); - KIO::filesize_t freeSpace = totalCapacity - used; + KIO::filesize_t availableSpace = spaceInfo.bytesAvailable(); debug() << "used:" << used; debug() << "total:" << totalCapacity; - debug() << "Free space" << freeSpace; + debug() << "Available space" << availableSpace; debug() << "transfersize" << transferSize; if( totalCapacity <= 0 ) // protect against div by zero @@ -320,8 +314,8 @@ SqlCollectionLocation::showDestinationDialog( const Meta::TrackList &tracks, // since bad things happen when drives become totally full // we make sure there is at least ~500MB left // finally, ensure the path is writable - debug() << ( freeSpace - transferSize ); - if( ( freeSpace - transferSize ) > 1024*1024*500 && info.isWritable() ) + debug() << ( availableSpace - transferSize ); + if( ( availableSpace - transferSize ) > 1024*1024*500 && info.isWritable() ) available_folders << path; } diff --git a/src/core-impl/collections/ipodcollection/IpodCollection.cpp b/src/core-impl/collections/ipodcollection/IpodCollection.cpp index cd555ca47f..1aab224054 100644 --- a/src/core-impl/collections/ipodcollection/IpodCollection.cpp +++ b/src/core-impl/collections/ipodcollection/IpodCollection.cpp @@ -34,7 +34,6 @@ #include "core-impl/collections/support/MemoryQueryMaker.h" #include "playlistmanager/PlaylistManager.h" -#include #include #include #include @@ -47,6 +46,7 @@ #include #include #include +#include #include @@ -261,19 +261,19 @@ IpodCollection::icon() const bool IpodCollection::hasCapacity() const { - return KDiskFreeSpaceInfo::freeSpaceInfo( m_mountPoint ).isValid(); + return QStorageInfo( m_mountPoint ).isValid(); } float IpodCollection::usedCapacity() const { - return KDiskFreeSpaceInfo::freeSpaceInfo( m_mountPoint ).used(); + return QStorageInfo( m_mountPoint ).bytesTotal() - QStorageInfo( m_mountPoint ).bytesFree(); } float IpodCollection::totalCapacity() const { - return KDiskFreeSpaceInfo::freeSpaceInfo( m_mountPoint ).size(); + return QStorageInfo( m_mountPoint ).bytesTotal(); } Collections::CollectionLocation* diff --git a/src/core-impl/collections/mediadevicecollection/MediaDeviceCollection.cpp b/src/core-impl/collections/mediadevicecollection/MediaDeviceCollection.cpp index 0eec859ffd..f6795e733a 100644 --- a/src/core-impl/collections/mediadevicecollection/MediaDeviceCollection.cpp +++ b/src/core-impl/collections/mediadevicecollection/MediaDeviceCollection.cpp @@ -24,8 +24,6 @@ #include "core-impl/collections/mediadevicecollection/support/MediaDeviceInfo.h" #include "core-impl/collections/support/MemoryQueryMaker.h" -#include - using namespace Collections; MediaDeviceCollectionFactoryBase::MediaDeviceCollectionFactoryBase( ConnectionAssistant* assistant ) diff --git a/src/core-impl/collections/umscollection/UmsCollection.cpp b/src/core-impl/collections/umscollection/UmsCollection.cpp index 32873350e9..0ac4b438fb 100644 --- a/src/core-impl/collections/umscollection/UmsCollection.cpp +++ b/src/core-impl/collections/umscollection/UmsCollection.cpp @@ -44,12 +44,12 @@ #include #include +#include #include #include #include #include -#include UmsCollectionFactory::UmsCollectionFactory() @@ -407,13 +407,13 @@ UmsCollection::hasCapacity() const float UmsCollection::usedCapacity() const { - return KDiskFreeSpaceInfo::freeSpaceInfo( m_mountPoint ).used(); + return QStorageInfo( m_mountPoint ).bytesTotal()-QStorageInfo( m_mountPoint ).bytesFree(); } float UmsCollection::totalCapacity() const { - return KDiskFreeSpaceInfo::freeSpaceInfo( m_mountPoint ).size(); + return QStorageInfo( m_mountPoint ).bytesTotal(); } CollectionLocation * -- GitLab From 7b1af767ba420e175a0f2f3c0486a3e49730c33e Mon Sep 17 00:00:00 2001 From: Tuomas Nurmi Date: Fri, 10 Mar 2023 19:41:19 +0200 Subject: [PATCH 8/8] Update KF5 and Qt5 requirements in README. --- README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README b/README index f2639a2a7c..346094923f 100644 --- a/README +++ b/README @@ -39,14 +39,14 @@ not be entirely up to date. You can always look at CMakeLists.txt to discover the most recent dependencies. Required - * KDE Frameworks 5.41 (or newer, for an exact list look at CMakeLists.txt) + * KDE Frameworks 5.57 (or newer, for an exact list look at CMakeLists.txt) https://www.kde.org * Phonon 4.6.60 (or newer with support for Qt5) and one of the following backends: * phonon-gstreamer 4.6.3 (or newer) * phonon-vlc 0.6.1 (or newer; as of 0.6.1 doesn't yet play Audio CDs, bug 313046) - * Qt 5.10 (or newer) + * Qt 5.15 https://qt.io/ * TagLib 1.7 (or newer) -- GitLab