public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Yaakov Selkowitz <yselkowi@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/amarok] epel10: Update to KF5-based git snapshot
Date: Mon, 06 Jul 2026 18:05:49 GMT [thread overview]
Message-ID: <178336114914.1.949567342870549161.rpms-amarok-f9957dab1c73@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/amarok
Branch : epel10
Commit : f9957dab1c737e2dc2131fe4b0850cda42a1d6a4
Author : Yaakov Selkowitz <yselkowi@redhat.com>
Date : 2024-01-08T16:03:49-05:00
Stats : +1482/-439 in 10 file(s)
URL : https://src.fedoraproject.org/rpms/amarok/c/f9957dab1c737e2dc2131fe4b0850cda42a1d6a4?branch=epel10
Log:
Update to KF5-based git snapshot
Based on changes from @marcdeop in the KDE SIG COPR, updated to a more
recent snapshot, and fixed for flatpak builds. EPEL 9 would need at
least taglib-extras before this could be added there.
---
diff --git a/.gitignore b/.gitignore
index 039c87c..39948e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/amarok-2.8.0.tar.bz2
/amarok-2.8.90.tar.xz
/amarok-2.9.0.tar.xz
+/amarok-387c30de482522774c28dc02c2636cd41c8334e9.tar.bz2
diff --git a/amarok-2.8.0-no_kdewebkit.patch b/amarok-2.8.0-no_kdewebkit.patch
deleted file mode 100644
index 9f3b871..0000000
--- a/amarok-2.8.0-no_kdewebkit.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-diff -up amarok-2.8.0/src/context/applets/CMakeLists.txt.webkit amarok-2.8.0/src/context/applets/CMakeLists.txt
-diff -up amarok-2.8.0/src/context/applets/info/CMakeLists.txt.webkit amarok-2.8.0/src/context/applets/info/CMakeLists.txt
---- amarok-2.8.0/src/context/applets/info/CMakeLists.txt.webkit 2013-08-14 15:22:52.000000000 -0500
-+++ amarok-2.8.0/src/context/applets/info/CMakeLists.txt 2014-06-18 13:35:31.496217418 -0500
-@@ -16,7 +16,6 @@ target_link_libraries(amarok_context_app
- amarokcore
- amaroklib
- ${KDE4_PLASMA_LIBS}
-- ${KDE4_KDEWEBKIT_LIBS}
- ${QT_QTWEBKIT_LIBRARY}
- )
-
-diff -up amarok-2.8.0/src/context/applets/info/InfoApplet.cpp.webkit amarok-2.8.0/src/context/applets/info/InfoApplet.cpp
---- amarok-2.8.0/src/context/applets/info/InfoApplet.cpp.webkit 2013-08-14 15:22:52.000000000 -0500
-+++ amarok-2.8.0/src/context/applets/info/InfoApplet.cpp 2014-06-18 14:10:15.337284616 -0500
-@@ -26,7 +26,7 @@
- #include "PaletteHandler.h"
- #include "playlist/PlaylistController.h"
-
--#include <KGraphicsWebView>
-+#include <QGraphicsWebView>
- #include <KStandardDirs>
-
- #include <QPainter>
-@@ -63,7 +63,7 @@ void InfoApplet::init()
-
- dataEngine( "amarok-info" )->connectSource( "info", this );
-
-- m_webView = new KGraphicsWebView( this );
-+ m_webView = new QGraphicsWebView( this );
-
- QPalette p = m_webView->palette();
- p.setColor( QPalette::Dark, QColor( 255, 255, 255, 0) );
-diff -up amarok-2.8.0/src/context/applets/info/InfoApplet.h.webkit amarok-2.8.0/src/context/applets/info/InfoApplet.h
---- amarok-2.8.0/src/context/applets/info/InfoApplet.h.webkit 2013-08-14 15:22:52.000000000 -0500
-+++ amarok-2.8.0/src/context/applets/info/InfoApplet.h 2014-06-18 13:35:31.496217418 -0500
-@@ -27,7 +27,7 @@
-
- #include <QGraphicsProxyWidget>
-
--class KGraphicsWebView;
-+class QGraphicsWebView;
-
- class InfoApplet : public Context::Applet
- {
-@@ -47,7 +47,7 @@ private slots:
- void linkClicked( const QUrl & url );
-
- private:
-- KGraphicsWebView *m_webView;
-+ QGraphicsWebView *m_webView;
- bool m_initialized;
-
- static QString s_defaultHtml;
-diff -up amarok-2.8.0/src/context/applets/wikipedia/CMakeLists.txt.webkit amarok-2.8.0/src/context/applets/wikipedia/CMakeLists.txt
---- amarok-2.8.0/src/context/applets/wikipedia/CMakeLists.txt.webkit 2014-06-18 14:07:24.355163151 -0500
-+++ amarok-2.8.0/src/context/applets/wikipedia/CMakeLists.txt 2014-06-18 14:07:34.347695400 -0500
-@@ -18,7 +18,6 @@ target_link_libraries(amarok_context_app
- amaroklib
- ${KDE4_PLASMA_LIBS}
- ${KDE4_KIO_LIBS}
-- ${KDE4_KDEWEBKIT_LIBS}
- ${QT_QTWEBKIT_LIBRARY}
- )
-
-diff -up amarok-2.8.0/src/context/applets/wikipedia/WikipediaApplet_p.h.webkit amarok-2.8.0/src/context/applets/wikipedia/WikipediaApplet_p.h
---- amarok-2.8.0/src/context/applets/wikipedia/WikipediaApplet_p.h.webkit 2013-08-14 15:22:52.000000000 -0500
-+++ amarok-2.8.0/src/context/applets/wikipedia/WikipediaApplet_p.h 2014-06-18 13:56:15.446760436 -0500
-@@ -23,7 +23,7 @@
- #include "ui_wikipediaGeneralSettings.h"
- #include "ui_wikipediaLanguageSettings.h"
-
--#include <KGraphicsWebView>
-+#include <QGraphicsWebView>
- #include <KLineEdit>
- #include <KUrl>
-
-@@ -180,13 +180,13 @@ protected:
- }
- };
-
--class WikipediaWebView : public KGraphicsWebView
-+class WikipediaWebView : public QGraphicsWebView
- {
- Q_OBJECT
-
- public:
- WikipediaWebView( QGraphicsItem *parent = 0 )
-- : KGraphicsWebView( parent )
-+ : QGraphicsWebView( parent )
- {
- m_lineEdit = new WikipediaSearchLineEdit( this );
- m_lineEdit->setContentsMargins( 0, 0, 0, 0 );
-@@ -242,7 +242,7 @@ protected:
- }
- return false;
- }
-- return KGraphicsWebView::eventFilter( obj, event );
-+ return QGraphicsWebView::eventFilter( obj, event );
- }
-
- void keyPressEvent( QKeyEvent *event )
-@@ -258,12 +258,12 @@ protected:
- event->accept();
- }
- else
-- KGraphicsWebView::keyPressEvent( event );
-+ QGraphicsWebView::keyPressEvent( event );
- }
-
- void resizeEvent( QGraphicsSceneResizeEvent *event )
- {
-- KGraphicsWebView::resizeEvent( event );
-+ QGraphicsWebView::resizeEvent( event );
- if( m_topBorder )
- {
- m_topBorder->resize( event->newSize().width(), m_topBorder->size().height() );
diff --git a/amarok-2.8.0-onlinedoc.patch b/amarok-2.8.0-onlinedoc.patch
deleted file mode 100644
index a4d1df8..0000000
--- a/amarok-2.8.0-onlinedoc.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-diff -up amarok-2.8.0/src/ActionClasses.cpp.onlinedoc amarok-2.8.0/src/ActionClasses.cpp
---- amarok-2.8.0/src/ActionClasses.cpp.onlinedoc 2013-08-14 15:22:51.000000000 -0500
-+++ amarok-2.8.0/src/ActionClasses.cpp 2013-08-15 10:40:40.656472890 -0500
-@@ -33,10 +33,12 @@
- #include "widgets/Osd.h"
- #include "KNotificationBackend.h"
-
-+#include <QFile>
- #include <KAuthorized>
- #include <KHelpMenu>
- #include <KLocale>
- #include <KToolBar>
-+#include <KToolInvocation>
-
- extern OcsData ocsData;
-
-@@ -62,6 +64,7 @@ namespace Amarok
- using namespace Amarok;
-
- KHelpMenu *Menu::s_helpMenu = 0;
-+OnlineHelpHandler *Menu::s_onlineHelpHandler = 0;
-
- static void
- safePlug( KActionCollection *ac, const char *name, QWidget *w )
-@@ -151,6 +154,20 @@ Menu::helpMenu( QWidget *parent ) //STAT
-
- KMenu* menu = s_helpMenu->menu();
-
-+ // If amarok-doc is not installed, bring up the online version instead.
-+ if ( !QFile::exists( "/usr/share/doc/HTML/en/amarok/index.docbook" ) ) {
-+ QAction *contentsAction = s_helpMenu->action( KHelpMenu::menuHelpContents );
-+ // disconnect the default slot which fires up KHelpCenter
-+ disconnect( contentsAction, SIGNAL(triggered(bool)), s_helpMenu, SLOT(appHelpActivated()) );
-+ if ( s_onlineHelpHandler == 0 )
-+ s_onlineHelpHandler = new OnlineHelpHandler( parent );
-+ else
-+ // ensure no duplicate connection
-+ disconnect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) );
-+ // connect our custom slot which fires up a browser on UserBase instead
-+ connect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) );
-+ }
-+
- // "What's This" isn't currently defined for anything in Amarok, so let's remove it
- s_helpMenu->action( KHelpMenu::menuWhatsThis )->setVisible( false );
-
-@@ -160,6 +177,17 @@ Menu::helpMenu( QWidget *parent ) //STAT
- return menu;
- }
-
-+OnlineHelpHandler::OnlineHelpHandler( QObject* parent )
-+ : QObject( parent )
-+{
-+}
-+
-+void
-+OnlineHelpHandler::onlineHelpActivated()
-+{
-+ KToolInvocation::invokeBrowser( "http://userbase.kde.org/Amarok/Manual" );
-+}
-+
- //////////////////////////////////////////////////////////////////////////////////////////
- // PlayPauseAction
- //////////////////////////////////////////////////////////////////////////////////////////
-diff -up amarok-2.8.0/src/ActionClasses.h.onlinedoc amarok-2.8.0/src/ActionClasses.h
---- amarok-2.8.0/src/ActionClasses.h.onlinedoc 2013-08-14 15:22:51.000000000 -0500
-+++ amarok-2.8.0/src/ActionClasses.h 2013-08-15 10:38:12.378047150 -0500
-@@ -34,6 +34,16 @@ class KHelpMenu;
-
- namespace Amarok
- {
-+ class OnlineHelpHandler : public QObject
-+ {
-+ Q_OBJECT
-+ public:
-+ OnlineHelpHandler( QObject* parent );
-+
-+ public slots:
-+ void onlineHelpActivated();
-+ };
-+
- class Menu : public KMenu
- {
- Q_OBJECT
-@@ -45,6 +55,7 @@ namespace Amarok
- private:
- static Menu *s_instance;
- static KHelpMenu *s_helpMenu;
-+ static OnlineHelpHandler *s_onlineHelpHandler;
- };
-
- class MenuAction : public KAction
diff --git a/amarok-2.8.90-mysql_found.patch b/amarok-2.8.90-mysql_found.patch
deleted file mode 100644
index 44a94ff..0000000
--- a/amarok-2.8.90-mysql_found.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up amarok-2.8.90/CMakeLists.txt.mysql_embedded amarok-2.8.90/CMakeLists.txt
---- amarok-2.8.90/CMakeLists.txt.mysql_embedded 2015-12-10 11:44:35.094776255 -0600
-+++ amarok-2.8.90/CMakeLists.txt 2015-12-10 11:43:04.047091677 -0600
-@@ -142,7 +142,7 @@ if( WITH_PLAYER )
- else( WITH_MYSQL_EMBEDDED )
- add_definitions( "-DNO_MYSQL_EMBEDDED" )
- endif( WITH_MYSQL_EMBEDDED )
-- macro_log_feature( MYSQL_FOUND "mysql" "MySQL Server Libraries" "http://www.mysql.com" TRUE "" "" )
-+ macro_log_feature( MYSQL_EMBEDDED_FOUND "mysql" "MySQL Server Libraries" "http://www.mysql.com" FALSE "" "" )
-
- # zlib is required for mysql embedded
- find_package(ZLIB REQUIRED)
diff --git a/amarok.spec b/amarok.spec
index cf8f432..54a0617 100644
--- a/amarok.spec
+++ b/amarok.spec
@@ -1,98 +1,136 @@
+%global commit 387c30de482522774c28dc02c2636cd41c8334e9
+%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20231231
-%define kdewebkit 1
+%global __provides_exclude_from ^%{_kf5_qmldir}/org/kde/amarok/.*\.so$
Name: amarok
Summary: Media player
-Version: 2.9.0
-Release: 16%{?dist}
+Version: 2.9.71%{?commitdate:^git%{commitdate}.%{shortcommit}}
+Release: 1%{?dist}
# KDE e.V. may determine that future GPL versions are accepted
-License: GPLv2 or GPLv3
-Url: http://amarok.kde.org/
-#global revision %(echo %{version} | cut -d. -f3)
-#if %{revision} >= 50
-#global stable unstable
-#else
-%global stable stable
-#endif
-Source0: http://download.kde.org/%{stable}/amarok/%{version}/src/amarok-%{version}.tar.xz
-
-# Invoke a browser on the online UserBase documentation instead of KHelpCenter
-# for the help contents if the amarok-doc subpackage is not installed.
-Patch0: amarok-2.8.0-onlinedoc.patch
-
-# try to allow build without kdewebkit (like rhel), use QWeb* instead of KWeb*
-Patch1: amarok-2.8.0-no_kdewebkit.patch
-
-## upstreamable patches
-# make mysql_found non-fatal
-Patch100: amarok-2.8.90-mysql_found.patch
-
-BuildRequires: curl-devel
+License: GPL-2.0-only or GPL-3.0-only
+Url: https://amarok.kde.org/
+%if 0%{?commitdate}
+Source0: https://invent.kde.org/multimedia/amarok/-/archive/%{commit}/amarok-%{commit}.tar.bz2
+%else
+Source0: https://download.kde.org/%{stable_kf5}/amarok/%{version}/src/amarok-%{version}.tar.xz
+%endif
+
+# partially revert https://invent.kde.org/multimedia/amarok/-/commit/c095ebf8780b693605ab23efa4eae6f4dd18fc5e
+# it causes amarok to crash on launch for some reason
+Patch1: revert.patch
+
+# https://invent.kde.org/multimedia/amarok/-/merge_requests/55
+Patch2: port-away-from-deprecated-QDesktopWidget-functions-and-disable-missing-OSD-settings-functionalities-on-Wayland.patch
+
+# https://invent.kde.org/multimedia/amarok/-/merge_requests/53
+Patch3: refresh-deprecated-codepaths.patch
+
+# Needed because not every distro installs mygpo-qt5 under the same path.
+# For instance, Fedora namespaces qt5
+Patch10: fix-mygpo-qt5-compilation.patch
+
BuildRequires: desktop-file-utils
+BuildRequires: extra-cmake-modules
BuildRequires: gcc-c++
-## non-modular MusicBrainz-based audio fingerprint tag lookup support :(
-#BuildRequires: ffmpeg-devel libofa-devel
BuildRequires: gettext
-BuildRequires: kdelibs4-devel >= 4.9
-%if 0%{?kdewebkit}
-BuildRequires: kdelibs4-webkit-devel
-%endif
-%if 0%{?fedora} > 21
+BuildRequires: kf5-rpm-macros
BuildRequires: libappstream-glib
-%endif
-BuildRequires: mariadb-connector-c-devel
-BuildRequires: mariadb-embedded-devel
-BuildRequires: libgcrypt-devel
BuildRequires: perl-generators
-BuildRequires: pkgconfig(gdk-pixbuf-2.0)
-BuildRequires: pkgconfig(glib-2.0) pkgconfig(gobject-2.0)
-BuildRequires: pkgconfig(libxml-2.0)
-BuildRequires: pkgconfig(phonon) >= 4.5.0
-BuildRequires: pkgconfig(qca2)
-BuildRequires: pkgconfig(QJson)
-BuildRequires: pkgconfig(QtWebKit)
+
+BuildRequires: cmake(Qt5Core)
+BuildRequires: cmake(Qt5DBus)
+BuildRequires: cmake(Qt5Gui)
+BuildRequires: cmake(Qt5QuickWidgets)
+BuildRequires: cmake(Qt5Qml)
+BuildRequires: cmake(Qt5Sql)
+BuildRequires: cmake(Qt5Svg)
+BuildRequires: cmake(Qt5Test)
+BuildRequires: cmake(Qt5Widgets)
+BuildRequires: cmake(Qt5Xml)
+BuildRequires: cmake(Qt5QuickControls2)
+%ifarch %{qt5_qtwebengine_arches}
+BuildRequires: cmake(Qt5WebEngine)
+%endif
+BuildRequires: cmake(Qt5UiTools)
+
+BuildRequires: cmake(KF5Archive)
+BuildRequires: cmake(KF5Attica)
+BuildRequires: cmake(KF5Codecs)
+BuildRequires: cmake(KF5Config)
+BuildRequires: cmake(KF5ConfigWidgets)
+BuildRequires: cmake(KF5CoreAddons)
+BuildRequires: cmake(KF5Crash)
+BuildRequires: cmake(KF5DBusAddons)
+BuildRequires: cmake(KF5Declarative)
+BuildRequires: cmake(KF5DNSSD)
+BuildRequires: cmake(KF5DocTools)
+BuildRequires: cmake(KF5GlobalAccel)
+BuildRequires: cmake(KF5GuiAddons)
+BuildRequires: cmake(KF5I18n)
+BuildRequires: cmake(KF5IconThemes)
+BuildRequires: cmake(KF5KCMUtils)
+BuildRequires: cmake(KF5KIO)
+BuildRequires: cmake(KF5NewStuff)
+BuildRequires: cmake(KF5Notifications)
+BuildRequires: cmake(KF5Package)
+BuildRequires: cmake(KF5Solid)
+BuildRequires: cmake(KF5TextEditor)
+BuildRequires: cmake(KF5ThreadWeaver)
+BuildRequires: cmake(KF5WidgetsAddons)
+BuildRequires: cmake(KF5WindowSystem)
+BuildRequires: cmake(KF5Kirigami2)
+# gpodder, lastfm
+BuildRequires: cmake(KF5Wallet)
+
BuildRequires: pkgconfig(taglib) >= 1.6
BuildRequires: pkgconfig(taglib-extras) >= 1.0.1
-
+BuildRequires: cmake(Phonon4Qt5)
+BuildRequires: pkgconfig(libmariadb)
+BuildRequires: pkgconfig(mariadb)
+BuildRequires: mariadb-embedded-devel
+BuildRequires: ffmpeg-free-devel
+BuildRequires: fftw-devel
%if 0%{?fedora}
-BuildRequires: kf5-rpm-macros
-Requires: kf5-filesystem
-BuildRequires: liblastfm-devel >= 1.0.3
-BuildRequires: pkgconfig(libmygpo-qt) >= 1.0.7
-# loudmouth orphaned/unsupported f33+
-%if 0%{?fedora} < 33
-%global loudmouth 1
-BuildRequires: pkgconfig(loudmouth-1.0)
-%endif
+# dependencies not available in RHEL or EPEL
+BuildRequires: liblastfm-qt5-devel
+BuildRequires: libofa-devel
+BuildRequires: cmake(Mygpo-qt5)
BuildRequires: pkgconfig(libmtp) >= 0.3.0
BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0
-Requires: ifuse
-# not strictly required at buildtime, but if it's not available here,
-# then you're hosed at runtime anyway
-BuildRequires: clamz
-Requires: clamz
-%if 0%{?fedora} > 23
-Recommends: audiocd-kio
-Recommends: kio_mtp
-Recommends: kio-upnp-ms
-%else
-Requires: audiocd-kio
-Requires: kio_mtp
-Requires: kio-upnp-ms
-%endif
+# only used together with libgpod
+BuildRequires: pkgconfig(gdk-pixbuf-2.0)
+# MP3Tunes
+BuildRequires: pkgconfig(libcurl)
+BuildRequires: pkgconfig(libxml-2.0)
+BuildRequires: libgcrypt-devel
+BuildRequires: pkgconfig(loudmouth-1.0)
+BuildRequires: pkgconfig(glib-2.0) pkgconfig(gobject-2.0)
%endif
-BuildRequires: qtscriptbindings
-BuildRequires: make
-Requires: qtscriptbindings%{?_isa}
-Requires: %{name}-utils = %{version}-%{release}
-Requires: kde-runtime
-Requires: media-player-info
-Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-utils = %{version}-%{release}
+Requires: kf5-filesystem
+# QML module dependencies
+Requires: kf5-kirigami2%{?_isa}
+Requires: qt5-qtquickcontrols2%{?_isa}
-BuildConflicts: nepomuk-core-devel
-Obsoletes: amarok-nepomukcollection < %{version}-%{release}
+Recommends: kf5-audiocd-kio
+%if 0%{?fedora} >= 40 || 0%{?rhel} >= 10
+Recommends: kio-extras-kf5
+%else
+Recommends: kio-extras
+%endif
+%ifarch %{qt5_qtwebengine_arches}
+# Wikipedia QML plugin
+Recommends: qt5-qtwebengine%{?_isa}
+%endif
+%if 0%{?fedora}
+Recommends: ifuse
+Recommends: media-player-info
+%endif
%description
Amarok is a multimedia player with:
@@ -104,19 +142,17 @@ Amarok is a multimedia player with:
%package libs
Summary: Runtime libraries for %{name}
-Requires: %{name} = %{version}-%{release}
%description libs
%{summary}.
%package utils
Summary: Amarok standalone utilities
-%description utils
+Requires: %{name}-libs = %{version}-%{release}
+%description utils
%{summary}, including amarokcollectionscanner.
%package doc
Summary: Application handbook, documentation, translations
-# for upgrade path
-Obsoletes: amarok < 2.5.0-4
Requires: %{name} = %{version}-%{release}
BuildArch: noarch
%description doc
@@ -124,173 +160,104 @@ BuildArch: noarch
%prep
-%setup -q
+%autosetup %{?commitdate:-n %{name}-%{commit}} -p1
-%patch0 -p1 -b .onlinedoc
-%if ! 0%{?kdewebkit}
-%patch1 -p1 -b .no_kdewebkit
-%endif
-
-## upstream
-
-## upstreamable
+sed -i -e 's|/usr/bin/mysqld|%{_libexecdir}/mysqld|' src/importers/amarok/AmarokConfigWidget.cpp
%build
-mkdir %{_target_platform}
-pushd %{_target_platform}
+%if 0%{?flatpak}
+# find /app-built libmygpo-qt headers
+CXXFLAGS="$CXXFLAGS -I%{_includedir}/qt5"
+%endif
# force non-use of MYSQLCONFIG, to avoid (potential bogus) stuff from: mysql_config --libmysqld-libs
-%{cmake_kde4} .. \
+%{cmake_kf5} \
-DMYSQLCONFIG_EXECUTABLE:BOOL=OFF
-popd
-
-%make_build -C %{_target_platform}
+%{cmake_build}
%install
-make install/fast DESTDIR=%{buildroot} -C %{_target_platform}
-
-# appdata/metainfo
-%if "%{_kde4_datadir}/metainfo" != "%{_kf5_metainfodir}"
-mkdir -p %{buildroot}%{_kf5_metainfodir}
-mv %{buildroot}%{_kde4_datadir}/metainfo/*.xml \
- %{buildroot}%{_kf5_metainfodir}
-%endif
-
-# NoDisplay Amazon Downloader in menus
-desktop-file-edit \
- --set-key=NoDisplay --set-value=true \
- %{buildroot}%{_kde4_datadir}/applications/kde4/amzdownloader.desktop
+%cmake_install
-%if 0%{?fedora}
-mkdir -p %{buildroot}%{_kf5_datadir}/solid/actions/
-cp -alf \
- %{buildroot}%{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop \
- %{buildroot}%{_kf5_datadir}/solid/actions/
-mkdir -p %{buildroot}%{_kf5_datadir}/kservices5/ServiceMenus
-cp -alf \
- %{buildroot}%{_kde4_datadir}/kde4/services/ServiceMenus/amarok_append.desktop \
- %{buildroot}%{_kf5_datadir}/kservices5/ServiceMenus/
-%endif
-
-%find_lang amarok --with-kde --without-mo && mv amarok.lang amarok-doc.lang
-%find_lang amarok
-%find_lang amarokcollectionscanner_qt
-%find_lang amarokpkg && cat amarokpkg.lang >> amarok.lang
-%find_lang amarok_scriptengine_qscript && cat amarok_scriptengine_qscript.lang >> amarok.lang
-
-# unpackaged files
-rm -fv %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,core,lib,plasma,pud,ocsclient,shared,-transcoding}.so
+%find_lang amarokcollectionscanner_qt --with-qt --without-mo --all-name
+%find_lang amarok --all-name
+%find_lang amarok-doc --with-html --without-mo --all-name
%check
-%if 0%{?fedora} > 20
appstream-util validate-relax --nonet %{buildroot}%{_kf5_metainfodir}/org.kde.%{name}.appdata.xml
-%endif
-desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/*amarok.desktop
-desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/*amarok_containers.desktop
-grep '^NoDisplay' %{buildroot}%{_kde4_datadir}/applications/kde4/amzdownloader.desktop
+desktop-file-validate %{buildroot}%{_kf5_datadir}/applications/org.kde.%{name}*.desktop
%files -f amarok.lang
%doc AUTHORS ChangeLog README
%license COPYING
-%{_kde4_bindir}/amarok
-%{_kde4_bindir}/amarokpkg
-%{_kde4_bindir}/amarok_afttagger
-%if 0%{?loudmouth}
-%{_kde4_bindir}/amarokmp3tunesharmonydaemon
-%endif
-%if 0%{?fedora}
-%{_kf5_datadir}/solid/actions/amarok-play-audiocd.desktop
+%{_qt5_settingsdir}/amarok_homerc
+%{_kf5_bindir}/amarok
+%{_kf5_bindir}/amarokpkg
+%{_kf5_bindir}/amarok_afttagger
+%{_kf5_datadir}/amarok/
+%{_kf5_datadir}/applications/org.kde.amarok.desktop
+%{_kf5_datadir}/applications/org.kde.amarok_containers.desktop
+%{_kf5_datadir}/config.kcfg/amarokconfig.kcfg
+%{_kf5_datadir}/dbus-1/interfaces/*.xml
+%{_kf5_datadir}/dbus-1/services/org.kde.amarok.service
+%{_kf5_datadir}/icons/hicolor/*/*/*
+%{_kf5_datadir}/kconf_update/amarok*
+%{_kf5_datadir}/knotifications5/amarok.notifyrc
+%{_kf5_datadir}/knsrcfiles/amarok.knsrc
+%{_kf5_datadir}/kpackage/amarok/org.kde.amarok.*
+%{_kf5_datadir}/kpackage/genericqml/org.kde.amarok.context
%{_kf5_datadir}/kservices5/ServiceMenus/amarok_append.desktop
-%endif
-%{_kde4_bindir}/amzdownloader
-%{_kde4_appsdir}/amarok/
-%{_kde4_appsdir}/kconf_update/amarok*
-%{_kde4_appsdir}/desktoptheme/default/widgets/*
-%{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop
-%{_kde4_configdir}/amarok.knsrc
-%{_kde4_configdir}/amarok_homerc
-%{_kde4_configdir}/amarokapplets.knsrc
-%{_kf5_metainfodir}/org.kde.%{name}.appdata.xml
-%{_kde4_datadir}/applications/kde4/*amarok.desktop
-%{_kde4_datadir}/applications/kde4/*amarok_containers.desktop
-%{_kde4_datadir}/applications/kde4/amzdownloader.desktop
-%{_kde4_datadir}/config.kcfg/amarokconfig.kcfg
-%{_kde4_datadir}/kde4/services/amarok-containment-*.desktop
-%{_kde4_datadir}/kde4/services/amarok-context-applet-*.desktop
-%{_kde4_datadir}/kde4/services/amarok-data-engine-*.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-audiocdcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-daapcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-mysqlcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-playdarcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-umscollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-upnpcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-amarok.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-banshee.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-clementine.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-fastforward.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-itunes.desktop
-%{_kde4_datadir}/kde4/services/amarok_importer-rhythmbox.desktop
-%{_kde4_datadir}/kde4/services/amarok_service_*.desktop
-%{_kde4_datadir}/kde4/services/amarok_storage-mysqlestorage.desktop
-%{_kde4_datadir}/kde4/services/amarok_storage-mysqlserverstorage.desktop
-%{_kde4_datadir}/kde4/services/*.protocol
-%{_kde4_datadir}/kde4/services/ServiceMenus/amarok_append.desktop
-%{_kde4_datadir}/kde4/servicetypes/*.desktop
-%{_kde4_iconsdir}/hicolor/*/*/*
-%{_kde4_libdir}/kde4/amarok_collection-audiocdcollection.so
-%{_kde4_libdir}/kde4/amarok_collection-daapcollection.so
-%if 0%{?fedora}
-%{_kde4_datadir}/kde4/services/amarok_collection-ipodcollection.desktop
-%{_kde4_datadir}/kde4/services/amarok_collection-mtpcollection.desktop
-%{_kde4_libdir}/kde4/amarok_collection-ipodcollection.so
-%{_kde4_libdir}/kde4/amarok_collection-mtpcollection.so
-%endif
-%{_kde4_libdir}/kde4/amarok_collection-mysqlcollection.so
-%{_kde4_libdir}/kde4/amarok_collection-playdarcollection.so
-%{_kde4_libdir}/kde4/amarok_collection-umscollection.so
-%{_kde4_libdir}/kde4/amarok_collection-upnpcollection.so
-%{_kde4_libdir}/kde4/amarok_containment_*.so
-%{_kde4_libdir}/kde4/amarok_context_applet_*.so
-%{_kde4_libdir}/kde4/amarok_data_engine_*.so
-%{_kde4_libdir}/kde4/amarok_importer-amarok.so
-%{_kde4_libdir}/kde4/amarok_importer-banshee.so
-%{_kde4_libdir}/kde4/amarok_importer-clementine.so
-%{_kde4_libdir}/kde4/amarok_importer-fastforward.so
-%{_kde4_libdir}/kde4/amarok_importer-itunes.so
-%{_kde4_libdir}/kde4/amarok_importer-rhythmbox.so
-%{_kde4_libdir}/kde4/amarok_service_*.so
-%{_kde4_libdir}/kde4/amarok_storage-mysqlestorage.so
-%{_kde4_libdir}/kde4/amarok_storage-mysqlserverstorage.so
-%{_kde4_libdir}/kde4/kcm_amarok_service*.so
-%{_datadir}/dbus-1/interfaces/*.xml
-%{_datadir}/mime/packages/amzdownloader.xml
-
-%ldconfig_scriptlets libs
+%{_kf5_datadir}/kservices5/amarok*
+%{_kf5_datadir}/kservicetypes5/amarok*
+%{_kf5_datadir}/solid/actions/amarok-play-audiocd.desktop
+%{_kf5_metainfodir}/org.kde.amarok.*.xml
+%{_kf5_qmldir}/org/kde/amarok
+%{_kf5_qtplugindir}/amarok_collection-audiocdcollection.so
+%{_kf5_qtplugindir}/amarok_collection-daapcollection.so
+%{_kf5_qtplugindir}/amarok_collection-ipodcollection.so
+%{_kf5_qtplugindir}/amarok_collection-mtpcollection.so
+%{_kf5_qtplugindir}/amarok_collection-mysqlcollection.so
+%{_kf5_qtplugindir}/amarok_collection-playdarcollection.so
+%{_kf5_qtplugindir}/amarok_collection-umscollection.so
+%{_kf5_qtplugindir}/amarok_importer-amarok.so
+%{_kf5_qtplugindir}/amarok_importer-banshee.so
+%{_kf5_qtplugindir}/amarok_importer-clementine.so
+%{_kf5_qtplugindir}/amarok_importer-fastforward.so
+%{_kf5_qtplugindir}/amarok_importer-itunes.so
+%{_kf5_qtplugindir}/amarok_importer-rhythmbox.so
+%{_kf5_qtplugindir}/amarok_service_*.so
+%{_kf5_qtplugindir}/amarok_storage-mysqlestorage.so
+%{_kf5_qtplugindir}/amarok_storage-mysqlserverstorage.so
+%{_kf5_qtplugindir}/kcm_amarok_service*.so
%files libs
-%{_kde4_libdir}/libamarokcore.so.1*
-%{_kde4_libdir}/libamaroklib.so.1*
-%{_kde4_libdir}/libamarokocsclient.so.4*
-%{_kde4_libdir}/libamarokpud.so.1*
-%{_kde4_libdir}/libamarokshared.so.1*
-%{_kde4_libdir}/libamarok-sqlcollection.so.1*
-%{_kde4_libdir}/libamarok-transcoding.so.1*
-# private libs
-%if 0%{?fedora}
-%{_kde4_libdir}/libamarok_service_lastfm_shared.so
-%endif
-%{_kde4_libdir}/libampache_account_login.so
+%{_kf5_libdir}/libamarokcore.so.1*
+%{_kf5_libdir}/libamaroklib.so.1*
+%{_kf5_libdir}/libamarokshared.so.1*
+%{_kf5_libdir}/libamarok-sqlcollection.so.1*
+%{_kf5_libdir}/libamarok-transcoding.so.1*
+%{_kf5_libdir}/libampache_account_login.so
+%{_kf5_libdir}/libamarok-sqlcollection.so
+%{_kf5_libdir}/libamarok-transcoding.so
+%{_kf5_libdir}/libamarokcore.so
+%{_kf5_libdir}/libamaroklib.so
+%{_kf5_libdir}/libamarokpud.so
+%{_kf5_libdir}/libamarokshared.so
+%{_kf5_libdir}/libamarok_service_lastfm_config.so
+%{_kf5_libdir}/libgpodder_service_config.so
%files utils -f amarokcollectionscanner_qt.lang
-%{_kde4_bindir}/amarokcollectionscanner
+%{_kf5_bindir}/amarokcollectionscanner
%files doc -f amarok-doc.lang
%changelog
+* Tue Jan 02 2024 Yaakov Selkowitz <yselkowitz@fedoraproject.org> - 2.9.71^20231231git387c30d-1
+- Update to KF5-based git snapshot
+
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.0-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
diff --git a/fix-mygpo-qt5-compilation.patch b/fix-mygpo-qt5-compilation.patch
new file mode 100644
index 0000000..9b5d555
--- /dev/null
+++ b/fix-mygpo-qt5-compilation.patch
@@ -0,0 +1,125 @@
+diff --git a/src/services/gpodder/GpodderPodcastMeta.h b/src/services/gpodder/GpodderPodcastMeta.h
+index abe2c9f2b6..8bd28f82c1 100644
+--- a/src/services/gpodder/GpodderPodcastMeta.h
++++ b/src/services/gpodder/GpodderPodcastMeta.h
+@@ -22,7 +22,7 @@
+
+ #include "core/playlists/PlaylistProvider.h"
+ #include "core/podcasts/PodcastMeta.h"
+-#include <mygpo-qt5/ApiRequest.h>
++#include <mygpo-qt/ApiRequest.h>
+
+ namespace Podcasts {
+
+diff --git a/src/services/gpodder/GpodderPodcastRequestHandler.h b/src/services/gpodder/GpodderPodcastRequestHandler.h
+index c56ec1942f..2b65e5d5df 100644
+--- a/src/services/gpodder/GpodderPodcastRequestHandler.h
++++ b/src/services/gpodder/GpodderPodcastRequestHandler.h
+@@ -20,7 +20,7 @@
+ #define GPODDERPODCASTREQUESTHANDLER_H_
+
+ #include "GpodderServiceModel.h"
+-#include <mygpo-qt5/PodcastList.h>
++#include <mygpo-qt/PodcastList.h>
+
+ #include <QModelIndex>
+
+diff --git a/src/services/gpodder/GpodderPodcastTreeItem.h b/src/services/gpodder/GpodderPodcastTreeItem.h
+index 91323fb770..1c5fd45c0c 100644
+--- a/src/services/gpodder/GpodderPodcastTreeItem.h
++++ b/src/services/gpodder/GpodderPodcastTreeItem.h
+@@ -20,7 +20,7 @@
+ #define GPODDERPODCASTTREEITEM_H_
+
+ #include "GpodderTreeItem.h"
+-#include <mygpo-qt5/Podcast.h>
++#include <mygpo-qt/Podcast.h>
+
+ class GpodderPodcastTreeItem: public GpodderTreeItem
+ {
+diff --git a/src/services/gpodder/GpodderProvider.h b/src/services/gpodder/GpodderProvider.h
+index e6deb51868..db7a664060 100644
+--- a/src/services/gpodder/GpodderProvider.h
++++ b/src/services/gpodder/GpodderProvider.h
+@@ -23,8 +23,8 @@
+ #include "core/podcasts/PodcastProvider.h"
+ #include "core/podcasts/PodcastReader.h"
+ #include "GpodderPodcastMeta.h"
+-#include <mygpo-qt5/ApiRequest.h>
+-#include <mygpo-qt5/EpisodeActionList.h>
++#include <mygpo-qt/ApiRequest.h>
++#include <mygpo-qt/EpisodeActionList.h>
+ #include "playlistmanager/file/KConfigSyncRelStore.h"
+ #include "playlistmanager/PlaylistManager.h"
+
+diff --git a/src/services/gpodder/GpodderService.cpp b/src/services/gpodder/GpodderService.cpp
+index 6ead72cc74..0294850143 100644
+--- a/src/services/gpodder/GpodderService.cpp
++++ b/src/services/gpodder/GpodderService.cpp
+@@ -27,8 +27,8 @@
+ #include "GpodderServiceModel.h"
+ #include "GpodderServiceView.h"
+ #include "GpodderSortFilterProxyModel.h"
+-#include <mygpo-qt5/ApiRequest.h>
+-#include <mygpo-qt5/Podcast.h>
++#include <mygpo-qt/ApiRequest.h>
++#include <mygpo-qt/Podcast.h>
+ #include "playlistmanager/PlaylistManager.h"
+ #include "widgets/SearchWidget.h"
+
+diff --git a/src/services/gpodder/GpodderServiceModel.h b/src/services/gpodder/GpodderServiceModel.h
+index 08b5a559e1..e443c79b08 100644
+--- a/src/services/gpodder/GpodderServiceModel.h
++++ b/src/services/gpodder/GpodderServiceModel.h
+@@ -20,8 +20,8 @@
+ #define GPODDERSERVICEMODEL_H_
+
+ #include "GpodderTreeItem.h"
+-#include <mygpo-qt5/ApiRequest.h>
+-#include <mygpo-qt5/TagList.h>
++#include <mygpo-qt/ApiRequest.h>
++#include <mygpo-qt/TagList.h>
+ #include "NetworkAccessManagerProxy.h"
+
+ #include <QAbstractItemModel>
+diff --git a/src/services/gpodder/GpodderServiceSettings.h b/src/services/gpodder/GpodderServiceSettings.h
+index 1c3707b7ee..f519404958 100644
+--- a/src/services/gpodder/GpodderServiceSettings.h
++++ b/src/services/gpodder/GpodderServiceSettings.h
+@@ -21,7 +21,7 @@
+ #define GPODDERSERVICESETTINGS_H
+
+ #include "GpodderServiceConfig.h"
+-#include <mygpo-qt5/ApiRequest.h>
++#include <mygpo-qt/ApiRequest.h>
+
+ #include <KConfigWidgets/KCModule>
+
+diff --git a/src/services/gpodder/GpodderTagTreeItem.h b/src/services/gpodder/GpodderTagTreeItem.h
+index 63cc965d89..8941cb8fc3 100644
+--- a/src/services/gpodder/GpodderTagTreeItem.h
++++ b/src/services/gpodder/GpodderTagTreeItem.h
+@@ -20,7 +20,7 @@
+ #define GPODDERTAGTREEITEM_H_
+
+ #include "GpodderTreeItem.h"
+-#include <mygpo-qt5/Tag.h>
++#include <mygpo-qt/Tag.h>
+
+ #include <QObject>
+
+diff --git a/src/services/gpodder/GpodderTreeItem.h b/src/services/gpodder/GpodderTreeItem.h
+index 642e1cb371..ce1d4d070a 100644
+--- a/src/services/gpodder/GpodderTreeItem.h
++++ b/src/services/gpodder/GpodderTreeItem.h
+@@ -19,8 +19,8 @@
+ #ifndef GPODDERTREEITEM_H_
+ #define GPODDERTREEITEM_H_
+
+-#include <mygpo-qt5/ApiRequest.h>
+-#include <mygpo-qt5/TagList.h>
++#include <mygpo-qt/ApiRequest.h>
++#include <mygpo-qt/TagList.h>
+
+ #include <QList>
+ #include <QModelIndex>
diff --git a/port-away-from-deprecated-QDesktopWidget-functions-and-disable-missing-OSD-settings-functionalities-on-Wayland.patch b/port-away-from-deprecated-QDesktopWidget-functions-and-disable-missing-OSD-settings-functionalities-on-Wayland.patch
new file mode 100644
index 0000000..d712965
--- /dev/null
+++ b/port-away-from-deprecated-QDesktopWidget-functions-and-disable-missing-OSD-settings-functionalities-on-Wayland.patch
@@ -0,0 +1,285 @@
+From c60f5dab3729d587eb025afefaf1f5555706368d Mon Sep 17 00:00:00 2001
+From: Tuomas Nurmi <tuomas@norsumanageri.org>
+Date: Thu, 9 Mar 2023 18:07:10 +0200
+Subject: [PATCH 1/3] Port away from deprecated QDesktopWidget functions.
+
+Following the instructions on https://doc.qt.io/qt-5/qdesktopwidget-obsolete.html
+---
+ src/covermanager/CoverManager.cpp | 4 ++--
+ src/covermanager/CoverViewDialog.cpp | 3 +--
+ src/dialogs/OrganizeCollectionDialog.cpp | 4 ++--
+ src/widgets/Osd.cpp | 22 +++++++++++-----------
+ src/widgets/PixmapViewer.cpp | 6 +++---
+ 5 files changed, 19 insertions(+), 20 deletions(-)
+
+diff --git a/src/covermanager/CoverManager.cpp b/src/covermanager/CoverManager.cpp
+index e67a89416a..eb0d63f637 100644
+--- a/src/covermanager/CoverManager.cpp
++++ b/src/covermanager/CoverManager.cpp
+@@ -39,11 +39,11 @@
+
+ #include <QAction>
+ #include <QApplication>
+-#include <QDesktopWidget>
+ #include <QDialogButtonBox>
+ #include <QMenu> //showCoverMenu()
+ #include <QProgressBar>
+ #include <QPushButton>
++#include <QScreen>
+ #include <QSplitter>
+ #include <QStatusBar>
+ #include <QStringList>
+@@ -228,7 +228,7 @@ CoverManager::slotContinueConstruction() //SLOT
+
+ connect( m_progress, &CompoundProgressBar::allDone, this, &CoverManager::progressAllDone );
+
+- QSize size = QApplication::desktop()->screenGeometry( this ).size() / 1.5;
++ QSize size = this->screen()->size() / 1.5;
+ QSize sz = Amarok::config( "Cover Manager" ).readEntry( "Window Size", size );
+ resize( sz.width(), sz.height() );
+
+diff --git a/src/covermanager/CoverViewDialog.cpp b/src/covermanager/CoverViewDialog.cpp
+index bb01e1f7fb..d3a1b96f7e 100644
+--- a/src/covermanager/CoverViewDialog.cpp
++++ b/src/covermanager/CoverViewDialog.cpp
+@@ -25,7 +25,6 @@
+ #include <KLocalizedString>
+ #include <KWindowSystem>
+
+-#include <QDesktopWidget>
+ #include <QHBoxLayout>
+ #include <KConfigGroup>
+
+@@ -72,7 +71,7 @@ CoverViewDialog::zoomFactorChanged( qreal value )
+ void
+ CoverViewDialog::createViewer( const QImage &image, const QWidget *widget )
+ {
+- int screenNumber = QApplication::desktop()->screenNumber( widget );
++ int screenNumber = QApplication::screens().indexOf( widget->screen() );
+ PixmapViewer *pixmapViewer = new PixmapViewer( this, QPixmap::fromImage(image), screenNumber );
+ QHBoxLayout *layout = new QHBoxLayout( this );
+ layout->addWidget( pixmapViewer );
+diff --git a/src/dialogs/OrganizeCollectionDialog.cpp b/src/dialogs/OrganizeCollectionDialog.cpp
+index fb59c98224..cfda1f109c 100644
+--- a/src/dialogs/OrganizeCollectionDialog.cpp
++++ b/src/dialogs/OrganizeCollectionDialog.cpp
+@@ -30,9 +30,9 @@
+ #include "ui_OrganizeCollectionDialogBase.h"
+
+ #include <QApplication>
+-#include <QDesktopWidget>
+ #include <QDir>
+ #include <QPushButton>
++#include <QScreen>
+ #include <QTimer>
+
+ #include <KColorScheme>
+@@ -84,7 +84,7 @@ OrganizeCollectionWidget::OrganizeCollectionWidget( QWidget *parent )
+
+ // show some non-editable tags before and after
+ // but only if screen size is large enough (BR: 283361)
+- const QRect screenRect = QApplication::desktop()->screenGeometry();
++ const QRect screenRect = QApplication::primaryScreen()->geometry();
+ if( screenRect.width() >= 1024 )
+ {
+ m_schemaLineLayout->insertWidget( 0,
+diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
+index dc1cf722e3..062f3ceeb9 100644
+--- a/src/widgets/Osd.cpp
++++ b/src/widgets/Osd.cpp
+@@ -45,6 +45,7 @@
+ #include <QPainter>
+ #include <QPixmap>
+ #include <QRegExp>
++#include <QScreen>
+ #include <QTimeLine>
+ #include <QTimer>
+
+@@ -245,7 +246,7 @@ OSDWidget::determineMetrics( const int M )
+ // determine a sensible maximum size, don't cover the whole desktop or cross the screen
+ const QSize margin( ( M + MARGIN ) * 2, ( M + MARGIN ) * 2 ); //margins
+ const QSize image = m_cover.isNull() ? QSize( 0, 0 ) : minImageSize;
+- const QSize max = QApplication::desktop()->screen( m_screen )->size() - margin;
++ const QSize max = QApplication::screens()[ screen() ]->size() - margin;
+
+ // If we don't do that, the boundingRect() might not be suitable for drawText() (Qt issue N67674)
+ m_text.replace( QRegExp( " +\n" ), "\n" );
+@@ -311,7 +312,7 @@ OSDWidget::determineMetrics( const int M )
+ rect.adjust( -M, -M, M, M );
+
+ const QSize newSize = rect.size();
+- const QRect screen = QApplication::desktop()->screenGeometry( m_screen );
++ const QRect screenRect = QApplication::screens()[ screen() ]->geometry();
+ QPoint newPos( MARGIN, m_yOffset );
+
+ switch( m_alignment )
+@@ -320,25 +321,25 @@ OSDWidget::determineMetrics( const int M )
+ break;
+
+ case Right:
+- newPos.rx() = screen.width() - MARGIN - newSize.width();
++ newPos.rx() = screenRect.width() - MARGIN - newSize.width();
+ break;
+
+ case Center:
+- newPos.ry() = ( screen.height() - newSize.height() ) / 2;
++ newPos.ry() = ( screenRect.height() - newSize.height() ) / 2;
+
+ Q_FALLTHROUGH();
+
+ case Middle:
+- newPos.rx() = ( screen.width() - newSize.width() ) / 2;
++ newPos.rx() = ( screenRect.width() - newSize.width() ) / 2;
+ break;
+ }
+
+ //ensure we don't dip below the screen
+- if ( newPos.y() + newSize.height() > screen.height() - MARGIN )
+- newPos.ry() = screen.height() - MARGIN - newSize.height();
++ if ( newPos.y() + newSize.height() > screenRect.height() - MARGIN )
++ newPos.ry() = screenRect.height() - MARGIN - newSize.height();
+
+ // correct for screen position
+- newPos += screen.topLeft();
++ newPos += screenRect.topLeft();
+
+ return QRect( newPos, rect.size() );
+ }
+@@ -551,7 +552,7 @@ OSDPreviewWidget::mouseMoveEvent( QMouseEvent *e )
+ {
+ // Here we implement a "snap-to-grid" like positioning system for the preview widget
+
+- const QRect screenRect = QApplication::desktop()->screenGeometry( screen() );
++ const QRect screenRect = QApplication::screens()[ screen() ]->geometry();
+ const uint hcenter = screenRect.width() / 2;
+ const uint eGlobalPosX = e->globalPos().x() - screenRect.left();
+ const uint snapZone = screenRect.width() / 24;
+@@ -592,8 +593,7 @@ OSDPreviewWidget::mouseMoveEvent( QMouseEvent *e )
+ move( destination );
+
+ // compute current Position && Y-offset
+- QDesktopWidget *desktop = QApplication::desktop();
+- const int currentScreen = desktop->screenNumber( pos() );
++ const int currentScreen = QGuiApplication::screens().indexOf( QGuiApplication::screenAt( pos() ) );
+
+ // set new data
+ OSDWidget::setScreen( currentScreen );
+diff --git a/src/widgets/PixmapViewer.cpp b/src/widgets/PixmapViewer.cpp
+index 158540f541..332dbc5d5e 100644
+--- a/src/widgets/PixmapViewer.cpp
++++ b/src/widgets/PixmapViewer.cpp
+@@ -21,11 +21,11 @@
+
+ #include <QApplication>
+
+-#include <QDesktopWidget>
+ #include <QMouseEvent>
+ #include <QLabel>
+ #include <QPixmap>
+ #include <QPainter>
++#include <QScreen>
+ #include <QWheelEvent>
+
+
+@@ -35,8 +35,8 @@ PixmapViewer::PixmapViewer( QWidget *parent, const QPixmap &pix, int screenNumbe
+ {
+ m_zoomFactor = 1.0; // initial zoom
+
+- int screenWidth = QApplication::desktop()->availableGeometry( screenNumber ).width();
+- int screenHeight = QApplication::desktop()->availableGeometry( screenNumber ).height();
++ int screenWidth = QApplication::screens()[ screenNumber ]->availableGeometry().width();
++ int screenHeight = QApplication::screens()[ screenNumber ]->availableGeometry().height();
+ if( screenWidth < m_pixmap.width() || screenHeight < m_pixmap.height() )
+ {
+ qreal zoomFactorX = qreal(screenWidth) / m_pixmap.width();
+--
+GitLab
+
+
+From b95c439ebba30ba257ba75d060b237a293415ea8 Mon Sep 17 00:00:00 2001
+From: Tuomas Nurmi <tuomas@norsumanageri.org>
+Date: Sat, 11 Mar 2023 15:22:18 +0200
+Subject: [PATCH 2/3] Disable OSD options not available on Wayland.
+
+---
+ src/configdialog/dialogs/NotificationsConfig.cpp | 6 +++++-
+ src/widgets/Osd.cpp | 8 ++++++--
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/src/configdialog/dialogs/NotificationsConfig.cpp b/src/configdialog/dialogs/NotificationsConfig.cpp
+index 0c16fdcb17..1c3387206a 100644
+--- a/src/configdialog/dialogs/NotificationsConfig.cpp
++++ b/src/configdialog/dialogs/NotificationsConfig.cpp
+@@ -51,7 +51,11 @@ NotificationsConfig::NotificationsConfig( Amarok2ConfigDialog* parent )
+ #endif
+
+ // Enable/disable the translucency option depending on availability of desktop compositing
+- kcfg_OsdUseTranslucency->setEnabled( KWindowSystem::compositingActive() );
++ // As opacity functionality is not available on Wayland at least with current implementation, don't enable option there
++ kcfg_OsdUseTranslucency->setEnabled( !KWindowSystem::isPlatformWayland() && KWindowSystem::compositingActive() );
++
++ // Also disable other functionalities not (yet?) available on Wayland
++ kcfg_OsdScreen->setEnabled( !KWindowSystem::isPlatformWayland() );
+
+ connect( m_osdPreview, &OSDPreviewWidget::positionChanged, this, &NotificationsConfig::slotPositionChanged );
+
+diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
+index 062f3ceeb9..e29a1b2347 100644
+--- a/src/widgets/Osd.cpp
++++ b/src/widgets/Osd.cpp
+@@ -509,7 +509,9 @@ OSDPreviewWidget::OSDPreviewWidget( QWidget *parent )
+ setDuration( 0 );
+ setImage( Amarok::icon() );
+ setTranslucent( AmarokConfig::osdUseTranslucency() );
+- setText( i18n( "On-Screen-Display preview\nDrag to reposition" ) );
++ // Drag-positioning not available on Wayland, so let's hide any untrue ideas about dragging
++ // TODO maybe one day Wayland will be first-class OSD citizen
++ setText( KWindowSystem::isPlatformWayland() ? i18n ( "Preview" ) : i18n( "On-Screen-Display preview\nDrag to reposition" ) );
+ }
+
+ void
+@@ -517,7 +519,9 @@ OSDPreviewWidget::mousePressEvent( QMouseEvent *event )
+ {
+ m_dragYOffset = event->pos();
+
+- if( event->button() == Qt::LeftButton && !m_dragging )
++ // As we can't position OSD on Wayland at the moment, and grabbing mouse doesn't quite work
++ // either, let's disable this for now.
++ if( !KWindowSystem::isPlatformWayland() && event->button() == Qt::LeftButton && !m_dragging )
+ {
+ grabMouse( Qt::SizeAllCursor );
+ m_dragging = true;
+--
+GitLab
+
+
+From d70177ab4a57c3aecf63cfd3937044c575ee1a6a Mon Sep 17 00:00:00 2001
+From: Tuomas Nurmi <tuomas@norsumanageri.org>
+Date: Sat, 11 Mar 2023 17:58:59 +0200
+Subject: [PATCH 3/3] Remove obsolete ifdef.
+
+Apparently Q_WS's are not defined any more. Turns out, if run, the setType
+actually makes the OSD positioning to go totally bonkers on X11, so let's just
+remove it.
+---
+ src/widgets/Osd.cpp | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
+index e29a1b2347..1eee135be4 100644
+--- a/src/widgets/Osd.cpp
++++ b/src/widgets/Osd.cpp
+@@ -87,10 +87,6 @@ OSDWidget::OSDWidget( QWidget *parent, const char *name )
+ setObjectName( name );
+ setFocusPolicy( Qt::NoFocus );
+
+- #ifdef Q_WS_X11
+- KWindowSystem::setType( winId(), NET::Notification );
+- #endif
+-
+ m_timer->setSingleShot( true );
+ connect( m_timer, &QTimer::timeout, this, &OSDWidget::hide );
+
+--
+GitLab
+
diff --git a/refresh-deprecated-codepaths.patch b/refresh-deprecated-codepaths.patch
new file mode 100644
index 0000000..436f785
--- /dev/null
+++ b/refresh-deprecated-codepaths.patch
@@ -0,0 +1,854 @@
+From 33780eaddae9905a36ac96882c1ff1416a508082 Mon Sep 17 00:00:00 2001
+From: Tuomas Nurmi <tuomas@norsumanageri.org>
+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 <QMutex>
++#include <QRecursiveMutex>
+ #include <QObject>
+ #include <QPointer>
+ #include <QSemaphore>
+@@ -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 <QAtomicInt>
+ #include <QByteArray>
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QReadWriteLock>
+ #include <QString>
+ #include <QStringList>
+@@ -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 <mysql.h>
+
+
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QString>
+
+ #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 <QList>
+ #include <QMetaType>
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QPixmap>
+ #include <QSet>
+ #include <QSharedData>
+@@ -128,7 +128,7 @@ namespace Playlists
+
+ private:
+ QSet<PlaylistPtr> 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 <KConfigCore/KConfigGroup>
+
+ #include <QApplication>
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QObject>
+
+ #include <iostream>
+@@ -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 <QDebug>
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QVariant>
+
+ // 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 <QMutex>
++#include <QRecursiveMutex>
+
+ 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 <QList>
+-#include <QMutex>
++#include <QRecursiveMutex>
+ #include <QPointer>
+ #include <QSharedPointer>
+ #include <QSqlDatabase>
+@@ -130,7 +130,7 @@ private:
+
+ Qt::ConnectionType blockingConnectionType() const;
+
+- QMutex m_apiMutex;
++ QRecursiveMutex m_apiMutex;
+ bool m_openTransaction;
+ QList<QVariantList> 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 <QMutex>
++#include <QRecursiveMutex>
+
+ 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<TitleArtistPair> > 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 <QList>
+ #include <QMap>
+ #include <QMouseEvent>
+-#include <QMutex>
++#include <QRecursiveMutex>
+
+ /**
+ * 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 <tuomas@norsumanageri.org>
+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 <tuomas@norsumanageri.org>
+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 <tuomas@norsumanageri.org>
+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 <tuomas@norsumanageri.org>
+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<QObject*>::of(&QSignalMapper::mapped),
++ connect( mapper, QOverload<QObject*>::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<const QString&>::of(&QSignalMapper::mapped),
++ connect( adderMapper, QOverload<const QString&>::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 <tuomas@norsumanageri.org>
+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 <tuomas@norsumanageri.org>
+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 <QDir>
+ #include <QFile>
+ #include <QFileInfo>
++#include <QStorageInfo>
+
+-#include <KDiskFreeSpaceInfo>
+ #include <KFileItem>
+ #include <KJob>
+ #include <KIO/DeleteJob>
+@@ -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 <KDiskFreeSpaceInfo>
+ #include <solid/device.h>
+ #include <solid/predicate.h>
+ #include <solid/storageaccess.h>
+@@ -47,6 +46,7 @@
+ #include <KConfigGroup>
+ #include <QDialogButtonBox>
+ #include <QPushButton>
++#include <QStorageInfo>
+ #include <QVBoxLayout>
+
+
+@@ -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 <KDiskFreeSpaceInfo>
+-
+ 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 <Solid/StorageDrive>
+ #include <Solid/StorageVolume>
+
++#include <QStorageInfo>
+ #include <QThread>
+ #include <QTimer>
+ #include <QUrl>
+
+ #include <KConfigGroup>
+-#include <KDiskFreeSpaceInfo>
+
+
+ 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 <tuomas@norsumanageri.org>
+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
+
diff --git a/revert.patch b/revert.patch
new file mode 100644
index 0000000..bd4bb89
--- /dev/null
+++ b/revert.patch
@@ -0,0 +1,31 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5d9b0944e0..99c22bda33 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -188,8 +188,13 @@ if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug )
+ add_definitions(-Wall -Wextra)
+ endif()
+
++# this needs to be here because also code in shared/ needs config.h. This is also the
++# reason why various checks are above why they belong under if( WITH_PLAYER )
++configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h )
++
+ add_subdirectory( data )
+ add_subdirectory( images )
++add_subdirectory( shared )
+
+ if( WITH_PLAYER )
+ find_package(X11)
+@@ -309,12 +314,6 @@ if( WITH_PLAYER )
+
+ endif()
+
+-# this needs to be here because also code in shared/ needs config.h. This is also the
+-# reason why various checks are above why they belong under if( WITH_PLAYER )
+-configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h )
+-
+-add_subdirectory( shared )
+-
+ if( WITH_UTILITIES )
+ add_subdirectory( utilities )
+ endif()
diff --git a/sources b/sources
index 291ed11..283aa6a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (amarok-2.9.0.tar.xz) = 6db9a2635725c87280956ad0c4ca199b585c65c688fa5199c6e6ebe238548f47ffa4e465fde8edb415f159828ec5102d394dbfcdd15ae9999f9c378e7bce8846
+SHA512 (amarok-387c30de482522774c28dc02c2636cd41c8334e9.tar.bz2) = b474d591ba106002e202624c76c8ecde1014061c40a155875ecc65c0a53493d23af565e3facabc9de3403e735044862dc53b7d9bd85cb61d1ee8212082734af4
reply other threads:[~2026-07-06 18:05 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178336114914.1.949567342870549161.rpms-amarok-f9957dab1c73@fedoraproject.org \
--to=yselkowi@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox