diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ message(STATUS "${CMAKE_MODULE_PATH}") ############### +find_package(PkgConfig REQUIRED) find_package(ECM 1.7.0 REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) set(CMAKE_AUTOMOC ON) @@ -27,9 +28,10 @@ include(ECMSetupVersion) include(ECMAddTests) include(ECMAddAppIcon) +include(FindPkgConfig) -find_package( Qt5 REQUIRED COMPONENTS Core DBus Widgets Test Gui Svg Xml Script Sql Quick Qml ScriptTools WebKitWidgets) -find_package( KF5 REQUIRED COMPONENTS CoreAddons Solid KDELibs4Support Codecs I18n ThreadWeaver Plasma PlasmaQuick KCMUtils NewStuff TextEditor GlobalAccel KIO NotifyConfig Archive DNSSD) +find_package( Qt5 REQUIRED COMPONENTS Core DBus Gui Quick QuickWidgets Qml Script ScriptTools Sql Svg Test Widgets Xml ) +find_package( KF5 REQUIRED COMPONENTS Archive Codecs CoreAddons DBusAddons DNSSD GlobalAccel GuiAddons I18n IconThemes KCMUtils KIO NewStuff Notifications NotifyConfig Plasma PlasmaQuick Solid TextEditor ThreadWeaver ) ############### option(WITH_UTILITIES "Enable building of utilities" ON) @@ -85,8 +87,8 @@ ############### -# Needed to conditionally build tests and gui -if(KDE4_BUILD_TESTS) +#Needed to conditionally build tests and gui +if(BUILD_TESTING) add_definitions(-DDEBUG) endif() @@ -106,30 +108,16 @@ ${CMAKE_CURRENT_BINARY_DIR}/shared ) - - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") # Require C++11 +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # Require C++11 # WORKAROUND for Clang bug: http://llvm.org/bugs/show_bug.cgi?id=15651 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-delayed-template-parsing") endif () -include( KDE4Defaults ) -include( MacroBoolTo01 ) -include( MacroLibrary ) -add_definitions( ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} ) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) -#TODO KF5:This is to disable noisy depreciation warnings in initial Qt5/KF5 build porting phase due to the dependency on KF5::KDELibs4Support. Remove this when porting away from KF5::KDELibs4Support -if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC) - add_definitions(-Wno-deprecated -Wno-deprecated-declarations) -endif () - -# QCA2 is required for the Script Updater -find_package(Qca-qt5 2.1.0) - find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE) include_directories(BEFORE ${PHONON_INCLUDES}) @@ -140,13 +128,12 @@ set( LIBLASTFM_FOUND TRUE ) endif() endif() -macro_bool_to_01( LIBLASTFM_FOUND HAVE_LIBLASTFM ) -find_package( FFmpeg ) - -if( FFMPEG_FOUND ) - find_package( LibOFA ) - macro_bool_to_01( LIBOFA_FOUND HAVE_LIBOFA ) +find_package( LibOFA ) +if( LIBOFA_FOUND ) + PKG_SEARCH_MODULE(AVCODEC libavcodec) + PKG_SEARCH_MODULE(AVFORMAT libavformat) + PKG_SEARCH_MODULE(AVUTIL libavutil) endif() string( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER ) @@ -179,8 +166,6 @@ find_package(ZLIB REQUIRED) set_package_properties( ZLIB PROPERTIES DESCRIPTION "zlib" TYPE REQUIRED ) - set_package_properties( QCA2 PROPERTIES DESCRIPTION "Qt Cryptographic Architecture" URL "http://delta.affinix.com/qca/" TYPE OPTIONAL ) - # QJson is required for the PlaydarCollection find_package(QJSON) set_package_properties( QJSON PROPERTIES DESCRIPTION "Qt JSON Parser used for the Playdar Collection" URL "http://qjson.sourceforge.net/" TYPE OPTIONAL ) @@ -191,9 +176,7 @@ set( LIBLASTFM_MIN_VERSION "1.0.3" ) set_package_properties( LIBLASTFM PROPERTIES DESCRIPTION "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" URL "http://cdn.last.fm/client/liblastfm-${LIBLASTFM_MIN_VERSION}.tar.gz" TYPE OPTIONAL ) - set_package_properties( FFMPEG PROPERTIES DESCRIPTION "Libraries and tools for handling multimedia data" URL "http://www.ffmpeg.org/" TYPE OPTIONAL ) - - if( FFMPEG_FOUND ) + if( LIBOFA_FOUND ) set_package_properties(LIBOFA PROPERTIES DESCRIPTION "Enable MusicDNS service" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL) endif() @@ -243,9 +226,9 @@ endif() if( WITH_IPOD OR WITH_MP3Tunes ) - find_package(GObject) + pkg_search_module(GOBJECT REQUIRED gobject-2.0) set_package_properties( GOBJECT PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes." URL "http://www.gtk.org" TYPE OPTIONAL ) - find_package(GLIB2) + pkg_search_module(GLIB2 glib-2.0) set_package_properties( GLIB2 PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes" URL "http://www.gtk.org" TYPE OPTIONAL ) endif() @@ -255,10 +238,9 @@ find_package(PythonInterp) set_package_properties( PYTHON PROPERTIES DESCRIPTION "Required for generating the autocompletion file for the script console" URL "https://www.python.org" TYPE OPTIONAL ) - - if( KDE4_BUILD_TESTS AND NOT WIN32 ) + if( BUILD_TESTING AND NOT WIN32 ) enable_testing() - add_subdirectory( tests ) +# add_subdirectory( tests ) endif() add_subdirectory( src ) diff --git a/shared/CMakeLists.txt b/shared/CMakeLists.txt --- a/shared/CMakeLists.txt +++ b/shared/CMakeLists.txt @@ -31,6 +31,8 @@ ${amarokshared_collectionscanner_SRCS} ${amarokshared_tag_helpers_SRCS} ) +target_include_directories( amarokshared PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) + include_directories( ${TAGLIB_INCLUDES} ) add_definitions( ${TAGLIB_CFLAGS} ) target_link_libraries( amarokshared ${TAGLIB_LIBRARIES} KF5::Codecs) @@ -41,7 +43,6 @@ endif() target_link_libraries( amarokshared - KF5::KDELibs4Support Qt5::Core Qt5::Gui # for QImage, ... ) diff --git a/shared/MetaTagLib.cpp b/shared/MetaTagLib.cpp --- a/shared/MetaTagLib.cpp +++ b/shared/MetaTagLib.cpp @@ -39,8 +39,8 @@ #include #include #include +#include #include -#include #include "FileTypeResolver.h" #include "MetaReplayGain.h" @@ -113,13 +113,13 @@ { //md5 has size of file already added for some little extra randomness for the hash qsrand( QTime::currentTime().msec() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); - md5->addData( QString::number( qrand() ).toAscii() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); + md5->addData( QString::number( qrand() ).toLatin1() ); } TagLib::ByteVector diff --git a/shared/amarokshared_export.h b/shared/amarokshared_export.h --- a/shared/amarokshared_export.h +++ b/shared/amarokshared_export.h @@ -17,16 +17,16 @@ #ifndef AMAROKSHARED_EXPORT_H #define AMAROKSHARED_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROKSHARED_EXPORT # ifdef MAKE_AMAROKSHARED_LIB /* We are building this library */ -# define AMAROKSHARED_EXPORT KDE_EXPORT +# define AMAROKSHARED_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROKSHARED_EXPORT KDE_IMPORT +# define AMAROKSHARED_EXPORT Q_DECL_IMPORT # endif #endif // AMAROKSHARED_EXPORT diff --git a/shared/tag_helpers/ID3v2TagHelper.cpp b/shared/tag_helpers/ID3v2TagHelper.cpp --- a/shared/tag_helpers/ID3v2TagHelper.cpp +++ b/shared/tag_helpers/ID3v2TagHelper.cpp @@ -198,7 +198,7 @@ continue; TagLib::String owner = uidFieldName( uidPair.first ); - TagLib::ByteVector uid( uidPair.second.toAscii().data() ); + TagLib::ByteVector uid( uidPair.second.toLatin1().data() ); TagLib::ID3v2::FrameList list = m_tag->frameList(); for( TagLib::ID3v2::FrameList::ConstIterator it = list.begin(); it != list.end(); ++it ) diff --git a/src/ActionClasses.h b/src/ActionClasses.h --- a/src/ActionClasses.h +++ b/src/ActionClasses.h @@ -21,12 +21,10 @@ #include #include -#include + #include -#include +#include -#include -#include #include class KActionCollection; diff --git a/src/ActionClasses.cpp b/src/ActionClasses.cpp --- a/src/ActionClasses.cpp +++ b/src/ActionClasses.cpp @@ -20,25 +20,26 @@ #include "ActionClasses.h" - #include "App.h" #include "EngineController.h" +#include "KNotificationBackend.h" #include "MainWindow.h" +#include "aboutdialog/OcsData.h" #include "amarokconfig.h" #include #include "core/support/Amarok.h" #include "core/support/Debug.h" #include "playlist/PlaylistActions.h" #include "playlist/PlaylistModelStack.h" #include "widgets/Osd.h" -#include "KNotificationBackend.h" + +#include #include #include -#include +#include #include #include -#include extern OcsData ocsData; @@ -439,7 +440,6 @@ this, &StopAction::stopped ); connect( engine, &EngineController::trackPlaying, this, &StopAction::playing ); - } void @@ -460,7 +460,6 @@ The::engineController()->stop(); } - ////////////////////////////////////////////////////////////////////////////////////////// // StopPlayingAfterCurrentTrackAction ////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/AmarokMimeData.h b/src/AmarokMimeData.h --- a/src/AmarokMimeData.h +++ b/src/AmarokMimeData.h @@ -22,12 +22,14 @@ #include "core/meta/forward_declarations.h" #include "core/playlists/Playlist.h" #include "core/podcasts/PodcastMeta.h" -#include "core/collections/QueryMaker.h" #include -#include #include +namespace Collections { + class QueryMaker; +} + class AMAROK_EXPORT AmarokMimeData : public QMimeData { Q_OBJECT diff --git a/src/AmarokMimeData.cpp b/src/AmarokMimeData.cpp --- a/src/AmarokMimeData.cpp +++ b/src/AmarokMimeData.cpp @@ -16,6 +16,7 @@ #include "AmarokMimeData.h" +#include "core/collections/QueryMaker.h" #include "core/support/Debug.h" #include diff --git a/src/AmarokProcess.h b/src/AmarokProcess.h --- a/src/AmarokProcess.h +++ b/src/AmarokProcess.h @@ -51,7 +51,7 @@ virtual void setupChildProcess(); private Q_SLOTS: - void finished(); + void finished(); // TODO: This has the same name as a signal in QProcess. Rename it. void readyReadStandardOutput(); void readyReadStandardError(); diff --git a/src/AmarokSharedPointer.h b/src/AmarokSharedPointer.h new file mode 100644 --- /dev/null +++ b/src/AmarokSharedPointer.h @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2017 Malte Veerman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifndef AMAROKSHAREDPOINTER_H +#define AMAROKSHAREDPOINTER_H + +#include +#include + +template +class AmarokSharedPointer +{ +public: + inline AmarokSharedPointer() : d(Q_NULLPTR) {} + inline explicit AmarokSharedPointer(T *t) : d(t) { if (d) d->ref.ref(); } + inline AmarokSharedPointer(const AmarokSharedPointer& other) : d(other.d) { if (d) d->ref.ref(); } + inline ~AmarokSharedPointer() { if (d && !d->ref.deref()) delete d; } + + AmarokSharedPointer& operator=(const AmarokSharedPointer& other) + { + if (d != other.d) + { + if (d && !d->ref.deref()) + delete d; + d = other.d; + if (d) + d->ref.ref(); + } + return *this; + } + AmarokSharedPointer& operator=(T *t) + { + if (d != t) + { + if (d && !d->ref.deref()) + delete d; + d = t; + if (d) + d->ref.ref(); + } + return *this; + } + inline bool operator==(const AmarokSharedPointer& other) const { return d == other.d; } + inline bool operator!=(const AmarokSharedPointer& other) const { return d != other.d; } + inline bool operator<(const AmarokSharedPointer& other) const { return std::less()(d, other.d); } + inline const T& operator*() const { Q_ASSERT(d); return *d; } + inline T& operator*() { Q_ASSERT(d); return *d; } + inline const T* operator->() const { Q_ASSERT(d); return d; } + inline T* operator->() { Q_ASSERT(d); return d; } + inline operator bool() const { return ( d != Q_NULLPTR ); } + + inline bool isNull() const { return d == Q_NULLPTR; } + inline int count() const { return d ? d->ref.load() : 0; } + inline T* data() const { return d; } + inline void clear() { if (d && !d->ref.deref()) delete d; d = Q_NULLPTR; } + + template + static AmarokSharedPointer staticCast(const AmarokSharedPointer& o) + { + return AmarokSharedPointer(static_cast(o.data())); + } + template + static AmarokSharedPointer dynamicCast(const AmarokSharedPointer& o) + { + return AmarokSharedPointer(dynamic_cast(o.data())); + } + template + static AmarokSharedPointer qobjectCast(const AmarokSharedPointer& o) + { + return AmarokSharedPointer(qobject_cast(o.data())); + } + +private: + T *d; +}; + +template +inline uint qHash( const AmarokSharedPointer &p, uint seed ) { return qHash( p.data(), seed ); } + +#endif // AMAROKSHAREDPOINTER_H diff --git a/src/App.h b/src/App.h --- a/src/App.h +++ b/src/App.h @@ -17,19 +17,12 @@ #ifndef AMAROK_APP_H #define AMAROK_APP_H -#include "MainWindow.h" #include "amarok_export.h" -#include -#include "aboutdialog/OcsData.h" -#include -#include //baseclass -#include +#include -#include -#include -#include -#include +#include +#include namespace Amarok { class TrayIcon; @@ -39,44 +32,38 @@ class ScriptConsole; } -class OcsData; - -namespace KIO { class Job; } +namespace KIO { + class Job; +} -class KJob; class MediaDeviceManager; +class MainWindow; +class QCommandLineParser; +class QUrl; class AMAROK_EXPORT App : public QApplication { Q_OBJECT public: App(int &argc, char **argv); - ~App(); + ~App(); static App *instance() { return static_cast( qApp ); } - void setUniqueInstance( bool isUnique ) { m_isUniqueInstance = isUnique; } - bool isNonUniqueInstance() const { return m_isUniqueInstance; } void continueInit(); Amarok::TrayIcon* trayIcon() const { return m_tray; } void handleCliArgs(const QString &cwd); void initCliArgs(QCommandLineParser *parsers); virtual int newInstance(); - inline MainWindow *mainWindow() const { return m_mainWindow.data(); } - - // FRIENDS - friend class MainWindow; //requires access to applySettings() + inline QPointer mainWindow() const { return m_mainWindow; } Q_SIGNALS: void prepareToQuit(); void settingsChanged(); - private Q_SLOTS: - - public Q_SLOTS: void activateRequested(const QStringList & arguments, const QString & cwd); void applySettings(); @@ -97,17 +84,16 @@ void handleFirstRun(); // ATTRIBUTES - bool m_isUniqueInstance; - QWeakPointer m_mainWindow; + QPointer m_mainWindow; Amarok::TrayIcon *m_tray; MediaDeviceManager *m_mediaDeviceManager; - QWeakPointer m_scriptConsole; + QPointer m_scriptConsole; QCommandLineParser *m_args; QString m_cwd; - static QStringList s_delayedAmarokUrls; + QStringList s_delayedAmarokUrls; }; -#define pApp static_cast(qApp) +#define pApp static_cast(QCoreApplication::instance()) #endif // AMAROK_APP_H diff --git a/src/App.cpp b/src/App.cpp --- a/src/App.cpp +++ b/src/App.cpp @@ -19,10 +19,12 @@ #include #include "EngineController.h" #include "KNotificationBackend.h" +#include "MainWindow.h" #include "PluginManager.h" #include "scripting/scriptmanager/ScriptManager.h" #include "TrayIcon.h" #include "amarokconfig.h" +#include "aboutdialog/OcsData.h" #include "amarokurls/AmarokUrl.h" #include "configdialog/ConfigDialog.h" #include "configdialog/dialogs/PlaybackConfig.h" @@ -62,41 +64,34 @@ #include -#include -#include //initCliArgs() #include #include //slotConfigToolbars() -#include #include -#include #include #include #include #include //slotConfigShortcuts() -#include -#include #include #include #include #include +#include #include -#include // for Qt::escape() #include //showHyperThreadingWarning() #include #ifdef Q_WS_MAC #include extern void setupEventHandler_mac(SRefCon); #endif -QStringList App::s_delayedAmarokUrls = QStringList(); AMAROK_EXPORT OcsData ocsData( "opendesktop" ); App::App(int &argc, char **argv) : QApplication(argc, argv) - , m_args(nullptr) , m_tray(nullptr) + , m_args(nullptr) { DEBUG_BLOCK PERF_LOG( "Begin Application ctor" ) @@ -209,12 +204,12 @@ #ifndef Q_WS_MAC // do even if trayicon is not shown, it is safe Amarok::config().writeEntry( "HiddenOnExit", mainWindow()->isHidden() ); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); #else // for some reason on OS X the main window always reports being hidden // this means if you have the tray icon enabled, amarok will always open minimized Amarok::config().writeEntry( "HiddenOnExit", false ); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); #endif ScriptManager::destroy(); @@ -225,10 +220,9 @@ Amarok::OSD::destroy(); Amarok::KNotificationBackend::destroy(); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); - //mainWindow()->deleteBrowsers(); - delete mainWindow(); + delete m_mainWindow.data(); Playlist::Controller::destroy(); Playlist::ModelStack::destroy(); @@ -408,7 +402,8 @@ if( AmarokConfig::enableScriptConsole() && !m_scriptConsole ) m_scriptConsole = ScriptConsoleNS::ScriptConsole::instance(); else if( !AmarokConfig::enableScriptConsole() && m_scriptConsole ) - m_scriptConsole.data()->deleteLater();} + m_scriptConsole.data()->deleteLater(); +} //SLOT void App::applySettingsFirstTime() @@ -445,6 +440,7 @@ || m_args->isSet( "queue" ) || Amarok::config().readEntry( "AppendAsDefault", false ); + AmarokConfig::instance( "amarokrc" ); new Amarok::DefaultApplicationController( this ); Amarok::Components::applicationController()->start(); @@ -458,7 +454,7 @@ PERF_LOG( "Done creating MainWindow" ) if( AmarokConfig::showTrayIcon() ) - m_tray = new Amarok::TrayIcon( mainWindow() ); + m_tray = new Amarok::TrayIcon( m_mainWindow ); PERF_LOG( "Creating DBus handlers" ) new Mpris1::RootHandler(); @@ -473,7 +469,7 @@ //Reason: in ~App we have to call the deleteBrowsers method or else we run afoul of refcount foobar in KHTMLPart //But if you click the X (not Action->Quit) it automatically kills MainWindow because KMainWindow sets this //for us as default (bad KMainWindow) - mainWindow()->setAttribute( Qt::WA_DeleteOnClose, false ); + m_mainWindow->setAttribute( Qt::WA_DeleteOnClose, false ); //init playlist window as soon as the database is guaranteed to be usable // Create engine, show TrayIcon etc. @@ -496,7 +492,7 @@ if( !Amarok::config().readEntry( "HiddenOnExit", false ) || !AmarokConfig::showTrayIcon() ) { PERF_LOG( "showing main window again" ) - m_mainWindow.data()->show(); + m_mainWindow->show(); PERF_LOG( "after showing mainWindow" ) } @@ -556,6 +552,7 @@ { //KConfigDialog didn't find an instance of this dialog, so lets create it : dialog = new Amarok2ConfigDialog( mainWindow(), "settings", AmarokConfig::self() ); + connect( dialog, &KConfigDialog::settingsChanged, this, &App::applySettings ); } @@ -570,7 +567,7 @@ void App::slotConfigShortcuts() { KShortcutsDialog::configure( Amarok::actionCollection(), KShortcutsEditor::LetterShortcutsAllowed, mainWindow() ); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); } KIO::Job *App::trashFiles( const QList &files ) @@ -632,18 +629,17 @@ void App::handleFirstRun() { - KConfigGroup config = KGlobal::config()->group( "General" ); + KConfigGroup config = Amarok::config( "General" ); if( !config.readEntry( "First Run", true ) ) return; - const QUrl musicUrl = QUrl::fromUserInput(QDesktopServices::storageLocation( QDesktopServices::MusicLocation )); - const QString musicDir = musicUrl.adjusted(QUrl::StripTrailingSlash).toLocalFile(); + const QString musicDir = QStandardPaths::writableLocation( QStandardPaths::MusicLocation ); const QDir dir( musicDir ); int result = KMessageBox::No; if( dir.exists() && dir.isReadable() ) { - result = KMessageBox::questionYesNoCancel( mainWindow(), i18n( "A music path, " + result = KMessageBox::questionYesNoCancel( m_mainWindow, i18n( "A music path, " "%1, is set in System Settings.\nWould you like to use that as a " "collection folder?", musicDir ) ); } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,7 +28,6 @@ add_subdirectory( core ) add_subdirectory( core-impl/collections ) add_subdirectory( core-impl/storage/sql ) -#don't use our own libplasma anymore, but still pick up our applets/engines/containments add_subdirectory( context ) #add_subdirectory( services ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. add_subdirectory( scripting/scripts ) @@ -279,30 +278,28 @@ # CONTEXT ##################################################################### set( libcontextview_SRCS - context/Applet.cpp - context/Containment.cpp - context/ContextObserver.cpp - context/ContextScene.cpp - context/ContextDock.cpp - context/ContextView.cpp +# context/AmarokContextPackageStructure.cpp +# context/AppletLoader.cpp +# context/AppletModel.cpp +# context/ContextDock.cpp +# context/ContextView.cpp context/LyricsManager.cpp - context/ToolbarView.cpp - context/toolbar/AppletItemOverlay.cpp - context/toolbar/AppletToolbar.cpp - context/toolbar/AppletToolbarAddItem.cpp - context/toolbar/AppletToolbarAppletItem.cpp - context/toolbar/AppletToolbarBase.cpp - context/toolbar/AppletToolbarConfigItem.cpp - context/widgets/AppletHeader.cpp - context/widgets/RatingWidget.cpp - context/widgets/TextScrollingWidget.cpp - context/widgets/DropPixmapItem.cpp - context/widgets/ToolBoxIcon.cpp - # context/widgets/ContainmentArrow.cpp - # context/widgets/ContainmentSelectionLayer.cpp - context/widgets/appletexplorer/AppletExplorer.cpp - context/widgets/appletexplorer/AppletIcon.cpp - context/widgets/RecentlyPlayedListWidget.cpp +# context/ToolbarView.cpp +# context/toolbar/AppletItemOverlay.cpp +# context/toolbar/AppletToolbarAddItem.cpp +# context/toolbar/AppletToolbarAppletItem.cpp +# context/toolbar/AppletToolbarBase.cpp +# context/toolbar/AppletToolbarConfigItem.cpp +# context/widgets/AppletHeader.cpp +# context/widgets/RatingWidget.cpp +# context/widgets/TextScrollingWidget.cpp +# context/widgets/DropPixmapItem.cpp +# context/widgets/ToolBoxIcon.cpp +# context/widgets/ContainmentArrow.cpp +# context/widgets/ContainmentSelectionLayer.cpp +# context/widgets/appletexplorer/AppletExplorer.cpp +# context/widgets/appletexplorer/AppletIcon.cpp +# context/widgets/RecentlyPlayedListWidget.cpp ) ##################################################################### @@ -473,6 +470,7 @@ scripting/scriptengine/AmarokStatusbarScript.cpp scripting/scriptengine/AmarokStreamItemScript.cpp scripting/scriptengine/AmarokWindowScript.cpp + scripting/scriptengine/AmarokScriptXml.cpp scripting/scriptengine/ScriptImporter.cpp scripting/scriptengine/ScriptingDefines.cpp scripting/scriptengine/exporters/CollectionTypeExporter.cpp @@ -603,7 +601,7 @@ set(amaroklib_LIB_SRCS ${libscriptableservice_SRCS} ${libbrowserframework_SRCS} -# ${libcontextview_SRCS} #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. + ${libcontextview_SRCS} ${libcollectionbrowser_SRCS} ${libconfigdialog_SRCS} ${libplaylist_SRCS} @@ -710,6 +708,7 @@ widgets/AlbumBreadcrumbWidget.cpp widgets/AmarokDockWidget.cpp widgets/AnimatedLabelStack.cpp + widgets/BoxWidget.cpp widgets/BreadcrumbItemButton.cpp widgets/ClearSpinBox.cpp widgets/CoverLabel.cpp @@ -763,7 +762,7 @@ set( EXTRA_LIBS ${LIBLASTFM_LIBRARY} ) endif() -if( LIBOFA_FOUND ) +if( LIBOFA_FOUND AND AVCODEC_FOUND AND AVFORMAT_FOUND AND AVUTIL_FOUND ) add_definitions( ${AVCODEC_DEFINITIONS} ${AVFORMAT_DEFINITIONS} @@ -869,26 +868,30 @@ Phonon::phonon4qt5 KF5::Archive KF5::CoreAddons - ${KDE4_SOLID_LIBRARY} - KF5::KDELibs4Support KF5::GlobalAccel + KF5::GuiAddons KF5::I18n + KF5::IconThemes KF5::KCMUtils KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::KIONTLM KF5::NewStuff + KF5::Notifications KF5::NotifyConfig KF5::Package KF5::Plasma KF5::PlasmaQuick KF5::TextEditor KF5::ThreadWeaver + KF5::WindowSystem ${QT_QTSCRIPTTOOLS_LIBRARY} - Qt5::Sql Qt5::Gui + Qt5::QuickWidgets Qt5::Script + Qt5::ScriptTools + Qt5::Sql Qt5::Svg ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} @@ -909,16 +912,6 @@ target_link_libraries(amaroklib ${TAGLIB-EXTRAS_LIBRARIES}) endif() -if( QCA2_FOUND ) - include_directories( ${QCA2_INCLUDE_DIR} ) - target_link_libraries(amaroklib ${QCA2_LIBRARIES}) -endif() - - -if(KDE4_BUILD_TESTS) - target_link_libraries(amaroklib Qt5::Test) -endif() - if(WIN32) target_link_libraries(amaroklib Qt5::WebKitWidgets) endif() @@ -971,22 +964,18 @@ install(FILES org.kde.amarok.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) install(FILES amarok-plugin.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) +# install(FILES amarok-contextapplet.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) install(FILES amarok_codecinstall.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) install(FILES amarok_append.desktop DESTINATION ${SERVICES_INSTALL_DIR}/ServiceMenus) install(FILES amarok-play-audiocd.desktop DESTINATION ${DATA_INSTALL_DIR}/solid/actions) install(FILES amarok.knsrc DESTINATION ${CONFIG_INSTALL_DIR}) -install(FILES context/amarokapplets.knsrc DESTINATION ${CONFIG_INSTALL_DIR}) # protocol handlers install(FILES amarokurls/amarok.protocol DESTINATION ${SERVICES_INSTALL_DIR}) install(FILES amarokitpc.protocol DESTINATION ${SERVICES_INSTALL_DIR}) #install(FILES amarokpcast.protocol DESTINATION ${SERVICES_INSTALL_DIR}) -install(FILES context/servicetypes/amarok_context_applet.desktop - context/servicetypes/amarok_data_engine.desktop - DESTINATION ${SERVICETYPES_INSTALL_DIR} ) - install(FILES amarokconfig.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) install(FILES dbus/mpris1/org.freedesktop.MediaPlayer.root.xml dbus/mpris1/org.freedesktop.MediaPlayer.player.xml diff --git a/src/EngineController.h b/src/EngineController.h --- a/src/EngineController.h +++ b/src/EngineController.h @@ -27,13 +27,12 @@ #include "playback/EqualizerController.h" #include "core/meta/Meta.h" -#include - #include #include +#include #include #include -#include +#include #include #include @@ -532,16 +531,16 @@ Q_DISABLE_COPY( EngineController ) EqualizerController *m_equalizerController; - QWeakPointer m_media; - QWeakPointer m_preamp; - QWeakPointer m_audio; - QWeakPointer m_audioDataOutput; - QWeakPointer m_controller; + QPointer m_media; + QPointer m_preamp; + QPointer m_audio; + QPointer m_audioDataOutput; + QPointer m_controller; Phonon::Path m_path; Phonon::Path m_dataPath; - QWeakPointer m_fadeouter; - QWeakPointer m_fader; + QPointer m_fadeouter; + QPointer m_fader; Meta::TrackPtr m_currentTrack; Meta::AlbumPtr m_currentAlbum; diff --git a/src/EngineController.cpp b/src/EngineController.cpp --- a/src/EngineController.cpp +++ b/src/EngineController.cpp @@ -42,16 +42,17 @@ #include "playback/PowerManager.h" #include "playlist/PlaylistActions.h" -#include - #include #include #include #include #include -#include // for Qt::escape -#include +#include +#include +#include + +#include // for slotMetaDataChanged() typedef QPair FieldPair; @@ -85,8 +86,10 @@ DEBUG_BLOCK // ensure this object is created in a main thread Q_ASSERT( thread() == QCoreApplication::instance()->thread() ); - connect( this, &EngineController::fillInSupportedMimeTypes, &EngineController::slotFillInSupportedMimeTypes ); - connect( this, &EngineController::trackFinishedPlaying, &EngineController::slotTrackFinishedPlaying ); + + connect( this, &EngineController::fillInSupportedMimeTypes, this, &EngineController::slotFillInSupportedMimeTypes ); + connect( this, &EngineController::trackFinishedPlaying, this, &EngineController::slotTrackFinishedPlaying ); + new PowerManager( this ); // deals with inhibiting suspend etc. m_pauseTimer->setSingleShot( true ); @@ -102,8 +105,8 @@ // the media is stopped - that's what endSession() is for if( m_media ) { - m_media.data()->blockSignals(true); - m_media.data()->stop(); + m_media->blockSignals(true); + m_media->stop(); } delete m_boundedPlayback; @@ -138,11 +141,11 @@ // Enable zeitgeist support on linux //TODO: make this configurable by the user. - m_media.data()->setProperty( "PlaybackTracking", true ); + m_media->setProperty( "PlaybackTracking", true ); m_audio = new AudioOutput( MusicCategory, this ); m_audioDataOutput = new AudioDataOutput( this ); - m_audioDataOutput.data()->setDataSize( DATAOUTPUT_DATA_SIZE ); // The number of samples that Phonon sends per signal + m_audioDataOutput->setDataSize( DATAOUTPUT_DATA_SIZE ); // The number of samples that Phonon sends per signal m_path = createPath( m_media.data(), m_audio.data() ); @@ -333,8 +336,8 @@ { m_pauseTimer->stop(); if( supportsFadeout() ) - m_fader.data()->setVolume( 1.0 ); - m_media.data()->play(); + m_fader->setVolume( 1.0 ); + m_media->play(); emit trackPlaying( m_currentTrack ); return; } @@ -395,7 +398,7 @@ { DEBUG_BLOCK - m_media.data()->stop(); + m_media->stop(); debug() << "URL: " << url << url.url(); debug() << "Offset: " << offset; @@ -418,25 +421,22 @@ } QString device = QUrlQuery(url).queryItemValue( "device" ); - m_media.data()->setCurrentSource( Phonon::MediaSource( Phonon::Cd, device ) ); + m_media->setCurrentSource( Phonon::MediaSource( Phonon::Cd, device ) ); m_currentAudioCdTrack = trackNumber; } else { // keep in sync with setNextTrack(), slotPlayableUrlFetched() - if( url.isLocalFile() ) - m_media.data()->setCurrentSource( url.toLocalFile() ); - else - m_media.data()->setCurrentSource( url ); + m_media->setCurrentSource( url ); } - m_media.data()->clearQueue(); + m_media->clearQueue(); if( m_currentAudioCdTrack ) { // call to play() is asynchronous and ->setCurrentTitle() can be only called on // playing, buffering or paused media. - m_media.data()->pause(); + m_media->pause(); DelayedTrackChanger *trackChanger = new DelayedTrackChanger( m_media.data(), m_controller.data(), m_currentAudioCdTrack, offset, startPaused ); connect( trackChanger, &DelayedTrackChanger::trackPositionChanged, @@ -447,23 +447,23 @@ // call to play() is asynchronous and ->seek() can be only called on playing, // buffering or paused media. Calling play() would lead to audible glitches, // so call pause() that doesn't suffer from such problem. - m_media.data()->pause(); + m_media->pause(); DelayedSeeker *seeker = new DelayedSeeker( m_media.data(), offset, startPaused ); connect( seeker, &DelayedSeeker::trackPositionChanged, this, &EngineController::trackPositionChanged ); } else { if( startPaused ) { - m_media.data()->pause(); + m_media->pause(); } else { m_pauseTimer->stop(); if( supportsFadeout() ) - m_fader.data()->setVolume( 1.0 ); - m_media.data()->play(); + m_fader->setVolume( 1.0 ); + m_media->play(); } } } @@ -473,7 +473,7 @@ { if( supportsFadeout() && AmarokConfig::fadeoutOnPause() ) { - m_fader.data()->fadeOut( AmarokConfig::fadeoutLength() ); + m_fader->fadeOut( AmarokConfig::fadeoutLength() ); m_pauseTimer->start( AmarokConfig::fadeoutLength() + 500 ); return; } @@ -487,14 +487,14 @@ if( supportsFadeout() && AmarokConfig::fadeoutOnPause() ) { // Reset VolumeFaderEffect to full volume - m_fader.data()->setVolume( 1.0 ); + m_fader->setVolume( 1.0 ); // Wait a bit before pausing the pipeline. Necessary for the new fader setting to take effect. QTimer::singleShot( 1000, m_media.data(), &Phonon::MediaObject::pause ); } else { - m_media.data()->pause(); + m_media->pause(); } emit paused(); @@ -515,7 +515,7 @@ */ bool doFadeOut = !forceInstant && !m_fadeouter - && m_media.data()->state() == Phonon::PlayingState + && m_media->state() == Phonon::PlayingState && AmarokConfig::fadeoutOnStop() && AmarokConfig::fadeoutLength() > 0 && m_fader; @@ -551,7 +551,7 @@ m_nextTrack.clear(); m_nextUrl.clear(); - m_media.data()->clearQueue(); + m_media->clearQueue(); } if( doFadeOut ) @@ -564,8 +564,8 @@ } else { - m_media.data()->stop(); - m_media.data()->setCurrentSource( Phonon::MediaSource() ); + m_media->stop(); + m_media->setCurrentSource( Phonon::MediaSource() ); } } @@ -578,7 +578,7 @@ bool EngineController::isPaused() const { - return m_media.data()->state() == Phonon::PausedState; + return m_media->state() == Phonon::PausedState; } bool @@ -591,16 +591,16 @@ EngineController::isStopped() const { return - m_media.data()->state() == Phonon::StoppedState || - m_media.data()->state() == Phonon::LoadingState || - m_media.data()->state() == Phonon::ErrorState; + m_media->state() == Phonon::StoppedState || + m_media->state() == Phonon::LoadingState || + m_media->state() == Phonon::ErrorState; } void EngineController::playPause() //SLOT { DEBUG_BLOCK - debug() << "PlayPause: EngineController state" << m_media.data()->state(); + debug() << "PlayPause: EngineController state" << m_media->state(); if( isPlaying() ) pause(); @@ -613,7 +613,7 @@ { DEBUG_BLOCK - if( m_media.data()->isSeekable() ) + if( m_media->isSeekable() ) { debug() << "seek to: " << ms; @@ -630,7 +630,7 @@ else seekTo = ms; - m_media.data()->seek( static_cast( seekTo ) ); + m_media->seek( static_cast( seekTo ) ); emit trackPositionChanged( seekTo, true ); /* User seek */ } else @@ -641,7 +641,7 @@ void EngineController::seekBy( int ms ) //SLOT { - qint64 newPos = m_media.data()->currentTime() + ms; + qint64 newPos = m_media->currentTime() + ms; seekTo( newPos <= 0 ? 0 : newPos ); } @@ -664,10 +664,10 @@ m_volume = percent; const qreal volume = percent / 100.0; - if ( !m_ignoreVolumeChangeAction && m_audio.data()->volume() != volume ) + if ( !m_ignoreVolumeChangeAction && m_audio->volume() != volume ) { m_ignoreVolumeChangeObserve = true; - m_audio.data()->setVolume( volume ); + m_audio->setVolume( volume ); AmarokConfig::setMasterVolume( percent ); emit volumeChanged( percent ); @@ -686,13 +686,13 @@ bool EngineController::isMuted() const { - return m_audio.data()->isMuted(); + return m_audio->isMuted(); } void EngineController::setMuted( bool mute ) //SLOT { - m_audio.data()->setMuted( mute ); // toggle mute + m_audio->setMuted( mute ); // toggle mute if( !isMuted() ) setVolume( m_volume ); @@ -720,7 +720,7 @@ if( m_currentTrack && m_currentTrack->length() > 0 ) return m_currentTrack->length(); else - return m_media.data()->totalTime(); //may return -1 + return m_media->totalTime(); //may return -1 } void @@ -738,12 +738,10 @@ QMutexLocker locker( &m_mutex ); if( isPlaying() ) { - m_media.data()->clearQueue(); + m_media->clearQueue(); // keep in sync with playUrl(), slotPlayableUrlFetched() - if( url.isLocalFile() ) - m_media.data()->enqueue( url.toLocalFile() ); - else if( url.scheme() != "audiocd" ) // we don't support gapless for CD, bug 305708 - m_media.data()->enqueue( url ); + if( url.scheme() != "audiocd" ) // we don't support gapless for CD, bug 305708 + m_media->enqueue( url ); m_nextTrack = track; m_nextUrl = url; } @@ -758,15 +756,15 @@ if( m_media ) // type is determined purely from the MediaSource constructor used in // setCurrentSource(). For streams we use the QUrl one, see playUrl() - type = m_media.data()->currentSource().type(); + type = m_media->currentSource().type(); return type == Phonon::MediaSource::Url || type == Phonon::MediaSource::Stream; } bool EngineController::isSeekable() const { if( m_media ) - return m_media.data()->isSeekable(); + return m_media->isSeekable(); return false; } @@ -779,7 +777,7 @@ qint64 EngineController::trackPositionMs() const { - return m_media.data()->currentTime(); + return m_media->currentTime(); } bool @@ -858,7 +856,7 @@ m_playWhenFetched = false; m_mutex.unlock(); m_multiPlayback->fetchNext(); - debug() << "The queue has: " << m_media.data()->queue().size() << " tracks in it"; + debug() << "The queue has: " << m_media->queue().size() << " tracks in it"; } else if( m_multiSource ) { @@ -873,7 +871,7 @@ debug() << "playing next source: " << nextSource; slotPlayableUrlFetched( nextSource ); } - else if( m_media.data()->queue().isEmpty() ) + else if( m_media->queue().isEmpty() ) { debug() << "no more sources, skip to next track"; m_multiSource.reset(); // don't cofuse slotFinished @@ -889,7 +887,7 @@ stop( true ); The::playlistActions()->requestNextTrack(); } - else if( m_media.data()->queue().isEmpty() ) + else if( m_media->queue().isEmpty() ) The::playlistActions()->requestNextTrack(); } @@ -921,7 +919,7 @@ m_currentAlbum = 0; if( !m_nextTrack && m_nextUrl.isEmpty() ) // we will the trackChanged signal later emit trackChanged( Meta::TrackPtr() ); - m_media.data()->setCurrentSource( Phonon::MediaSource() ); + m_media->setCurrentSource( Phonon::MediaSource() ); } m_mutex.lock(); // in case setNextTrack is being handled right now. @@ -1019,17 +1017,17 @@ if( m_preamp ) { debug() << "Using gain of" << gain << "with relative peak of" << peak; - // we calculate the volume change ourselves, because m_preamp.data()->setVolumeDecibel is + // we calculate the volume change ourselves, because m_preamp->setVolumeDecibel is // a little confused about minus signs - m_preamp.data()->setVolume( qExp( gain * log10over20 ) ); + m_preamp->setVolume( qExp( gain * log10over20 ) ); } else warning() << "Would use gain of" << gain << ", but current Phonon backend" << "doesn't seem to support pre-amplifier (VolumeFaderEffect)"; } else if( m_preamp ) { - m_preamp.data()->setVolume( 1.0 ); + m_preamp->setVolume( 1.0 ); } bool useTrackWithinStreamDetection = false; @@ -1067,7 +1065,7 @@ { emit trackError( m_currentTrack ); - warning() << "Phonon failed to play this URL. Error: " << m_media.data()->errorString(); + warning() << "Phonon failed to play this URL. Error: " << m_media->errorString(); warning() << "Forcing phonon engine reinitialization."; /* In case of error Phonon MediaObject automatically switches to KioMediaSource, @@ -1121,12 +1119,9 @@ { DEBUG_LINE_INFO m_mutex.lock(); - m_media.data()->clearQueue(); + m_media->clearQueue(); // keep synced with setNextTrack(), playUrl() - if( url.isLocalFile() ) - m_media.data()->enqueue( url.toLocalFile() ); - else - m_media.data()->enqueue( url ); + m_media->enqueue( url ); m_nextTrack.clear(); m_nextUrl = url; debug() << "The next url we're playing is: " << m_nextUrl; @@ -1155,7 +1150,7 @@ EngineController::slotMetaDataChanged() { QVariantMap meta; - meta.insert( Meta::Field::URL, m_media.data()->currentSource().url() ); + meta.insert( Meta::Field::URL, m_media->currentSource().url() ); static const QList fieldPairs = QList() << FieldPair( Phonon::ArtistMetaData, Meta::Field::ARTIST ) << FieldPair( Phonon::AlbumMetaData, Meta::Field::ALBUM ) @@ -1165,7 +1160,7 @@ << FieldPair( Phonon::DescriptionMetaData, Meta::Field::COMMENT ); foreach( const FieldPair &pair, fieldPairs ) { - QStringList values = m_media.data()->metaData( pair.first ); + QStringList values = m_media->metaData( pair.first ); if( !values.isEmpty() ) meta.insert( pair.second, values.first() ); } @@ -1276,10 +1271,10 @@ if( track ) { - QString title = Qt::escape( track->name() ); - QString prettyTitle = Qt::escape( track->prettyName() ); - QString artist = track->artist() ? Qt::escape( track->artist()->name() ) : QString(); - QString album = track->album() ? Qt::escape( track->album()->name() ) : QString(); + QString title = track->name().toHtmlEscaped(); + QString prettyTitle = track->prettyName().toHtmlEscaped(); + QString artist = track->artist() ? track->artist()->name().toHtmlEscaped() : QString(); + QString album = track->album() ? track->album()->name().toHtmlEscaped() : QString(); // ugly because of translation requirements if( !title.isEmpty() && !artist.isEmpty() && !album.isEmpty() ) @@ -1305,10 +1300,10 @@ if( track->length() > 0 ) { - QString length = Qt::escape( Meta::msToPrettyTime( track->length() ) ); + QString length = Meta::msToPrettyTime( track->length() ).toHtmlEscaped(); title += " ("; if( progress ) - title+= Qt::escape( Meta::msToPrettyTime( m_lastTickPosition ) ) + '/'; + title += Meta::msToPrettyTime( m_lastTickPosition ).toHtmlEscaped() + '/'; title += length + ')'; } diff --git a/src/GlobalCollectionActions.h b/src/GlobalCollectionActions.h --- a/src/GlobalCollectionActions.h +++ b/src/GlobalCollectionActions.h @@ -130,8 +130,10 @@ /** This class keeps track of global context actions that should be added to all genre, artists or another meta type in all collections. */ -class AMAROK_EXPORT GlobalCollectionActions +class AMAROK_EXPORT GlobalCollectionActions : public QObject { + Q_OBJECT + friend GlobalCollectionActions* The::globalCollectionActions(); public: diff --git a/src/GlobalCollectionActions.cpp b/src/GlobalCollectionActions.cpp --- a/src/GlobalCollectionActions.cpp +++ b/src/GlobalCollectionActions.cpp @@ -41,37 +41,61 @@ void GlobalCollectionActions::addGenreAction( GlobalCollectionGenreAction * action ) { + if( !action ) + return; + m_genreActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_genreActions.removeAll( action ); } ); } void GlobalCollectionActions::addArtistAction( GlobalCollectionArtistAction * action ) { + if( !action ) + return; + m_artistActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_artistActions.removeAll( action ); } ); } void GlobalCollectionActions::addAlbumAction( GlobalCollectionAlbumAction * action ) { + if( !action ) + return; + m_albumActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_albumActions.removeAll( action ); } ); } void GlobalCollectionActions::addTrackAction( GlobalCollectionTrackAction * action ) { + if( !action ) + return; + m_trackActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_trackActions.removeAll( action ); } ); } void GlobalCollectionActions::addYearAction( GlobalCollectionYearAction * action ) { + if( !action ) + return; + m_yearActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_yearActions.removeAll( action ); } ); } void GlobalCollectionActions::addComposerAction( GlobalCollectionComposerAction * action ) { + if( !action ) + return; + m_composerActions.append( action ); + connect( action, &QObject::destroyed, this, [this, action]() { m_composerActions.removeAll( action ); } ); } QList< QAction * > GlobalCollectionActions::actionsFor( Meta::DataPtr item ) diff --git a/src/GlobalCurrentTrackActions.h b/src/GlobalCurrentTrackActions.h --- a/src/GlobalCurrentTrackActions.h +++ b/src/GlobalCurrentTrackActions.h @@ -21,10 +21,8 @@ #include "core/meta/forward_declarations.h" #include "core/support/SmartPointerList.h" -#include - - class GlobalCurrentTrackActions; +class QAction; namespace The { AMAROK_EXPORT GlobalCurrentTrackActions* globalCurrentTrackActions(); diff --git a/src/GlobalCurrentTrackActions.cpp b/src/GlobalCurrentTrackActions.cpp --- a/src/GlobalCurrentTrackActions.cpp +++ b/src/GlobalCurrentTrackActions.cpp @@ -16,6 +16,8 @@ #include "GlobalCurrentTrackActions.h" +#include + namespace The { diff --git a/src/KNotificationBackend.h b/src/KNotificationBackend.h --- a/src/KNotificationBackend.h +++ b/src/KNotificationBackend.h @@ -21,6 +21,7 @@ #include #include +#include class KNotification; @@ -65,7 +66,7 @@ static KNotificationBackend *s_instance; bool m_enabled; - QWeakPointer m_notify; + QPointer m_notify; }; } diff --git a/src/KNotificationBackend.cpp b/src/KNotificationBackend.cpp --- a/src/KNotificationBackend.cpp +++ b/src/KNotificationBackend.cpp @@ -61,7 +61,7 @@ KNotificationBackend::~KNotificationBackend() { if( m_notify ) - m_notify.data()->close(); + m_notify->close(); } void diff --git a/src/LastfmReadLabelCapability.cpp b/src/LastfmReadLabelCapability.cpp --- a/src/LastfmReadLabelCapability.cpp +++ b/src/LastfmReadLabelCapability.cpp @@ -53,7 +53,7 @@ query[ "api_key"] = Amarok::lastfmApiKey(); m_job = lastfm::ws::post( query ); - connect( m_job, SIGNAL(finished()), SLOT(onTagsFetched()) ); + connect( m_job, &QNetworkReply::finished, this, &LastfmReadLabelCapability::onTagsFetched ); } diff --git a/src/MainWindow.h b/src/MainWindow.h --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -22,13 +22,13 @@ #include "amarok_export.h" #include "core/meta/forward_declarations.h" -#include "browsers/BrowserDock.h" + +#include #include -#include -#include #include -#include + +#include class CollectionWidget; class SlimToolbar; @@ -41,6 +41,7 @@ namespace PlaylistBrowserNS { class PlaylistBrowser; } namespace Playlist { class Dock; } +class BrowserDock; class ContextDock; @@ -87,10 +88,10 @@ //ensures the dock widget is visible in case it is tabbed void showDock( AmarokDockId dockId ); - BrowserDock *browserDock() const { return m_browserDock.data(); } - QMenu *ToolsMenu() const { return m_toolsMenu.data(); } - QMenu *SettingsMenu() const { return m_settingsMenu.data(); } - Playlist::Dock *playlistDock() const { return m_playlistDock.data(); } + QPointer browserDock() const { return m_browserDock; } + QPointer ToolsMenu() const { return m_toolsMenu; } + QPointer SettingsMenu() const { return m_settingsMenu; } + QPointer playlistDock() const { return m_playlistDock; } void deleteBrowsers(); /* Reimplemented from QMainWindow to allow only one active toolbar at any time */ @@ -188,19 +189,19 @@ CollectionWidget * m_collectionBrowser; PlaylistBrowserNS::PlaylistBrowser * m_playlistBrowser; - QWeakPointer m_menubar; - QWeakPointer m_toolsMenu; - QWeakPointer m_settingsMenu; + QPointer m_menubar; + QPointer m_toolsMenu; + QPointer m_settingsMenu; #ifdef DEBUG_BUILD_TYPE - QWeakPointer m_networkViewer; + QPointer m_networkViewer; #endif // DEBUG_BUILD_TYPE - QWeakPointer m_browserDock; - QWeakPointer m_contextDock; - QWeakPointer m_playlistDock; + QPointer m_browserDock; + QPointer m_contextDock; + QPointer m_playlistDock; - QWeakPointer m_slimToolbar; - QWeakPointer m_mainToolbar; + QPointer m_slimToolbar; + QPointer m_mainToolbar; void createActions(); void createMenus(); @@ -210,7 +211,7 @@ int m_lastBrowser; int m_searchField; - static QWeakPointer s_instance; + static QPointer s_instance; bool m_waitingForCd; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -34,12 +34,13 @@ #include "aboutdialog/OcsData.h" #include "amarokurls/AmarokUrlHandler.h" #include "amarokurls/BookmarkManager.h" +#include "browsers/BrowserDock.h" #include "browsers/collectionbrowser/CollectionWidget.h" #include "browsers/filebrowser/FileBrowser.h" #include "browsers/playlistbrowser/PlaylistBrowser.h" #include "browsers/playlistbrowser/PodcastCategory.h" #include "browsers/servicebrowser/ServiceBrowser.h" -#include "context/ContextDock.h" +// #include "context/ContextDock.h" #include "core/meta/Statistics.h" #include "core/support/Amarok.h" #include "core/support/Components.h" @@ -55,8 +56,8 @@ #endif // DEBUG_BUILD_TYPE #include "playlist/PlaylistActions.h" #include "playlist/PlaylistController.h" -#include "playlist/PlaylistModelStack.h" #include "playlist/PlaylistDock.h" +#include "playlist/PlaylistModelStack.h" #include "playlist/ProgressiveSearchWidget.h" #include "playlist/layouts/LayoutConfigAction.h" #include "playlistmanager/PlaylistManager.h" @@ -68,32 +69,31 @@ #include "widgets/Osd.h" #include //m_actionCollection -#include #include //qApp -#include //openPlaylist() -#include //slotAddStream() -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - #include #include #include #include #include +#include //openPlaylist() +#include //slotAddStream() #include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #ifdef Q_WS_X11 @@ -112,7 +112,7 @@ extern OcsData ocsData; -QWeakPointer MainWindow::s_instance; +QPointer MainWindow::s_instance; namespace The { MainWindow* mainWindow() { return MainWindow::s_instance.data(); } @@ -161,27 +161,25 @@ //restore active category ( as well as filters and levels and whatnot.. ) const QString path = Amarok::config().readEntry( "Browser Path", QString() ); if( !path.isEmpty() ) - m_browserDock.data()->list()->navigate( path ); + m_browserDock->list()->navigate( path ); setAutoSaveSettings(); m_showMenuBar->setChecked(!menuBar()->isHidden()); // workaround for bug #171080 EngineController *engine = The::engineController(); connect( engine, &EngineController::stopped, this, &MainWindow::slotStopped ); - connect( engine,&EngineController::paused, this, &MainWindow::slotPaused ); + connect( engine, &EngineController::paused, this, &MainWindow::slotPaused ); connect( engine, &EngineController::trackPlaying, this, &MainWindow::slotNewTrackPlaying ); connect( engine, &EngineController::trackMetadataChanged, this, &MainWindow::slotMetadataChanged ); - - KGlobal::locale()->insertCatalog( "libplasma" ); } MainWindow::~MainWindow() { DEBUG_BLOCK //save currently active category - Amarok::config().writeEntry( "Browser Path", m_browserDock.data()->list()->path() ); + Amarok::config().writeEntry( "Browser Path", m_browserDock->list()->path() ); #ifdef DEBUG_BUILD_TYPE delete m_networkViewer.data(); @@ -213,48 +211,40 @@ m_slimToolbar.data()->setAllowedAreas( Qt::TopToolBarArea | Qt::BottomToolBarArea ); m_slimToolbar.data()->setMovable ( true ); addToolBar( Qt::TopToolBarArea, m_slimToolbar.data() ); - m_slimToolbar.data()->hide(); + m_slimToolbar->hide(); //BEGIN Creating Widgets PERF_LOG( "Create sidebar" ) m_browserDock = new BrowserDock( this ); - m_browserDock.data()->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Ignored ); + m_browserDock->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Ignored ); - m_browserDock.data()->installEventFilter( this ); + m_browserDock->installEventFilter( this ); PERF_LOG( "Sidebar created" ) PERF_LOG( "Create Playlist" ) m_playlistDock = new Playlist::Dock( this ); - m_playlistDock.data()->installEventFilter( this ); + m_playlistDock->installEventFilter( this ); //HACK, need to connect after because of order in MainWindow() connect( Amarok::actionCollection()->action( "playlist_edit_queue" ), &QAction::triggered, m_playlistDock.data(), &Playlist::Dock::slotEditQueue ); PERF_LOG( "Playlist created" ) - PERF_LOG( "Creating ContextWidget" ) -/* FIXME: disabled temporarily for KF5 porting. Also take care of the usage of the m_contextDock instance below. - m_contextDock = new ContextDock( this ); - m_contextDock.data()->installEventFilter( this ); -*/ - PERF_LOG( "ContextScene created" ) +// PERF_LOG( "Creating ContextWidget" ) +// m_contextDock = new ContextDock( this ); +// m_contextDock->installEventFilter( this ); +// PERF_LOG( "ContextScene created" ) //END Creating Widgets createMenus(); - PERF_LOG( "Loading default contextScene" ) - - PERF_LOG( "Loaded default contextScene" ) - setDockOptions( QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks | QMainWindow::AnimatedDocks | QMainWindow::VerticalTabs ); addDockWidget( Qt::LeftDockWidgetArea, m_browserDock.data() ); -#pragma message("PORTME KF5: line here") - //addDockWidget( Qt::LeftDockWidgetArea, m_contextDock.data(), Qt::Horizontal ); +// addDockWidget( Qt::LeftDockWidgetArea, m_contextDock.data(), Qt::Horizontal ); addDockWidget( Qt::LeftDockWidgetArea, m_playlistDock.data(), Qt::Horizontal ); -#pragma message("PORTME KF5: line here") - //setLayoutLocked( AmarokConfig::lockLayout() ); + setLayoutLocked( AmarokConfig::lockLayout() ); // { @@ -267,40 +257,40 @@ m_collectionBrowser->setPrettyName( i18n( "Local Music" ) ); m_collectionBrowser->setIcon( QIcon::fromTheme( "drive-harddisk" ) ); m_collectionBrowser->setShortDescription( i18n( "Local sources of content" ) ); - m_browserDock.data()->list()->addCategory( m_collectionBrowser ); + m_browserDock->list()->addCategory( m_collectionBrowser ); PERF_LOG( "Created CollectionWidget" ) PERF_LOG( "Creating ServiceBrowser" ) ServiceBrowser *serviceBrowser = ServiceBrowser::instance(); serviceBrowser->setParent( 0 ); serviceBrowser->setPrettyName( i18n( "Internet" ) ); serviceBrowser->setIcon( QIcon::fromTheme( "applications-internet" ) ); serviceBrowser->setShortDescription( i18n( "Online sources of content" ) ); - m_browserDock.data()->list()->addCategory( serviceBrowser ); + m_browserDock->list()->addCategory( serviceBrowser ); PERF_LOG( "Created ServiceBrowser" ) PERF_LOG( "Creating PlaylistBrowser" ) m_playlistBrowser = new PlaylistBrowserNS::PlaylistBrowser( "playlists", 0 ); m_playlistBrowser->setPrettyName( i18n("Playlists") ); m_playlistBrowser->setIcon( QIcon::fromTheme( "view-media-playlist-amarok" ) ); m_playlistBrowser->setShortDescription( i18n( "Various types of playlists" ) ); - m_browserDock.data()->list()->addCategory( m_playlistBrowser ); + m_browserDock->list()->addCategory( m_playlistBrowser ); PERF_LOG( "CreatedPlaylsitBrowser" ) PERF_LOG( "Creating FileBrowser" ) FileBrowser *fileBrowser = new FileBrowser( "files", 0 ); fileBrowser->setPrettyName( i18n("Files") ); fileBrowser->setIcon( QIcon::fromTheme( "folder-amarok" ) ); fileBrowser->setShortDescription( i18n( "Browse local hard drive for content" ) ); - m_browserDock.data()->list()->addCategory( fileBrowser ); + m_browserDock->list()->addCategory( fileBrowser ); PERF_LOG( "Created FileBrowser" ) serviceBrowser->setScriptableServiceManager( The::scriptableServiceManager() ); PERF_LOG( "ScriptableServiceManager done" ) PERF_LOG( "Creating Podcast Category" ) - m_browserDock.data()->list()->addCategory( The::podcastCategory() ); + m_browserDock->list()->addCategory( The::podcastCategory() ); PERF_LOG( "Created Podcast Category" ) // If Amarok is started for the first time, set initial dock widget sizes @@ -347,7 +337,7 @@ menu->addSeparator(); // Dock widgets: - QList dockwidgets = qFindChildren( this ); + QList dockwidgets = findChildren(); foreach( QDockWidget* dockWidget, dockwidgets ) { @@ -358,7 +348,7 @@ menu->addSeparator(); // Toolbars: - QList toolbars = qFindChildren( this ); + QList toolbars = findChildren(); QActionGroup* toolBarGroup = new QActionGroup( this ); toolBarGroup->setExclusive( true ); @@ -394,13 +384,13 @@ switch( dockId ) { case AmarokDockNavigation: - name = m_browserDock.data()->windowTitle(); + name = m_browserDock->windowTitle(); break; case AmarokDockContext: - name = m_contextDock.data()->windowTitle(); +// name = m_contextDock->windowTitle(); break; case AmarokDockPlaylist: - name = m_playlistDock.data()->windowTitle(); + name = m_playlistDock->windowTitle(); break; } @@ -442,17 +432,20 @@ } e->accept(); - App::instance()->quit(); + pApp->quit(); #endif } void MainWindow::exportPlaylist() //SLOT { DEBUG_BLOCK - QScopedPointer fileDialog( new KFileDialog( QUrl("kfiledialog:///amarok-playlist-export"), QString(), this ) ); - QCheckBox *saveRelativeCheck = new QCheckBox( i18n("Use relative path for &saving") ); + QFileDialog fileDialog; + fileDialog.restoreState( Amarok::config( "playlist-export-dialog" ).readEntry( "state", QByteArray() ) ); + + // FIXME: Make checkbox visible in dialog + QCheckBox *saveRelativeCheck = new QCheckBox( i18n("Use relative path for &saving"), &fileDialog ); saveRelativeCheck->setChecked( AmarokConfig::relativePlaylist() ); QStringList supportedMimeTypes; @@ -462,31 +455,30 @@ supportedMimeTypes << "audio/x-scpls"; //PLS supportedMimeTypes << "application/xspf+xml"; //XSPF - fileDialog->setMimeFilter( supportedMimeTypes, supportedMimeTypes.first() ); - fileDialog->fileWidget()->setCustomWidget( saveRelativeCheck ); - fileDialog->setOperationMode( KFileDialog::Saving ); - fileDialog->setMode( KFile::File ); - fileDialog->setWindowTitle( i18n("Save As") ); - fileDialog->setObjectName( "PlaylistExport" ); - - fileDialog->exec(); + fileDialog.setMimeTypeFilters( supportedMimeTypes ); + fileDialog.setAcceptMode( QFileDialog::AcceptSave ); + fileDialog.setFileMode( QFileDialog::AnyFile ); + fileDialog.setWindowTitle( i18n("Save As") ); + fileDialog.setObjectName( "PlaylistExport" ); - QString playlistPath = fileDialog->selectedFile(); - - if( !playlistPath.isEmpty() ) + int result = fileDialog.exec(); + QString playlistPath = fileDialog.selectedFiles().value( 0 ); + if( result == QDialog::Accepted && !playlistPath.isEmpty() ) The::playlist()->exportPlaylist( playlistPath, saveRelativeCheck->isChecked() ); + + Amarok::config( "playlist-export-dialog" ).writeEntry( "state", fileDialog.saveState() ); } void MainWindow::slotShowActiveTrack() const { - m_playlistDock.data()->showActiveTrack(); + m_playlistDock->showActiveTrack(); } void MainWindow::slotEditTrackInfo() const { - m_playlistDock.data()->editTrackInfo(); + m_playlistDock->editTrackInfo(); } void @@ -526,20 +518,21 @@ // open a file selector to add media to the playlist QList files; - KFileDialog dlg( QUrl(QDesktopServices::storageLocation(QDesktopServices::MusicLocation) ), QString("*.*|"), this ); + QFileDialog dlg; + dlg.setDirectory( QStandardPaths::writableLocation(QStandardPaths::MusicLocation) ); if( !lastDirectory.isEmpty() ) - dlg.setUrl( lastDirectory ); + dlg.setDirectoryUrl( lastDirectory ); dlg.setWindowTitle( directPlay ? i18n("Play Media (Files or URLs)") : i18n("Add Media (Files or URLs)") ); - dlg.setMode( KFile::Files | KFile::Directory ); + dlg.setFileMode( QFileDialog::ExistingFiles ); dlg.setObjectName( "PlayMedia" ); - dlg.exec(); + int accepted = dlg.exec(); files = dlg.selectedUrls(); - lastDirectory = dlg.baseUrl(); + lastDirectory = dlg.directoryUrl(); - if( files.isEmpty() ) + if( accepted != QDialog::Accepted || files.isEmpty() ) return; Playlist::AddOptions options = directPlay ? Playlist::OnPlayMediaAction @@ -551,8 +544,8 @@ MainWindow::slotAddStream() //SLOT { bool ok; - QString url = KInputDialog::getText( i18n( "Add Stream" ), i18n( "Enter Stream URL:" ), - QString(), &ok, this ); + QString url = QInputDialog::getText( this, i18n( "Add Stream" ), i18n( "Enter Stream URL:" ), + QLineEdit::Normal, QString(), &ok ); if( !ok ) return; @@ -564,7 +557,7 @@ MainWindow::slotFocusPlaylistSearch() { showDock( AmarokDockPlaylist ); // ensure that the dock is visible if tabbed - m_playlistDock.data()->searchWidget()->focusInputLine(); + m_playlistDock->searchWidget()->focusInputLine(); } void @@ -596,7 +589,7 @@ void MainWindow::showHide() //SLOT { - const KWindowInfo info = KWindowSystem::windowInfo( winId(), 0, 0 ); + const KWindowInfo info( winId(), 0, 0 ); const int currentDesktop = KWindowSystem::currentDesktop(); if( !isVisible() ) @@ -657,7 +650,7 @@ void MainWindow::slotShufflePlaylist() { - m_playlistDock.data()->sortWidget()->trimToLevel(); + m_playlistDock->sortWidget()->trimToLevel(); The::playlistActions()->shuffle(); } @@ -744,17 +737,15 @@ const Playlist::Actions* const pa = The::playlistActions(); const Playlist::Controller* const pc = The::playlistController(); - if( auto app = qobject_cast(qApp) ) - { - KStandardAction::keyBindings( app, &App::slotConfigShortcuts, ac ); - KStandardAction::preferences( app, &App::slotConfigAmarokWithEmptyPage, ac ); - } + KStandardAction::keyBindings( pApp, &App::slotConfigShortcuts, ac ); + KStandardAction::preferences( pApp, &App::slotConfigAmarokWithEmptyPage, ac ); + m_showMenuBar = KStandardAction::showMenubar(this, &MainWindow::slotShowMenuBar, ac); ac->action( KStandardAction::name( KStandardAction::KeyBindings ) )->setIcon( QIcon::fromTheme( "configure-shortcuts-amarok" ) ); ac->action( KStandardAction::name( KStandardAction::Preferences ) )->setIcon( QIcon::fromTheme( "configure-amarok" ) ); ac->action( KStandardAction::name( KStandardAction::Preferences ) )->setMenuRole(QAction::PreferencesRole); // Define OS X Prefs menu here, removes need for ifdef later - KStandardAction::quit( App::instance(), &App::quit, ac ); + KStandardAction::quit( pApp, &App::quit, ac ); QAction *action = new QAction( QIcon::fromTheme( "document-open" ), i18n("&Add Media..."), this ); ac->addAction( "playlist_add", action ); @@ -820,48 +811,48 @@ action->setShortcut( Qt::CTRL + Qt::Key_E ); connect( action, &QAction::triggered, this, &MainWindow::slotEditTrackInfo ); - action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), i18n( "Seek Forward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekShort() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), + i18n( "Seek Forward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekShort() * 1000 ) ), this ); ac->addAction( "seek_forward_short", action ); action->setShortcut( Qt::CTRL + Qt::Key_Right ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekForwardShort ); - action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), i18n( "Seek Forward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekMedium() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), + i18n( "Seek Forward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekMedium() * 1000 ) ), this ); ac->addAction( "seek_forward_medium", action ); action->setShortcut( Qt::Key_Right ); KGlobalAccel::setGlobalShortcut(action, QKeySequence( Qt::META + Qt::SHIFT + Qt::Key_Plus ) ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekForwardMedium ); - action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), i18n( "Seek Forward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekLong() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), + i18n( "Seek Forward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekLong() * 1000 ) ), this ); ac->addAction( "seek_forward_long", action ); action->setShortcut( Qt::SHIFT + Qt::Key_Right ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekForwardLong ); - action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), i18n( "Seek Backward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekShort() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), + i18n( "Seek Backward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekShort() * 1000 ) ), this ); ac->addAction( "seek_backward_short", action ); action->setShortcut( Qt::CTRL + Qt::Key_Left ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekBackwardShort ); - action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), i18n( "Seek Backward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekMedium() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), + i18n( "Seek Backward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekMedium() * 1000 ) ), this ); ac->addAction( "seek_backward_medium", action ); action->setShortcut( Qt::Key_Left ); KGlobalAccel::setGlobalShortcut(action, QKeySequence( Qt::META + Qt::SHIFT + Qt::Key_Minus ) ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekBackwardMedium ); - action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), i18n( "Seek Backward by %1", - KGlobal::locale()->prettyFormatDuration( AmarokConfig::seekLong() * 1000 ) ), this ); + action = new QAction( QIcon::fromTheme( "media-seek-backward-amarok" ), + i18n( "Seek Backward by %1 seconds", KFormat().formatDecimalDuration( AmarokConfig::seekLong() * 1000 ) ), this ); ac->addAction( "seek_backward_long", action ); action->setShortcut( Qt::SHIFT + Qt::Key_Left ); connect( action, &QAction::triggered, this, &MainWindow::slotSeekBackwardLong ); PERF_LOG( "MainWindow::createActions 6" ) action = new QAction( QIcon::fromTheme("view-refresh"), i18n( "Update Collection" ), this ); - connect ( action, &QAction::triggered, CollectionManager::instance(),&CollectionManager::checkCollectionChanges ); + connect ( action, &QAction::triggered, CollectionManager::instance(), &CollectionManager::checkCollectionChanges ); ac->addAction( "update_collection", action ); action = new QAction( QIcon::fromTheme( "amarok_playcount" ), i18n( "Synchronize Statistics..." ), this ); @@ -1071,7 +1062,7 @@ m_menubar = menuBar(); //BEGIN Actions menu - QMenu *actionsMenu = new QMenu( m_menubar.data() ); + QMenu *actionsMenu = new QMenu( m_menubar ); #ifdef Q_WS_MAC // Add these functions to the dock icon menu in OS X //extern void qt_mac_set_dock_menu(QMenu *); @@ -1120,24 +1111,24 @@ //BEGIN Tools menu m_toolsMenu = new QMenu( m_menubar.data() ); - m_toolsMenu.data()->setTitle( i18n("&Tools") ); + m_toolsMenu->setTitle( i18n("&Tools") ); - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("bookmark_manager") ); - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("cover_manager") ); - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("equalizer_dialog") ); + m_toolsMenu->addAction( Amarok::actionCollection()->action("bookmark_manager") ); + m_toolsMenu->addAction( Amarok::actionCollection()->action("cover_manager") ); + m_toolsMenu->addAction( Amarok::actionCollection()->action("equalizer_dialog") ); #ifdef DEBUG_BUILD_TYPE - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("network_request_viewer") ); + m_toolsMenu->addAction( Amarok::actionCollection()->action("network_request_viewer") ); #endif // DEBUG_BUILD_TYPE - m_toolsMenu.data()->addSeparator(); - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("update_collection") ); - m_toolsMenu.data()->addAction( Amarok::actionCollection()->action("synchronize_statistics") ); + m_toolsMenu->addSeparator(); + m_toolsMenu->addAction( Amarok::actionCollection()->action("update_collection") ); + m_toolsMenu->addAction( Amarok::actionCollection()->action("synchronize_statistics") ); //END Tools menu //BEGIN Settings menu m_settingsMenu = new QMenu( m_menubar.data() ); - m_settingsMenu.data()->setTitle( i18n("&Settings") ); + m_settingsMenu->setTitle( i18n("&Settings") ); - m_settingsMenu.data()->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::ShowMenubar ) ) ); + m_settingsMenu->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::ShowMenubar ) ) ); //TODO use KStandardAction or KXmlGuiWindow @@ -1147,28 +1138,28 @@ // so we disable replaygain on osx #ifndef Q_WS_MAC - m_settingsMenu.data()->addAction( Amarok::actionCollection()->action("replay_gain_mode") ); - m_settingsMenu.data()->addSeparator(); + m_settingsMenu->addAction( Amarok::actionCollection()->action("replay_gain_mode") ); + m_settingsMenu->addSeparator(); #endif - m_settingsMenu.data()->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::KeyBindings ) ) ); - m_settingsMenu.data()->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::Preferences ) ) ); + m_settingsMenu->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::KeyBindings ) ) ); + m_settingsMenu->addAction( Amarok::actionCollection()->action( KStandardAction::name( KStandardAction::Preferences ) ) ); //END Settings menu - m_menubar.data()->addMenu( actionsMenu ); - m_menubar.data()->addMenu( viewMenu ); - m_menubar.data()->addMenu( playlistMenu ); - m_menubar.data()->addMenu( m_toolsMenu.data() ); - m_menubar.data()->addMenu( m_settingsMenu.data() ); + m_menubar->addMenu( actionsMenu ); + m_menubar->addMenu( viewMenu ); + m_menubar->addMenu( playlistMenu ); + m_menubar->addMenu( m_toolsMenu.data() ); + m_menubar->addMenu( m_settingsMenu.data() ); QMenu *helpMenu = Amarok::Menu::helpMenu(); helpMenu->insertAction( helpMenu->actions().last(), Amarok::actionCollection()->action( "extendedAbout" ) ); helpMenu->insertAction( helpMenu->actions().last(), Amarok::actionCollection()->action( "diagnosticDialog" ) ); - m_menubar.data()->addSeparator(); - m_menubar.data()->addMenu( helpMenu ); + m_menubar->addSeparator(); + m_menubar->addMenu( helpMenu ); } void @@ -1245,8 +1236,8 @@ QString MainWindow::activeBrowserName() { - if( m_browserDock.data()->list()->activeCategory() ) - return m_browserDock.data()->list()->activeCategory()->name(); + if(m_browserDock->list()->activeCategory() ) + return m_browserDock->list()->activeCategory()->name(); else return QString(); } @@ -1259,8 +1250,8 @@ if( m_browserDock ) m_browserDock.data()->setMovable( !locked ); - if( m_contextDock ) - m_contextDock.data()->setMovable( !locked ); +// if( m_contextDock ) +// m_contextDock.data()->setMovable( !locked ); if( m_playlistDock ) m_playlistDock.data()->setMovable( !locked ); @@ -1289,20 +1280,20 @@ // Remove all dock widgets, then add them again. This resets their state completely. removeDockWidget( m_browserDock.data() ); - removeDockWidget( m_contextDock.data() ); +// removeDockWidget( m_contextDock.data() ); removeDockWidget( m_playlistDock.data() ); addDockWidget( Qt::LeftDockWidgetArea, m_browserDock.data() ); - addDockWidget( Qt::LeftDockWidgetArea, m_contextDock.data(), Qt::Horizontal ); +// addDockWidget( Qt::LeftDockWidgetArea, m_contextDock.data(), Qt::Horizontal ); addDockWidget( Qt::LeftDockWidgetArea, m_playlistDock.data(), Qt::Horizontal ); - m_browserDock.data()->setFloating( false ); - m_contextDock.data()->setFloating( false ); - m_playlistDock.data()->setFloating( false ); + m_browserDock->setFloating( false ); +// m_contextDock->setFloating( false ); + m_playlistDock->setFloating( false ); - m_browserDock.data()->show(); - m_contextDock.data()->show(); - m_playlistDock.data()->show(); + m_browserDock->show(); +// m_contextDock->show(); + m_playlistDock->show(); // Now set Amarok's default dockwidget sizes setDefaultDockSizes(); @@ -1327,19 +1318,19 @@ #pragma message("PORTME KF5")/* //We need to set fixed widths initially, just until the main window has been properly laid out. As soon as this has //happened, we will unlock these sizes again so that the elements can be resized by the user. - const int mins[3] = { m_browserDock.data()->minimumWidth(), m_contextDock.data()->minimumWidth(), m_playlistDock.data()->minimumWidth() }; - const int maxs[3] = { m_browserDock.data()->maximumWidth(), m_contextDock.data()->maximumWidth(), m_playlistDock.data()->maximumWidth() }; + const int mins[3] = { m_browserDock->minimumWidth(), m_contextDock->minimumWidth(), m_playlistDock->minimumWidth() }; + const int maxs[3] = { m_browserDock->maximumWidth(), m_contextDock->maximumWidth(), m_playlistDock->maximumWidth() }; - m_browserDock.data()->setFixedWidth( widgetWidth * 0.65 ); - m_contextDock.data()->setFixedWidth( widgetWidth * 1.7 + leftover ); - m_playlistDock.data()->setFixedWidth( widgetWidth * 0.65 ); + m_browserDock->setFixedWidth( widgetWidth * 0.65 ); + m_contextDock->setFixedWidth( widgetWidth * 1.7 + leftover ); + m_playlistDock->setFixedWidth( widgetWidth * 0.65 ); // Important: We need to activate the layout we have just set layout()->activate(); - m_browserDock.data()->setMinimumWidth( mins[0] ); m_browserDock.data()->setMaximumWidth( maxs[0] ); - m_contextDock.data()->setMinimumWidth( mins[1] ); m_contextDock.data()->setMaximumWidth( maxs[1] ); - m_playlistDock.data()->setMinimumWidth( mins[2] ); m_playlistDock.data()->setMaximumWidth( maxs[2] ); + m_browserDock->setMinimumWidth( mins[0] ); m_browserDock->setMaximumWidth( maxs[0] ); + m_contextDock->setMinimumWidth( mins[1] ); m_contextDock->setMaximumWidth( maxs[1] ); + m_playlistDock->setMinimumWidth( mins[2] ); m_playlistDock->setMaximumWidth( maxs[2] ); */ } diff --git a/src/MediaDeviceCache.h b/src/MediaDeviceCache.h --- a/src/MediaDeviceCache.h +++ b/src/MediaDeviceCache.h @@ -21,13 +21,8 @@ #include #include -#include #include -#include -namespace Solid { - class Device; -} class AMAROK_EXPORT MediaDeviceCache : public QObject { diff --git a/src/MediaDeviceCache.cpp b/src/MediaDeviceCache.cpp --- a/src/MediaDeviceCache.cpp +++ b/src/MediaDeviceCache.cpp @@ -21,24 +21,23 @@ #include "core/support/Amarok.h" #include "core/support/Debug.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include + MediaDeviceCache* MediaDeviceCache::s_instance = 0; MediaDeviceCache::MediaDeviceCache() : QObject() @@ -350,7 +349,7 @@ debug() << "Could convert parent to PortableMediaPlayer, returning true"; return true; } - if( QFile::exists( ssa->filePath() + QDir::separator() + ".is_audio_player" ) ) + if( QFile::exists( ssa->filePath() + '/' + ".is_audio_player" ) ) { return true; } diff --git a/src/MediaDeviceMonitor.h b/src/MediaDeviceMonitor.h --- a/src/MediaDeviceMonitor.h +++ b/src/MediaDeviceMonitor.h @@ -31,11 +31,7 @@ #ifndef AMAROK_MEDIADEVICEMONITOR_H #define AMAROK_MEDIADEVICEMONITOR_H -//#include "MediaDeviceInfo.h" - #include "amarok_export.h" -#include "core-impl/collections/mediadevicecollection/support/ConnectionAssistant.h" -#include "core/support/Debug.h" #include #include diff --git a/src/MediaDeviceMonitor.cpp b/src/MediaDeviceMonitor.cpp --- a/src/MediaDeviceMonitor.cpp +++ b/src/MediaDeviceMonitor.cpp @@ -20,14 +20,16 @@ #include "MediaDeviceMonitor.h" #include "MediaDeviceCache.h" - -#include -#include -#include -#include -#include -#include -#include +#include "core-impl/collections/mediadevicecollection/support/ConnectionAssistant.h" +#include "core/support/Debug.h" + +#include +#include +#include +#include +#include +#include +#include #include diff --git a/src/OpmlParser.h b/src/OpmlParser.h --- a/src/OpmlParser.h +++ b/src/OpmlParser.h @@ -21,15 +21,13 @@ #include "amarok_export.h" #include "OpmlOutline.h" -#include #include #include -#include #include +#include #include -#include -#include +#include #include namespace KIO diff --git a/src/OpmlParser.cpp b/src/OpmlParser.cpp --- a/src/OpmlParser.cpp +++ b/src/OpmlParser.cpp @@ -23,7 +23,7 @@ #include #include -#include +#include #include const QString OpmlParser::OPML_MIME = "text/x-opml+xml"; diff --git a/src/OpmlWriter.h b/src/OpmlWriter.h --- a/src/OpmlWriter.h +++ b/src/OpmlWriter.h @@ -20,8 +20,8 @@ #include "OpmlOutline.h" #include -#include +#include #include class AMAROK_EXPORT OpmlWriter : public QObject, public ThreadWeaver::Job diff --git a/src/PaletteHandler.h b/src/PaletteHandler.h --- a/src/PaletteHandler.h +++ b/src/PaletteHandler.h @@ -20,8 +20,9 @@ #include "amarok_export.h" #include -#include +#include +class QAbstractItemView; class PaletteHandler; namespace The { diff --git a/src/PaletteHandler.cpp b/src/PaletteHandler.cpp --- a/src/PaletteHandler.cpp +++ b/src/PaletteHandler.cpp @@ -18,8 +18,7 @@ #include "PaletteHandler.h" -#include - +#include #include diff --git a/src/PluginManager.h b/src/PluginManager.h --- a/src/PluginManager.h +++ b/src/PluginManager.h @@ -18,14 +18,15 @@ #define AMAROK_PLUGINMANAGER_H #include "amarok_export.h" -#include "core/support/PluginFactory.h" #include #include namespace Plugins { +class PluginFactory; + class AMAROK_EXPORT PluginManager : public QObject { Q_OBJECT diff --git a/src/PopupDropperFactory.h b/src/PopupDropperFactory.h --- a/src/PopupDropperFactory.h +++ b/src/PopupDropperFactory.h @@ -26,6 +26,7 @@ @author Nikolaj Hald Nielsen */ class PopupDropperFactory; +class PopupDropperItem; namespace The { AMAROK_EXPORT PopupDropperFactory* popupDropperFactory(); diff --git a/src/PopupDropperFactory.cpp b/src/PopupDropperFactory.cpp --- a/src/PopupDropperFactory.cpp +++ b/src/PopupDropperFactory.cpp @@ -21,9 +21,6 @@ #include "SvgHandler.h" #include "core/support/Debug.h" #include "context/popupdropper/libpud/PopupDropperItem.h" -#include "context/ContextView.h" - -#include #include @@ -77,9 +74,9 @@ //windowColor.setBlue( 255 - origWindowColor.blue() ); //windowColor.setGreen( 255 - origWindowColor.green() ); QColor windowColor( The::paletteHandler()->palette().color( QPalette::Base ) ); - windowColor.setAlpha( 176 ); + windowColor.setAlpha( 200 ); QColor textColor( The::paletteHandler()->palette().color( QPalette::Link ) ); - QColor highlightedTextColor( The::paletteHandler()->palette().color( QPalette::LinkVisited ) ); + QColor highlightedTextColor( The::paletteHandler()->palette().color( QPalette::Text ) ); QColor borderColor( The::paletteHandler()->palette().color( QPalette::Text ) ); QColor fillColor( borderColor ); fillColor.setAlpha( 48 ); @@ -116,7 +113,6 @@ if( item->isSubmenuTrigger() ) item->setHoverIndicatorShowStyle( PopupDropperItem::OnHover ); - } void PopupDropperFactory::adjustItems( PopupDropper* pud ) diff --git a/src/QStringx.h b/src/QStringx.h --- a/src/QStringx.h +++ b/src/QStringx.h @@ -19,11 +19,8 @@ #ifndef AMAROK_QSTRINGX_H #define AMAROK_QSTRINGX_H -#include -#include -#include #include -#include +#include namespace Amarok { diff --git a/src/QStringx.cpp b/src/QStringx.cpp --- a/src/QStringx.cpp +++ b/src/QStringx.cpp @@ -85,7 +85,7 @@ if( opt ) formatString = QLatin1Char( '{' ) + formatString + QLatin1Char( '}' ); - QStringx fmtx( formatString ); + QStringx fmtx( formatString ); return fmtx.namedOptArgs( args ); } diff --git a/src/SvgHandler.h b/src/SvgHandler.h --- a/src/SvgHandler.h +++ b/src/SvgHandler.h @@ -22,16 +22,16 @@ #include "amarok_export.h" #include "core/meta/forward_declarations.h" -#include -#include -#include - #include #include +#include #include -class SvgHandler; +#include + class QStyleOptionSlider; +class QSvgRenderer; +class SvgHandler; namespace The { AMAROK_EXPORT SvgHandler* svgHandler(); @@ -105,12 +105,7 @@ * The background part before the knob, is painted in a different color than the * part after (and under) the knob. * @param p The painter to use. - * @param x The x position to begin painting at. - * @param y The y position to begin painting at. - * @param width The width of the slider to paint. - * @param height The height of the slider. The background part does not scale in height, it will always be a relatively thin line, but the knob and end markers do. * @param percentage The percentange of the slider that the knob is positioned at. - * @param active Specifies whether the slider should be painted "active" using the current palettes active colors, to specify that it currently has mouse focus or hover. */ void paintCustomSlider( QPainter *p, QStyleOptionSlider *slider, qreal percentage, bool paintMoodbar = false ); diff --git a/src/SvgHandler.cpp b/src/SvgHandler.cpp --- a/src/SvgHandler.cpp +++ b/src/SvgHandler.cpp @@ -32,13 +32,14 @@ #include #include -#include #include #include #include #include +#include #include +#include #include @@ -77,7 +78,7 @@ bool SvgHandler::loadSvg( const QString& name ) { - const QString &svgFilename = !m_customTheme ? KStandardDirs::locate( "data", name ) : name; + const QString &svgFilename = !m_customTheme ? QStandardPaths::locate( QStandardPaths::GenericDataLocation, name ) : name; QSvgRenderer *renderer = new QSvgRenderer( The::svgTinter()->tint( svgFilename ) ); if ( !renderer->isValid() ) @@ -244,7 +245,8 @@ //redraw entire app.... reTint(); m_cache->clear(); - if( auto window = App::instance()->mainWindow() ) + + if( auto window = pApp->mainWindow() ) window->update(); } diff --git a/src/SvgTinter.h b/src/SvgTinter.h --- a/src/SvgTinter.h +++ b/src/SvgTinter.h @@ -21,7 +21,6 @@ #include "amarok_export.h" #include -#include #include #include #include diff --git a/src/SvgTinter.cpp b/src/SvgTinter.cpp --- a/src/SvgTinter.cpp +++ b/src/SvgTinter.cpp @@ -21,6 +21,8 @@ #include "core/support/Debug.h" #include +#include + #include SvgTinter * SvgTinter::s_instance = 0; @@ -77,33 +79,33 @@ void SvgTinter::init() { - if ( m_lastPalette != App::instance()->palette() || m_firstRun ) { - m_tintMap.insert( "#666765", App::instance()->palette().window().color().name() ); + if ( m_lastPalette != pApp->palette() || m_firstRun ) { + m_tintMap.insert( "#666765", pApp->palette().window().color().name() ); //insert a color for bright ( highlight color ) - m_tintMap.insert( "#66ffff", App::instance()->palette().highlight().color().name() ); + m_tintMap.insert( "#66ffff", pApp->palette().highlight().color().name() ); //a slightly lighter than window color: - m_tintMap.insert( "#e8e8e8", blendColors( App::instance()->palette().window().color(), "#ffffff", 90 ).name() ); + m_tintMap.insert( "#e8e8e8", blendColors( pApp->palette().window().color(), "#ffffff", 90 ).name() ); //a slightly darker than window color: - m_tintMap.insert( "#565755", blendColors( App::instance()->palette().window().color(), "#000000", 90 ).name() ); + m_tintMap.insert( "#565755", blendColors( pApp->palette().window().color(), "#000000", 90 ).name() ); //list background: #ifdef Q_WS_MAC - m_tintMap.insert( "#f0f0f0", blendColors( App::instance()->palette().window().color(), "#000000", 90 ).name() ); - m_tintMap.insert( "#ffffff", blendColors( App::instance()->palette().window().color(), "#000000", 98 ).name() ); + m_tintMap.insert( "#f0f0f0", blendColors( pApp->palette().window().color(), "#000000", 90 ).name() ); + m_tintMap.insert( "#ffffff", blendColors( pApp->palette().window().color(), "#000000", 98 ).name() ); #else - m_tintMap.insert( "#f0f0f0", App::instance()->palette().base().color().name() ); + m_tintMap.insert( "#f0f0f0", pApp->palette().base().color().name() ); #endif //alternate list background: - m_tintMap.insert( "#e0e0e0", App::instance()->palette().alternateBase().color().name() ); + m_tintMap.insert( "#e0e0e0", pApp->palette().alternateBase().color().name() ); //highlight/window mix: - m_tintMap.insert( "#123456", blendColors( App::instance()->palette().window().color(), App::instance()->palette().highlight().color().name(), 80 ).name() ); + m_tintMap.insert( "#123456", blendColors( pApp->palette().window().color(), pApp->palette().highlight().color().name(), 80 ).name() ); //text color, useful for adding contrast - m_tintMap.insert( "#010101", App::instance()->palette().text().color().name() ); + m_tintMap.insert( "#010101", pApp->palette().text().color().name() ); - m_lastPalette = App::instance()->palette(); + m_lastPalette = pApp->palette(); } } diff --git a/src/TrayIcon.h b/src/TrayIcon.h --- a/src/TrayIcon.h +++ b/src/TrayIcon.h @@ -24,8 +24,9 @@ #include "core/meta/forward_declarations.h" #include "core/support/SmartPointerList.h" -#include -#include +#include + +class QAction; namespace Amarok { @@ -54,7 +55,7 @@ Meta::TrackPtr m_track; SmartPointerList m_extraActions; - QWeakPointer m_separator; + QPointer m_separator; }; } diff --git a/src/TrayIcon.cpp b/src/TrayIcon.cpp --- a/src/TrayIcon.cpp +++ b/src/TrayIcon.cpp @@ -34,22 +34,22 @@ #include "playlist/PlaylistActions.h" #include -#include #include #include #include #include #include +#include #include #ifdef Q_WS_MAC extern void qt_mac_set_dock_menu(QMenu *); #endif Amarok::TrayIcon::TrayIcon( QObject *parent ) - : KStatusNotifierItem( parent ) - , m_track( The::engineController()->currentTrack() ) + : KStatusNotifierItem( parent ) + , m_track( The::engineController()->currentTrack() ) { PERF_LOG( "Beginning TrayIcon Constructor" ); KActionCollection* const ac = Amarok::actionCollection(); @@ -170,12 +170,12 @@ QString stars; for( int i = 0; i < rating / 2; ++i ) stars += QString( "" ) - .arg( KStandardDirs::locate( "data", "amarok/images/star.png" ) ) + .arg( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/star.png" ) ) .arg( QFontMetrics( QToolTip::font() ).height() ) .arg( QFontMetrics( QToolTip::font() ).height() ); if( rating % 2 ) stars += QString( "" ) - .arg( KStandardDirs::locate( "data", "amarok/images/smallstar.png" ) ) + .arg( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/smallstar.png" ) ) .arg( QFontMetrics( QToolTip::font() ).height() ) .arg( QFontMetrics( QToolTip::font() ).height() ); diff --git a/src/aboutdialog/ExtendedAboutDialog.h b/src/aboutdialog/ExtendedAboutDialog.h --- a/src/aboutdialog/ExtendedAboutDialog.h +++ b/src/aboutdialog/ExtendedAboutDialog.h @@ -29,7 +29,7 @@ #include "AnimatedBarWidget.h" #include -#include +#include class AMAROK_EXPORT ExtendedAboutDialog : public QDialog { @@ -53,21 +53,21 @@ //Authors: QString m_authorPageTitle; - QWeakPointer m_showOcsAuthorButton; - QWeakPointer m_authorWidget; - QWeakPointer m_authorListWidget; + QPointer m_showOcsAuthorButton; + QPointer m_authorWidget; + QPointer m_authorListWidget; bool m_isOfflineAuthorWidget; //Contributors: - QWeakPointer m_showOcsCreditButton; - QWeakPointer m_creditWidget; - QWeakPointer m_creditListWidget; + QPointer m_showOcsCreditButton; + QPointer m_creditWidget; + QPointer m_creditListWidget; bool m_isOfflineCreditWidget; //Donors: - QWeakPointer m_showOcsDonorButton; - QWeakPointer m_donorWidget; - QWeakPointer m_donorListWidget; + QPointer m_showOcsDonorButton; + QPointer m_donorWidget; + QPointer m_donorListWidget; bool m_isOfflineDonorWidget; }; diff --git a/src/aboutdialog/ExtendedAboutDialog.cpp b/src/aboutdialog/ExtendedAboutDialog.cpp --- a/src/aboutdialog/ExtendedAboutDialog.cpp +++ b/src/aboutdialog/ExtendedAboutDialog.cpp @@ -26,26 +26,24 @@ #include "OcsPersonItem.h" #include "libattica-ocsclient/providerinitjob.h" +#include +#include +#include #include #include +#include #include #include +#include #include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include +#include +#include +#include +#include void ExtendedAboutDialog::Private::_k_showLicense( const QString &number ) { @@ -58,11 +56,11 @@ dialog->connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject); buttonBox->button(QDialogButtonBox::Close)->setDefault(true); - const QFont font = KGlobalSettings::fixedFont(); + const QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont); QFontMetrics metrics(font); const QString licenseText = aboutData->licenses().at(number.toInt()).text(); - KTextBrowser *licenseBrowser = new KTextBrowser; + QTextBrowser *licenseBrowser = new QTextBrowser; licenseBrowser->setFont(font); licenseBrowser->setLineWrapMode(QTextEdit::NoWrap); licenseBrowser->setText(licenseText); @@ -151,7 +149,6 @@ titleWidget->setText(i18n("%1
Version %2
Using KDE Frameworks %3", aboutData->displayName(), aboutData->version(), KCoreAddons::versionString())); - //Now let's add the tab bar... QTabWidget *tabWidget = new QTabWidget; tabWidget->setUsesScrollButtons(false); @@ -206,7 +203,7 @@ //Stuff needed by both Authors and Credits pages: - QPixmap openDesktopPixmap = QPixmap( KStandardDirs::locate( "data", "amarok/images/opendesktop-22.png" ) ); + QPixmap openDesktopPixmap = QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/opendesktop-22.png" ) ); QIcon openDesktopIcon = QIcon( openDesktopPixmap ); @@ -261,7 +258,7 @@ authorLayout->addWidget( m_authorListWidget.data() ); authorLayout->setMargin( 0 ); authorLayout->setSpacing( 2 ); - m_authorWidget.data()->setLayout( authorLayout ); + m_authorWidget->setLayout( authorLayout ); m_authorPageTitle = ( authorCount == 1 ) ? i18n("A&uthor") : i18n("A&uthors"); tabWidget->addTab(m_authorWidget.data(), m_authorPageTitle); @@ -291,7 +288,7 @@ creditLayout->addWidget( m_creditListWidget.data() ); creditLayout->setMargin( 0 ); creditLayout->setSpacing( 2 ); - m_creditWidget.data()->setLayout( creditLayout ); + m_creditWidget->setLayout( creditLayout ); tabWidget->addTab( m_creditWidget.data(), i18n("&Contributors")); m_isOfflineCreditWidget = true; //is this still used? @@ -332,7 +329,7 @@ "during Roktober and opt-in.

")); roktoberLabel->setOpenExternalLinks(true); donorLayout->addWidget(roktoberLabel); - m_donorWidget.data()->setLayout( donorLayout ); + m_donorWidget->setLayout( donorLayout ); tabWidget->addTab( m_donorWidget.data(), i18n("&Donors")); m_isOfflineDonorWidget = true; @@ -360,7 +357,7 @@ translatorPageText += KAboutData::aboutTranslationTeam(); - KTextBrowser *translatorTextBrowser = new KTextBrowser; + QTextBrowser *translatorTextBrowser = new QTextBrowser; translatorTextBrowser->setFrameStyle(QFrame::NoFrame); translatorTextBrowser->setPalette(transparentBackgroundPalette); translatorTextBrowser->setHtml(translatorPageText); @@ -385,19 +382,18 @@ void ExtendedAboutDialog::switchToOcsWidgets() { - if( !( Solid::Networking::status() == Solid::Networking::Connected || - Solid::Networking::status() == Solid::Networking::Unknown ) ) + if( !QNetworkConfigurationManager().isOnline() ) { KMessageBox::error( this, i18n( "Internet connection not available" ), i18n( "Network error" ) ); return; } if( m_showOcsAuthorButton ) - m_showOcsAuthorButton.data()->animate(); + m_showOcsAuthorButton->animate(); if( m_showOcsCreditButton ) - m_showOcsCreditButton.data()->animate(); + m_showOcsCreditButton->animate(); if( m_showOcsDonorButton ) - m_showOcsDonorButton.data()->animate(); + m_showOcsDonorButton->animate(); AmarokAttica::ProviderInitJob *providerJob = AmarokAttica::Provider::byId( m_ocsData.providerId() ); connect( providerJob, &AmarokAttica::ProviderInitJob::result, this, &ExtendedAboutDialog::onProviderFetched ); } @@ -411,11 +407,11 @@ debug()<<"Successfully fetched OCS provider"<< providerJob->provider().name(); debug()<<"About to request OCS data"; if( m_authorListWidget ) - m_authorListWidget.data()->switchToOcs( providerJob->provider() ); + m_authorListWidget->switchToOcs( providerJob->provider() ); if( m_creditListWidget ) - m_creditListWidget.data()->switchToOcs( providerJob->provider() ); + m_creditListWidget->switchToOcs( providerJob->provider() ); if( m_donorListWidget ) - m_donorListWidget.data()->switchToOcs( providerJob->provider() ); + m_donorListWidget->switchToOcs( providerJob->provider() ); } else warning() << "OCS provider fetch failed"; diff --git a/src/aboutdialog/OcsPersonItem.h b/src/aboutdialog/OcsPersonItem.h --- a/src/aboutdialog/OcsPersonItem.h +++ b/src/aboutdialog/OcsPersonItem.h @@ -28,6 +28,8 @@ #include +class KJob; + class OcsPersonItem : public QWidget, private Ui::OcsPersonItem { Q_OBJECT diff --git a/src/aboutdialog/OcsPersonItem.cpp b/src/aboutdialog/OcsPersonItem.cpp --- a/src/aboutdialog/OcsPersonItem.cpp +++ b/src/aboutdialog/OcsPersonItem.cpp @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -213,7 +213,7 @@ } } - QAction *visitProfile = new QAction( QIcon( QPixmap( KStandardDirs::locate( "data", + QAction *visitProfile = new QAction( QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/opendesktop-22.png" ) ) ), i18n( "Visit %1's openDesktop.org profile", ocsPerson.firstName() ), this ); visitProfile->setToolTip( i18n( "Visit %1's profile on openDesktop.org", ocsPerson.firstName() ) ); @@ -254,17 +254,17 @@ } else if( type == "delicious" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-delicious.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-delicious.png" ) ) ); text = i18n( "Visit contributor's del.icio.us profile" ); } else if( type == "Digg" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-digg.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-digg.png" ) ) ); text = i18n( "Visit contributor's Digg profile" ); } else if( type == "Facebook" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-facebook.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-facebook.png" ) ) ); text = i18n( "Visit contributor's Facebook profile" ); } else if( type == "Homepage" || type == "other" || ( type.isEmpty() && !url.isEmpty() ) ) @@ -280,25 +280,25 @@ } if( type == "other" && url.contains( "last.fm/" ) ) //HACK: assign a last.fm icon if the URL contains last.fm { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-lastfm.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-lastfm.png" ) ) ); text = i18n( "Visit contributor's Last.fm profile" ); } else continue; } else if( type == "LinkedIn" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-linkedin.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-linkedin.png" ) ) ); text = i18n( "Visit contributor's LinkedIn profile" ); } else if( type == "MySpace" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-myspace.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-myspace.png" ) ) ); text = i18n( "Visit contributor's MySpace homepage" ); } else if( type == "Reddit" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-reddit.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-reddit.png" ) ) ); text = i18n( "Visit contributor's Reddit profile" ); } else if( type == "YouTube" ) @@ -308,22 +308,22 @@ } else if( type == "Twitter" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-twitter.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-twitter.png" ) ) ); text = i18n( "Visit contributor's Twitter feed" ); } else if( type == "Wikipedia" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-wikipedia.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-wikipedia.png" ) ) ); text = i18n( "Visit contributor's Wikipedia profile" ); } else if( type == "Xing" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-xing.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-xing.png" ) ) ); text = i18n( "Visit contributor's Xing profile" ); } else if( type == "identi.ca" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-identica.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-identica.png" ) ) ); text = i18n( "Visit contributor's identi.ca feed" ); } else if( type == "libre.fm" ) @@ -333,7 +333,7 @@ } else if( type == "StackOverflow" ) { - icon = QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-stackoverflow.png" ) ) ); + icon = QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-stackoverflow.png" ) ) ); text = i18n( "Visit contributor's StackOverflow profile" ); } else diff --git a/src/aboutdialog/libattica-ocsclient/CMakeLists.txt b/src/aboutdialog/libattica-ocsclient/CMakeLists.txt --- a/src/aboutdialog/libattica-ocsclient/CMakeLists.txt +++ b/src/aboutdialog/libattica-ocsclient/CMakeLists.txt @@ -37,6 +37,6 @@ add_library(amarokocsclient SHARED ${ocsclient_SRCS}) set_target_properties(amarokocsclient PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION}) -target_link_libraries(amarokocsclient KF5::KIOCore KF5::KDELibs4Support) +target_link_libraries(amarokocsclient Qt5::Core Qt5::Gui KF5::KIOCore KF5::I18n) install(TARGETS amarokocsclient ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/aboutdialog/libattica-ocsclient/activitylistjob.cpp b/src/aboutdialog/libattica-ocsclient/activitylistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/activitylistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/activitylistjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; @@ -54,8 +53,6 @@ void ActivityListJob::doWork() { - qDebug() << m_url; - auto job = KIO::get( m_url, KIO::NoReload, KIO::HideProgressInfo ); connect( job, &KIO::TransferJob::result, this, &ActivityListJob::slotJobResult ); diff --git a/src/aboutdialog/libattica-ocsclient/atticaclient_export.h b/src/aboutdialog/libattica-ocsclient/atticaclient_export.h --- a/src/aboutdialog/libattica-ocsclient/atticaclient_export.h +++ b/src/aboutdialog/libattica-ocsclient/atticaclient_export.h @@ -19,16 +19,16 @@ #ifndef ATTICA_EXPORT_H #define ATTICA_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef ATTICA_EXPORT # if defined(MAKE_AMAROKOCSCLIENT_LIB) /* We are building this library */ -# define ATTICA_EXPORT KDE_EXPORT +# define ATTICA_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define ATTICA_EXPORT KDE_IMPORT +# define ATTICA_EXPORT Q_DECL_IMPORT # endif #endif diff --git a/src/aboutdialog/libattica-ocsclient/categorylistjob.cpp b/src/aboutdialog/libattica-ocsclient/categorylistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/categorylistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/categorylistjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; @@ -54,8 +53,6 @@ void CategoryListJob::doWork() { - qDebug() << m_url; - auto job = KIO::get( m_url, KIO::NoReload, KIO::HideProgressInfo ); connect( job, &KIO::TransferJob::result, this, &CategoryListJob::slotJobResult ); @@ -75,7 +72,6 @@ emitResult(); } else { - qDebug() << m_data; m_categoryList = CategoryParser().parseList( QString::fromUtf8( m_data.data() ) ); diff --git a/src/aboutdialog/libattica-ocsclient/contentjob.cpp b/src/aboutdialog/libattica-ocsclient/contentjob.cpp --- a/src/aboutdialog/libattica-ocsclient/contentjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/contentjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; diff --git a/src/aboutdialog/libattica-ocsclient/contentlistjob.cpp b/src/aboutdialog/libattica-ocsclient/contentlistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/contentlistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/contentlistjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; diff --git a/src/aboutdialog/libattica-ocsclient/folderlistjob.cpp b/src/aboutdialog/libattica-ocsclient/folderlistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/folderlistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/folderlistjob.cpp @@ -23,8 +23,8 @@ #include "folderparser.h" -#include -#include +#include + #include #include diff --git a/src/aboutdialog/libattica-ocsclient/knowledgebasejob.cpp b/src/aboutdialog/libattica-ocsclient/knowledgebasejob.cpp --- a/src/aboutdialog/libattica-ocsclient/knowledgebasejob.cpp +++ b/src/aboutdialog/libattica-ocsclient/knowledgebasejob.cpp @@ -24,8 +24,8 @@ #include "knowledgebaseparser.h" -#include -#include +#include + #include #include diff --git a/src/aboutdialog/libattica-ocsclient/knowledgebaselistjob.cpp b/src/aboutdialog/libattica-ocsclient/knowledgebaselistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/knowledgebaselistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/knowledgebaselistjob.cpp @@ -24,8 +24,8 @@ #include "knowledgebaseparser.h" -#include -#include +#include + #include #include diff --git a/src/aboutdialog/libattica-ocsclient/messagelistjob.cpp b/src/aboutdialog/libattica-ocsclient/messagelistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/messagelistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/messagelistjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; diff --git a/src/aboutdialog/libattica-ocsclient/personjob.cpp b/src/aboutdialog/libattica-ocsclient/personjob.cpp --- a/src/aboutdialog/libattica-ocsclient/personjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/personjob.cpp @@ -26,8 +26,7 @@ #include #include -#include -#include +#include using namespace AmarokAttica; diff --git a/src/aboutdialog/libattica-ocsclient/personlistjob.cpp b/src/aboutdialog/libattica-ocsclient/personlistjob.cpp --- a/src/aboutdialog/libattica-ocsclient/personlistjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/personlistjob.cpp @@ -26,8 +26,8 @@ #include #include -#include -#include +#include +#include using namespace AmarokAttica; diff --git a/src/aboutdialog/libattica-ocsclient/postjob.cpp b/src/aboutdialog/libattica-ocsclient/postjob.cpp --- a/src/aboutdialog/libattica-ocsclient/postjob.cpp +++ b/src/aboutdialog/libattica-ocsclient/postjob.cpp @@ -21,12 +21,13 @@ #include "postjob.h" -#include -#include +#include #include #include #include +#include + using namespace AmarokAttica; PostJob::PostJob() @@ -64,9 +65,11 @@ QString postData; const QStringList dataKeys = m_data.keys(); + QUrlQuery query; foreach( const QString &name, dataKeys ) { - m_url.addQueryItem( name, m_data.value( name ) ); + query.addQueryItem( name, m_data.value( name ) ); } + m_url.setQuery( query ); qDebug() << m_url; diff --git a/src/aboutdialog/libattica-ocsclient/provider.cpp b/src/aboutdialog/libattica-ocsclient/provider.cpp --- a/src/aboutdialog/libattica-ocsclient/provider.cpp +++ b/src/aboutdialog/libattica-ocsclient/provider.cpp @@ -21,8 +21,10 @@ #include "provider.h" -#include +#include +#include #include +#include #include "activitylistjob.h" #include "categorylistjob.h" @@ -120,18 +122,22 @@ PersonListJob* Provider::requestPersonSearchByName(const QString& name) { QUrl url = createUrl( "person/data"); - url.addQueryItem("name", name); + QUrlQuery query; + query.addQueryItem("name", name); + url.setQuery(query); return doRequestPersonList( url ); } PersonListJob* Provider::requestPersonSearchByLocation(qreal latitude, qreal longitude, qreal distance, int page, int pageSize) { QUrl url = createUrl( "person/data" ); - url.addQueryItem("latitude", QString::number(latitude)); - url.addQueryItem("longitude", QString::number(longitude)); - url.addQueryItem("distance", QString::number(distance)); - url.addQueryItem("page", QString::number(page)); - url.addQueryItem("pagesize", QString::number(pageSize)); + QUrlQuery query; + query.addQueryItem("latitude", QString::number(latitude)); + query.addQueryItem("longitude", QString::number(longitude)); + query.addQueryItem("distance", QString::number(distance)); + query.addQueryItem("page", QString::number(page)); + query.addQueryItem("pagesize", QString::number(pageSize)); + url.setQuery(query); qDebug() << "Location-based search:" << latitude << longitude << distance; qDebug() << "URL:" << url; @@ -141,9 +147,12 @@ PersonListJob* Provider::requestFriend(const QString& id, int page, int pageSize) { QUrl url = createUrl( "friend/data/" + id ); - url.addQueryItem("page", QString::number(page)); - url.addQueryItem("pagesize", QString::number(pageSize)); - kDebug() << "URL:" << url; + QUrlQuery query; + query.addQueryItem("page", QString::number(page)); + query.addQueryItem("pagesize", QString::number(pageSize)); + url.setQuery(query); + + qDebug() << "URL:" << url; return doRequestPersonList( url ); } @@ -235,14 +244,15 @@ ContentListJob *job = new ContentListJob(); QUrl url = createUrl( "content/data" ); + QUrlQuery query; QStringList categoryIds; foreach( const Category &category, categories ) { categoryIds.append( category.id() ); } - url.addQueryItem( "categories", categoryIds.join( "x" ) ); + query.addQueryItem( "categories", categoryIds.join( "x" ) ); - url.addQueryItem( "search", search ); + query.addQueryItem( "search", search ); QString sortModeString; switch ( sortMode ) { case Newest: @@ -259,9 +269,11 @@ break; } if ( !sortModeString.isEmpty() ) { - url.addQueryItem( "sortmode", sortModeString ); + query.addQueryItem( "sortmode", sortModeString ); } + url.setQuery(query); + job->setUrl( url ); job->start(); @@ -295,12 +307,13 @@ KnowledgeBaseListJob *job = new KnowledgeBaseListJob(); QUrl url = createUrl( "knowledgebase/data" ); + QUrlQuery query; if (content) { - url.addQueryItem("content", QString::number(content)); + query.addQueryItem("content", QString::number(content)); } - url.addQueryItem( "search", search ); + query.addQueryItem( "search", search ); QString sortModeString; switch ( sortMode ) { case Newest: @@ -318,11 +331,13 @@ break; } if ( !sortModeString.isEmpty() ) { - url.addQueryItem( "sortmode", sortModeString ); + query.addQueryItem( "sortmode", sortModeString ); } - url.addQueryItem( "page", QString::number(page) ); - url.addQueryItem( "pagesize", QString::number(pageSize) ); + query.addQueryItem( "page", QString::number(page) ); + query.addQueryItem( "pagesize", QString::number(pageSize) ); + + url.setQuery(query); job->setUrl( url ); @@ -345,9 +360,10 @@ EventListJob* job = new EventListJob(); QUrl url = createUrl("event/data"); + QUrlQuery query; if (!search.isEmpty()) { - url.addQueryItem("search", search); + query.addQueryItem("search", search); } QString sortModeString; @@ -362,17 +378,19 @@ break; } if (!sortModeString.isEmpty()) { - url.addQueryItem("sortmode", sortModeString); + query.addQueryItem("sortmode", sortModeString); } if (!country.isEmpty()) { - url.addQueryItem("country", country); + query.addQueryItem("country", country); } - url.addQueryItem("startat", startAt.toString(Qt::ISODate)); + query.addQueryItem("startat", startAt.toString(Qt::ISODate)); + + query.addQueryItem("page", QString::number(page)); + query.addQueryItem("pagesize", QString::number(pageSize)); - url.addQueryItem("page", QString::number(page)); - url.addQueryItem("pagesize", QString::number(pageSize)); + url.setQuery(query); job->setUrl(url); diff --git a/src/amarok_export.h b/src/amarok_export.h --- a/src/amarok_export.h +++ b/src/amarok_export.h @@ -19,16 +19,16 @@ #ifndef AMAROK_EXPORT_H #define AMAROK_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_EXPORT # ifdef MAKE_AMAROKLIB_LIB /* We are building this library */ -# define AMAROK_EXPORT KDE_EXPORT +# define AMAROK_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_EXPORT KDE_IMPORT +# define AMAROK_EXPORT Q_DECL_IMPORT # endif // MAKE_AMAROKLIB_LIB #endif // AMAROK_EXPORT diff --git a/src/amarokconfig.kcfg b/src/amarokconfig.kcfg --- a/src/amarokconfig.kcfg +++ b/src/amarokconfig.kcfg @@ -6,7 +6,7 @@ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > qdir.h - + diff --git a/src/amarokurls/AmarokUrl.cpp b/src/amarokurls/AmarokUrl.cpp --- a/src/amarokurls/AmarokUrl.cpp +++ b/src/amarokurls/AmarokUrl.cpp @@ -23,6 +23,7 @@ #include #include +#include AmarokUrl::AmarokUrl() : m_id( -1 ) @@ -127,10 +128,12 @@ url.setScheme( "amarok" ); url.setHost( m_command ); url.setPath( '/' + m_path ); // the path must begin by / + QUrlQuery query; foreach( const QString &argName, m_arguments.keys() ) - url.addQueryItem( argName, m_arguments[argName] ); + query.addQueryItem( argName, m_arguments[argName] ); + url.setQuery( query ); return url.toEncoded(); } diff --git a/src/amarokurls/AmarokUrlHandler.cpp b/src/amarokurls/AmarokUrlHandler.cpp --- a/src/amarokurls/AmarokUrlHandler.cpp +++ b/src/amarokurls/AmarokUrlHandler.cpp @@ -32,7 +32,7 @@ #include "playlist/PlaylistViewUrlGenerator.h" #include -#include +#include namespace The { static AmarokUrlHandler* s_AmarokUrlHandler_instance = 0; diff --git a/src/amarokurls/BookmarkCurrentButton.cpp b/src/amarokurls/BookmarkCurrentButton.cpp --- a/src/amarokurls/BookmarkCurrentButton.cpp +++ b/src/amarokurls/BookmarkCurrentButton.cpp @@ -20,7 +20,7 @@ #include "BookmarkModel.h" #include -#include +#include #include #include diff --git a/src/amarokurls/BookmarkGroup.h b/src/amarokurls/BookmarkGroup.h --- a/src/amarokurls/BookmarkGroup.h +++ b/src/amarokurls/BookmarkGroup.h @@ -24,13 +24,13 @@ #include #include -#include +#include "AmarokSharedPointer.h" class BookmarkGroup; class AmarokUrl; -typedef KSharedPtr AmarokUrlPtr; -typedef KSharedPtr BookmarkGroupPtr; +typedef AmarokSharedPointer AmarokUrlPtr; +typedef AmarokSharedPointer BookmarkGroupPtr; typedef QList BookmarkList; typedef QList BookmarkGroupList; diff --git a/src/amarokurls/BookmarkGroup.cpp b/src/amarokurls/BookmarkGroup.cpp --- a/src/amarokurls/BookmarkGroup.cpp +++ b/src/amarokurls/BookmarkGroup.cpp @@ -188,7 +188,7 @@ void BookmarkGroup::clear() { //DEBUG_BLOCK -//m_childBookmarks, m_childGroups are KSharedPtrs, so we should be able to just clear the list +//m_childBookmarks, m_childGroups are AmarokSharedPointers, so we should be able to just clear the list //and the playlistptrs will delete themselves m_childGroups.clear(); m_childBookmarks.clear(); diff --git a/src/amarokurls/BookmarkManager.cpp b/src/amarokurls/BookmarkManager.cpp --- a/src/amarokurls/BookmarkManager.cpp +++ b/src/amarokurls/BookmarkManager.cpp @@ -20,10 +20,10 @@ #include #include -#include - #include + #include +#include BookmarkManager * BookmarkManager::s_instance = 0; @@ -40,7 +40,6 @@ m_widget = new BookmarkManagerWidget( this ); layout->addWidget( m_widget ); layout->setContentsMargins( 0, 0, 0, 0 ); - setLayout( layout ); const QSize winSize = Amarok::config( "Bookmark Manager" ).readEntry( "Window Size", QSize( 600, 400 ) ); resize( winSize ); diff --git a/src/amarokurls/BookmarkManagerWidget.h b/src/amarokurls/BookmarkManagerWidget.h --- a/src/amarokurls/BookmarkManagerWidget.h +++ b/src/amarokurls/BookmarkManagerWidget.h @@ -19,10 +19,9 @@ #include "amarok_export.h" #include "amarokurls/BookmarkTreeView.h" +#include "widgets/BoxWidget.h" #include "widgets/LineEdit.h" -#include - #include #include #include @@ -34,11 +33,11 @@ @author Nikolaj Hald Nielsen */ -class AMAROK_EXPORT BookmarkManagerWidget : public KVBox +class AMAROK_EXPORT BookmarkManagerWidget : public BoxWidget { Q_OBJECT public: - BookmarkManagerWidget( QWidget * parent = 0); + BookmarkManagerWidget( QWidget *parent = Q_NULLPTR ); ~BookmarkManagerWidget(); BookmarkTreeView * treeView(); diff --git a/src/amarokurls/BookmarkManagerWidget.cpp b/src/amarokurls/BookmarkManagerWidget.cpp --- a/src/amarokurls/BookmarkManagerWidget.cpp +++ b/src/amarokurls/BookmarkManagerWidget.cpp @@ -24,19 +24,19 @@ #include "widgets/ProgressWidget.h" #include +#include #include -#include -#include - #include +#include + +#include BookmarkManagerWidget::BookmarkManagerWidget( QWidget * parent ) - : KVBox( parent ) + : BoxWidget( true, parent ) { + layout()->setContentsMargins( 0,0,0,0 ); - setContentsMargins( 0,0,0,0 ); - - KHBox * topLayout = new KHBox( this ); + BoxWidget * topLayout = new BoxWidget( false, this ); m_toolBar = new QToolBar( topLayout ); m_toolBar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); @@ -52,9 +52,9 @@ m_toolBar->addWidget( new BookmarkCurrentButton( 0 ) ); m_searchEdit = new Amarok::LineEdit( topLayout ); - m_searchEdit->setClickMessage( i18n( "Filter bookmarks" ) ); + m_searchEdit->setPlaceholderText( i18n( "Filter bookmarks" ) ); m_searchEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); - m_searchEdit->setClearButtonShown( true ); + m_searchEdit->setClearButtonEnabled( true ); m_searchEdit->setFrame( true ); m_searchEdit->setToolTip( i18n( "Start typing to progressively filter the bookmarks" ) ); m_searchEdit->setFocusPolicy( Qt::ClickFocus ); // Without this, the widget goes into text input mode directly on startup diff --git a/src/amarokurls/BookmarkMetaActions.cpp b/src/amarokurls/BookmarkMetaActions.cpp --- a/src/amarokurls/BookmarkMetaActions.cpp +++ b/src/amarokurls/BookmarkMetaActions.cpp @@ -25,7 +25,7 @@ #include "widgets/ProgressWidget.h" #include -#include +#include BookmarkAlbumAction::BookmarkAlbumAction( QObject *parent, Meta::AlbumPtr album ) : QAction( i18n( "Bookmark this Album" ), parent ) diff --git a/src/amarokurls/BookmarkModel.h b/src/amarokurls/BookmarkModel.h --- a/src/amarokurls/BookmarkModel.h +++ b/src/amarokurls/BookmarkModel.h @@ -19,19 +19,19 @@ #include "BookmarkViewItem.h" -#include +#include "AmarokSharedPointer.h" #include #include #include class BookmarkGroup; -typedef KSharedPtr BookmarkViewItemPtr; +typedef AmarokSharedPointer BookmarkViewItemPtr; class BookmarkGroup; -typedef KSharedPtr BookmarkGroupPtr; +typedef AmarokSharedPointer BookmarkGroupPtr; typedef QList BookmarkGroupList; @@ -127,7 +127,7 @@ static BookmarkModel * s_instance; BookmarkGroupPtr m_root; - mutable QHash m_viewItems; ///the hash of the pointer mapped to the KSharedPtr + mutable QHash m_viewItems; ///the hash of the pointer mapped to the AmarokSharedPointer }; diff --git a/src/amarokurls/BookmarkModel.cpp b/src/amarokurls/BookmarkModel.cpp --- a/src/amarokurls/BookmarkModel.cpp +++ b/src/amarokurls/BookmarkModel.cpp @@ -491,8 +491,10 @@ BookmarkModel::reloadFromDb() { DEBUG_BLOCK; + + beginResetModel(); m_root->clear(); - reset(); + endResetModel(); } diff --git a/src/amarokurls/BookmarkTreeView.cpp b/src/amarokurls/BookmarkTreeView.cpp --- a/src/amarokurls/BookmarkTreeView.cpp +++ b/src/amarokurls/BookmarkTreeView.cpp @@ -30,7 +30,6 @@ #include #include -#include #include #include #include @@ -369,7 +368,7 @@ //Now we really should pop up a menu to get the user to enter some info about this //new track, but for now, just fake it as this is just for testing anyway - QString url = QUrl::fromEncoded ( QByteArray::fromBase64 ( url1->path().toUtf8() ) ).toString(); + QUrl url = QUrl::fromEncoded ( QByteArray::fromBase64 ( url1->path().toUtf8() ) ); Meta::TimecodeTrackPtr track = Meta::TimecodeTrackPtr( new Meta::TimecodeTrack( i18n( "New Timecode Track" ), url, start, end ) ); Meta::TimecodeAlbumPtr album = Meta::TimecodeAlbumPtr( new Meta::TimecodeAlbum( i18n( "Unknown" ) ) ); Meta::TimecodeArtistPtr artist = Meta::TimecodeArtistPtr( new Meta::TimecodeArtist( i18n( "Unknown" ) ) ); @@ -429,7 +428,7 @@ const BookmarkModel::Column col = BookmarkModel::Column( index ); if( col == BookmarkModel::Command ) - header()->setResizeMode( index, QHeaderView::ResizeToContents ); + header()->setSectionResizeMode( index, QHeaderView::ResizeToContents ); m_columnsSize[ col ] = ratio; } diff --git a/src/amarokurls/BookmarkViewItem.h b/src/amarokurls/BookmarkViewItem.h --- a/src/amarokurls/BookmarkViewItem.h +++ b/src/amarokurls/BookmarkViewItem.h @@ -20,18 +20,18 @@ #include "core/support/Debug.h" #include -#include +#include "AmarokSharedPointer.h" class BookmarkGroup; -typedef KSharedPtr BookmarkGroupPtr; +typedef AmarokSharedPointer BookmarkGroupPtr; typedef QList BookmarkGroupList; /** @author Nikolaj Hald Nielsen */ class BookmarkViewItem; -typedef KSharedPtr BookmarkViewItemPtr; +typedef AmarokSharedPointer BookmarkViewItemPtr; class BookmarkViewItem : public virtual QSharedData { diff --git a/src/amarokurls/ContextUrlGenerator.cpp b/src/amarokurls/ContextUrlGenerator.cpp --- a/src/amarokurls/ContextUrlGenerator.cpp +++ b/src/amarokurls/ContextUrlGenerator.cpp @@ -18,9 +18,8 @@ #include "AmarokUrl.h" #include "AmarokUrlHandler.h" -#include "context/ContextView.h" -#include +#include ContextUrlGenerator * ContextUrlGenerator::s_instance = 0; diff --git a/src/amarokurls/ContextUrlRunner.cpp b/src/amarokurls/ContextUrlRunner.cpp --- a/src/amarokurls/ContextUrlRunner.cpp +++ b/src/amarokurls/ContextUrlRunner.cpp @@ -18,9 +18,8 @@ #include "MainWindow.h" #include "AmarokUrlHandler.h" -#include "context/ContextView.h" -#include +#include ContextUrlRunner::ContextUrlRunner() {} diff --git a/src/amarokurls/NavigationUrlGenerator.cpp b/src/amarokurls/NavigationUrlGenerator.cpp --- a/src/amarokurls/NavigationUrlGenerator.cpp +++ b/src/amarokurls/NavigationUrlGenerator.cpp @@ -20,6 +20,7 @@ #include "amarokconfig.h" #include "amarokurls/AmarokUrl.h" #include "amarokurls/AmarokUrlHandler.h" +#include "browsers/BrowserDock.h" #include "browsers/CollectionTreeItemModelBase.h" #include "browsers/collectionbrowser/CollectionWidget.h" #include "browsers/filebrowser/FileBrowser.h" diff --git a/src/amarokurls/NavigationUrlRunner.cpp b/src/amarokurls/NavigationUrlRunner.cpp --- a/src/amarokurls/NavigationUrlRunner.cpp +++ b/src/amarokurls/NavigationUrlRunner.cpp @@ -19,6 +19,7 @@ #include "MainWindow.h" #include "amarokconfig.h" #include "amarokurls/AmarokUrlHandler.h" +#include "browsers/BrowserDock.h" #include "browsers/CollectionTreeItemModelBase.h" #include "browsers/collectionbrowser/CollectionWidget.h" #include "browsers/filebrowser/FileBrowser.h" diff --git a/src/amarokurls/PlayUrlGenerator.cpp b/src/amarokurls/PlayUrlGenerator.cpp --- a/src/amarokurls/PlayUrlGenerator.cpp +++ b/src/amarokurls/PlayUrlGenerator.cpp @@ -24,7 +24,7 @@ #include "EngineController.h" #include "BookmarkModel.h" -#include +#include PlayUrlGenerator * PlayUrlGenerator::s_instance = 0; diff --git a/src/browsers/BrowserBreadcrumbItem.h b/src/browsers/BrowserBreadcrumbItem.h --- a/src/browsers/BrowserBreadcrumbItem.h +++ b/src/browsers/BrowserBreadcrumbItem.h @@ -17,7 +17,7 @@ #ifndef BROWSERBREADCRUMBITEM_H #define BROWSERBREADCRUMBITEM_H -#include +#include "widgets/BoxWidget.h" #include @@ -43,7 +43,7 @@ * @author Nikolaj Hald Nielsen */ -class BrowserBreadcrumbItem : public KHBox +class BrowserBreadcrumbItem : public BoxWidget { Q_OBJECT public: diff --git a/src/browsers/BrowserBreadcrumbItem.cpp b/src/browsers/BrowserBreadcrumbItem.cpp --- a/src/browsers/BrowserBreadcrumbItem.cpp +++ b/src/browsers/BrowserBreadcrumbItem.cpp @@ -21,21 +21,22 @@ #include "core/support/Debug.h" #include "widgets/BreadcrumbItemButton.h" -#include -#include - #include +#include +#include #include +#include + + BrowserBreadcrumbItem::BrowserBreadcrumbItem( BrowserCategory *category, QWidget *parent ) - : KHBox( parent ) + : BoxWidget( false, parent ) , m_menuButton( 0 ) { //figure out if we want to add a menu to this item. A menu allows you to select //any of the _sibling_ items. (yes, I know, this is different from how Dolphin //does it, but I find the Dolphin way amazingly unintuitive and I always get it //wrong when using it...) - BrowserCategoryList * parentList = category->parentList(); if( parentList ) { @@ -94,7 +95,7 @@ BrowserBreadcrumbItem::BrowserBreadcrumbItem( const QString &name, const QString &callback, const BreadcrumbSiblingList &childItems, FileBrowser *handler, QWidget *parent ) - : KHBox( parent ) + : BoxWidget( false, parent ) , m_menuButton( 0 ) , m_callback( callback ) { diff --git a/src/browsers/BrowserBreadcrumbWidget.h b/src/browsers/BrowserBreadcrumbWidget.h --- a/src/browsers/BrowserBreadcrumbWidget.h +++ b/src/browsers/BrowserBreadcrumbWidget.h @@ -17,11 +17,10 @@ #ifndef BROWSERBREADCRUMBWIDGET_H #define BROWSERBREADCRUMBWIDGET_H -#include -#include +#include "widgets/BoxWidget.h" -#include #include +#include #include #include @@ -34,7 +33,7 @@ * * @author Nikolaj Hald Nielsen */ -class BrowserBreadcrumbWidget : public KHBox +class BrowserBreadcrumbWidget : public BoxWidget { Q_OBJECT public: @@ -47,7 +46,6 @@ /** * Destructor - * @param parent the parent widget */ ~BrowserBreadcrumbWidget(); @@ -92,7 +90,7 @@ /** * Recursive function that traverses the tree of BrowserCategoryList's * and adds each one as a level in the breadcrumb. - * @param level the root level BrowserCategoryList. + * @param list the root level BrowserCategoryList. */ void addLevel( BrowserCategoryList *list ); @@ -107,7 +105,7 @@ QList m_items; QWidget *m_spacer; - KHBox *m_breadcrumbArea; + BoxWidget *m_breadcrumbArea; BreadcrumbItemMenuButton *m_childMenuButton; diff --git a/src/browsers/BrowserBreadcrumbWidget.cpp b/src/browsers/BrowserBreadcrumbWidget.cpp --- a/src/browsers/BrowserBreadcrumbWidget.cpp +++ b/src/browsers/BrowserBreadcrumbWidget.cpp @@ -25,25 +25,26 @@ #include "MainWindow.h" #include "widgets/BreadcrumbItemButton.h" -#include - +#include #include #include #include +#include + +#include + BrowserBreadcrumbWidget::BrowserBreadcrumbWidget( QWidget * parent ) - : KHBox( parent) + : BoxWidget( false, parent) , m_rootList( 0 ) , m_childMenuButton( 0 ) { setFixedHeight( 28 ); setContentsMargins( 3, 0, 3, 0 ); - setSpacing( 0 ); - m_breadcrumbArea = new KHBox( this ); + m_breadcrumbArea = new BoxWidget( false, this ); m_breadcrumbArea->setContentsMargins( 0, 0, 0, 0 ); - m_breadcrumbArea->setSpacing( 0 ); - setStretchFactor( m_breadcrumbArea, 10 ); + static_cast( layout() )->setStretchFactor( m_breadcrumbArea, 10 ); new BreadcrumbUrlMenuButton( "navigate", this ); @@ -88,10 +89,10 @@ return; clearCrumbs(); - m_spacer->setParent( 0 ); + m_spacer->setParent( this ); addLevel( m_rootList ); - m_spacer->setParent( m_breadcrumbArea ); + m_breadcrumbArea->layout()->addWidget( m_spacer ); showAsNeeded(); } @@ -178,8 +179,8 @@ BrowserBreadcrumbWidget::addBreadCrumbItem( BrowserBreadcrumbItem *item ) { item->hide(); - item->setParent( 0 ); // may be already shown, we want it to be last, so reparent - item->setParent( m_breadcrumbArea ); + item->setParent( this ); // may be already shown, we want it to be last, so reparent + m_breadcrumbArea->layout()->addWidget( item ); } void BrowserBreadcrumbWidget::resizeEvent( QResizeEvent *event ) @@ -212,6 +213,9 @@ it.remove(); } + if( allItems.isEmpty() ) + return; + int sizeOfFirst = allItems.first()->nominalWidth(); int sizeOfLast = allItems.last()->nominalWidth(); diff --git a/src/browsers/BrowserCategory.h b/src/browsers/BrowserCategory.h --- a/src/browsers/BrowserCategory.h +++ b/src/browsers/BrowserCategory.h @@ -19,8 +19,7 @@ #include "amarok_export.h" #include "BrowserDefines.h" - -#include +#include "widgets/BoxWidget.h" #include @@ -32,7 +31,7 @@ * * @author Nikolaj Hald Nielsen */ -class AMAROK_EXPORT BrowserCategory : public KVBox +class AMAROK_EXPORT BrowserCategory : public BoxWidget { Q_OBJECT diff --git a/src/browsers/BrowserCategory.cpp b/src/browsers/BrowserCategory.cpp --- a/src/browsers/BrowserCategory.cpp +++ b/src/browsers/BrowserCategory.cpp @@ -21,21 +21,18 @@ #include "BrowserBreadcrumbItem.h" #include "BrowserCategoryList.h" #include "PaletteHandler.h" - #include "core/support/Debug.h" -#include BrowserCategory::BrowserCategory( const QString &name, QWidget *parent ) - : KVBox( parent ) + : BoxWidget( true, parent ) , m_name( name ) , m_parentList( 0 ) { setObjectName( name ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); - setFrameShape( QFrame::NoFrame ); - connect( App::instance(), &App::settingsChanged, this, &BrowserCategory::slotSettingsChanged ); + connect( pApp, &App::settingsChanged, this, &BrowserCategory::slotSettingsChanged ); connect( The::paletteHandler(), &PaletteHandler::newPalette, this, &BrowserCategory::slotSettingsChanged ); } diff --git a/src/browsers/BrowserCategoryList.cpp b/src/browsers/BrowserCategoryList.cpp --- a/src/browsers/BrowserCategoryList.cpp +++ b/src/browsers/BrowserCategoryList.cpp @@ -19,22 +19,22 @@ #include "BrowserCategoryList.h" #include "App.h" -#include "context/ContextView.h" #include "core/support/Debug.h" #include "InfoProxy.h" #include "PaletteHandler.h" #include "widgets/PrettyTreeView.h" #include "widgets/PrettyTreeDelegate.h" #include "widgets/SearchWidget.h" +#include +#include #include +#include #include +#include -#include -#include #include -#include BrowserCategoryList::BrowserCategoryList( const QString &name, QWidget* parent, bool sort ) : BrowserCategory( name, parent ) @@ -329,24 +329,23 @@ if ( m_infoHtmlTemplate.isEmpty() ) { - QUrl dataUrl( KStandardDirs::locate( "data", "amarok/data/" ) ); - QString dataPath = dataUrl.path(); + QString dataPath = QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/", QStandardPaths::LocateDirectory ); //load html - QString htmlPath = dataPath + "hover_info_template.html"; + QString htmlPath = dataPath + "/hover_info_template.html"; QFile file( htmlPath ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text) ) { - debug() << "error opening file. Error: " << file.error(); + debug() << "error opening file:" << file.fileName() << "Error: " << file.error(); return; } m_infoHtmlTemplate = file.readAll(); file.close(); - m_infoHtmlTemplate.replace( "{background_color}",PaletteHandler::highlightColor().lighter( 150 ).name() ); - m_infoHtmlTemplate.replace( "{border_color}", PaletteHandler::highlightColor().lighter( 150 ).name() ); - m_infoHtmlTemplate.replace( "{text_color}", App::instance()->palette().brush( QPalette::Text ).color().name() ); - QColor highlight( App::instance()->palette().highlight().color() ); + m_infoHtmlTemplate.replace( "{background_color}", The::paletteHandler()->highlightColor().lighter( 150 ).name() ); + m_infoHtmlTemplate.replace( "{border_color}", The::paletteHandler()->highlightColor().lighter( 150 ).name() ); + m_infoHtmlTemplate.replace( "{text_color}", pApp->palette().brush( QPalette::Text ).color().name() ); + QColor highlight( pApp->palette().highlight().color() ); highlight.setHsvF( highlight.hueF(), 0.3, .95, highlight.alphaF() ); m_infoHtmlTemplate.replace( "{header_background_color}", highlight.name() ); diff --git a/src/browsers/BrowserDock.h b/src/browsers/BrowserDock.h --- a/src/browsers/BrowserDock.h +++ b/src/browsers/BrowserDock.h @@ -23,10 +23,9 @@ #include "BrowserMessageArea.h" #include "widgets/AmarokDockWidget.h" -#include -#include //#TODO KF5: Remove this when porting from KShortcut to QKeySequence. KShortcut is deprecated +#include -#include +class BoxWidget; /** The base widget that contains all other browsers, organized in a dig down interface @@ -50,8 +49,8 @@ private: BrowserBreadcrumbWidget *m_breadcrumbWidget; - QWeakPointer m_categoryList; - KVBox *m_mainWidget; + QPointer m_categoryList; + BoxWidget *m_mainWidget; BrowserMessageArea *m_messageArea; }; diff --git a/src/browsers/BrowserDock.cpp b/src/browsers/BrowserDock.cpp --- a/src/browsers/BrowserDock.cpp +++ b/src/browsers/BrowserDock.cpp @@ -23,13 +23,13 @@ #include "core/support/Debug.h" #include "core-impl/logger/ProxyLogger.h" #include "PaletteHandler.h" +#include "widgets/BoxWidget.h" #include "widgets/HorizontalDivider.h" #include #include -#include -#include +#include BrowserDock::BrowserDock( QWidget *parent ) : AmarokDockWidget( i18n( "&Media Sources" ), parent ) @@ -39,7 +39,7 @@ //we have to create this here as it is used when setting up the //categories (unless of course we move that to polish as well...) - m_mainWidget = new KVBox( this ); + m_mainWidget = new BoxWidget( true, this ); setWidget( m_mainWidget ); m_mainWidget->setContentsMargins( 0, 0, 0, 0 ); m_mainWidget->setFrameShape( QFrame::NoFrame ); @@ -54,6 +54,7 @@ m_messageArea = new BrowserMessageArea( m_mainWidget ); m_messageArea->setAutoFillBackground( true ); + //TODO: set dynamic height for hidpi displays m_messageArea->setFixedHeight( 36 ); Amarok::Logger *logger = Amarok::Components::logger(); @@ -71,9 +72,9 @@ void BrowserDock::polish() { - m_categoryList.data()->setIcon( QIcon::fromTheme( "user-home" ) ); + m_categoryList->setIcon( QIcon::fromTheme( "user-home" ) ); - m_categoryList.data()->setMinimumSize( 100, 300 ); + m_categoryList->setMinimumSize( 100, 300 ); connect( m_breadcrumbWidget, &BrowserBreadcrumbWidget::toHome, this, &BrowserDock::home ); @@ -98,13 +99,13 @@ void BrowserDock::navigate( const QString &target ) { - m_categoryList.data()->navigate( target ); + m_categoryList->navigate( target ); } void BrowserDock::home() { - m_categoryList.data()->home(); + m_categoryList->home(); } void @@ -115,7 +116,7 @@ "background-color: %2; color: %3; border-radius: 3px; }" \ "QLabel { color: %3; }" ) .arg( palette.color( QPalette::Active, QPalette::Window ).name() ) - .arg( The::paletteHandler()->highlightColor().name() ) + .arg( palette.color( QPalette::Active, QPalette::Mid ).name() ) .arg( palette.color( QPalette::Active, QPalette::HighlightedText ).name() ) ); } diff --git a/src/browsers/BrowserMessageArea.h b/src/browsers/BrowserMessageArea.h --- a/src/browsers/BrowserMessageArea.h +++ b/src/browsers/BrowserMessageArea.h @@ -21,12 +21,11 @@ #include "statusbar/CompoundProgressBar.h" #include "statusbar/KJobProgressBar.h" #include "statusbar/NetworkProgressBar.h" +#include "widgets/BoxWidget.h" - -#include #include -class BrowserMessageArea : public QFrame, public Amarok::Logger +class BrowserMessageArea : public BoxWidget, public Amarok::Logger { Q_OBJECT diff --git a/src/browsers/BrowserMessageArea.cpp b/src/browsers/BrowserMessageArea.cpp --- a/src/browsers/BrowserMessageArea.cpp +++ b/src/browsers/BrowserMessageArea.cpp @@ -22,22 +22,20 @@ #define POPUP_MESSAGE_DURATION 5000 BrowserMessageArea::BrowserMessageArea( QWidget *parent ) - : QFrame( parent ) + : BoxWidget( true, parent ) , m_busy( false ) { setObjectName( "BrowserMessageArea" ); - setLayout( new QVBoxLayout( this ) ); - m_progressBar = new CompoundProgressBar( this ); connect( m_progressBar, &CompoundProgressBar::allDone, this, &BrowserMessageArea::hideProgress ); layout()->addWidget( m_progressBar ); + m_progressBar->hide(); m_messageLabel = new QLabel( this ); m_messageLabel->setAlignment( Qt::AlignCenter ); m_messageLabel->setWordWrap( true ); - layout()->addWidget( m_messageLabel ); m_messageLabel->hide(); m_shortMessageTimer = new QTimer( this ); diff --git a/src/browsers/CollectionSortFilterProxyModel.h b/src/browsers/CollectionSortFilterProxyModel.h --- a/src/browsers/CollectionSortFilterProxyModel.h +++ b/src/browsers/CollectionSortFilterProxyModel.h @@ -24,6 +24,7 @@ #include class CollectionTreeItem; +class QCollator; /** This is a custom QSortFilterProxyModel that gives special sort orders for @@ -45,6 +46,7 @@ virtual bool lessThan( const QModelIndex &left, const QModelIndex &right ) const; private: + QCollator *m_col; /** Tries to compute a year for the album using the track years. */ int albumYear( Meta::AlbumPtr album ) const; diff --git a/src/browsers/CollectionSortFilterProxyModel.cpp b/src/browsers/CollectionSortFilterProxyModel.cpp --- a/src/browsers/CollectionSortFilterProxyModel.cpp +++ b/src/browsers/CollectionSortFilterProxyModel.cpp @@ -24,13 +24,13 @@ #include "core/support/Debug.h" #include "widgets/PrettyTreeRoles.h" -#include //TODO KF5: Take care of this when moving to QCollator from KStringHandler::naturalCompare() - +#include #include #include CollectionSortFilterProxyModel::CollectionSortFilterProxyModel( QObject * parent ) : QSortFilterProxyModel( parent ) + , m_col( new QCollator ) { setSortLocaleAware( true ); @@ -40,11 +40,14 @@ setFilterCaseSensitivity( Qt::CaseInsensitive ); setDynamicSortFilter( true ); + + m_col->setCaseSensitivity( Qt::CaseInsensitive ); } CollectionSortFilterProxyModel::~CollectionSortFilterProxyModel() { + delete m_col; } bool @@ -108,7 +111,7 @@ // compare by name { - int comp = KStringHandler::naturalCompare( leftTrack->sortableName(), rightTrack->sortableName(), Qt::CaseInsensitive ); + int comp = m_col->compare( leftTrack->sortableName(), rightTrack->sortableName() ); if( comp < 0 ) return true; if( comp > 0 ) @@ -146,7 +149,7 @@ // compare by name { - int comp = KStringHandler::naturalCompare( leftAlbum->sortableName(), rightAlbum->sortableName(), Qt::CaseInsensitive ); + int comp = m_col->compare( leftAlbum->sortableName(), rightAlbum->sortableName() ); if( comp < 0 ) return true; if( comp > 0 ) @@ -172,7 +175,7 @@ // compare by name { - int comp = KStringHandler::naturalCompare( leftData->sortableName(), rightData->sortableName(), Qt::CaseInsensitive ); + int comp = m_col->compare( leftData->sortableName(), rightData->sortableName() ); if( comp < 0 ) return true; if( comp > 0 ) diff --git a/src/browsers/CollectionTreeItem.cpp b/src/browsers/CollectionTreeItem.cpp --- a/src/browsers/CollectionTreeItem.cpp +++ b/src/browsers/CollectionTreeItem.cpp @@ -26,7 +26,7 @@ #include "widgets/PrettyTreeRoles.h" #include -#include +#include Q_DECLARE_METATYPE( QAction* ) Q_DECLARE_METATYPE( QList ) diff --git a/src/browsers/CollectionTreeItemModel.cpp b/src/browsers/CollectionTreeItemModel.cpp --- a/src/browsers/CollectionTreeItemModel.cpp +++ b/src/browsers/CollectionTreeItemModel.cpp @@ -32,7 +32,7 @@ #include "core-impl/collections/support/CollectionManager.h" #include "core-impl/collections/support/FileCollectionLocation.h" -#include +#include #include #include diff --git a/src/browsers/CollectionTreeItemModelBase.h b/src/browsers/CollectionTreeItemModelBase.h --- a/src/browsers/CollectionTreeItemModelBase.h +++ b/src/browsers/CollectionTreeItemModelBase.h @@ -98,7 +98,7 @@ /** * Get a pointer to colleciton tree item given its index. It is not safe to - * cache this pointer unless QWeakPointer is used. + * cache this pointer unless QPointer is used. */ CollectionTreeItem *treeItem( const QModelIndex &index ) const; diff --git a/src/browsers/CollectionTreeItemModelBase.cpp b/src/browsers/CollectionTreeItemModelBase.cpp --- a/src/browsers/CollectionTreeItemModelBase.cpp +++ b/src/browsers/CollectionTreeItemModelBase.cpp @@ -34,15 +34,13 @@ #include "core-impl/collections/support/TextualQueryFilter.h" #include "widgets/PrettyTreeRoles.h" -#include -#include -#include -#include -#include +#include #include -#include +#include #include +#include +#include #include #include @@ -65,8 +63,8 @@ : QAbstractItemModel() , m_rootItem( 0 ) , m_animFrame( 0 ) - , m_loading1( QPixmap( KStandardDirs::locate("data", "amarok/images/loading1.png" ) ) ) - , m_loading2( QPixmap( KStandardDirs::locate("data", "amarok/images/loading2.png" ) ) ) + , m_loading1( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/loading1.png" ) ) ) + , m_loading2( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/loading2.png" ) ) ) , m_currentAnimPixmap( m_loading1 ) , m_autoExpand( false ) { @@ -579,8 +577,7 @@ m_runningQueries.clear(); m_childQueries.clear(); m_compilationQueries.clear(); -#pragma message("KF5Port: 1 line here") - //filterChildren(); + filterChildren(); } Collections::QueryMaker::QueryType diff --git a/src/browsers/CollectionTreeView.h b/src/browsers/CollectionTreeView.h --- a/src/browsers/CollectionTreeView.h +++ b/src/browsers/CollectionTreeView.h @@ -20,6 +20,7 @@ #include "amarok_export.h" #include "BrowserDefines.h" #include "widgets/PrettyTreeView.h" +#include "browsers/CollectionTreeItem.h" #include "core/meta/forward_declarations.h" #include "playlist/PlaylistController.h" @@ -31,7 +32,6 @@ class AmarokMimeData; class CollectionSortFilterProxyModel; class CollectionTreeItemModelBase; -class CollectionTreeItem; class PopupDropper; namespace Collections { class Collection; @@ -42,7 +42,7 @@ typedef QList QActionList; -class CollectionTreeView: public Amarok::PrettyTreeView +class AMAROK_EXPORT CollectionTreeView : public Amarok::PrettyTreeView { Q_OBJECT @@ -52,7 +52,7 @@ QSortFilterProxyModel* filterModel() const; - AMAROK_EXPORT void setLevels( const QList &levels ); + void setLevels( const QList &levels ); QList levels() const; void setLevel( int level, CategoryId::CatMenuId type ); @@ -69,7 +69,7 @@ * Copies all selected tracks to the local collection. The user can also * choose to do on-the-fly transcoding. */ - AMAROK_EXPORT void copySelectedToLocalCollection(); + void copySelectedToLocalCollection(); public Q_SLOTS: void slotSetFilter( const QString &filter ); diff --git a/src/browsers/CollectionTreeView.cpp b/src/browsers/CollectionTreeView.cpp --- a/src/browsers/CollectionTreeView.cpp +++ b/src/browsers/CollectionTreeView.cpp @@ -27,9 +27,7 @@ #include "SvgHandler.h" #include "browsers/CollectionSortFilterProxyModel.h" #include "browsers/CollectionTreeItemModel.h" -#include "context/ContextView.h" -#include "context/popupdropper/libpud/PopupDropper.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" +// #include "context/ContextView.h" #include "core/capabilities/ActionsCapability.h" #include "core/capabilities/BookmarkThisCapability.h" #include "core/collections/CollectionLocation.h" @@ -46,15 +44,14 @@ #include "scripting/scriptengine/AmarokCollectionViewScript.h" #include -#include #include -#include +#include #include -#include // NOTE: for delete dialog, will move to CollectionCapability later #include #include #include +#include #include #include @@ -462,7 +459,7 @@ // mind bug 279513 bool isExpandable = model()->hasChildren( index ); bool wouldExpand = !visualRect( index ).contains( event->pos() ) || // clicked outside item, perhaps on expander icon - ( isExpandable && !KGlobalSettings::singleClick() ); // we're in doubleClick + ( isExpandable && !style()->styleHint( QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this ) ); // we're in doubleClick if( event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier && !wouldExpand ) @@ -643,10 +640,10 @@ return; m_ongoingDrag = true; -/* FIXME: disabled temporarily for KF5 porting +/* FIXME: disabled temporarily for KF5 porting if( !m_pd ) m_pd = The::popupDropperFactory()->createPopupDropper( Context::ContextView::self() ); -*/ + if( m_pd && m_pd->isHidden() ) { if( m_filterModel ) @@ -705,6 +702,7 @@ m_pd->show(); } +*/ QTreeView::startDrag( supportedActions ); debug() << "After the drag!"; diff --git a/src/browsers/InfoProxy.cpp b/src/browsers/InfoProxy.cpp --- a/src/browsers/InfoProxy.cpp +++ b/src/browsers/InfoProxy.cpp @@ -20,10 +20,11 @@ #include "core/support/Debug.h" #include "PaletteHandler.h" -#include -#include - #include +#include +#include + +#include InfoProxy * InfoProxy::m_instance = 0; @@ -134,7 +135,7 @@ { DEBUG_BLOCK - QUrl dataUrl( KStandardDirs::locate( "data", "amarok/data/" ) ); + QUrl dataUrl( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/" ) ); QString dataPath = dataUrl.path(); //load html @@ -149,15 +150,15 @@ QString html = file.readAll(); - QUrl imageUrl( KStandardDirs::locate( "data", "amarok/images/" ) ); + QUrl imageUrl( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/" ) ); QString imagePath = imageUrl.url(); html.replace( "_PATH_", imagePath ); - html.replace( "{background_color}",PaletteHandler::highlightColor().lighter( 150 ).name() ); - html.replace( "{border_color}", PaletteHandler::highlightColor().lighter( 150 ).name() ); - html.replace( "{text_color}", App::instance()->palette().brush( QPalette::Text ).color().name() ); - QColor highlight( App::instance()->palette().highlight().color() ); + html.replace( "{background_color}", The::paletteHandler()->highlightColor().lighter( 150 ).name() ); + html.replace( "{border_color}", The::paletteHandler()->highlightColor().lighter( 150 ).name() ); + html.replace( "{text_color}", pApp->palette().brush( QPalette::Text ).color().name() ); + QColor highlight( pApp->palette().highlight().color() ); highlight.setHsvF( highlight.hueF(), 0.3, .95, highlight.alphaF() ); html.replace( "{header_background_color}", highlight.name() ); diff --git a/src/browsers/SingleCollectionTreeItemModel.cpp b/src/browsers/SingleCollectionTreeItemModel.cpp --- a/src/browsers/SingleCollectionTreeItemModel.cpp +++ b/src/browsers/SingleCollectionTreeItemModel.cpp @@ -27,7 +27,7 @@ #include "core/support/Amarok.h" #include "core/support/Debug.h" -#include +#include SingleCollectionTreeItemModel::SingleCollectionTreeItemModel( Collections::Collection *collection, const QList &levelType ) diff --git a/src/browsers/collectionbrowser/CollectionWidget.cpp b/src/browsers/collectionbrowser/CollectionWidget.cpp --- a/src/browsers/collectionbrowser/CollectionWidget.cpp +++ b/src/browsers/collectionbrowser/CollectionWidget.cpp @@ -35,20 +35,20 @@ #include "widgets/SearchWidget.h" #include "widgets/PrettyTreeDelegate.h" -#include -#include -#include -#include -#include -#include +#include #include +#include #include +#include +#include +#include #include #include #include #include #include +#include #include #include @@ -143,18 +143,17 @@ { s_instance = this; setObjectName( name ); - setMargin( 0 ); - setSpacing( 0 ); //TODO: we have a really nice opportunity to make these info blurbs both helpful and pretty setLongDescription( i18n( "This is where you will find your local music, as well as music from mobile audio players and CDs." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_collections.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_collections.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) setBackgroundImage( imagePath() ); // --- the box for the UI elements. - KHBox *hbox = new KHBox( this ); + BoxWidget *hbox = new BoxWidget( false, this ); + d->stack = new QStackedWidget( this ); // -- read the current view mode from the configuration @@ -169,7 +168,7 @@ d->searchWidget->setClickMessage( i18n( "Search collection" ) ); // Filter presets. UserRole is used to store the actual syntax. - KComboBox *combo = d->searchWidget->comboBox(); + QComboBox *combo = d->searchWidget->comboBox(); const QIcon icon = KStandardGuiItem::find().icon(); combo->addItem( icon, i18nc("@item:inlistbox Collection widget filter preset", "Added This Hour"), QString(Meta::shortI18nForField( Meta::valCreateDate ) + ":<1h") ); diff --git a/src/browsers/filebrowser/FileBrowser.cpp b/src/browsers/filebrowser/FileBrowser.cpp --- a/src/browsers/filebrowser/FileBrowser.cpp +++ b/src/browsers/filebrowser/FileBrowser.cpp @@ -35,26 +35,26 @@ #include "widgets/SearchWidget.h" #include -#include +#include +#include +#include +#include + #include #include -#include -#include +#include +#include #include -#include #include -#include - -#include static const QString placesString( "places://" ); static const QUrl placesUrl( placesString ); FileBrowser::Private::Private( FileBrowser *parent ) : placesModel( 0 ) , q( parent ) { - KHBox *topHBox = new KHBox( q ); + BoxWidget *topHBox = new BoxWidget( q ); KToolBar *navigationToolbar = new KToolBar( topHBox ); navigationToolbar->setToolButtonStyle( Qt::ToolButtonIconOnly ); @@ -100,9 +100,14 @@ if( dir.exists() ) useHome = false; } - else if( KIO::NetAccess::exists( savedUrl, KIO::NetAccess::DestinationSide, 0 ) ) + else { - useHome = false; + KIO::StatJob *statJob = KIO::stat( savedUrl, KIO::StatJob::DestinationSide, 0 ); + statJob->exec(); + if( statJob->statResult().isDir() ) + { + useHome = false; + } } currentPath = useHome ? homeUrl : savedUrl; } @@ -185,7 +190,7 @@ FileBrowser::Private::saveHeaderState() { //save the state of the header (column size and order). Yay, another QByteArray thingie... - KSaveFile file( Amarok::saveLocation() + "file_browser_layout" ); + QFile file( Amarok::saveLocation() + "file_browser_layout" ); if( !file.open( QIODevice::WriteOnly ) ) { warning() << "unable to save header state"; @@ -196,11 +201,6 @@ warning() << "unable to save header state, writing failed"; return; } - if( !file.finalize() ) - { - warning() << "failed to write header state"; - return; - } } void @@ -222,7 +222,7 @@ "file operations." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_files.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_files.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) @@ -477,7 +477,7 @@ name.remove( QRegExp( "/$" ) ); callback = workingUrl.left( nextPosition ); - siblings = d->siblingsForDir( QUrl::fromLocalFile(callback) ); + siblings = d->siblingsForDir( QUrl::fromLocalFile( callback ) ); addAdditionalItem( new BrowserBreadcrumbItem( name, callback, siblings, this ) ); currentPosition = nextPosition; @@ -571,7 +571,7 @@ { d->backStack.push( d->currentPath ); d->forwardStack.clear(); // navigating resets forward stack - setDir( QUrl( QDir::homePath() ) ); + setDir( QUrl::fromLocalFile( QDir::homePath() ) ); } void diff --git a/src/browsers/filebrowser/FileBrowser_p.h b/src/browsers/filebrowser/FileBrowser_p.h --- a/src/browsers/filebrowser/FileBrowser_p.h +++ b/src/browsers/filebrowser/FileBrowser_p.h @@ -26,8 +26,8 @@ #include #include -#include +#include #include #include @@ -102,29 +102,17 @@ public: DirBrowserModel( QObject *parent = 0 ) : KDirModel( parent ) { - updateRowHeight(); - connect( KGlobalSettings::self(), &KGlobalSettings::appearanceChanged, this, &DirBrowserModel::updateRowHeight ); } virtual ~DirBrowserModel() {} virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const { if( role == Qt::SizeHintRole ) - return QSize( 1, rowHeight ); + return QSize( 1, QFontMetrics( QFont() ).height() + 4 ); else return KDirModel::data( index, role ); } - -private Q_SLOTS: - void updateRowHeight() - { - QFont font; - rowHeight = QFontMetrics( font ).height() + 4; - } - -private: - int rowHeight; }; class FilePlacesModel : public KFilePlacesModel @@ -134,29 +122,17 @@ public: FilePlacesModel( QObject *parent = 0 ) : KFilePlacesModel( parent ) { - updateRowHeight(); - connect( KGlobalSettings::self(), &KGlobalSettings::appearanceChanged, this, &FilePlacesModel::updateRowHeight ); } virtual ~FilePlacesModel() {} virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const { if( role == Qt::SizeHintRole ) - return QSize( 1, rowHeight ); + return QSize( 1, QFontMetrics( QFont() ).height() + 4 ); else return KFilePlacesModel::data( index, role ); } - -private Q_SLOTS: - void updateRowHeight() - { - QFont font; - rowHeight = QFontMetrics( font ).height() + 4; - } - -private: - int rowHeight; }; #endif /* AMAROK_FILEBROWSER_P_H */ diff --git a/src/browsers/filebrowser/FileView.h b/src/browsers/filebrowser/FileView.h --- a/src/browsers/filebrowser/FileView.h +++ b/src/browsers/filebrowser/FileView.h @@ -115,8 +115,8 @@ PopupDropper *m_pd; QMutex m_dragMutex; bool m_ongoingDrag; - QWeakPointer m_moveDestinationCollection; - QWeakPointer m_copyDestinationCollection; + QPointer m_moveDestinationCollection; + QPointer m_copyDestinationCollection; }; #endif // end include guard diff --git a/src/browsers/filebrowser/FileView.cpp b/src/browsers/filebrowser/FileView.cpp --- a/src/browsers/filebrowser/FileView.cpp +++ b/src/browsers/filebrowser/FileView.cpp @@ -23,9 +23,7 @@ #include "PaletteHandler.h" #include "PopupDropperFactory.h" #include "SvgHandler.h" -#include "context/ContextView.h" -#include "context/popupdropper/libpud/PopupDropper.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" +// #include "context/ContextView.h" #include "core/playlists/PlaylistFormat.h" #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" @@ -36,23 +34,21 @@ #include "dialogs/TagDialog.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include +#include #include +#include #include +#include + #include +#include +#include +#include +#include +#include +#include FileView::FileView( QWidget *parent ) : Amarok::PrettyTreeView( parent ) @@ -166,7 +162,7 @@ if( state() == QAbstractItemView::NoState && event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier && - KGlobalSettings::singleClick() && + style()->styleHint( QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this ) && ( file.isDir() || file.isNull() ) ) { emit navigateToDirectory( index ); @@ -333,7 +329,7 @@ else source = new Collections::FileCollectionLocation(); - Collections::CollectionLocation *destination = m_copyDestinationCollection.data()->location(); + Collections::CollectionLocation *destination = m_copyDestinationCollection->location(); source->prepareCopy( tracks, destination ); } else @@ -363,7 +359,7 @@ else source = new Collections::FileCollectionLocation(); - Collections::CollectionLocation *destination = m_moveDestinationCollection.data()->location(); + Collections::CollectionLocation *destination = m_moveDestinationCollection->location(); source->prepareMove( tracks, destination ); } else @@ -491,7 +487,7 @@ /* FIXME: disabled temporarily for KF5 porting if( !m_pd ) m_pd = The::popupDropperFactory()->createPopupDropper( Context::ContextView::self() ); -*/ + if( m_pd && m_pd->isHidden() ) { QModelIndexList indices = selectedIndexes(); @@ -507,6 +503,7 @@ m_pd->show(); } +*/ QTreeView::startDrag( supportedActions ); diff --git a/src/browsers/playlistbrowser/APGCategory.cpp b/src/browsers/playlistbrowser/APGCategory.cpp --- a/src/browsers/playlistbrowser/APGCategory.cpp +++ b/src/browsers/playlistbrowser/APGCategory.cpp @@ -22,8 +22,8 @@ #include "widgets/PrettyTreeView.h" #include -#include -#include +#include +#include #include #include @@ -128,7 +128,7 @@ { APG::PresetModel::destroy(); AmarokConfig::setQualityFactorAPG( m_qualityFactor ); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); } void diff --git a/src/browsers/playlistbrowser/DynamicBiasDialog.h b/src/browsers/playlistbrowser/DynamicBiasDialog.h --- a/src/browsers/playlistbrowser/DynamicBiasDialog.h +++ b/src/browsers/playlistbrowser/DynamicBiasDialog.h @@ -28,7 +28,7 @@ class QVBoxLayout; class QLabel; -class KComboBox; +class QComboBox; namespace PlaylistBrowserNS { @@ -60,7 +60,7 @@ QVBoxLayout* m_mainLayout; QVBoxLayout* m_biasLayout; - KComboBox* m_biasSelection; + QComboBox* m_biasSelection; QLabel *m_descriptionLabel; QWidget *m_biasWidget; diff --git a/src/browsers/playlistbrowser/DynamicBiasDialog.cpp b/src/browsers/playlistbrowser/DynamicBiasDialog.cpp --- a/src/browsers/playlistbrowser/DynamicBiasDialog.cpp +++ b/src/browsers/playlistbrowser/DynamicBiasDialog.cpp @@ -24,8 +24,8 @@ #include "dynamic/Bias.h" #include "dynamic/BiasFactory.h" -#include -#include +#include +#include #include #include @@ -47,7 +47,7 @@ // -- the bias selection combo QLabel* selectionLabel = new QLabel( i18nc("Bias selection label in bias view.", "Match Type:" ) ); - m_biasSelection = new KComboBox(); + m_biasSelection = new QComboBox(); QHBoxLayout *selectionLayout = new QHBoxLayout(); selectionLabel->setBuddy( m_biasSelection ); selectionLayout->addWidget( selectionLabel ); @@ -72,7 +72,7 @@ connect( Dynamic::BiasFactory::instance(), &Dynamic::BiasFactory::changed, this, &PlaylistBrowserNS::BiasDialog::factoriesChanged ); - connect( m_biasSelection, QOverload::of(&KComboBox::activated), + connect( m_biasSelection, QOverload::of(&QComboBox::activated), this, &PlaylistBrowserNS::BiasDialog::selectionChanged ); connect(buttonBox, &QDialogButtonBox::accepted, this, &PlaylistBrowserNS::BiasDialog::accept); diff --git a/src/browsers/playlistbrowser/DynamicCategory.cpp b/src/browsers/playlistbrowser/DynamicCategory.cpp --- a/src/browsers/playlistbrowser/DynamicCategory.cpp +++ b/src/browsers/playlistbrowser/DynamicCategory.cpp @@ -28,20 +28,15 @@ #include "dynamic/DynamicModel.h" #include "dynamic/BiasedPlaylist.h" +#include +#include #include -#include #include - -#include #include -#include -#include #include +#include +#include -#include -#include -#include -#include #include @@ -54,7 +49,7 @@ setLongDescription( i18n( "With a dynamic playlist, Amarok becomes your own personal dj, automatically selecting tracks for you, based on a number of parameters that you select." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_dynamic_playlists.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_dynamic_playlists.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) @@ -64,7 +59,7 @@ setContentsMargins( 0, 0, 0, 0 ); - KHBox* controls2Layout = new KHBox( this ); + BoxWidget* controls2Layout = new BoxWidget( false, this ); QLabel *label; label = new QLabel( i18n( "Previous:" ), controls2Layout ); @@ -95,7 +90,7 @@ // -- the tool bar - KHBox* presetLayout = new KHBox( this ); + BoxWidget* presetLayout = new BoxWidget( false, this ); KToolBar* presetToolbar = new KToolBar( presetLayout ); presetToolbar->setIconSize( QSize( 22, 22 ) ); @@ -246,7 +241,7 @@ return; AmarokConfig::setDynamicDuplicates( value ); - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); m_duplicateButton->setChecked( value ); } diff --git a/src/browsers/playlistbrowser/DynamicView.cpp b/src/browsers/playlistbrowser/DynamicView.cpp --- a/src/browsers/playlistbrowser/DynamicView.cpp +++ b/src/browsers/playlistbrowser/DynamicView.cpp @@ -30,15 +30,12 @@ #include "playlist/PlaylistActions.h" #include "PopupDropperFactory.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" -#include "context/popupdropper/libpud/PopupDropper.h" +// #include "context/popupdropper/libpud/PopupDropperItem.h" +// #include "context/popupdropper/libpud/PopupDropper.h" #include "PaletteHandler.h" -#include - #include -#include #include #include diff --git a/src/browsers/playlistbrowser/PlaylistBrowser.cpp b/src/browsers/playlistbrowser/PlaylistBrowser.cpp --- a/src/browsers/playlistbrowser/PlaylistBrowser.cpp +++ b/src/browsers/playlistbrowser/PlaylistBrowser.cpp @@ -24,25 +24,25 @@ #include "core/support/Debug.h" #include "playlistmanager/PlaylistManager.h" -#include -#include - +#include #include +#include #include +#include + PlaylistBrowserNS::PlaylistBrowser::PlaylistBrowser( const QString &name, QWidget *parent ) - : BrowserCategoryList( name, parent ) + : BrowserCategoryList( name, parent ) { - setMargin( 0 ); setContentsMargins(0,0,0,0); addCategory( new DynamicCategory( 0 ) ); addCategory( new UserPlaylistCategory( 0 ) ); addCategory( new APGCategory( 0 ) ); setLongDescription( i18n( "The playlist browser contains your list of imported and saved playlists. It is also where you can specify powerful dynamic playlists and manage your podcast subscriptions and episodes." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_playlists.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_playlists.png" ) ); } PlaylistBrowserNS::PlaylistBrowser::~PlaylistBrowser() diff --git a/src/browsers/playlistbrowser/PlaylistBrowserCategory.h b/src/browsers/playlistbrowser/PlaylistBrowserCategory.h --- a/src/browsers/playlistbrowser/PlaylistBrowserCategory.h +++ b/src/browsers/playlistbrowser/PlaylistBrowserCategory.h @@ -31,7 +31,7 @@ class QAction; class KActionMenu; -class KLineEdit; +class QLineEdit; class KToolBar; class PlaylistsInFoldersProxy; diff --git a/src/browsers/playlistbrowser/PlaylistBrowserCategory.cpp b/src/browsers/playlistbrowser/PlaylistBrowserCategory.cpp --- a/src/browsers/playlistbrowser/PlaylistBrowserCategory.cpp +++ b/src/browsers/playlistbrowser/PlaylistBrowserCategory.cpp @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include @@ -56,7 +56,7 @@ m_playlistCategory( playlistCategory ) { setContentsMargins( 0, 0, 0, 0 ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_podcasts.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_podcasts.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) diff --git a/src/browsers/playlistbrowser/PlaylistBrowserView.cpp b/src/browsers/playlistbrowser/PlaylistBrowserView.cpp --- a/src/browsers/playlistbrowser/PlaylistBrowserView.cpp +++ b/src/browsers/playlistbrowser/PlaylistBrowserView.cpp @@ -19,30 +19,29 @@ #include "PlaylistBrowserView.h" +#include "MainWindow.h" #include "PaletteHandler.h" #include "PopupDropperFactory.h" #include "SvgHandler.h" #include "amarokconfig.h" #include "browsers/playlistbrowser/PlaylistBrowserModel.h" #include "browsers/playlistbrowser/PlaylistsByProviderProxy.h" #include "browsers/playlistbrowser/PlaylistsInFoldersProxy.h" -#include "context/ContextView.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" -#include "context/popupdropper/libpud/PopupDropper.h" +// #include "context/ContextView.h" #include "core/support/Debug.h" #include "core-impl/playlists/types/file/PlaylistFileSupport.h" #include "playlist/PlaylistModel.h" #include "playlistmanager/PlaylistManager.h" #include "widgets/PrettyTreeRoles.h" -#include -#include -#include - -#include -#include #include +#include +#include #include +#include +#include +#include + #include using namespace PlaylistBrowserNS; @@ -158,27 +157,30 @@ /* FIXME: disabled temporarily for KF5 porting if( !m_pd ) m_pd = The::popupDropperFactory()->createPopupDropper( Context::ContextView::self() ); -*/ + if( m_pd && m_pd->isHidden() ) { QActionList actions = actionsFor( selectedIndexes() ); foreach( QAction *action, actions ) m_pd->addItem( The::popupDropperFactory()->createItem( action ) ); m_pd->show(); } +*/ QTreeView::startDrag( supportedActions ); // We keep the items that the actions need to be applied to. // Clear the data from all actions now that the PUD has executed. resetActionTargets(); +/* FIXME: disabled temporarily for KF5 porting if( m_pd ) { connect( m_pd, &PopupDropper::fadeHideFinished, m_pd, &PopupDropper::clear ); m_pd->hide(); } +*/ m_ongoingDrag = false; } @@ -236,7 +238,7 @@ // mind bug 279513 bool isExpandable = model()->hasChildren( index ); bool wouldExpand = !visualRect( index ).contains( event->pos() ) || // clicked outside item, perhaps on expander icon - ( isExpandable && !KGlobalSettings::singleClick() ); // we're in doubleClick + ( isExpandable && !style()->styleHint( QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this ) ); // we're in doubleClick if( event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier && !wouldExpand ) @@ -466,34 +468,14 @@ foreach( const PlaylistProvider *provider, providerPlaylists.keys() ) providerNames << provider->prettyName(); - QDialog dialog; - dialog.setWindowTitle( i18n( "Confirm Playlist Deletion" ) ); - - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - QWidget *mainWidget = new QWidget(this); - QVBoxLayout *mainLayout = new QVBoxLayout; - dialog.setLayout(mainLayout); - mainLayout->addWidget(mainWidget); - - QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); - okButton->setDefault(true); - okButton->setShortcut(Qt::CTRL | Qt::Key_Return); - okButton->setText( i18nc( "%1 is playlist provider pretty name", - "Yes, delete from %1.", providerNames.join( ", " ) ) ); - okButton->setDefault(true); - okButton->setShortcut(Qt::CTRL | Qt::Key_Return); - - connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); - connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); - - QLabel *label = new QLabel( i18np( "Are you sure you want to delete this playlist?", - "Are you sure you want to delete these %1 playlists?", - m_writableActionPlaylists.count() ), &dialog ); - // TODO: include a text area with all the names of the playlists - - mainLayout->addWidget(label); - mainLayout->addWidget(buttonBox); - if( dialog.exec() == QDialog::Accepted ) + auto button = QMessageBox::question( The::mainWindow(), + i18n( "Confirm Playlist Deletion" ), + i18nc( "%1 is playlist provider pretty name", + "Delete playlist from %1.", providerNames.join( ", " ) ), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes ); + + if( button == QMessageBox::Yes ) { foreach( PlaylistProvider *provider, providerPlaylists.keys() ) provider->deletePlaylists( providerPlaylists.value( provider ) ); @@ -529,29 +511,32 @@ // --- display save location dialog // compare with MainWindow::exportPlaylist // TODO: have this code only once - QCheckBox *saveRelativeCheck = new QCheckBox( i18n("Use relative path for &saving") ); + QFileDialog fileDialog; + fileDialog.restoreState( Amarok::config( "playlist-export-dialog" ).readEntry( "state", QByteArray() ) ); + + // FIXME: Make checkbox visible in dialog + QCheckBox *saveRelativeCheck = new QCheckBox( i18n("Use relative path for &saving"), &fileDialog ); saveRelativeCheck->setChecked( AmarokConfig::relativePlaylist() ); - KFileDialog fileDialog( QUrl("kfiledialog:///amarok-playlist-export"), QString(), 0, saveRelativeCheck ); QStringList supportedMimeTypes; - supportedMimeTypes << "video/x-ms-asf"; // ASX - supportedMimeTypes << "audio/x-mpegurl"; // M3U - supportedMimeTypes << "audio/x-scpls"; // PLS - supportedMimeTypes << "application/xspf+xml"; // XSPF - - fileDialog.setSelection( playlist->name() ); - fileDialog.setMimeFilter( supportedMimeTypes, supportedMimeTypes.value( 1 ) ); - fileDialog.setOperationMode( KFileDialog::Saving ); - fileDialog.setMode( KFile::File ); + + supportedMimeTypes << "video/x-ms-asf"; //ASX + supportedMimeTypes << "audio/x-mpegurl"; //M3U + supportedMimeTypes << "audio/x-scpls"; //PLS + supportedMimeTypes << "application/xspf+xml"; //XSPF + + fileDialog.setMimeTypeFilters( supportedMimeTypes ); + fileDialog.setAcceptMode( QFileDialog::AcceptSave ); + fileDialog.setFileMode( QFileDialog::AnyFile ); fileDialog.setWindowTitle( i18n("Save As") ); fileDialog.setObjectName( "PlaylistExport" ); - fileDialog.exec(); - QString playlistPath = fileDialog.selectedFile(); + int result = fileDialog.exec(); + QString playlistPath = fileDialog.selectedFiles().value( 0 ); + if( result == QDialog::Accepted && !playlistPath.isEmpty() ) + Playlists::exportPlaylistFile( playlist->tracks(), QUrl::fromLocalFile( playlistPath ) ); - // --- actually save the playlist - if( !playlistPath.isEmpty() ) - Playlists::exportPlaylistFile( playlist->tracks(), QUrl::fromLocalFile(playlistPath), saveRelativeCheck->isChecked() ); + Amarok::config( "playlist-export-dialog" ).writeEntry( "state", fileDialog.saveState() ); } void diff --git a/src/browsers/playlistbrowser/PlaylistViewItem.h b/src/browsers/playlistbrowser/PlaylistViewItem.h --- a/src/browsers/playlistbrowser/PlaylistViewItem.h +++ b/src/browsers/playlistbrowser/PlaylistViewItem.h @@ -21,14 +21,14 @@ #include "core/meta/PlaylistGroup.h" #include -#include +#include "AmarokSharedPointer.h" /** @author Nikolaj Hald Nielsen */ class PlaylistViewItem; -typedef KSharedPtr PlaylistViewItemPtr; +typedef AmarokSharedPointer PlaylistViewItemPtr; class PlaylistViewItem : public virtual QSharedData { diff --git a/src/browsers/playlistbrowser/PlaylistsByProviderProxy.h b/src/browsers/playlistbrowser/PlaylistsByProviderProxy.h --- a/src/browsers/playlistbrowser/PlaylistsByProviderProxy.h +++ b/src/browsers/playlistbrowser/PlaylistsByProviderProxy.h @@ -50,9 +50,6 @@ // re-implement to connect renameIndex signal virtual void setSourceModel( QAbstractItemModel *sourceModel ); - Q_SIGNALS: - void renameIndex( const QModelIndex &idx ); - protected Q_SLOTS: //re-implemented to add empty providers virtual void buildTree(); diff --git a/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.h b/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.h --- a/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.h +++ b/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.h @@ -55,9 +55,6 @@ // re-implement to connect renameIndex signal virtual void setSourceModel( QAbstractItemModel *sourceModel ); - Q_SIGNALS: - void renameIndex( const QModelIndex &idx ); - private Q_SLOTS: void slotRenameIndex( const QModelIndex &idx ); diff --git a/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.cpp b/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.cpp --- a/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.cpp +++ b/src/browsers/playlistbrowser/PlaylistsInFoldersProxy.cpp @@ -17,18 +17,18 @@ #include "PlaylistsInFoldersProxy.h" #include "AmarokMimeData.h" +#include "MainWindow.h" #include "core/support/Debug.h" #include "core/playlists/Playlist.h" #include "SvgHandler.h" #include "UserPlaylistModel.h" #include "playlist/PlaylistModelStack.h" #include "widgets/PrettyTreeRoles.h" -#include #include -#include - +#include #include +#include PlaylistsInFoldersProxy::PlaylistsInFoldersProxy( QAbstractItemModel *model ) : QtGroupingProxy( model, QModelIndex(), PlaylistBrowserNS::UserModel::LabelColumn ) @@ -316,11 +316,13 @@ QModelIndex folder = indexes.first(); QString folderName = folder.data( Qt::DisplayRole ).toString(); bool ok; - const QString newName = KInputDialog::getText( i18n("New name"), - i18nc("Enter a new name for a folder that already exists", - "Enter new folder name:"), - folderName, - &ok ); + const QString newName = QInputDialog::getText( Q_NULLPTR, + i18n("New name"), + i18nc("Enter a new name for a folder that already exists", + "Enter new folder name:"), + QLineEdit::Normal, + folderName, + &ok ); if( !ok || newName == folderName ) return; @@ -333,19 +335,12 @@ int childCount = rowCount( groupIdx ); if( childCount > 0 ) { - KDialog dialog; - dialog.setCaption( i18n( "Confirm Delete" ) ); - dialog.setButtons( KDialog::Ok | KDialog::Cancel ); - - QLabel label( i18n( "Are you sure you want to delete this folder and its contents?" ) - , &dialog - ); + auto button = QMessageBox::question( The::mainWindow(), + i18n( "Confirm Delete" ), + i18n( "Are you sure you want to delete this folder and its contents?" ) ); //TODO:include a text area with all the names of the playlists - dialog.setButtonText( KDialog::Ok, i18n( "Yes, delete folder." ) ); - dialog.setMainWidget( &label ); - - if( dialog.exec() != QDialog::Accepted ) + if( button != QMessageBox::Yes ) return; removeRows( 0, childCount, groupIdx ); diff --git a/src/browsers/playlistbrowser/PodcastCategory.cpp b/src/browsers/playlistbrowser/PodcastCategory.cpp --- a/src/browsers/playlistbrowser/PodcastCategory.cpp +++ b/src/browsers/playlistbrowser/PodcastCategory.cpp @@ -36,10 +36,10 @@ #include #include -#include +#include #include -#include -#include + +#include #include namespace The @@ -87,7 +87,7 @@ "Downloading episodes to the disk is also done here, or you can tell " "Amarok to do this automatically." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_podcasts.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_podcasts.png" ) ); // set background if( AmarokConfig::showBrowserBackgroundImage() ) @@ -166,13 +166,13 @@ { authorAndPubDate = QString( "%1 %2 " ) .arg( i18n( "By" ) ) - .arg( Qt::escape( author ) ); + .arg( author.toHtmlEscaped() ); } if( !subtitle.isEmpty() ) { description += QString( "

%1

" ) - .arg( Qt::escape( subtitle ) ); + .arg( subtitle.toHtmlEscaped() ); } if( !imageUrl.isEmpty() ) @@ -194,7 +194,7 @@ " style=\"width: 150px; margin-left: 1em;" " margin-right: 0em; cursor: -webkit-zoom-in;\"" "/>

" ) - .arg( Qt::escape( imageUrl.url() ) ); + .arg( imageUrl.url().toHtmlEscaped() ); } if( isEpisode ) @@ -205,7 +205,7 @@ { authorAndPubDate += QString( "%1 %2" ) .arg( i18nc( "Podcast published on date", "On" ) ) - .arg( KGlobal::locale()->formatDateTime( pubDate, KLocale::FancyShortDate ) ); + .arg( QLocale().toString( pubDate, QLocale::ShortFormat ) ); } } @@ -235,15 +235,15 @@ { description += QString( "

%1 %2

" ) .arg( i18n( "Subscription Date:" ) ) - .arg( KGlobal::locale()->formatDate( subsDate, KLocale::FancyShortDate ) ); + .arg( QLocale().toString( subsDate, QLocale::ShortFormat ) ); } } if( !keywords.isEmpty() ) { description += QString( "

%1 %2

" ) .arg( i18n( "Keywords:" ) ) - .arg( Qt::escape( keywords.join( ", " ) ) ); + .arg( keywords.join( ", " ).toHtmlEscaped() ); } description += index.data( PrettyTreeRoles::ByLineRole ).toString(); @@ -264,10 +264,10 @@ " %2" " " "") - .arg( Qt::escape( title ) ) + .arg( title.toHtmlEscaped() ) .arg( description ) - .arg( App::instance()->palette().brush( QPalette::Text ).color().name() ) - .arg( PaletteHandler::highlightColor().name() ); + .arg( pApp->palette().brush( QPalette::Text ).color().name() ) + .arg( The::paletteHandler()->highlightColor().name() ); QVariantMap map; map["service_name"] = title; diff --git a/src/browsers/playlistbrowser/PodcastModel.h b/src/browsers/playlistbrowser/PodcastModel.h --- a/src/browsers/playlistbrowser/PodcastModel.h +++ b/src/browsers/playlistbrowser/PodcastModel.h @@ -17,6 +17,8 @@ #ifndef PLAYLISTBROWSERNSPODCASTMODEL_H #define PLAYLISTBROWSERNSPODCASTMODEL_H +#include "amarok_export.h" + #include "core/podcasts/PodcastMeta.h" #include "core/podcasts/PodcastProvider.h" @@ -27,7 +29,7 @@ #include #include #include -#include + namespace PlaylistBrowserNS { /* TODO: these should be replaced with custom roles for PlaylistColumn so all data of a playlist can @@ -47,7 +49,7 @@ /** * @author Bart Cerneels */ -class PodcastModel : public PlaylistBrowserModel +class AMAROK_EXPORT PodcastModel : public PlaylistBrowserModel { Q_OBJECT diff --git a/src/browsers/playlistbrowser/PodcastModel.cpp b/src/browsers/playlistbrowser/PodcastModel.cpp --- a/src/browsers/playlistbrowser/PodcastModel.cpp +++ b/src/browsers/playlistbrowser/PodcastModel.cpp @@ -17,8 +17,8 @@ #include "PodcastModel.h" #include "AmarokMimeData.h" -#include "context/popupdropper/libpud/PopupDropper.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" +// #include "context/popupdropper/libpud/PopupDropper.h" +// #include "context/popupdropper/libpud/PopupDropperItem.h" #include "core/podcasts/PodcastImageFetcher.h" #include "core/podcasts/PodcastMeta.h" #include "core/support/Debug.h" @@ -28,12 +28,13 @@ #include "SvgHandler.h" #include "widgets/PrettyTreeRoles.h" -#include - #include +#include #include #include -#include +#include + +#include using namespace Podcasts; diff --git a/src/browsers/playlistbrowser/QtGroupingProxy.h b/src/browsers/playlistbrowser/QtGroupingProxy.h --- a/src/browsers/playlistbrowser/QtGroupingProxy.h +++ b/src/browsers/playlistbrowser/QtGroupingProxy.h @@ -64,6 +64,9 @@ virtual void fetchMore( const QModelIndex &parent ); virtual bool hasChildren( const QModelIndex &parent = QModelIndex() ) const; + Q_SIGNALS: + void renameIndex( const QModelIndex &idx ); + protected Q_SLOTS: virtual void buildTree(); diff --git a/src/browsers/playlistbrowser/UserPlaylistCategory.h b/src/browsers/playlistbrowser/UserPlaylistCategory.h --- a/src/browsers/playlistbrowser/UserPlaylistCategory.h +++ b/src/browsers/playlistbrowser/UserPlaylistCategory.h @@ -19,7 +19,7 @@ #include "PlaylistBrowserCategory.h" -#include +#include #include #include diff --git a/src/browsers/playlistbrowser/UserPlaylistCategory.cpp b/src/browsers/playlistbrowser/UserPlaylistCategory.cpp --- a/src/browsers/playlistbrowser/UserPlaylistCategory.cpp +++ b/src/browsers/playlistbrowser/UserPlaylistCategory.cpp @@ -17,33 +17,12 @@ #include "UserPlaylistCategory.h" -#include "core-impl/collections/support/CollectionManager.h" -#include "core/support/Debug.h" -#include "PaletteHandler.h" -#include "playlist/PlaylistModel.h" -#include "playlistmanager/PlaylistManager.h" -#include "PlaylistsInFoldersProxy.h" -#include "PlaylistsByProviderProxy.h" -#include "SvgHandler.h" - #include "UserPlaylistModel.h" -#include -#include -#include -#include -#include +#include -#include -#include -#include -#include -#include -#include -#include -#include +#include -#include using namespace PlaylistBrowserNS; @@ -62,7 +41,7 @@ "Amarok automatically adds any playlists found when scanning your collection, " "and any playlists that you save are also shown here." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_user_playlists.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_user_playlists.png" ) ); } UserPlaylistCategory::~UserPlaylistCategory() diff --git a/src/browsers/servicebrowser/ServiceBrowser.h b/src/browsers/servicebrowser/ServiceBrowser.h --- a/src/browsers/servicebrowser/ServiceBrowser.h +++ b/src/browsers/servicebrowser/ServiceBrowser.h @@ -23,7 +23,7 @@ #include "services/scriptable/ScriptableServiceManager.h" #include "services/ServiceBase.h" -#include +#include #include #include diff --git a/src/browsers/servicebrowser/ServiceBrowser.cpp b/src/browsers/servicebrowser/ServiceBrowser.cpp --- a/src/browsers/servicebrowser/ServiceBrowser.cpp +++ b/src/browsers/servicebrowser/ServiceBrowser.cpp @@ -18,7 +18,7 @@ #include "core/support/Debug.h" -#include +#include ServiceBrowser * ServiceBrowser::s_instance = 0; @@ -38,7 +38,7 @@ setLongDescription( i18n( "The Internet browser lets you browse online sources of content that integrates directly into Amarok. Amarok ships with a number of these sources, but many more can be added using scripts." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_internet.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_internet.png" ) ); } diff --git a/src/configdialog/ConfigDialog.h b/src/configdialog/ConfigDialog.h --- a/src/configdialog/ConfigDialog.h +++ b/src/configdialog/ConfigDialog.h @@ -22,6 +22,9 @@ #include +class ConfigDialogBase; + + class ConfigDialogBase; class Amarok2ConfigDialog : public KConfigDialog diff --git a/src/configdialog/ConfigDialog.cpp b/src/configdialog/ConfigDialog.cpp --- a/src/configdialog/ConfigDialog.cpp +++ b/src/configdialog/ConfigDialog.cpp @@ -32,10 +32,7 @@ #include "core/support/Debug.h" #include -#include -#include -#include -#include + QString Amarok2ConfigDialog::s_currentPage = "GeneralConfig"; @@ -57,7 +54,6 @@ ConfigDialogBase *database = new DatabaseConfig( this, config ); ConfigDialogBase *plugins = new PluginsConfig( this ); ConfigDialogBase *scripts = new ScriptsConfig( this ); - //ConfigDialogBase* mediadevice = new MediadeviceConfig( this ); addPage( general, i18nc( "Miscellaneous settings", "General" ), "preferences-other-amarok", i18n( "Configure General Options" ) ); @@ -70,20 +66,10 @@ addPage( scripts, i18n( "Scripts" ), "preferences-plugin-script", i18n( "Configure Scripts" ) ); //addPage( mediadevice, i18n( "Media Devices" ), "preferences-multimedia-player-amarok", i18n( "Configure Portable Player Support" ) ); - QVBoxLayout *mainLayout = new QVBoxLayout; - setLayout(mainLayout); - - // Don't change the used button box, this breaks the button handling inside the KConfigDialog - QDialogButtonBox *buttonBox = this->buttonBox(); - - // Make the ok button the default button and attach shortcut to it - QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); + QPushButton *okButton = buttonBox()->button(QDialogButtonBox::Ok); okButton->setDefault(true); okButton->setShortcut(Qt::CTRL | Qt::Key_Return); - // Hide the restore defaults button, we don't support it - buttonBox->button(QDialogButtonBox::RestoreDefaults)->setVisible(false); - KWindowConfig::restoreWindowSize(windowHandle(), Amarok::config( "ConfigDialog" )); } diff --git a/src/configdialog/dialogs/CollectionConfig.cpp b/src/configdialog/dialogs/CollectionConfig.cpp --- a/src/configdialog/dialogs/CollectionConfig.cpp +++ b/src/configdialog/dialogs/CollectionConfig.cpp @@ -35,7 +35,6 @@ KConfigGroup transcodeGroup = Amarok::config( Collections::SQL_TRANSCODING_GROUP_NAME ); m_collectionSetup->transcodingConfig()->fillInChoices( Transcoding::Configuration::fromConfigGroup( transcodeGroup ) ); - connect( m_collectionSetup, &CollectionSetup::changed, parent, &Amarok2ConfigDialog::updateButtons ); connect( m_collectionSetup->transcodingConfig(), QOverload::of(&QComboBox::currentIndexChanged), parent, &Amarok2ConfigDialog::updateButtons ); diff --git a/src/configdialog/dialogs/CollectionConfig.ui b/src/configdialog/dialogs/CollectionConfig.ui --- a/src/configdialog/dialogs/CollectionConfig.ui +++ b/src/configdialog/dialogs/CollectionConfig.ui @@ -94,9 +94,9 @@ - klineedit.h - kpushbutton.h - knuminput.h + qlineedit.h + qpushbutton.h + qspinbox.h diff --git a/src/configdialog/dialogs/DatabaseConfig.cpp b/src/configdialog/dialogs/DatabaseConfig.cpp --- a/src/configdialog/dialogs/DatabaseConfig.cpp +++ b/src/configdialog/dialogs/DatabaseConfig.cpp @@ -19,6 +19,7 @@ #include #include #include +#include "core/support/PluginFactory.h" #include #include diff --git a/src/configdialog/dialogs/ExcludedLabelsDialog.h b/src/configdialog/dialogs/ExcludedLabelsDialog.h --- a/src/configdialog/dialogs/ExcludedLabelsDialog.h +++ b/src/configdialog/dialogs/ExcludedLabelsDialog.h @@ -20,22 +20,22 @@ #include "ui_ExcludedLabelsDialog.h" #include "core/meta/forward_declarations.h" -#include +#include namespace StatSyncing { class Config; } -class KLineEdit; +class QLineEdit; class QGridLayout; class QListWidget; class ExcludedLabelsDialog : public QDialog, private Ui_ExcludedLabelsDialog { Q_OBJECT public: - explicit ExcludedLabelsDialog( StatSyncing::Config *config, QWidget *parent = 0, - Qt::WFlags flags = 0 ); + explicit ExcludedLabelsDialog( StatSyncing::Config *config, QWidget *parent = Q_NULLPTR, + Qt::WindowFlags flags = Qt::WindowFlags() ); private Q_SLOTS: void slowNewResultReady( const Meta::LabelList &labels ); diff --git a/src/configdialog/dialogs/ExcludedLabelsDialog.cpp b/src/configdialog/dialogs/ExcludedLabelsDialog.cpp --- a/src/configdialog/dialogs/ExcludedLabelsDialog.cpp +++ b/src/configdialog/dialogs/ExcludedLabelsDialog.cpp @@ -21,20 +21,20 @@ #include "core-impl/collections/support/CollectionManager.h" #include "statsyncing/Config.h" -#include +#include #include +#include #include #include +#include #include -#include -#include -#include #include +#include #include ExcludedLabelsDialog::ExcludedLabelsDialog( StatSyncing::Config *config, QWidget *parent, - Qt::WFlags flags ) + Qt::WindowFlags flags ) : QDialog( parent, flags ) , m_statSyncingConfig( config ) { @@ -63,7 +63,7 @@ qm->run(); connect( addButton, &QAbstractButton::clicked, this, &ExcludedLabelsDialog::slotAddExcludedLabel ); - connect( addLabelLine, &KLineEdit::returnPressed, this, &ExcludedLabelsDialog::slotAddExcludedLabel ); + connect( addLabelLine, &QLineEdit::returnPressed, this, &ExcludedLabelsDialog::slotAddExcludedLabel ); connect( okButton, &QAbstractButton::clicked, this, &ExcludedLabelsDialog::slotSaveToConfig ); } diff --git a/src/configdialog/dialogs/ExcludedLabelsDialog.ui b/src/configdialog/dialogs/ExcludedLabelsDialog.ui --- a/src/configdialog/dialogs/ExcludedLabelsDialog.ui +++ b/src/configdialog/dialogs/ExcludedLabelsDialog.ui @@ -22,11 +22,11 @@ - + true - + Add Label to Exclude @@ -55,9 +55,9 @@ - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
diff --git a/src/configdialog/dialogs/GeneralConfig.cpp b/src/configdialog/dialogs/GeneralConfig.cpp --- a/src/configdialog/dialogs/GeneralConfig.cpp +++ b/src/configdialog/dialogs/GeneralConfig.cpp @@ -52,3 +52,5 @@ + + diff --git a/src/configdialog/dialogs/GeneralConfig.ui b/src/configdialog/dialogs/GeneralConfig.ui --- a/src/configdialog/dialogs/GeneralConfig.ui +++ b/src/configdialog/dialogs/GeneralConfig.ui @@ -183,7 +183,7 @@ kcombobox.h - klineedit.h + qlineedit.h diff --git a/src/configdialog/dialogs/MetadataConfig.h b/src/configdialog/dialogs/MetadataConfig.h --- a/src/configdialog/dialogs/MetadataConfig.h +++ b/src/configdialog/dialogs/MetadataConfig.h @@ -52,7 +52,7 @@ int writeBackCoverDimensions() const; qint64 checkedFields() const; - QWeakPointer m_statSyncingConfig; + QPointer m_statSyncingConfig; }; diff --git a/src/configdialog/dialogs/MetadataConfig.cpp b/src/configdialog/dialogs/MetadataConfig.cpp --- a/src/configdialog/dialogs/MetadataConfig.cpp +++ b/src/configdialog/dialogs/MetadataConfig.cpp @@ -176,8 +176,8 @@ m_writeBackCover->isChecked() != AmarokConfig::writeBackCover() || writeBackCoverDimensions() != AmarokConfig::writeBackCoverDimensions() || m_useCharsetDetector->isChecked() != AmarokConfig::useCharsetDetector() || - ( m_statSyncingConfig.data() ? ( checkedFields() != m_statSyncingConfig.data()->checkedFields() ) : false ) || - ( m_statSyncingConfig.data() ? m_statSyncingConfig.data()->hasChanged() : false ); + ( m_statSyncingConfig.data() ? ( checkedFields() != m_statSyncingConfig->checkedFields() ) : false ) || + ( m_statSyncingConfig.data() ? m_statSyncingConfig->hasChanged() : false ); } void @@ -191,8 +191,8 @@ AmarokConfig::setUseCharsetDetector( m_useCharsetDetector->isChecked() ); if( m_statSyncingConfig ) { - m_statSyncingConfig.data()->setCheckedFields( checkedFields() ); - m_statSyncingConfig.data()->save(); + m_statSyncingConfig->setCheckedFields( checkedFields() ); + m_statSyncingConfig->save(); } } @@ -204,7 +204,7 @@ foreach( const QModelIndex &idx, m_statSyncingProvidersView->selectionModel()->selectedIndexes() ) { QString id = idx.data( StatSyncing::Config::ProviderIdRole ).toString(); - m_statSyncingConfig.data()->forgetProvider( id ); + m_statSyncingConfig->forgetProvider( id ); } } @@ -225,7 +225,7 @@ warning() << __PRETTY_FUNCTION__ << "label or m_statSyncingConfig is null!"; return; } - int exceptions = m_statSyncingConfig.data()->excludedLabels().count(); + int exceptions = m_statSyncingConfig->excludedLabels().count(); QString begin = ""; QString end = ""; label->setText( i18np( "(%2one exception%3)", "(%2%1 exceptions%3)", exceptions, diff --git a/src/configdialog/dialogs/NotificationsConfig.ui b/src/configdialog/dialogs/NotificationsConfig.ui --- a/src/configdialog/dialogs/NotificationsConfig.ui +++ b/src/configdialog/dialogs/NotificationsConfig.ui @@ -311,7 +311,7 @@ widgets/Osd.h ktextedit.h - knuminput.h + qspinbox.h diff --git a/src/configdialog/dialogs/PlaybackConfig.cpp b/src/configdialog/dialogs/PlaybackConfig.cpp --- a/src/configdialog/dialogs/PlaybackConfig.cpp +++ b/src/configdialog/dialogs/PlaybackConfig.cpp @@ -24,7 +24,6 @@ #include "core/support/Debug.h" #include -#include PlaybackConfig::PlaybackConfig( Amarok2ConfigDialog* parent ) diff --git a/src/configdialog/dialogs/PluginsConfig.cpp b/src/configdialog/dialogs/PluginsConfig.cpp --- a/src/configdialog/dialogs/PluginsConfig.cpp +++ b/src/configdialog/dialogs/PluginsConfig.cpp @@ -50,9 +50,7 @@ KPluginSelector::ReadConfigFile, i18n("Statistics importers"), "Importer" ); connect( m_selector, &KPluginSelector::changed, this, &PluginsConfig::slotConfigChanged ); - - connect( m_selector, &KPluginSelector::changed, - parent, &Amarok2ConfigDialog::updateButtons ); + connect( m_selector, &KPluginSelector::changed, parent, &Amarok2ConfigDialog::updateButtons ); } PluginsConfig::~PluginsConfig() diff --git a/src/configdialog/dialogs/ScriptSelector.h b/src/configdialog/dialogs/ScriptSelector.h --- a/src/configdialog/dialogs/ScriptSelector.h +++ b/src/configdialog/dialogs/ScriptSelector.h @@ -21,7 +21,7 @@ #include class KCategorizedView; -class KLineEdit; +class QLineEdit; class KPluginInfo; class QScrollBar; @@ -48,7 +48,7 @@ KCategorizedView *m_listView; QMap m_scripts; int m_scriptCount; - KLineEdit *m_lineEdit; + QLineEdit *m_lineEdit; private Q_SLOTS: void slotFiltered( const QString &filter ); diff --git a/src/configdialog/dialogs/ScriptSelector.cpp b/src/configdialog/dialogs/ScriptSelector.cpp --- a/src/configdialog/dialogs/ScriptSelector.cpp +++ b/src/configdialog/dialogs/ScriptSelector.cpp @@ -19,21 +19,20 @@ #include "core/support/Debug.h" #include -#include -#include +#include +#include #include -#include #include // uber-hacky, this whole thing, make our own script selector? ScriptSelector::ScriptSelector( QWidget * parent ) : KPluginSelector( parent ) , m_scriptCount( 0 ) { - m_lineEdit = this->findChild(); + m_lineEdit = this->findChild(); if( m_lineEdit ) { - m_lineEdit->setClickMessage( i18n( "Search Scripts" ) ); + m_lineEdit->setPlaceholderText( i18n( "Search Scripts" ) ); connect( m_lineEdit, &QLineEdit::textChanged, this, &ScriptSelector::slotFiltered ); } diff --git a/src/configdialog/dialogs/ScriptsConfig.h b/src/configdialog/dialogs/ScriptsConfig.h --- a/src/configdialog/dialogs/ScriptsConfig.h +++ b/src/configdialog/dialogs/ScriptsConfig.h @@ -20,7 +20,7 @@ #include "configdialog/ConfigDialogBase.h" #include -#include + class KArchiveDirectory; class KArchiveFile; diff --git a/src/configdialog/dialogs/ScriptsConfig.cpp b/src/configdialog/dialogs/ScriptsConfig.cpp --- a/src/configdialog/dialogs/ScriptsConfig.cpp +++ b/src/configdialog/dialogs/ScriptsConfig.cpp @@ -26,15 +26,15 @@ #include "ScriptSelector.h" #include "ui_ScriptsConfig.h" -#include #include #include #include #include -#include +#include #include #include +#include #include #include #include @@ -135,7 +135,7 @@ if( response == KMessageBox::Cancel ) return; - QString filePath = KFileDialog::getOpenFileName( QUrl(), QString(), this, i18n( "Select Archived Script" ) ); + QString filePath = QFileDialog::getOpenFileName( this, i18n( "Select Archived Script" ) ); if( filePath.isEmpty() ) return; @@ -154,7 +154,7 @@ return; } - QString destination = KGlobal::dirs()->saveLocation( "data", QString("amarok/scripts/") + fileName + "/" , false ); + QString destination = QStandardPaths::writableLocation( QStandardPaths::GenericDataLocation ) + QString("amarok/scripts/") + fileName + "/"; const KArchiveDirectory* const archiveDir = archive->directory(); const QDir dir( destination ); const KArchiveFile *specFile = findSpecFile( archiveDir ); @@ -215,15 +215,13 @@ KPluginSelector::ReadConfigFile, i18n("Scriptable Service"), key ); connect( m_selector, &ScriptSelector::changed, this, &ScriptsConfig::slotConfigChanged ); connect( m_selector, &ScriptSelector::filtered, m_uninstallButton, &QPushButton::setDisabled ); - connect( m_selector, &ScriptSelector::changed, qobject_cast(m_parent), &Amarok2ConfigDialog::updateButtons ); m_verticalLayout->insertWidget( 0, m_selector ); m_verticalLayout->removeWidget( m_oldSelector ); -#pragma message("PORTME KF5: Line to port here") - //m_selector->setFilter( m_oldSelector->filter() ); + m_selector->setFilter( m_oldSelector->filter() ); QTimer::singleShot( 0, this, &ScriptsConfig::restoreScrollBar ); } diff --git a/src/configdialog/dialogs/ScriptsConfig.ui b/src/configdialog/dialogs/ScriptsConfig.ui --- a/src/configdialog/dialogs/ScriptsConfig.ui +++ b/src/configdialog/dialogs/ScriptsConfig.ui @@ -31,14 +31,14 @@ - + Uninstall Script - + Install Local Script @@ -85,7 +85,7 @@ - + 0 @@ -131,9 +131,9 @@ - KPushButton + QPushButton QPushButton -
kpushbutton.h
+
qpushbutton.h
ScriptSelector diff --git a/src/context/CMakeLists.txt b/src/context/CMakeLists.txt --- a/src/context/CMakeLists.txt +++ b/src/context/CMakeLists.txt @@ -1,40 +1,53 @@ -#include( KDELibsDependencies ) # for KDE version +#add_subdirectory( applets ) +#add_subdirectory( tools ) -#add_subdirectory( applets ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( engines ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( containments ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( tools ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. - -include_directories( ${CMAKE_CURRENT_SOURCE_DIR} - .. - ${CMAKE_CURRENT_BINARY_DIR}/..) ########### next target ############### -set(amarokpud_LIB_SRCS +set( amarokpud_LIB_SRCS popupdropper/libpud/PopupDropper.cpp popupdropper/libpud/PopupDropperItem.cpp popupdropper/libpud/PopupDropperView.cpp ) -qt4_automoc( - popupdropper/libpud/PopupDropper.cpp - popupdropper/libpud/PopupDropperItem.cpp - popupdropper/libpud/PopupDropperView.cpp -) +add_library( amarokpud SHARED ${amarokpud_LIB_SRCS} ) -add_library(amarokpud SHARED ${amarokpud_LIB_SRCS}) - -set_target_properties( amarokpud PROPERTIES DEFINE_SYMBOL MAKE_POPUPDROPPER_LIB ) +target_include_directories( amarokpud PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/popupdropper/libpud + ${CMAKE_CURRENT_SOURCE_DIR}/popupdropper/libpud +) -target_link_libraries(amarokpud +target_link_libraries( amarokpud Qt5::Core Qt5::Gui - Qt5::Svg Qt5::Widgets Qt5::Svg ) -set_target_properties(amarokpud PROPERTIES VERSION 1.0.0 SOVERSION 1) -install(TARGETS amarokpud ${INSTALL_TARGETS_DEFAULT_ARGS} ) +install( TARGETS amarokpud ${INSTALL_TARGETS_DEFAULT_ARGS} ) + + +set(applet_qml_plugin_qml_files + applet_qml_plugin/qmldir + applet_qml_plugin/Applet.qml + applet_qml_plugin/AppletHeader.qml +) + +set(applet_qml_plugin_SRCS + applet_qml_plugin/src/RatingItem.cpp + applet_qml_plugin/src/AppletPlugin.cpp +) + +#add_library(applet_qml_plugin SHARED ${applet_qml_plugin_SRCS}) + +#target_link_libraries(applet_qml_plugin +# amarokcore +# Qt5::Quick +# KF5::WidgetsAddons +#) + +#install( TARGETS applet_qml_plugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/amarok/applet ) + +#install( FILES ${applet_qml_plugin_qml_files} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/amarok/applet ) +#kpackage_install_package( context_qml_package org.kde.amarok.context genericqml ) diff --git a/src/context/LyricsManager.h b/src/context/LyricsManager.h --- a/src/context/LyricsManager.h +++ b/src/context/LyricsManager.h @@ -19,11 +19,8 @@ #include "amarok_export.h" -#include - #include -#include -#include +#include #include class LyricsSubject; diff --git a/src/context/LyricsManager.cpp b/src/context/LyricsManager.cpp --- a/src/context/LyricsManager.cpp +++ b/src/context/LyricsManager.cpp @@ -24,11 +24,10 @@ #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" -#include - -#include #include -#include +#include + +#include //////////////////////////////////////////////////////////////// //// CLASS LyricsObserver @@ -255,7 +254,7 @@ bool LyricsManager::isEmpty( const QString &lyrics ) const { - QGraphicsTextItem testItem; + QTextEdit testItem; // Set the text of the TextItem. if( Qt::mightBeRichText( lyrics ) ) diff --git a/src/context/popupdropper/libpud/PopupDropper.cpp b/src/context/popupdropper/libpud/PopupDropper.cpp --- a/src/context/popupdropper/libpud/PopupDropper.cpp +++ b/src/context/popupdropper/libpud/PopupDropper.cpp @@ -68,11 +68,12 @@ { if( widget ) widgetRect = widget->rect(); - windowBackgroundBrush.setColor( windowColor ); - hoveredBorderPen.setColor( Qt::blue ); + + windowBackgroundBrush.setColor( windowColor ); + hoveredBorderPen.setColor( Qt::blue ); hoveredBorderPen.setWidth( 2 ); hoveredBorderPen.setStyle( Qt::SolidLine ); - QColor hoveredFillColor = QColor( Qt::blue ); + QColor hoveredFillColor = QColor( Qt::blue ); hoveredFillColor.setAlpha( 32 ); hoveredFillBrush.setColor( hoveredFillColor ); hoveredFillBrush.setStyle( Qt::SolidPattern ); diff --git a/src/context/popupdropper/libpud/PopupDropperItem.cpp b/src/context/popupdropper/libpud/PopupDropperItem.cpp --- a/src/context/popupdropper/libpud/PopupDropperItem.cpp +++ b/src/context/popupdropper/libpud/PopupDropperItem.cpp @@ -23,7 +23,6 @@ #include #include -#include #include #include @@ -432,7 +431,7 @@ if( d->separator ) { - d->svgItem->scale( 0, 0 ); + d->svgItem->setScale( 1.0 ); d->svgItem->setPos( 0, 0 ); return; } @@ -444,7 +443,7 @@ qreal horizScaleValue = maxwidth / d->svgItem->sceneBoundingRect().width(); qreal scaleValue = vertScaleValue < horizScaleValue ? vertScaleValue : horizScaleValue; - d->svgItem->scale( scaleValue, scaleValue ); + d->svgItem->setScale( scaleValue ); qreal item_center = ( d->borderRectItem->sceneBoundingRect().height() / 2 ) + d->borderRectItem->pos().y(); @@ -459,11 +458,12 @@ rightside = sceneBoundingRect().width(); else rightside = d->pd->viewSize().width(); - d->svgItem->setPos( - rightside - - d->svgItem->sceneBoundingRect().width() - - d->horizontalOffset - , item_center - ( d->svgElementRect.height() / 2 ) ); + + d->svgItem->setPos( + rightside + - d->svgItem->sceneBoundingRect().width() + - d->horizontalOffset + , item_center - ( d->svgElementRect.height() / 2 ) ); } } diff --git a/src/core-impl/capabilities/timecode/TimecodeLoadCapability.h b/src/core-impl/capabilities/timecode/TimecodeLoadCapability.h --- a/src/core-impl/capabilities/timecode/TimecodeLoadCapability.h +++ b/src/core-impl/capabilities/timecode/TimecodeLoadCapability.h @@ -22,14 +22,14 @@ #include "core/capabilities/Capability.h" #include "amarokurls/AmarokUrl.h" -#include +#include "AmarokSharedPointer.h" #include namespace Capabilities { typedef QList BookmarkList; -typedef KSharedPtr AmarokUrlPtr; +typedef AmarokSharedPointer AmarokUrlPtr; /** * This capability determines whether a track has timecodes * that can be loaded from it, and supplies them if it can. diff --git a/src/core-impl/capabilities/timecode/TimecodeWriteCapability.cpp b/src/core-impl/capabilities/timecode/TimecodeWriteCapability.cpp --- a/src/core-impl/capabilities/timecode/TimecodeWriteCapability.cpp +++ b/src/core-impl/capabilities/timecode/TimecodeWriteCapability.cpp @@ -27,7 +27,7 @@ #include "core-impl/capabilities/timecode/TimecodeLoadCapability.h" #include "widgets/ProgressWidget.h" -#include +#include namespace Capabilities { diff --git a/src/core-impl/collections/CMakeLists.txt b/src/core-impl/collections/CMakeLists.txt --- a/src/core-impl/collections/CMakeLists.txt +++ b/src/core-impl/collections/CMakeLists.txt @@ -1,25 +1,23 @@ include_directories( - - ${Amarok_SOURCE_DIR}/src ) set(AMAROK_COLLECTION_SUPPORT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/support) -#add_subdirectory( daap ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5 after the rest of the code has been ported to the other KF5 components. +add_subdirectory( daap ) if( NOT WIN32) -#add_subdirectory( audiocd ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. + add_subdirectory( audiocd ) endif() -#add_subdirectory( ipodcollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( mtpcollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( umscollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. +add_subdirectory( ipodcollection ) +add_subdirectory( mtpcollection ) +add_subdirectory( umscollection ) add_subdirectory( db ) # only build playdarcollection if QJson was found if( QJSON_FOUND ) -# add_subdirectory( playdarcollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. + add_subdirectory( playdarcollection ) endif() -#add_subdirectory( upnpcollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. -#add_subdirectory( nepomukcollection ) #FIXME: disabled temporarily for KF5 porting: Port this to KF5::Plasma after the rest of the code has been ported to the other KF5 components. +add_subdirectory( upnpcollection ) +#add_subdirectory( nepomukcollection ) diff --git a/src/core-impl/collections/aggregate/AggregateCollection.h b/src/core-impl/collections/aggregate/AggregateCollection.h --- a/src/core-impl/collections/aggregate/AggregateCollection.h +++ b/src/core-impl/collections/aggregate/AggregateCollection.h @@ -109,13 +109,13 @@ private: QHash m_idCollectionMap; - QHash > m_yearMap; - QHash > m_genreMap; - QHash > m_composerMap; - QHash > m_artistMap; - QHash > m_albumMap; - QHash > m_trackMap; - QHash > m_labelMap; + QHash > m_yearMap; + QHash > m_genreMap; + QHash > m_composerMap; + QHash > m_artistMap; + QHash > m_albumMap; + QHash > m_trackMap; + QHash > m_labelMap; QReadWriteLock m_yearLock; QReadWriteLock m_genreLock; diff --git a/src/core-impl/collections/aggregate/AggregateCollection.cpp b/src/core-impl/collections/aggregate/AggregateCollection.cpp --- a/src/core-impl/collections/aggregate/AggregateCollection.cpp +++ b/src/core-impl/collections/aggregate/AggregateCollection.cpp @@ -151,7 +151,7 @@ m_yearLock.lockForRead(); if( m_yearMap.contains( year->name() ) ) { - KSharedPtr aggregateYear = m_yearMap.value( year->name() ); + AmarokSharedPointer aggregateYear = m_yearMap.value( year->name() ); aggregateYear->add( year ); m_yearLock.unlock(); return aggregateYear.data(); @@ -163,7 +163,7 @@ //we might create two year instances with the same name here, //which would show some weird behaviour in other places Meta::AggreagateYear *aggregateYear = new Meta::AggreagateYear( this, year ); - m_yearMap.insert( year->name(), KSharedPtr( aggregateYear ) ); + m_yearMap.insert( year->name(), AmarokSharedPointer( aggregateYear ) ); m_yearLock.unlock(); return aggregateYear; } @@ -173,7 +173,7 @@ AggregateCollection::setYear( Meta::AggreagateYear *year ) { m_yearLock.lockForWrite(); - m_yearMap.insert( year->name(), KSharedPtr( year ) ); + m_yearMap.insert( year->name(), AmarokSharedPointer( year ) ); m_yearLock.unlock(); } @@ -198,7 +198,7 @@ m_genreLock.lockForRead(); if( m_genreMap.contains( genre->name() ) ) { - KSharedPtr aggregateGenre = m_genreMap.value( genre->name() ); + AmarokSharedPointer aggregateGenre = m_genreMap.value( genre->name() ); aggregateGenre->add( genre ); m_genreLock.unlock(); return aggregateGenre.data(); @@ -210,7 +210,7 @@ //we might create two instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateGenre *aggregateGenre = new Meta::AggregateGenre( this, genre ); - m_genreMap.insert( genre->name(), KSharedPtr( aggregateGenre ) ); + m_genreMap.insert( genre->name(), AmarokSharedPointer( aggregateGenre ) ); m_genreLock.unlock(); return aggregateGenre; } @@ -220,7 +220,7 @@ AggregateCollection::setGenre( Meta::AggregateGenre *genre ) { m_genreLock.lockForWrite(); - m_genreMap.insert( genre->name(), KSharedPtr( genre ) ); + m_genreMap.insert( genre->name(), AmarokSharedPointer( genre ) ); m_genreLock.unlock(); } @@ -245,7 +245,7 @@ m_composerLock.lockForRead(); if( m_composerMap.contains( composer->name() ) ) { - KSharedPtr aggregateComposer = m_composerMap.value( composer->name() ); + AmarokSharedPointer aggregateComposer = m_composerMap.value( composer->name() ); aggregateComposer->add( composer ); m_composerLock.unlock(); return aggregateComposer.data(); @@ -257,7 +257,7 @@ //we might create two instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateComposer *aggregateComposer = new Meta::AggregateComposer( this, composer ); - m_composerMap.insert( composer->name(), KSharedPtr( aggregateComposer ) ); + m_composerMap.insert( composer->name(), AmarokSharedPointer( aggregateComposer ) ); m_composerLock.unlock(); return aggregateComposer; } @@ -267,7 +267,7 @@ AggregateCollection::setComposer( Meta::AggregateComposer *composer ) { m_composerLock.lockForWrite(); - m_composerMap.insert( composer->name(), KSharedPtr( composer ) ); + m_composerMap.insert( composer->name(), AmarokSharedPointer( composer ) ); m_composerLock.unlock(); } @@ -292,7 +292,7 @@ m_artistLock.lockForRead(); if( m_artistMap.contains( artist->name() ) ) { - KSharedPtr aggregateArtist = m_artistMap.value( artist->name() ); + AmarokSharedPointer aggregateArtist = m_artistMap.value( artist->name() ); aggregateArtist->add( artist ); m_artistLock.unlock(); return aggregateArtist.data(); @@ -304,7 +304,7 @@ //we might create two instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateArtist *aggregateArtist = new Meta::AggregateArtist( this, artist ); - m_artistMap.insert( artist->name(), KSharedPtr( aggregateArtist ) ); + m_artistMap.insert( artist->name(), AmarokSharedPointer( aggregateArtist ) ); m_artistLock.unlock(); return aggregateArtist; } @@ -314,7 +314,7 @@ AggregateCollection::setArtist( Meta::AggregateArtist *artist ) { m_artistLock.lockForWrite(); - m_artistMap.insert( artist->name(), KSharedPtr( artist ) ); + m_artistMap.insert( artist->name(), AmarokSharedPointer( artist ) ); m_artistLock.unlock(); } @@ -341,7 +341,7 @@ m_albumLock.lockForRead(); if( m_albumMap.contains( key ) ) { - KSharedPtr aggregateAlbum = m_albumMap.value( key ); + AmarokSharedPointer aggregateAlbum = m_albumMap.value( key ); aggregateAlbum->add( album ); m_albumLock.unlock(); return aggregateAlbum.data(); @@ -353,7 +353,7 @@ //we might create two instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateAlbum *aggregateAlbum = new Meta::AggregateAlbum( this, album ); - m_albumMap.insert( key, KSharedPtr( aggregateAlbum ) ); + m_albumMap.insert( key, AmarokSharedPointer( aggregateAlbum ) ); m_albumLock.unlock(); return aggregateAlbum; } @@ -364,7 +364,7 @@ { m_albumLock.lockForWrite(); m_albumMap.insert( Meta::AlbumKey( Meta::AlbumPtr( album ) ), - KSharedPtr( album ) ); + AmarokSharedPointer( album ) ); m_albumLock.unlock(); } @@ -390,7 +390,7 @@ m_trackLock.lockForRead(); if( m_trackMap.contains( key ) ) { - KSharedPtr aggregateTrack = m_trackMap.value( key ); + AmarokSharedPointer aggregateTrack = m_trackMap.value( key ); aggregateTrack->add( track ); m_trackLock.unlock(); return aggregateTrack.data(); @@ -402,7 +402,7 @@ //we might create two instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateTrack *aggregateTrack = new Meta::AggregateTrack( this, track ); - m_trackMap.insert( key, KSharedPtr( aggregateTrack ) ); + m_trackMap.insert( key, AmarokSharedPointer( aggregateTrack ) ); m_trackLock.unlock(); return aggregateTrack; } @@ -414,7 +414,7 @@ Meta::TrackPtr ptr( track ); const Meta::TrackKey key( ptr ); m_trackLock.lockForWrite(); - m_trackMap.insert( key, KSharedPtr( track ) ); + m_trackMap.insert( key, AmarokSharedPointer( track ) ); m_trackLock.unlock(); } @@ -445,7 +445,7 @@ m_labelLock.lockForRead(); if( m_labelMap.contains( label->name() ) ) { - KSharedPtr aggregateLabel = m_labelMap.value( label->name() ); + AmarokSharedPointer aggregateLabel = m_labelMap.value( label->name() ); aggregateLabel->add( label ); m_labelLock.unlock(); return aggregateLabel.data(); @@ -457,7 +457,7 @@ //we might create two year instances with the same name here, //which would show some weird behaviour in other places Meta::AggregateLabel *aggregateLabel = new Meta::AggregateLabel( this, label ); - m_labelMap.insert( label->name(), KSharedPtr( aggregateLabel ) ); + m_labelMap.insert( label->name(), AmarokSharedPointer( aggregateLabel ) ); m_labelLock.unlock(); return aggregateLabel; } @@ -467,7 +467,7 @@ AggregateCollection::setLabel( Meta::AggregateLabel *label ) { QWriteLocker locker( &m_labelLock ); - m_labelMap.insert( label->name(), KSharedPtr( label ) ); + m_labelMap.insert( label->name(), AmarokSharedPointer( label ) ); } void @@ -503,14 +503,14 @@ iter.remove(); \ } - foreachCollectGarbage( Meta::TrackKey, KSharedPtr, 2, m_trackMap ) + foreachCollectGarbage( Meta::TrackKey, AmarokSharedPointer, 2, m_trackMap ) //run before artist so that album artist pointers can be garbage collected - foreachCollectGarbage( Meta::AlbumKey, KSharedPtr, 2, m_albumMap ) - foreachCollectGarbage( QString, KSharedPtr, 2, m_artistMap ) - foreachCollectGarbage( QString, KSharedPtr, 2, m_genreMap ) - foreachCollectGarbage( QString, KSharedPtr, 2, m_composerMap ) - foreachCollectGarbage( QString, KSharedPtr, 2, m_yearMap ) - foreachCollectGarbage( QString, KSharedPtr, 2, m_labelMap ) + foreachCollectGarbage( Meta::AlbumKey, AmarokSharedPointer, 2, m_albumMap ) + foreachCollectGarbage( QString, AmarokSharedPointer, 2, m_artistMap ) + foreachCollectGarbage( QString, AmarokSharedPointer, 2, m_genreMap ) + foreachCollectGarbage( QString, AmarokSharedPointer, 2, m_composerMap ) + foreachCollectGarbage( QString, AmarokSharedPointer, 2, m_yearMap ) + foreachCollectGarbage( QString, AmarokSharedPointer, 2, m_labelMap ) } //make sure to unlock all necessary locks diff --git a/src/core-impl/collections/aggregate/AggregateMeta.cpp b/src/core-impl/collections/aggregate/AggregateMeta.cpp --- a/src/core-impl/collections/aggregate/AggregateMeta.cpp +++ b/src/core-impl/collections/aggregate/AggregateMeta.cpp @@ -1442,7 +1442,7 @@ else { // be careful with the ordering of instructions here - // AggregateCollection uses KSharedPtr internally + // AggregateCollection uses AmarokSharedPointer internally // so we have to make sure that there is more than one pointer // to this instance by registering this instance under the new name // before removing the old one. Otherwise kSharedPtr might delete this diff --git a/src/core-impl/collections/aggregate/AggregateQueryMaker.h b/src/core-impl/collections/aggregate/AggregateQueryMaker.h --- a/src/core-impl/collections/aggregate/AggregateQueryMaker.h +++ b/src/core-impl/collections/aggregate/AggregateQueryMaker.h @@ -27,7 +27,7 @@ #include #include -#include +#include "AmarokSharedPointer.h" class CustomReturnFunction; class CustomReturnValue; @@ -99,15 +99,15 @@ qint64 m_orderField; bool m_orderByNumberField; QMutex m_queryDoneCountMutex; - // store AggregateCollection meta stuff using KSharedPtr, + // store AggregateCollection meta stuff using AmarokSharedPointer, // otherwise AggregateCollection might delete it (as soon as it gets garbage collection) - QSet > m_tracks; - QSet > m_artists; - QSet > m_albums; - QSet > m_genres; - QSet > m_composers; - QSet > m_years; - QSet > m_labels; + QSet > m_tracks; + QSet > m_artists; + QSet > m_albums; + QSet > m_genres; + QSet > m_composers; + QSet > m_years; + QSet > m_labels; QList m_returnFunctions; QList m_returnValues; }; diff --git a/src/core-impl/collections/aggregate/AggregateQueryMaker.cpp b/src/core-impl/collections/aggregate/AggregateQueryMaker.cpp --- a/src/core-impl/collections/aggregate/AggregateQueryMaker.cpp +++ b/src/core-impl/collections/aggregate/AggregateQueryMaker.cpp @@ -323,7 +323,7 @@ { QStringList result; Meta::TrackList tracks; - foreach( KSharedPtr track, m_tracks ) + foreach( AmarokSharedPointer track, m_tracks ) { tracks.append( Meta::TrackPtr::staticCast( track ) ); } @@ -364,7 +364,7 @@ case QueryMaker::Track : { Meta::TrackList tracks; - foreach( KSharedPtr track, m_tracks ) + foreach( AmarokSharedPointer track, m_tracks ) { tracks.append( Meta::TrackPtr::staticCast( track ) ); } @@ -386,7 +386,7 @@ case QueryMaker::Album : { Meta::AlbumList albums; - foreach( KSharedPtr album, m_albums ) + foreach( AmarokSharedPointer album, m_albums ) { albums.append( Meta::AlbumPtr::staticCast( album ) ); } @@ -403,7 +403,7 @@ case QueryMaker::AlbumArtist : { Meta::ArtistList artists; - foreach( KSharedPtr artist, m_artists ) + foreach( AmarokSharedPointer artist, m_artists ) { artists.append( Meta::ArtistPtr::staticCast( artist ) ); } @@ -419,7 +419,7 @@ case QueryMaker::Composer : { Meta::ComposerList composers; - foreach( KSharedPtr composer, m_composers ) + foreach( AmarokSharedPointer composer, m_composers ) { composers.append( Meta::ComposerPtr::staticCast( composer ) ); } @@ -435,7 +435,7 @@ case QueryMaker::Genre : { Meta::GenreList genres; - foreach( KSharedPtr genre, m_genres ) + foreach( AmarokSharedPointer genre, m_genres ) { genres.append( Meta::GenrePtr::staticCast( genre ) ); } @@ -451,7 +451,7 @@ case QueryMaker::Year : { Meta::YearList years; - foreach( KSharedPtr year, m_years ) + foreach( AmarokSharedPointer year, m_years ) { years.append( Meta::YearPtr::staticCast( year ) ); } @@ -471,7 +471,7 @@ case QueryMaker::Label : { Meta::LabelList labels; - foreach( KSharedPtr label, m_labels ) + foreach( AmarokSharedPointer label, m_labels ) { labels.append( Meta::LabelPtr::staticCast( label ) ); } @@ -501,60 +501,60 @@ { foreach( const Meta::TrackPtr &track, tracks ) { - m_tracks.insert( KSharedPtr( m_collection->getTrack( track ) ) ); + m_tracks.insert( AmarokSharedPointer( m_collection->getTrack( track ) ) ); } } void AggregateQueryMaker::slotNewArtistsReady( const Meta::ArtistList &artists ) { foreach( const Meta::ArtistPtr &artist, artists ) { - m_artists.insert( KSharedPtr( m_collection->getArtist( artist ) ) ); + m_artists.insert( AmarokSharedPointer( m_collection->getArtist( artist ) ) ); } } void AggregateQueryMaker::slotNewAlbumsReady( const Meta::AlbumList &albums ) { foreach( const Meta::AlbumPtr &album, albums ) { - m_albums.insert( KSharedPtr( m_collection->getAlbum( album ) ) ); + m_albums.insert( AmarokSharedPointer( m_collection->getAlbum( album ) ) ); } } void AggregateQueryMaker::slotNewGenresReady( const Meta::GenreList &genres ) { foreach( const Meta::GenrePtr &genre, genres ) { - m_genres.insert( KSharedPtr( m_collection->getGenre( genre ) ) ); + m_genres.insert( AmarokSharedPointer( m_collection->getGenre( genre ) ) ); } } void AggregateQueryMaker::slotNewComposersReady( const Meta::ComposerList &composers ) { foreach( const Meta::ComposerPtr &composer, composers ) { - m_composers.insert( KSharedPtr( m_collection->getComposer( composer ) ) ); + m_composers.insert( AmarokSharedPointer( m_collection->getComposer( composer ) ) ); } } void AggregateQueryMaker::slotNewYearsReady( const Meta::YearList &years ) { foreach( const Meta::YearPtr &year, years ) { - m_years.insert( KSharedPtr( m_collection->getYear( year ) ) ); + m_years.insert( AmarokSharedPointer( m_collection->getYear( year ) ) ); } } void AggregateQueryMaker::slotNewLabelsReady( const Meta::LabelList &labels ) { foreach( const Meta::LabelPtr &label, labels ) { - m_labels.insert( KSharedPtr( m_collection->getLabel( label ) ) ); + m_labels.insert( AmarokSharedPointer( m_collection->getLabel( label ) ) ); } } diff --git a/src/core-impl/collections/audiocd/AudioCdCollection.h b/src/core-impl/collections/audiocd/AudioCdCollection.h --- a/src/core-impl/collections/audiocd/AudioCdCollection.h +++ b/src/core-impl/collections/audiocd/AudioCdCollection.h @@ -22,10 +22,11 @@ #include "MemoryCollection.h" #include "core-impl/meta/proxy/MetaProxy.h" -#include - #include #include +#include + +#include class MediaDeviceInfo; diff --git a/src/core-impl/collections/audiocd/AudioCdCollection.cpp b/src/core-impl/collections/audiocd/AudioCdCollection.cpp --- a/src/core-impl/collections/audiocd/AudioCdCollection.cpp +++ b/src/core-impl/collections/audiocd/AudioCdCollection.cpp @@ -36,19 +36,18 @@ #include "support/AudioCdDeviceInfo.h" #include -#include #include #include #include #include #include #include -#include #include #include +#include using namespace Collections; @@ -91,7 +90,11 @@ url.setPath(url.path() + '/' + ( path )); if( !m_device.isEmpty() ) - url.addQueryItem( "device", m_device ); + { + QUrlQuery query; + query.addQueryItem( "device", m_device ); + url.setQuery( query ); + } return url; } @@ -368,9 +371,10 @@ AudioCdCollection::trackLength( int i ) const { QUrl kioUrl = audiocdUrl( trackWavFileName( i ) ); - KIO::UDSEntry uds; - if ( KIO::NetAccess::stat(kioUrl, uds, NULL) ) + KIO::StatJob *statJob = KIO::stat( kioUrl ); + if ( statJob->exec() ) { + KIO::UDSEntry uds = statJob->statResult(); qint64 samples = (uds.numberValue(KIO::UDSEntry::UDS_SIZE, 44) - 44) / 4; return (samples - 44) * 10 / 441; } @@ -502,7 +506,7 @@ // This will find also data tracks on mixed CDs: // a better way to discover the available audio tracks should be found - while( KIO::NetAccess::exists( audiocdUrl( trackWav ), KIO::NetAccess::SourceSide, 0 ) ) + while( KIO::stat( audiocdUrl( trackWav ), KIO::StatJob::SourceSide, 0 )->exec() ) { debug() << "got track url: " << audiocdUrl( trackWav ); diff --git a/src/core-impl/collections/audiocd/AudioCdCollectionLocation.cpp b/src/core-impl/collections/audiocd/AudioCdCollectionLocation.cpp --- a/src/core-impl/collections/audiocd/AudioCdCollectionLocation.cpp +++ b/src/core-impl/collections/audiocd/AudioCdCollectionLocation.cpp @@ -43,7 +43,7 @@ Meta::AudioCdTrackPtr cdTrack = Meta::AudioCdTrackPtr::staticCast( trackPtr ); const QString path = m_collection->copyableFilePath( cdTrack->fileNameBase() + '.' + m_collection->encodingFormat() ); - resultMap.insert( trackPtr, QUrl( path ) ); + resultMap.insert( trackPtr, QUrl::fromLocalFile( path ) ); } slotGetKIOCopyableUrlsDone( resultMap ); diff --git a/src/core-impl/collections/audiocd/AudioCdMeta.h b/src/core-impl/collections/audiocd/AudioCdMeta.h --- a/src/core-impl/collections/audiocd/AudioCdMeta.h +++ b/src/core-impl/collections/audiocd/AudioCdMeta.h @@ -34,12 +34,12 @@ class AudioCdComposer; class AudioCdYear; -typedef KSharedPtr AudioCdTrackPtr; -typedef KSharedPtr AudioCdArtistPtr; -typedef KSharedPtr AudioCdAlbumPtr; -typedef KSharedPtr AudioCdGenrePtr; -typedef KSharedPtr AudioCdComposerPtr; -typedef KSharedPtr AudioCdYearPtr; +typedef AmarokSharedPointer AudioCdTrackPtr; +typedef AmarokSharedPointer AudioCdArtistPtr; +typedef AmarokSharedPointer AudioCdAlbumPtr; +typedef AmarokSharedPointer AudioCdGenrePtr; +typedef AmarokSharedPointer AudioCdComposerPtr; +typedef AmarokSharedPointer AudioCdYearPtr; class AudioCdTrack : public Meta::Track { diff --git a/src/core-impl/collections/audiocd/CMakeLists.txt b/src/core-impl/collections/audiocd/CMakeLists.txt --- a/src/core-impl/collections/audiocd/CMakeLists.txt +++ b/src/core-impl/collections/audiocd/CMakeLists.txt @@ -33,17 +33,12 @@ amaroklib KF5::ThreadWeaver KF5::KIOCore - - ${KDE4_SOLID_LIBRARY} ) if(APPLE) set_target_properties(amarok_collection-audiocdcollection PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() install(TARGETS amarok_collection-audiocdcollection DESTINATION ${PLUGIN_INSTALL_DIR} ) - -########### install files ############### - -install( FILES amarok_collection-audiocdcollection.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +kcoreaddons_desktop_to_json(amarok_collection-audiocdcollection amarok_collection-audiocdcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/core-impl/collections/audiocd/FormatSelectionDialog.cpp b/src/core-impl/collections/audiocd/FormatSelectionDialog.cpp --- a/src/core-impl/collections/audiocd/FormatSelectionDialog.cpp +++ b/src/core-impl/collections/audiocd/FormatSelectionDialog.cpp @@ -19,6 +19,7 @@ #include "AudioCdCollection.h" #include +#include FormatSelectionDialog::FormatSelectionDialog( QWidget *parent ) : QDialog( parent ) diff --git a/src/core-impl/collections/audiocd/handler/AudioCdHandler.cpp b/src/core-impl/collections/audiocd/handler/AudioCdHandler.cpp --- a/src/core-impl/collections/audiocd/handler/AudioCdHandler.cpp +++ b/src/core-impl/collections/audiocd/handler/AudioCdHandler.cpp @@ -17,7 +17,7 @@ #include "AudioCdHandler.h" #include "MediaDeviceCollection.h" -#include +#include using namespace Meta; diff --git a/src/core-impl/collections/daap/CMakeLists.txt b/src/core-impl/collections/daap/CMakeLists.txt --- a/src/core-impl/collections/daap/CMakeLists.txt +++ b/src/core-impl/collections/daap/CMakeLists.txt @@ -21,7 +21,6 @@ target_link_libraries(amarok_collection-daapcollection amarokcore amaroklib - KF5::KDELibs4Support KF5::ThreadWeaver KF5::DNSSD Qt5::Network @@ -33,7 +32,4 @@ install(TARGETS amarok_collection-daapcollection DESTINATION ${PLUGIN_INSTALL_DIR} ) - -########### install files ############### - -install( FILES amarok_collection-daapcollection.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +kcoreaddons_desktop_to_json(amarok_collection-daapcollection amarok_collection-daapcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/core-impl/collections/daap/DaapCollection.h b/src/core-impl/collections/daap/DaapCollection.h --- a/src/core-impl/collections/daap/DaapCollection.h +++ b/src/core-impl/collections/daap/DaapCollection.h @@ -23,15 +23,14 @@ #include "MemoryCollection.h" #include "Reader.h" +#include #include #include #include -#include +#include #include #include -#include - #include namespace KDNSSD { @@ -71,7 +70,7 @@ private: KDNSSD::ServiceBrowser* m_browser; - QMap > m_collectionMap; + QMap > m_collectionMap; QHash m_lookupHash; }; diff --git a/src/core-impl/collections/daap/DaapCollection.cpp b/src/core-impl/collections/daap/DaapCollection.cpp --- a/src/core-impl/collections/daap/DaapCollection.cpp +++ b/src/core-impl/collections/daap/DaapCollection.cpp @@ -26,7 +26,7 @@ #include "core/support/Debug.h" #include "DaapMeta.h" #include "MemoryQueryMaker.h" -#include "Reader.h" +#include "daapreader/Reader.h" #include #include @@ -58,13 +58,13 @@ { case KDNSSD::ServiceBrowser::Working: //don't block Amarok's startup by connecting to DAAP servers - QTimer::singleShot( 1000, this, SLOT(connectToManualServers()) ); + QTimer::singleShot( 1000, this, &DaapCollectionFactory::connectToManualServers ); m_browser = new KDNSSD::ServiceBrowser("_daap._tcp"); m_browser->setObjectName("daapServiceBrowser"); - connect( m_browser, SIGNAL(serviceAdded(KDNSSD::RemoteService::Ptr)), - this, SLOT(foundDaap(KDNSSD::RemoteService::Ptr)) ); - connect( m_browser, SIGNAL(serviceRemoved(KDNSSD::RemoteService::Ptr)), - this, SLOT(serverOffline(KDNSSD::RemoteService::Ptr)) ); + connect( m_browser, &KDNSSD::ServiceBrowser::serviceAdded, + this, &DaapCollectionFactory::foundDaap ); + connect( m_browser, &KDNSSD::ServiceBrowser::serviceRemoved, + this, &DaapCollectionFactory::serverOffline ); m_browser->startBrowse(); break; @@ -101,21 +101,21 @@ i18n( "Loading remote collection from host %1", host), Amarok::Logger::Information ); - int lookup_id = QHostInfo::lookupHost( host, this, SLOT(resolvedManualServerIp(QHostInfo))); + int lookup_id = QHostInfo::lookupHost( host, this, &DaapCollectionFactory::resolvedManualServerIp ); m_lookupHash.insert( lookup_id, port ); } } void DaapCollectionFactory::serverOffline( KDNSSD::RemoteService::Ptr service ) { DEBUG_BLOCK - QString key = serverKey( service.data()->hostName(), service.data()->port() ); + QString key = serverKey( service->hostName(), service->port() ); if( m_collectionMap.contains( key ) ) { - QWeakPointer coll = m_collectionMap[ key ]; + auto coll = m_collectionMap[ key ]; if( coll ) - coll.data()->serverOffline(); //collection will be deleted by collectionmanager + coll->serverOffline(); //collection will be deleted by collectionmanager else warning() << "collection already null"; @@ -131,7 +131,7 @@ { DEBUG_BLOCK - connect( service.data(), SIGNAL(resolved(bool)), this, SLOT(resolvedDaap(bool)) ); + connect( service.data(), &KDNSSD::RemoteService::resolved, this, &DaapCollectionFactory::resolvedDaap ); service->resolveAsync(); } @@ -142,7 +142,7 @@ if( !success || !service ) return; debug() << service->serviceName() << ' ' << service->hostName() << ' ' << service->domain() << ' ' << service->type(); - int lookup_id = QHostInfo::lookupHost( service->hostName(), this, SLOT(resolvedServiceIp(QHostInfo))); + int lookup_id = QHostInfo::lookupHost( service->hostName(), this, &DaapCollectionFactory::resolvedServiceIp ); m_lookupHash.insert( lookup_id, service->port() ); } @@ -159,7 +159,7 @@ DaapCollection *collection = dynamic_cast( sender() ); if( collection ) { - disconnect( collection, SIGNAL(remove()), this, SLOT(slotCollectionDownloadFailed()) ); + disconnect( collection, &DaapCollection::remove, this, &DaapCollectionFactory::slotCollectionDownloadFailed ); emit newCollection( collection ); } } @@ -171,8 +171,8 @@ DaapCollection *collection = qobject_cast( sender() ); if( !collection ) return; - disconnect( collection, SIGNAL(collectionReady()), this, SLOT(slotCollectionReady()) ); - foreach( const QWeakPointer< DaapCollection > &it, m_collectionMap ) + disconnect( collection, &DaapCollection::collectionReady, this, &DaapCollectionFactory::slotCollectionReady ); + for( const auto &it : m_collectionMap ) { if( it.data() == collection ) { @@ -198,8 +198,8 @@ //adding manual servers to the collectionMap doesn't make sense DaapCollection *coll = new DaapCollection( host, ip, port ); - connect( coll, SIGNAL(collectionReady()), SLOT(slotCollectionReady()) ); - connect( coll, SIGNAL(remove()), SLOT(slotCollectionDownloadFailed()) ); + connect( coll, &DaapCollection::collectionReady, this, &DaapCollectionFactory::slotCollectionReady ); + connect( coll, &DaapCollection::remove, this, &DaapCollectionFactory::slotCollectionDownloadFailed ); } void @@ -222,9 +222,9 @@ return; // debug() << "creating daap collection with" << host << ip << port; - QWeakPointer coll( new DaapCollection( host, ip, port ) ); - connect( coll.data(), SIGNAL(collectionReady()), SLOT(slotCollectionReady()) ); - connect( coll.data(), SIGNAL(remove()), SLOT(slotCollectionDownloadFailed()) ); + QPointer coll( new DaapCollection( host, ip, port ) ); + connect( coll, &DaapCollection::collectionReady, this, &DaapCollectionFactory::slotCollectionReady ); + connect( coll, &DaapCollection::remove, this, &DaapCollectionFactory::slotCollectionDownloadFailed ); m_collectionMap.insert( serverKey( host, port ), coll.data() ); } @@ -240,8 +240,8 @@ { debug() << "Host: " << host << " port: " << port; m_reader = new Daap::Reader( this, host, port, QString(), this, "DaapReader" ); - connect( m_reader, SIGNAL(passwordRequired()), SLOT(passwordRequired()) ); - connect( m_reader, SIGNAL(httpError(QString)), SLOT(httpError(QString)) ); + connect( m_reader, &Daap::Reader::passwordRequired,this, &DaapCollection::passwordRequired ); + connect( m_reader, &Daap::Reader::httpError, this, &DaapCollection::httpError ); m_reader->loginRequest(); } @@ -278,8 +278,8 @@ QString password; delete m_reader; m_reader = new Daap::Reader( this, m_host, m_port, password, this, "DaapReader" ); - connect( m_reader, SIGNAL(passwordRequired()), SLOT(passwordRequired()) ); - connect( m_reader, SIGNAL(httpError(QString)), SLOT(httpError(QString)) ); + connect( m_reader, &Daap::Reader::passwordRequired, this, &DaapCollection::passwordRequired ); + connect( m_reader, &Daap::Reader::httpError, this, &DaapCollection::httpError ); m_reader->loginRequest(); } diff --git a/src/core-impl/collections/daap/DaapMeta.h b/src/core-impl/collections/daap/DaapMeta.h --- a/src/core-impl/collections/daap/DaapMeta.h +++ b/src/core-impl/collections/daap/DaapMeta.h @@ -33,12 +33,12 @@ class DaapComposer; class DaapYear; -typedef KSharedPtr DaapTrackPtr; -typedef KSharedPtr DaapArtistPtr; -typedef KSharedPtr DaapAlbumPtr; -typedef KSharedPtr DaapGenrePtr; -typedef KSharedPtr DaapComposerPtr; -typedef KSharedPtr DaapYearPtr; +typedef AmarokSharedPointer DaapTrackPtr; +typedef AmarokSharedPointer DaapArtistPtr; +typedef AmarokSharedPointer DaapAlbumPtr; +typedef AmarokSharedPointer DaapGenrePtr; +typedef AmarokSharedPointer DaapComposerPtr; +typedef AmarokSharedPointer DaapYearPtr; class DaapTrack : public Meta::Track { diff --git a/src/core-impl/collections/daap/daapreader/Reader.h b/src/core-impl/collections/daap/daapreader/Reader.h --- a/src/core-impl/collections/daap/daapreader/Reader.h +++ b/src/core-impl/collections/daap/daapreader/Reader.h @@ -19,11 +19,12 @@ #ifndef DAAPREADER_H #define DAAPREADER_H +#include + #include #include #include -#include "MemoryCollection.h" class QString; @@ -74,13 +75,13 @@ bool parseSongList( const QByteArray &data, bool set_collection = false); public Q_SLOTS: - void logoutRequest(int, bool ); - void contentCodesReceived( int id , bool error ); - void loginHeaderReceived( const QHttpResponseHeader& resp ); - void loginFinished( int id , bool error ); - void updateFinished( int id , bool error ); - void databaseIdFinished( int id , bool error ); - void songListFinished( int id, bool error ); + void logoutRequestFinished(); + void contentCodesReceived(); + void loginHeaderReceived(); + void loginFinished(); + void updateFinished(); + void databaseIdFinished(); + void songListFinished(); void fetchingError( const QString& error ); Q_SIGNALS: @@ -92,7 +93,6 @@ /** * Make a map-vector tree out of the DAAP binary result * @param raw stream of DAAP reply - * @param containerLength length of the container (or entire result) being analyzed */ Map parse( QDataStream &raw); static void addElement( Map &parentMap, char* tag, QVariant element ); //!< supporter function for parse @@ -126,7 +126,7 @@ WorkerThread( const QByteArray &data, Reader* reader, Collections::DaapCollection *coll ); virtual ~WorkerThread(); - virtual bool success() const; + virtual bool success() const Q_DECL_OVERRIDE; protected: void defaultBegin(const ThreadWeaver::JobPointer& job, ThreadWeaver::Thread *thread) Q_DECL_OVERRIDE; diff --git a/src/core-impl/collections/daap/daapreader/Reader.cpp b/src/core-impl/collections/daap/daapreader/Reader.cpp --- a/src/core-impl/collections/daap/daapreader/Reader.cpp +++ b/src/core-impl/collections/daap/daapreader/Reader.cpp @@ -20,15 +20,14 @@ #include "Reader.h" #include "authentication/contentfetcher.h" -#include "DaapCollection.h" -#include "DaapMeta.h" +#include "../DaapCollection.h" +#include "../DaapMeta.h" #include "core/support/Debug.h" #include #include #include -#include #include #include @@ -76,40 +75,35 @@ { DEBUG_BLOCK ContentFetcher* http = new ContentFetcher( m_host, m_port, m_password, this, "readerLogoutHttp" ); - connect( http, SIGNAL(httpError(QString)), this, SLOT(fetchingError(QString)) ); - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(logoutRequest(int,bool)) ); + connect( http, &ContentFetcher::httpError, this, &Reader::fetchingError ); + connect( http, &ContentFetcher::finished, this, &Reader::logoutRequestFinished ); http->getDaap( "/logout?" + m_loginString ); } void -Reader::logoutRequest( int, bool ) +Reader::logoutRequestFinished() { DEBUG_BLOCK - const_cast(sender())->deleteLater(); + sender()->deleteLater(); deleteLater(); } void Reader::loginRequest() { DEBUG_BLOCK ContentFetcher* http = new ContentFetcher( m_host, m_port, m_password, this, "readerHttp"); - connect( http, SIGNAL(httpError(QString)), this, SLOT(fetchingError(QString)) ); - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(contentCodesReceived(int,bool)) ); + connect( http, &ContentFetcher::httpError, this, &Reader::fetchingError ); + connect( http, &ContentFetcher::finished, this, &Reader::contentCodesReceived ); http->getDaap( "/content-codes" ); } void -Reader::contentCodesReceived( int /* id */, bool error ) +Reader::contentCodesReceived() { DEBUG_BLOCK ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(contentCodesReceived(int,bool)) ); - if( error ) - { - http->deleteLater(); - return; - } + disconnect( http, &ContentFetcher::finished, this, &Reader::contentCodesReceived ); QDataStream raw( http->results() ); Map contentCodes = parse( raw ); @@ -130,39 +124,33 @@ } } - connect( http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)) - , this, SLOT(loginHeaderReceived(QHttpResponseHeader)) ); + connect( http, &ContentFetcher::loginRequired, + this, &Reader::loginHeaderReceived ); http->getDaap( "/login" ); } void -Reader::loginHeaderReceived( const QHttpResponseHeader & resp ) +Reader::loginHeaderReceived() { DEBUG_BLOCK ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)) - , this, SLOT(loginHeaderReceived(QHttpResponseHeader)) ); - if( resp.statusCode() == 401 /*authorization required*/) - { - emit passwordRequired(); - http->deleteLater(); - return; - } - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(loginFinished(int,bool)) ); + disconnect( http, &ContentFetcher::loginRequired, + this, &Reader::loginHeaderReceived ); + + emit passwordRequired(); + http->deleteLater(); + +// connect( http, &ContentFetcher::finished, this, &Reader::loginFinished ); } void -Reader::loginFinished( int /* id */, bool error ) +Reader::loginFinished() { DEBUG_BLOCK ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(loginFinished(int,bool)) ); - if( error ) - { - http->deleteLater(); - return; - } + disconnect( http, &ContentFetcher::finished, this, &Reader::loginFinished ); + QDataStream raw( http->results() ); Map loginResults = parse( raw ); QVariantList list = loginResults.value( "mlog" ).toList(); @@ -176,22 +164,16 @@ } m_sessionId = innerList.value( 0 ).toInt(); m_loginString = "session-id=" + QString::number( m_sessionId ); - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(updateFinished(int,bool)) ); + connect( http, &ContentFetcher::finished, this, &Reader::updateFinished ); http->getDaap( "/update?" + m_loginString ); } void -Reader::updateFinished( int /*id*/, bool error ) +Reader::updateFinished() { DEBUG_BLOCK ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(updateFinished(int,bool)) ); - if( error ) - { - http->deleteLater(); - warning() << "what is going on here? " << http->error(); - return; - } + disconnect( http, &ContentFetcher::finished, this, &Reader::updateFinished ); QDataStream raw( http->results() ); Map updateResults = parse( raw ); @@ -202,41 +184,32 @@ m_loginString = m_loginString + "&revision-number=" + QString::number( updateResults["mupd"].toList()[0].toMap()["musr"].toList()[0].toInt() ); - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(databaseIdFinished(int,bool)) ); + connect( http, &ContentFetcher::finished, this, &Reader::databaseIdFinished ); http->getDaap( "/databases?" + m_loginString ); } void -Reader::databaseIdFinished( int /*id*/, bool error ) +Reader::databaseIdFinished() { ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(databaseIdFinished(int,bool)) ); - if( error ) - { - http->deleteLater(); - return; - } + disconnect( http, &ContentFetcher::finished, this, &Reader::databaseIdFinished ); QDataStream raw( http->results() ); Map dbIdResults = parse( raw ); m_databaseId = QString::number( dbIdResults["avdb"].toList()[0].toMap()["mlcl"].toList()[0].toMap()["mlit"].toList()[0].toMap()["miid"].toList()[0].toInt() ); - connect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(songListFinished(int,bool)) ); + connect( http, &ContentFetcher::finished, this, &Reader::songListFinished ); http->getDaap( QString("/databases/%1/items?type=music&meta=dmap.itemid,dmap.itemname,daap.songformat,daap.songartist,daap.songalbum,daap.songtime,daap.songtracknumber,daap.songcomment,daap.songyear,daap.songgenre&%2") .arg( m_databaseId, m_loginString ) ); } void -Reader::songListFinished( int /*id*/, bool error ) +Reader::songListFinished() { DEBUG_BLOCK ContentFetcher* http = (ContentFetcher*) sender(); - disconnect( http, SIGNAL(requestFinished(int,bool)), this, SLOT(songListFinished(int,bool)) ); - if( error ) - { - http->deleteLater(); - return; - } + disconnect( http, &ContentFetcher::finished, this, &Reader::songListFinished ); + QByteArray result = http->results(); http->deleteLater(); @@ -562,7 +535,7 @@ Reader::fetchingError( const QString& error ) { DEBUG_BLOCK - const_cast< QObject* >( sender() )->deleteLater(); + sender()->deleteLater(); emit httpError( error ); } @@ -573,9 +546,9 @@ , m_data( data ) , m_reader( reader ) { - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), coll, SLOT(loadedDataFromServer()) ); - connect( this, SIGNAL(failed(ThreadWeaver::JobPointer)), coll, SLOT(parsingFailed()) ); - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), this, SLOT(deleteLater()) ); + connect( this, &WorkerThread::done, coll, &Collections::DaapCollection::loadedDataFromServer ); + connect( this, &WorkerThread::failed, coll, &Collections::DaapCollection::parsingFailed ); + connect( this, &WorkerThread::done, this, &Reader::deleteLater ); } WorkerThread::~WorkerThread() diff --git a/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.h b/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.h --- a/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.h +++ b/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.h @@ -19,17 +19,20 @@ #ifndef DAAPCONTENTFETCHER_H #define DAAPCONTENTFETCHER_H -#include #include +#include + +class QIODevice; +class QNetworkReply; namespace Daap { /** Inspired by a daapsharp class of the same name. Basically it adds all the silly headers that DAAP needs @author Ian Monroe */ -class ContentFetcher : public QHttp +class ContentFetcher : public QObject { Q_OBJECT @@ -41,12 +44,16 @@ QByteArray results(); private Q_SLOTS: - void checkForErrors( int state ); + void onFinished(); Q_SIGNALS: void httpError( const QString& ); + void finished(); + void loginRequired(); private: + QNetworkReply *m_reply; + QByteArray m_lastResult; QString m_hostname; quint16 m_port; QByteArray m_authorize; diff --git a/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.cpp b/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.cpp --- a/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.cpp +++ b/src/core-impl/collections/daap/daapreader/authentication/contentfetcher.cpp @@ -19,25 +19,26 @@ #include "contentfetcher.h" #include "core/support/Debug.h" #include "hasher.h" +#include "network/NetworkAccessManagerProxy.h" #include -#include #include +#include -#include -#include +#include +#include using namespace Daap; int ContentFetcher::s_requestId = 10; ContentFetcher::ContentFetcher( const QString & hostname, quint16 port, const QString& password, QObject * parent, const char * name ) - : QHttp(hostname, port, parent) + : QObject(parent) + , m_reply( Q_NULLPTR ) , m_hostname( hostname ) , m_port( port ) , m_selfDestruct( false ) { setObjectName( name ); - connect( this, SIGNAL(stateChanged(int)), this , SLOT(checkForErrors(int)) ); QByteArray pass = password.toUtf8(); if( !password.isNull() ) { @@ -51,62 +52,78 @@ QByteArray ContentFetcher::results() { - QByteArray read = readAll(); - QHttpResponseHeader header = lastResponse(); - if( header.value( "Content-Encoding" ) == "gzip" ) - { - QBuffer* bytes = new QBuffer( &read ); - QIODevice* stream = KFilterDev::device( bytes, "application/x-gzip", false ); - if ( !stream->open( QIODevice::ReadOnly ) ) - return read; - - //do not assign directly to read, see the documentation of the QBuffer ctor - QByteArray filteredRead = stream->readAll(); - delete stream; - delete bytes; - read = filteredRead; - } - return read; + return m_lastResult; } void -ContentFetcher::getDaap( const QString & command, QIODevice* musicFile /*= 0*/ ) +ContentFetcher::getDaap( const QString &command, QIODevice* musicFile /*= 0*/ ) { - QHttpRequestHeader header( "GET", command ); + QUrl url( command ); + url.setHost( m_hostname ); + url.setPort( m_port ); + QNetworkRequest request( url ); char hash[33] = {0}; - const char *cmd = command.toAscii(); + const char *cmd = command.toLatin1(); GenerateHash(3, reinterpret_cast( cmd ), 2, reinterpret_cast(hash), 0 /*s_requestId*/); if( !m_authorize.isEmpty() ) { - header.setValue( "Authorization", m_authorize ); + request.setRawHeader( "Authorization", m_authorize ); } - header.setValue( "Host", m_hostname + QString::number( m_port ) ); - header.setValue( "Client-DAAP-Request-ID", "0"/*QString::number( s_requestId )*/ ); - header.setValue( "Client-DAAP-Access-Index", "2" ); - header.setValue( "Client-DAAP-Validation", hash ); - header.setValue( "Client-DAAP-Version", "3.0" ); - header.setValue( "User-Agent", "iTunes/4.6 (Windows; N)" ); - header.setValue( "Accept", "*/*" ); - header.setValue( "Accept-Encoding", "gzip" ); + request.setRawHeader( "Client-DAAP-Request-ID", "0"/*QString::number( s_requestId )*/ ); + request.setRawHeader( "Client-DAAP-Access-Index", "2" ); + request.setRawHeader( "Client-DAAP-Validation", hash ); + request.setRawHeader( "Client-DAAP-Version", "3.0" ); + request.setRawHeader( "User-Agent", "iTunes/4.6 (Windows; N)" ); + request.setRawHeader( "Accept", "*/*" ); + request.setRawHeader( "Accept-Encoding", "gzip" ); + + m_reply = The::networkAccessManager()->sendCustomRequest( request, "GET", musicFile ); - request( header, 0, musicFile ); + if( m_reply->isFinished() ) + onFinished(); + else + connect( m_reply, &QNetworkReply::finished, this, &ContentFetcher::onFinished ); } -/** - * QHttp enjoys forgetting to emit a requestFinished when there's an error - * This gets around that. - */ void -ContentFetcher::checkForErrors( int /*state*/ ) +ContentFetcher::onFinished() { - if( !m_selfDestruct && error() != 0 ) + if( !m_reply ) + return; + + if( !m_selfDestruct && m_reply->error() ) { - debug() << "there is an error? " << error() << " " << errorString(); + if( m_reply->error() == QNetworkReply::AuthenticationRequiredError ) + { + emit loginRequired(); + return; + } + + debug() << "there is an error? " << m_reply->error() << " " << m_reply->errorString(); m_selfDestruct = true; - emit httpError( errorString() ); + emit httpError( m_reply->errorString() ); } + + QByteArray read = m_reply->readAll(); + if( m_reply->rawHeader( "Content-Encoding" ) == "gzip" ) + { + QBuffer* bytes = new QBuffer( &read ); + KCompressionDevice *stream = new KCompressionDevice( bytes, true, KCompressionDevice::GZip ); + if ( stream->open( QIODevice::ReadOnly ) ) + m_lastResult = stream->readAll(); + else + m_lastResult = read; + + delete stream; + } + else + m_lastResult = read; + + emit finished(); + m_reply->deleteLater(); + m_reply = Q_NULLPTR; } diff --git a/src/core-impl/collections/db/MountPointManager.h b/src/core-impl/collections/db/MountPointManager.h --- a/src/core-impl/collections/db/MountPointManager.h +++ b/src/core-impl/collections/db/MountPointManager.h @@ -102,18 +102,18 @@ * idea by andrewt512: this method would only be called when we actually want to play the file, not when we * simply want to show it to the user. It could for example download a file using KIO and return a path to a * temporary file. Needs some more thought and is not actually used at the moment. - * @param absolutePath - * @param relativePath + * @param absoluteUrl + * @param relativeUrl */ - virtual void getPlayableURL( QUrl &absolutePath, const QUrl &relativePath ) = 0; + virtual void getPlayableURL( QUrl &absoluteUrl, const QUrl &relativeUrl ) = 0; /** * builds an absolute path from a relative path and DeviceHandler specific information. The absolute path * is not necessarily playable! (based on an idea by andrewt512: allows better handling of files stored in remote * collections. this method would return a "pretty" URL which might not be playable by amarok's engines. - * @param absolutePath the not necessarily playbale absolute path - * @param relativePath the device specific relative path + * @param absoluteUrl the not necessarily playbale absolute path + * @param relativeUrl the device specific relative path */ - virtual void getURL( QUrl &absolutePath, const QUrl &relativePath ) = 0; + virtual void getURL( QUrl &absoluteUrl, const QUrl &relativeUrl ) = 0; /** * retrieves the unique database id of a given Medium. Implementations are responsible diff --git a/src/core-impl/collections/db/MountPointManager.cpp b/src/core-impl/collections/db/MountPointManager.cpp --- a/src/core-impl/collections/db/MountPointManager.cpp +++ b/src/core-impl/collections/db/MountPointManager.cpp @@ -74,8 +74,8 @@ // write the music location as another collection folder in this case if( folders.readEntry( entryKey, false ) ) { - const QUrl musicUrl = QUrl::fromLocalFile(QDesktopServices::storageLocation( QDesktopServices::MusicLocation )); - const QString musicDir = musicUrl.adjusted(QUrl::StripTrailingSlash).toLocalFile(); + const QUrl musicUrl = QUrl::fromLocalFile( QStandardPaths::writableLocation( QStandardPaths::MusicLocation ) ); + const QString musicDir = musicUrl.adjusted( QUrl::StripTrailingSlash ).toLocalFile(); const QDir dir( musicDir ); if( dir.exists() && dir.isReadable() ) { @@ -184,68 +184,65 @@ QString MountPointManager::getAbsolutePath( const int deviceId, const QString& relativePath ) const { - // TODO: someone who clearly understands QUrl should clean this up. - QUrl rpath; - rpath.setPath( relativePath ); - QUrl absolutePath; + if( QDir( relativePath ).isAbsolute() ) + { + //debug() << "relativePath is already absolute"; + return relativePath; + } + + QUrl rurl = QUrl::fromLocalFile( relativePath ); + QUrl absoluteUrl = QUrl::fromLocalFile( QDir::rootPath() ); - // debug() << "id is " << deviceId << ", relative path is " << relativePath; + //debug() << "id is " << deviceId << ", relative path is " << relativePath; if ( deviceId == -1 ) { -#ifdef Q_OS_WIN32 - absolutePath.setPath( rpath.toLocalFile() ); -#else - absolutePath.setPath( "/" ); - absolutePath = absolutePath.adjusted(QUrl::StripTrailingSlash); - absolutePath.setPath(absolutePath.path() + '/' + ( rpath.path() )); -#endif - absolutePath.setPath( QDir::cleanPath(absolutePath.path()) ); - // debug() << "Deviceid is -1, using relative Path as absolute Path, returning " << absolutePath.path(); + absoluteUrl.setPath( QDir::rootPath() + relativePath ); + absoluteUrl.setPath( QDir::cleanPath( absoluteUrl.path() ) ); + //debug() << "Deviceid is -1, using relative Path as absolute Path, returning " << absoluteUrl.toLocalFile(); } else { m_handlerMapMutex.lock(); if ( m_handlerMap.contains( deviceId ) ) { - m_handlerMap[deviceId]->getURL( absolutePath, rpath ); + m_handlerMap[deviceId]->getURL( absoluteUrl, rurl ); m_handlerMapMutex.unlock(); } else { m_handlerMapMutex.unlock(); - const QStringList lastMountPoint = m_storage->query( - QString( "SELECT lastmountpoint FROM devices WHERE id = %1" ) - .arg( deviceId ) ); - if ( lastMountPoint.count() == 0 ) + const QStringList lastMountPoint = m_storage->query( QString( "SELECT lastmountpoint FROM devices WHERE id = %1" ) + .arg( deviceId ) ); + if ( lastMountPoint.isEmpty() ) { //hmm, no device with that id in the DB...serious problem warning() << "Device " << deviceId << " not in database, this should never happen!"; return getAbsolutePath( -1, relativePath ); } else { - absolutePath.setPath( lastMountPoint.first() ); - absolutePath = absolutePath.adjusted(QUrl::StripTrailingSlash); - absolutePath.setPath(absolutePath.path() + '/' + ( rpath.path() )); - absolutePath.setPath( QDir::cleanPath(absolutePath.path()) ); - //debug() << "Device " << deviceId << " not mounted, using last mount point and returning " << absolutePath.path(); + absoluteUrl = QUrl::fromLocalFile( lastMountPoint.first() ); + absoluteUrl = absoluteUrl.adjusted(QUrl::StripTrailingSlash); + absoluteUrl.setPath( absoluteUrl.path() + '/' + rurl.path() ); + absoluteUrl.setPath( QDir::cleanPath( absoluteUrl.path() ) ); + //debug() << "Device " << deviceId << " not mounted, using last mount point and returning " << absoluteUrl.toLocalFile(); } } } - if (QFileInfo(absolutePath.path()).isDir()) - absolutePath.setPath( absolutePath.adjusted(QUrl::StripTrailingSlash).path() + '/' ); + if( QFileInfo( absoluteUrl.toLocalFile() ).isDir() ) + absoluteUrl.setPath( absoluteUrl.adjusted( QUrl::StripTrailingSlash ).path() + '/' ); - #ifdef Q_OS_WIN32 - return absolutePath.toLocalFile(); - #else - return absolutePath.path(); - #endif + return absoluteUrl.toLocalFile(); } QString MountPointManager::getRelativePath( const int deviceId, const QString& absolutePath ) const { + DEBUG_BLOCK + + debug() << absolutePath; + QMutexLocker locker(&m_handlerMapMutex); if ( deviceId != -1 && m_handlerMap.contains( deviceId ) ) { @@ -258,7 +255,7 @@ #ifdef Q_OS_WIN32 return QUrl( absolutePath ).toLocalFile(); #else - return QDir("/").relativeFilePath(absolutePath); + return QDir::root().relativeFilePath(absolutePath); #endif } } diff --git a/src/core-impl/collections/db/sql/CMakeLists.txt b/src/core-impl/collections/db/sql/CMakeLists.txt --- a/src/core-impl/collections/db/sql/CMakeLists.txt +++ b/src/core-impl/collections/db/sql/CMakeLists.txt @@ -22,8 +22,6 @@ add_library(amarok-sqlcollection SHARED ${amarok_collection-sqlcollection_SRCS}) target_link_libraries(amarok-sqlcollection - KF5::KDELibs4Support - KF5::KIOCore ${KDE4_SOLID_LIBRARY} KF5::ThreadWeaver diff --git a/src/core-impl/collections/db/sql/DatabaseUpdater.cpp b/src/core-impl/collections/db/sql/DatabaseUpdater.cpp --- a/src/core-impl/collections/db/sql/DatabaseUpdater.cpp +++ b/src/core-impl/collections/db/sql/DatabaseUpdater.cpp @@ -17,6 +17,7 @@ #include "DatabaseUpdater.h" #include "amarokconfig.h" +#include "core/support/Amarok.h" #include "core/support/Debug.h" #include #include "SqlCollection.h" @@ -27,7 +28,6 @@ #include #include -#include #include static const int DB_VERSION = 15; @@ -42,7 +42,7 @@ : m_collection( collection ) , m_debugDatabaseContent( false ) { - m_debugDatabaseContent = KGlobal::config()->group( "SqlCollection" ).readEntry( "DebugDatabaseContent", false ); + m_debugDatabaseContent = Amarok::config( "SqlCollection" ).readEntry( "DebugDatabaseContent", false ); } DatabaseUpdater::~DatabaseUpdater() diff --git a/src/core-impl/collections/db/sql/SqlCapabilities.h b/src/core-impl/collections/db/sql/SqlCapabilities.h --- a/src/core-impl/collections/db/sql/SqlCapabilities.h +++ b/src/core-impl/collections/db/sql/SqlCapabilities.h @@ -53,7 +53,7 @@ virtual void deleteTrack(); private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; class TimecodeWriteCapabilityImpl : public Capabilities::TimecodeWriteCapability @@ -76,7 +76,7 @@ } private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; class TimecodeLoadCapabilityImpl : public Capabilities::TimecodeLoadCapability @@ -89,10 +89,10 @@ virtual ~TimecodeLoadCapabilityImpl(); virtual bool hasTimecodes(); - virtual QList > loadTimecodes(); + virtual QList > loadTimecodes(); private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; @@ -107,7 +107,7 @@ virtual void findInSource( QFlags tag ); private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; diff --git a/src/core-impl/collections/db/sql/SqlCapabilities.cpp b/src/core-impl/collections/db/sql/SqlCapabilities.cpp --- a/src/core-impl/collections/db/sql/SqlCapabilities.cpp +++ b/src/core-impl/collections/db/sql/SqlCapabilities.cpp @@ -68,10 +68,10 @@ return ( loadTimecodes().size() > 0 ); } -QList > +QList > TimecodeLoadCapabilityImpl::loadTimecodes() { - QList > list = PlayUrlRunner::bookmarksFromUrl( m_track->playableUrl() ); + QList > list = PlayUrlRunner::bookmarksFromUrl( m_track->playableUrl() ); return list; } diff --git a/src/core-impl/collections/db/sql/SqlCollection.cpp b/src/core-impl/collections/db/sql/SqlCollection.cpp --- a/src/core-impl/collections/db/sql/SqlCollection.cpp +++ b/src/core-impl/collections/db/sql/SqlCollection.cpp @@ -39,16 +39,16 @@ #include "collectionscanner/BatchFile.h" -#include #include +#include +#include +#include + +#include #include #include #include -#include -#include -#include -#include /** Concrete implementation of the directory watcher */ class SqlDirectoryWatcher : public AbstractDirectoryWatcher @@ -120,7 +120,7 @@ QList > knownDirs = getKnownDirs(); if( !knownDirs.isEmpty() ) { - QString path = KGlobal::dirs()->saveLocation( "data", QString("amarok/"), false ) + "amarokcollectionscanner_batchscan.xml"; + QString path = QStandardPaths::writableLocation( QStandardPaths::GenericDataLocation ) + "/amarok/amarokcollectionscanner_batchscan.xml"; while( QFile::exists( path ) ) path += '_'; @@ -239,14 +239,10 @@ { if( updater.schemaExists() ) // this is an update { - KDialog dialog( 0, Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint ); - QLabel label( i18n( "Updating Amarok database schema. Please don't terminate " - "Amarok now as it may result in database corruption." ) ); - label.setWordWrap( true ); - dialog.setMainWidget( &label ); - dialog.setCaption( i18n( "Updating Amarok database schema" ) ); - dialog.setButtons( KDialog::None ); - + QMessageBox dialog; + dialog.setText( i18n( "Updating Amarok database schema. Please don't terminate " + "Amarok now as it may result in database corruption." ) ); + dialog.setWindowTitle( i18n( "Updating Amarok database schema" ) ); dialog.setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); dialog.show(); @@ -333,7 +329,7 @@ { foreach( const QString &folder, collectionFolders() ) { - QUrl q = QUrl( folder ); + QUrl q = QUrl::fromLocalFile( folder ); if( q.isParentOf( url ) || q.matches( url , QUrl::StripTrailingSlash) ) return true; } diff --git a/src/core-impl/collections/db/sql/SqlCollectionLocation.h b/src/core-impl/collections/db/sql/SqlCollectionLocation.h --- a/src/core-impl/collections/db/sql/SqlCollectionLocation.h +++ b/src/core-impl/collections/db/sql/SqlCollectionLocation.h @@ -83,7 +83,7 @@ virtual bool isOrganizable() const; bool remove( const Meta::TrackPtr &track ); - virtual bool insert( const Meta::TrackPtr &track, const QString &url ); + virtual bool insert( const Meta::TrackPtr &track, const QString &path ); //dependency injectors void setOrganizeCollectionDelegateFactory( OrganizeCollectionDelegateFactory *fac ); diff --git a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp --- a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp +++ b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp @@ -39,13 +39,11 @@ #include #include -#include +#include #include -#include -#include -#include -#include -#include +#include +#include +#include #include #include @@ -151,22 +149,22 @@ } bool -SqlCollectionLocation::insert( const Meta::TrackPtr &track, const QString &url ) +SqlCollectionLocation::insert( const Meta::TrackPtr &track, const QString &path ) { - if( !QFile::exists( url ) ) + if( !QFile::exists( path ) ) { - warning() << Q_FUNC_INFO << "file" << url << "does not exist, not inserting into db"; + warning() << Q_FUNC_INFO << "file" << path << "does not exist, not inserting into db"; return false; } - // -- the target url + // -- the target path SqlRegistry *registry = m_collection->registry(); - int deviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(url) ); - QString rpath = m_collection->mountPointManager()->getRelativePath( deviceId, url ); - int directoryId = registry->getDirectory( QFileInfo( url ).path() ); + int deviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile( path ) ); + QString rpath = m_collection->mountPointManager()->getRelativePath( deviceId, path ); + int directoryId = registry->getDirectory( QFileInfo( path ).path() ); // -- the track uid (we can't use the original one from the old collection) - Meta::FieldHash fileTags = Meta::Tag::readTags( url ); + Meta::FieldHash fileTags = Meta::Tag::readTags( path ); QString uid = fileTags.value( Meta::valUniqueId ).toString(); uid = m_collection->generateUidUrl( uid ); // add the right prefix diff --git a/src/core-impl/collections/db/sql/SqlMeta.h b/src/core-impl/collections/db/sql/SqlMeta.h --- a/src/core-impl/collections/db/sql/SqlMeta.h +++ b/src/core-impl/collections/db/sql/SqlMeta.h @@ -574,12 +574,12 @@ friend class Meta::SqlTrack; // needs to call notifyObservers }; -typedef KSharedPtr SqlTrackPtr; -typedef KSharedPtr SqlArtistPtr; -typedef KSharedPtr SqlAlbumPtr; -typedef KSharedPtr SqlComposerPtr; -typedef KSharedPtr SqlGenrePtr; -typedef KSharedPtr SqlYearPtr; +typedef AmarokSharedPointer SqlTrackPtr; +typedef AmarokSharedPointer SqlArtistPtr; +typedef AmarokSharedPointer SqlAlbumPtr; +typedef AmarokSharedPointer SqlComposerPtr; +typedef AmarokSharedPointer SqlGenrePtr; +typedef AmarokSharedPointer SqlYearPtr; } diff --git a/src/core-impl/collections/db/sql/SqlMeta.cpp b/src/core-impl/collections/db/sql/SqlMeta.cpp --- a/src/core-impl/collections/db/sql/SqlMeta.cpp +++ b/src/core-impl/collections/db/sql/SqlMeta.cpp @@ -56,9 +56,7 @@ #include #include -#include -#include -#include +#include #include // additional constants @@ -176,7 +174,7 @@ m_rpath = *(iter++); m_directoryId = (*(iter++)).toInt(); Q_ASSERT( m_directoryId > 0 && "refusing to create SqlTrack with non-positive directoryId, please file a bug" ); - m_url = QUrl::fromUserInput( m_collection->mountPointManager()->getAbsolutePath( m_deviceId, m_rpath ) ); + m_url = QUrl::fromLocalFile( m_collection->mountPointManager()->getAbsolutePath( m_deviceId, m_rpath ) ); m_uid = *(iter++); m_trackId = (*(iter++)).toInt(); m_title = *(iter++); @@ -795,16 +793,16 @@ // for all the following objects we need to invalidate the cache and // notify the observers after the update - KSharedPtr oldArtist; - KSharedPtr newArtist; - KSharedPtr oldAlbum; - KSharedPtr newAlbum; - KSharedPtr oldComposer; - KSharedPtr newComposer; - KSharedPtr oldGenre; - KSharedPtr newGenre; - KSharedPtr oldYear; - KSharedPtr newYear; + AmarokSharedPointer oldArtist; + AmarokSharedPointer newArtist; + AmarokSharedPointer oldAlbum; + AmarokSharedPointer newAlbum; + AmarokSharedPointer oldComposer; + AmarokSharedPointer newComposer; + AmarokSharedPointer oldGenre; + AmarokSharedPointer newGenre; + AmarokSharedPointer oldYear; + AmarokSharedPointer newYear; if( m_cache.contains( Meta::valFormat ) ) m_filetype = Amarok::FileType(m_cache.value( Meta::valFormat ).toInt()); @@ -1118,7 +1116,7 @@ //remove file extension, s/_/ /g and decode %2f-like sequences s = s.left( s.lastIndexOf( '.' ) ).replace( '_', ' ' ); - s = QUrl::fromPercentEncoding( s.toAscii() ); + s = QUrl::fromPercentEncoding( s.toLatin1() ); return s; } @@ -1237,11 +1235,11 @@ void SqlTrack::addLabel( const Meta::LabelPtr &label ) { - KSharedPtr sqlLabel = KSharedPtr::dynamicCast( label ); + AmarokSharedPointer sqlLabel = AmarokSharedPointer::dynamicCast( label ); if( !sqlLabel ) { Meta::LabelPtr tmp = m_collection->registry()->getLabel( label->name() ); - sqlLabel = KSharedPtr::dynamicCast( tmp ); + sqlLabel = AmarokSharedPointer::dynamicCast( tmp ); } if( sqlLabel ) { @@ -1288,11 +1286,11 @@ void SqlTrack::removeLabel( const Meta::LabelPtr &label ) { - KSharedPtr sqlLabel = KSharedPtr::dynamicCast( label ); + AmarokSharedPointer sqlLabel = AmarokSharedPointer::dynamicCast( label ); if( !sqlLabel ) { Meta::LabelPtr tmp = m_collection->registry()->getLabel( label->name() ); - sqlLabel = KSharedPtr::dynamicCast( tmp ); + sqlLabel = AmarokSharedPointer::dynamicCast( tmp ); } if( sqlLabel ) { @@ -1624,7 +1622,7 @@ // findCachedImage looks for a scaled version of the fullsize image // which may have been saved on a previous lookup if( size <= 1 ) - return QUrl::fromUserInput(m_imagePath); + return QUrl::fromLocalFile( m_imagePath ); QString cachedImagePath = scaledDiskCachePath( size ); @@ -1642,7 +1640,7 @@ if( !QFile( cachedImagePath ).exists() ) return QUrl(); - return QUrl::fromUserInput(cachedImagePath); + return QUrl::fromLocalFile(cachedImagePath); } void @@ -1811,11 +1809,12 @@ QByteArray SqlAlbum::md5sum( const QString& artist, const QString& album, const QString& file ) const { - // FIXME: names with unicode characters are not supported. - // FIXME: "The Beatles"."Collection" and "The"."Beatles Collection" will produce the same hash. - // FIXME: Correcting this now would invalidate all existing image stores. - KMD5 context( artist.toLower().toLocal8Bit() + album.toLower().toLocal8Bit() + file.toLocal8Bit() ); - return context.hexDigest(); + // FIXME: All existing image stores have been invalidated. + return QCryptographicHash::hash( artist.toLower().toUtf8() + QByteArray( "#" ) + + album.toLower().toUtf8() + QByteArray( "?" ) + + file.toUtf8(), + QCryptographicHash::Md5 + ).toHex(); } QString @@ -1828,7 +1827,11 @@ QDir largeCoverDir( Amarok::saveLocation( "albumcovers/large/" ) ); const QString key = md5sum( artist, m_name, QString() ); + + if( !key.isEmpty() ) return largeCoverDir.filePath( key ); + + return QString(); } QString @@ -1970,7 +1973,7 @@ { // get the new compilation album Meta::AlbumPtr metaAlbum = m_collection->registry()->getAlbum( name(), QString() ); - KSharedPtr sqlAlbum = KSharedPtr::dynamicCast( metaAlbum ); + AmarokSharedPointer sqlAlbum = AmarokSharedPointer::dynamicCast( metaAlbum ); Meta::FieldHash changes; changes.insert( Meta::valCompilation, 1); @@ -2007,7 +2010,7 @@ Meta::AlbumPtr metaAlbum = m_collection->registry()->getAlbum( sqlTrack->album()->name(), trackArtist ? ArtistHelper::realTrackArtist( trackArtist->name() ) : QString() ); - KSharedPtr sqlAlbum = KSharedPtr::dynamicCast( metaAlbum ); + AmarokSharedPointer sqlAlbum = AmarokSharedPointer::dynamicCast( metaAlbum ); // copy over the cover image if( sqlTrack->album()->hasImage() && !sqlAlbum->hasImage() ) diff --git a/src/core-impl/collections/db/sql/SqlQueryMaker.cpp b/src/core-impl/collections/db/sql/SqlQueryMaker.cpp --- a/src/core-impl/collections/db/sql/SqlQueryMaker.cpp +++ b/src/core-impl/collections/db/sql/SqlQueryMaker.cpp @@ -478,7 +478,7 @@ QueryMaker* SqlQueryMaker::addMatch( const Meta::LabelPtr &label ) { - KSharedPtr sqlLabel = KSharedPtr::dynamicCast( label ); + AmarokSharedPointer sqlLabel = AmarokSharedPointer::dynamicCast( label ); QString labelSubQuery; if( sqlLabel ) { diff --git a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.h b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.h --- a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.h +++ b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.h @@ -21,7 +21,7 @@ #include "core/meta/forward_declarations.h" #include -#include +#include #include namespace Collections { @@ -61,7 +61,7 @@ void handleLabels( const QStringList &result ); private: - QWeakPointer m_collection; + QPointer m_collection; QueryMaker::QueryType m_queryType; QString m_query; diff --git a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp --- a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp +++ b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp @@ -44,7 +44,7 @@ Q_ASSERT( !m_query.isEmpty() ); if( !m_collection.isNull() ) { - QStringList result = m_collection.data()->sqlStorage()->query( m_query ); + QStringList result = m_collection->sqlStorage()->query( m_query ); handleResult( result ); } else @@ -144,7 +144,7 @@ SqlQueryMakerInternal::handleTracks( const QStringList &result ) { Meta::TrackList tracks; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); int returnCount = Meta::SqlTrack::getTrackReturnValueCount(); int resultRows = result.size() / returnCount; for( int i = 0; i < resultRows; i++ ) @@ -159,7 +159,7 @@ SqlQueryMakerInternal::handleArtists( const QStringList &result ) { Meta::ArtistList artists; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString name = iter.next(); @@ -174,7 +174,7 @@ SqlQueryMakerInternal::handleAlbums( const QStringList &result ) { Meta::AlbumList albums; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString name = iter.next(); @@ -189,7 +189,7 @@ SqlQueryMakerInternal::handleGenres( const QStringList &result ) { Meta::GenreList genres; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString name = iter.next(); @@ -203,7 +203,7 @@ SqlQueryMakerInternal::handleComposers( const QStringList &result ) { Meta::ComposerList composers; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString name = iter.next(); @@ -217,7 +217,7 @@ SqlQueryMakerInternal::handleYears( const QStringList &result ) { Meta::YearList years; - SqlRegistry* reg = m_collection.data()->registry(); + SqlRegistry* reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString name = iter.next(); @@ -231,7 +231,7 @@ SqlQueryMakerInternal::handleLabels( const QStringList &result ) { Meta::LabelList labels; - SqlRegistry *reg = m_collection.data()->registry(); + SqlRegistry *reg = m_collection->registry(); for( QStringListIterator iter( result ); iter.hasNext(); ) { QString label = iter.next(); diff --git a/src/core-impl/collections/db/sql/SqlRegistry.h b/src/core-impl/collections/db/sql/SqlRegistry.h --- a/src/core-impl/collections/db/sql/SqlRegistry.h +++ b/src/core-impl/collections/db/sql/SqlRegistry.h @@ -148,7 +148,7 @@ /** Updates the uid of an already cached track. @return true if the update was successful. */ - bool updateCachedUrl( const QString &oldUrl, const QString &newUrl ); + bool updateCachedUrl( const QString &oldPath, const QString &newPath ); /** Updates the uid of an already cached track. @return true if the update was successful. diff --git a/src/core-impl/collections/db/sql/SqlRegistry.cpp b/src/core-impl/collections/db/sql/SqlRegistry.cpp --- a/src/core-impl/collections/db/sql/SqlRegistry.cpp +++ b/src/core-impl/collections/db/sql/SqlRegistry.cpp @@ -259,20 +259,20 @@ Meta::TrackPtr track( sqlTrack ); m_trackMap.insert( path, track ); - m_uidMap.insert( KSharedPtr::staticCast( track )->uidUrl(), track ); + m_uidMap.insert( AmarokSharedPointer::staticCast( track )->uidUrl(), track ); return track; } } bool -SqlRegistry::updateCachedUrl( const QString &oldUrl, const QString &newUrl ) +SqlRegistry::updateCachedUrl( const QString &oldPath, const QString &newPath ) { - int deviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(oldUrl) ); - QString rpath = m_collection->mountPointManager()->getRelativePath( deviceId, oldUrl ); + int deviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(oldPath) ); + QString rpath = m_collection->mountPointManager()->getRelativePath( deviceId, oldPath ); TrackPath oldId( deviceId, rpath ); - int newdeviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(newUrl) ); - QString newRpath = m_collection->mountPointManager()->getRelativePath( newdeviceId, newUrl ); + int newdeviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(newPath) ); + QString newRpath = m_collection->mountPointManager()->getRelativePath( newdeviceId, newPath ); TrackPath newId( newdeviceId, newRpath ); QMutexLocker locker( &m_trackMutex ); @@ -330,7 +330,7 @@ Meta::SqlTrack *sqlTrack = new Meta::SqlTrack( m_collection, result ); Meta::TrackPtr trackPtr( sqlTrack ); - int deviceid = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(trackPtr->playableUrl().path()) ); + int deviceid = m_collection->mountPointManager()->getIdForUrl( trackPtr->playableUrl() ); QString rpath = m_collection->mountPointManager()->getRelativePath( deviceid, trackPtr->playableUrl().path() ); TrackPath id(deviceid, rpath); m_trackMap.insert( id, trackPtr ); @@ -367,7 +367,7 @@ Meta::TrackPtr track = m_uidMap.take( uid ); Meta::SqlTrack *sqlTrack = static_cast( track.data() ); - int deviceId = m_collection->mountPointManager()->getIdForUrl( QUrl::fromLocalFile(sqlTrack->playableUrl().path()) ); + int deviceId = m_collection->mountPointManager()->getIdForUrl( sqlTrack->playableUrl() ); QString rpath = m_collection->mountPointManager()->getRelativePath( deviceId, sqlTrack->playableUrl().path() ); TrackPath id(deviceId, rpath); m_trackMap.remove( id ); @@ -919,12 +919,12 @@ for( QMutableHashIterator iter(x); iter.hasNext(); ) \ RealType::staticCast( iter.next().value() )->invalidateCache() - foreachInvalidateCache( AlbumKey, Meta::AlbumPtr, KSharedPtr, m_albumMap ); - foreachInvalidateCache( QString, Meta::ArtistPtr, KSharedPtr, m_artistMap ); - foreachInvalidateCache( QString, Meta::GenrePtr, KSharedPtr, m_genreMap ); - foreachInvalidateCache( QString, Meta::ComposerPtr, KSharedPtr, m_composerMap ); - foreachInvalidateCache( int, Meta::YearPtr, KSharedPtr, m_yearMap ); - foreachInvalidateCache( QString, Meta::LabelPtr, KSharedPtr, m_labelMap ); + foreachInvalidateCache( AlbumKey, Meta::AlbumPtr, AmarokSharedPointer, m_albumMap ); + foreachInvalidateCache( QString, Meta::ArtistPtr, AmarokSharedPointer, m_artistMap ); + foreachInvalidateCache( QString, Meta::GenrePtr, AmarokSharedPointer, m_genreMap ); + foreachInvalidateCache( QString, Meta::ComposerPtr, AmarokSharedPointer, m_composerMap ); + foreachInvalidateCache( int, Meta::YearPtr, AmarokSharedPointer, m_yearMap ); + foreachInvalidateCache( QString, Meta::LabelPtr, AmarokSharedPointer, m_labelMap ); #undef foreachInvalidateCache // elem.count() == 2 is correct because elem is one pointer to the object diff --git a/src/core-impl/collections/db/sql/SqlRegistry_p.cpp b/src/core-impl/collections/db/sql/SqlRegistry_p.cpp --- a/src/core-impl/collections/db/sql/SqlRegistry_p.cpp +++ b/src/core-impl/collections/db/sql/SqlRegistry_p.cpp @@ -270,19 +270,19 @@ Q_ASSERT( track->m_urlId > 0 && "refusing to write non-positive urlId to tracks table, please file a bug" ); result << QString::number( track->m_urlId ); result << QString::number( track->m_artist ? - KSharedPtr::staticCast( track->m_artist )->id() : + AmarokSharedPointer::staticCast( track->m_artist )->id() : -1 ); result << QString::number( track->m_album ? - KSharedPtr::staticCast( track->m_album )->id() : + AmarokSharedPointer::staticCast( track->m_album )->id() : -1 ); result << QString::number( track->m_genre ? - KSharedPtr::staticCast( track->m_genre )->id() : + AmarokSharedPointer::staticCast( track->m_genre )->id() : -1 ); result << QString::number( track->m_composer ? - KSharedPtr::staticCast( track->m_composer )->id() : + AmarokSharedPointer::staticCast( track->m_composer )->id() : -1 ); result << QString::number( track->m_year ? - KSharedPtr::staticCast( track->m_year )->id() : + AmarokSharedPointer::staticCast( track->m_year )->id() : -1 ); result << escape( track->m_title ); result << escape( track->m_comment ); diff --git a/src/core-impl/collections/db/sql/amarok_sqlcollection_export.h b/src/core-impl/collections/db/sql/amarok_sqlcollection_export.h --- a/src/core-impl/collections/db/sql/amarok_sqlcollection_export.h +++ b/src/core-impl/collections/db/sql/amarok_sqlcollection_export.h @@ -17,31 +17,31 @@ #ifndef AMAROK_SQLCOLLECTION_EXPORT_H #define AMAROK_SQLCOLLECTION_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_SQLCOLLECTION_EXPORT # if defined(MAKE_AMAROK_SQLCOLLECTION_LIB) /* We are building this library */ -# define AMAROK_SQLCOLLECTION_EXPORT KDE_EXPORT +# define AMAROK_SQLCOLLECTION_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_SQLCOLLECTION_EXPORT KDE_IMPORT +# define AMAROK_SQLCOLLECTION_EXPORT Q_DECL_IMPORT # endif #endif #ifndef AMAROK_SQLCOLLECTION_MYSQLE_EXPORT # if defined(MAKE_AMAROK_COLLECTION_MYSQLECOLLECTION_LIB) /* We are building this library */ -# define AMAROK_SQLCOLLECTION_MYSQLE_EXPORT KDE_EXPORT +# define AMAROK_SQLCOLLECTION_MYSQLE_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_SQLCOLLECTION_MYSQLE_EXPORT KDE_IMPORT +# define AMAROK_SQLCOLLECTION_MYSQLE_EXPORT Q_DECL_IMPORT # endif #endif # ifndef AMAROK_SQLCOLLECTION_EXPORT_DEPRECATED -# define AMAROK_SQLCOLLECTION_EXPORT_DEPRECATED KDE_DEPRECATED AMAROK_SQLCOLLECTION_EXPORT +# define AMAROK_SQLCOLLECTION_EXPORT_DEPRECATED QT_DEPRECATED AMAROK_SQLCOLLECTION_EXPORT # endif #endif diff --git a/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.h b/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.h --- a/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.h +++ b/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.h @@ -56,7 +56,7 @@ virtual int getDeviceID( ); virtual const QString &getDevicePath() const; virtual void getURL( QUrl &absolutePath, const QUrl &relativePath ); - virtual void getPlayableURL( QUrl &absolutePath, const QUrl &relativePath ); + virtual void getPlayableURL( QUrl &absoluteUrl, const QUrl &relativeUrl ); virtual bool deviceMatchesUdi( const QString &udi ) const; private: diff --git a/src/core-impl/collections/db/sql/mysqlcollection/CMakeLists.txt b/src/core-impl/collections/db/sql/mysqlcollection/CMakeLists.txt --- a/src/core-impl/collections/db/sql/mysqlcollection/CMakeLists.txt +++ b/src/core-impl/collections/db/sql/mysqlcollection/CMakeLists.txt @@ -18,7 +18,6 @@ amarok-sqlcollection amarokcore amaroklib - KF5::KDELibs4Support Qt5::Core Qt5::Gui ${CMAKE_DL_LIBS} diff --git a/src/core-impl/collections/ipodcollection/CMakeLists.txt b/src/core-impl/collections/ipodcollection/CMakeLists.txt --- a/src/core-impl/collections/ipodcollection/CMakeLists.txt +++ b/src/core-impl/collections/ipodcollection/CMakeLists.txt @@ -53,9 +53,7 @@ amarokcore amaroklib amarok-transcoding - KF5::KDELibs4Support KF5::KIOCore - ${KDE4_SOLID_LIBRARY} KF5::ThreadWeaver Qt5::Gui ${GLIB2_LIBRARIES} @@ -70,12 +68,7 @@ ${PLUGIN_INSTALL_DIR} ) - ########### install files ############### + kcoreaddons_desktop_to_json(amarok_collection-ipodcollection amarok_collection-ipodcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) - install(FILES - amarok_collection-ipodcollection.desktop - DESTINATION - ${SERVICES_INSTALL_DIR} - ) endif() diff --git a/src/core-impl/collections/ipodcollection/IpodCollection.h b/src/core-impl/collections/ipodcollection/IpodCollection.h --- a/src/core-impl/collections/ipodcollection/IpodCollection.h +++ b/src/core-impl/collections/ipodcollection/IpodCollection.h @@ -232,7 +232,7 @@ * This method adds it to the collection, master playlist (if not already there) * etc. The file must be already physically copied to iPod. (Re)Sets track's * collection to this collection. Takes ownership of the track (passes it to - * KSharedPtr) + * AmarokSharedPointer) * * This method is thread-safe. * @@ -260,7 +260,7 @@ */ bool writeDatabase(); - KDialog *m_configureDialog; + QDialog *m_configureDialog; Ui::IpodConfiguration m_configureDialogUi; QSharedPointer m_mc; /** @@ -281,8 +281,8 @@ QAction *m_configureAction; QAction *m_ejectAction; QAction *m_consolidateAction; - QWeakPointer m_parseTracksJob; - QWeakPointer m_writeDatabaseJob; + QPointer m_parseTracksJob; + QPointer m_writeDatabaseJob; }; #endif // IPODCOLLECTION_H diff --git a/src/core-impl/collections/ipodcollection/IpodCollection.cpp b/src/core-impl/collections/ipodcollection/IpodCollection.cpp --- a/src/core-impl/collections/ipodcollection/IpodCollection.cpp +++ b/src/core-impl/collections/ipodcollection/IpodCollection.cpp @@ -279,7 +279,7 @@ Collections::CollectionLocation* IpodCollection::location() { - return new IpodCollectionLocation( QWeakPointer( this ) ); + return new IpodCollectionLocation( QPointer( this ) ); } bool @@ -416,7 +416,7 @@ m_configureDialogUi.setupUi( settingsWidget ); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); - QWidget *mainWidget = new QWidget(this); + QWidget *mainWidget = new QWidget; QVBoxLayout *mainLayout = new QVBoxLayout; m_configureDialog->setLayout(mainLayout); mainLayout->addWidget(mainWidget); @@ -613,7 +613,7 @@ justAdded = true; emit startWriteDatabaseTimer(); } - track->setCollection( QWeakPointer( this ) ); + track->setCollection( QPointer( this ) ); Meta::TrackPtr trackPtr( track ); Meta::TrackPtr memTrack = MemoryMeta::MapChanger( m_mc.data() ).addTrack( trackPtr ); diff --git a/src/core-impl/collections/ipodcollection/IpodCollectionFactory.cpp b/src/core-impl/collections/ipodcollection/IpodCollectionFactory.cpp --- a/src/core-impl/collections/ipodcollection/IpodCollectionFactory.cpp +++ b/src/core-impl/collections/ipodcollection/IpodCollectionFactory.cpp @@ -29,7 +29,9 @@ IpodCollectionFactory::IpodCollectionFactory() : CollectionFactory() -{} +{ +} + IpodCollectionFactory::~IpodCollectionFactory() { diff --git a/src/core-impl/collections/ipodcollection/IpodCollectionLocation.h b/src/core-impl/collections/ipodcollection/IpodCollectionLocation.h --- a/src/core-impl/collections/ipodcollection/IpodCollectionLocation.h +++ b/src/core-impl/collections/ipodcollection/IpodCollectionLocation.h @@ -23,15 +23,15 @@ #include "core/collections/CollectionLocation.h" #include "core/playlists/Playlist.h" -#include +#include class IpodCollectionLocation : public Collections::CollectionLocation { Q_OBJECT public: - IpodCollectionLocation( QWeakPointer parentCollection ); + IpodCollectionLocation( QPointer parentCollection ); virtual ~IpodCollectionLocation(); // CollectionLocation methods: @@ -46,7 +46,7 @@ // IpodCollectionLocation specific methods: /** * Calling this causes that when the tracks are copied, they are added to iPod - * playlist @param playlist + * playlist @param destPlaylist */ void setDestinationPlaylist( Playlists::PlaylistPtr destPlaylist, const QMap &trackPlaylistPositions ); @@ -67,7 +67,7 @@ */ void ensureDirectoriesExist(); - QWeakPointer m_coll; + QPointer m_coll; QMap m_trackPlaylistPositions; Playlists::PlaylistPtr m_destPlaylist; }; diff --git a/src/core-impl/collections/ipodcollection/IpodCollectionLocation.cpp b/src/core-impl/collections/ipodcollection/IpodCollectionLocation.cpp --- a/src/core-impl/collections/ipodcollection/IpodCollectionLocation.cpp +++ b/src/core-impl/collections/ipodcollection/IpodCollectionLocation.cpp @@ -28,7 +28,7 @@ #include -IpodCollectionLocation::IpodCollectionLocation( QWeakPointer parentCollection ) +IpodCollectionLocation::IpodCollectionLocation( QPointer parentCollection ) : CollectionLocation() // we implement collection(), we need not pass parentCollection , m_coll( parentCollection ) { @@ -49,7 +49,7 @@ IpodCollectionLocation::prettyLocation() const { if( m_coll ) - return m_coll.data()->prettyName(); + return m_coll->prettyName(); // match string with IpodCopyTracksJob::slotDisplaySorryDialog() return i18n( "Disconnected iPod/iPad/iPhone" ); } @@ -59,7 +59,7 @@ { if( !m_coll ) return false; - return m_coll.data()->isWritable(); // no infinite loop, IpodCollection iplements this + return m_coll->isWritable(); // no infinite loop, IpodCollection iplements this } void @@ -120,7 +120,7 @@ void IpodCollectionLocation::ensureDirectoriesExist() { - QByteArray mountPoint = m_coll ? QFile::encodeName( m_coll.data()->mountPoint() ) : QByteArray(); + QByteArray mountPoint = m_coll ? QFile::encodeName( m_coll->mountPoint() ) : QByteArray(); if( mountPoint.isEmpty() ) return; diff --git a/src/core-impl/collections/ipodcollection/IpodMeta.h b/src/core-impl/collections/ipodcollection/IpodMeta.h --- a/src/core-impl/collections/ipodcollection/IpodMeta.h +++ b/src/core-impl/collections/ipodcollection/IpodMeta.h @@ -22,6 +22,7 @@ #include "core/meta/Statistics.h" #include "core/meta/TrackEditor.h" +#include #include #include @@ -157,7 +158,7 @@ * Set collection this track belongs to. If collection is not null, (re)set * the mount point stored in track. (affects playableUrl()) */ - void setCollection( QWeakPointer collection ); + void setCollection( QPointer collection ); // Methods for copy constructor: void setIsCompilation( bool newIsCompilation ); @@ -187,7 +188,7 @@ * IpodCollection's memory management is out of our control, therefore the * weak pointer. */ - QWeakPointer m_coll; + QPointer m_coll; /** * While mount point is accessible through m_track->itdb-> ..., we want to @@ -276,7 +277,7 @@ virtual void removeImage(); private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; /** diff --git a/src/core-impl/collections/ipodcollection/IpodMeta.cpp b/src/core-impl/collections/ipodcollection/IpodMeta.cpp --- a/src/core-impl/collections/ipodcollection/IpodMeta.cpp +++ b/src/core-impl/collections/ipodcollection/IpodMeta.cpp @@ -26,7 +26,8 @@ #include "covermanager/CoverCache.h" #include "FileType.h" -#include +#include + #include #include @@ -168,7 +169,7 @@ // relPath begins with a slash QString relPath = QFile::decodeName( relPathChar ); g_free( relPathChar ); - return QUrl( m_mountPoint + relPath ); + return QUrl::fromLocalFile( m_mountPoint + relPath ); } QString @@ -178,7 +179,7 @@ if( url.isLocalFile() ) return url.toLocalFile(); - QString collName = m_coll ? m_coll.data()->prettyName() : i18n( "Unknown Collection" ); + QString collName = m_coll ? m_coll->prettyName() : i18n( "Unknown Collection" ); QString artistName = artist() ? artist()->prettyName() : i18n( "Unknown Artist" ); QString trackName = !name().isEmpty() ? name() : i18n( "Unknown track" ); @@ -197,7 +198,7 @@ g_free( relPathChar ); if( m_coll ) - return m_coll.data()->collectionId() + relPath; + return m_coll->collectionId() + relPath; else return m_mountPoint + relPath; } @@ -211,7 +212,7 @@ Meta::AlbumPtr Track::album() const { - // we may not store KSharedPtr to Album because it would create circular reference + // we may not store AmarokSharedPointer to Album because it would create circular reference return Meta::AlbumPtr( new Album( const_cast( this ) ) ); } @@ -264,9 +265,9 @@ else image = newImage; - KTemporaryFile tempImageFile; + QTemporaryFile tempImageFile; tempImageFile.setAutoRemove( false ); // file will be removed in ~Track() - tempImageFile.setSuffix( QString( ".png" ) ); + tempImageFile.setFileTemplate( QDir::tempPath() + "/XXXXXX.png" ); // we save the file to disk rather than pass image data to save several megabytes of RAM if( tempImageFile.open() ) m_tempImageFilePath = tempImageFile.fileName(); @@ -539,7 +540,7 @@ int Track::recentPlayCount() const { - if( !m_coll || !m_coll.data()->isWritable() ) + if( !m_coll || !m_coll->isWritable() ) return 0; // we must be able to reset recent playcount if we return nonzero return m_track->recent_playcount; } @@ -672,15 +673,15 @@ } void -Track::setCollection( QWeakPointer collection ) +Track::setCollection( QPointer collection ) { m_coll = collection; if( !collection ) return; { // scope for locker QWriteLocker locker( &m_trackLock ); // paranoia: collection may become null while we were waiting for lock... - m_mountPoint = collection ? collection.data()->mountPoint() : QString(); + m_mountPoint = collection ? collection->mountPoint() : QString(); } // m_track->filetype field may have been set by someone else, rather check it (if set @@ -730,7 +731,7 @@ // we block changing the track meta-data of read-only iPod Collections; // it would only be cofusing to the user as the changes would get discarded. - if( !m_coll || !m_coll.data()->isWritable() ) + if( !m_coll || !m_coll->isWritable() ) return; if( AmarokConfig::writeBackStatistics() || diff --git a/src/core-impl/collections/ipodcollection/IpodPlaylist.h b/src/core-impl/collections/ipodcollection/IpodPlaylist.h --- a/src/core-impl/collections/ipodcollection/IpodPlaylist.h +++ b/src/core-impl/collections/ipodcollection/IpodPlaylist.h @@ -19,6 +19,7 @@ #include "core/playlists/Playlist.h" +#include #include @@ -103,7 +104,7 @@ Itdb_Playlist *m_playlist; mutable QReadWriteLock m_playlistLock; - QWeakPointer m_coll; + QPointer m_coll; Type m_type; Meta::TrackList m_tracks; // playlists tracks, in fact MemoryMeta::Track objects TrackPositionList m_tracksToCopy; diff --git a/src/core-impl/collections/ipodcollection/IpodPlaylist.cpp b/src/core-impl/collections/ipodcollection/IpodPlaylist.cpp --- a/src/core-impl/collections/ipodcollection/IpodPlaylist.cpp +++ b/src/core-impl/collections/ipodcollection/IpodPlaylist.cpp @@ -86,8 +86,8 @@ IpodPlaylist::uidUrl() const { // integer reading is atomic, no lock needed - QString collId = m_coll ? m_coll.data()->collectionId() : "removedipodcolleciton:/"; - return QString( "%1/playlists/%2" ).arg( collId ).arg( m_playlist->id ); + QString collId = m_coll ? m_coll->collectionId() : "removedipodcollection:/"; + return QUrl( QString( "%1/playlists/%2" ).arg( collId ).arg( m_playlist->id ) ); } QString @@ -108,7 +108,7 @@ Playlists::PlaylistProvider* IpodPlaylist::provider() const { - return m_coll ? m_coll.data()->playlistProvider() : 0; + return m_coll ? m_coll->playlistProvider() : 0; } int @@ -126,7 +126,7 @@ void IpodPlaylist::addTrack( Meta::TrackPtr track, int position ) { - if( m_type != Normal || !m_coll || !m_coll.data()->isWritable() ) + if( m_type != Normal || !m_coll || !m_coll->isWritable() ) return; if( position < 0 || position > m_tracks.count() ) @@ -156,14 +156,14 @@ return; // do not fire following machinery for special playlists } - KSharedPtr proxyTrack = KSharedPtr::dynamicCast( removedTrack ); + AmarokSharedPointer proxyTrack = AmarokSharedPointer::dynamicCast( removedTrack ); if( !proxyTrack ) { error() << __PRETTY_FUNCTION__ << "track" << removedTrack.data() << "from m_track was not MemoryMeta track!"; return; } - KSharedPtr ipodTrack = KSharedPtr::dynamicCast( proxyTrack->originalTrack() ); + AmarokSharedPointer ipodTrack = AmarokSharedPointer::dynamicCast( proxyTrack->originalTrack() ); if( !proxyTrack ) { error() << __PRETTY_FUNCTION__ << "originalTrack of the proxyTrack was not IpodMeta track!"; @@ -199,22 +199,22 @@ if( !prov ) return; // we can do nothing static_cast( prov )->scheduleCopyAndInsertToPlaylist( - KSharedPtr( this ) ); + AmarokSharedPointer( this ) ); } void IpodPlaylist::addIpodTrack( Meta::TrackPtr track, int position ) { Q_ASSERT( position >= 0 && position <= m_tracks.count() ); Meta::TrackPtr proxyTrack = Meta::TrackPtr(); - KSharedPtr memoryTrack = KSharedPtr::dynamicCast( track ); + AmarokSharedPointer memoryTrack = AmarokSharedPointer::dynamicCast( track ); if( memoryTrack ) { track = memoryTrack->originalTrack(); // iPod track is usually hidden below MemoryMeta proxy proxyTrack = track; } - KSharedPtr ipodTrack = KSharedPtr::dynamicCast( track ); + AmarokSharedPointer ipodTrack = AmarokSharedPointer::dynamicCast( track ); if( !ipodTrack ) { error() << __PRETTY_FUNCTION__ << "Could not get IpodMeta::Track out of supplied track." @@ -224,7 +224,7 @@ } if( !proxyTrack) // we got IpodTrack directly, expose its MemoryMeta proxy - proxyTrack = m_coll ? m_coll.data()->trackForUidUrl( ipodTrack->uidUrl() ) : Meta::TrackPtr(); + proxyTrack = m_coll ? m_coll->trackForUidUrl( ipodTrack->uidUrl() ) : Meta::TrackPtr(); if( !proxyTrack ) { error() << __PRETTY_FUNCTION__ << "was passed IpodMeta::Track but we could not find" diff --git a/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.h b/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.h --- a/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.h +++ b/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.h @@ -67,7 +67,7 @@ * playlist. The actual call to start copying tracks is deferred to next eventloop * iteration to pickup multiple successive addTrack() calls. */ - void scheduleCopyAndInsertToPlaylist( KSharedPtr playlist ); + void scheduleCopyAndInsertToPlaylist( AmarokSharedPointer playlist ); /** * Remove this track from all playlists it belongs to, it was removed from the @@ -106,7 +106,7 @@ IpodCollection *m_coll; Playlists::PlaylistList m_playlists; - QSet< KSharedPtr > m_copyTracksTo; + QSet< AmarokSharedPointer > m_copyTracksTo; Playlists::PlaylistPtr m_stalePlaylist; Playlists::PlaylistPtr m_orphanedPlaylist; }; diff --git a/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.cpp b/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.cpp --- a/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.cpp +++ b/src/core-impl/collections/ipodcollection/IpodPlaylistProvider.cpp @@ -73,7 +73,7 @@ Meta::TrackPtr IpodPlaylistProvider::addTrack( Meta::TrackPtr track ) { - QString name = KGlobal::locale()->formatDateTime( QDateTime::currentDateTime() ); + QString name = QLocale().toString( QDateTime::currentDateTime() ); return save( Meta::TrackList() << track , name )->tracks().last(); } @@ -108,7 +108,7 @@ { if( !m_playlists.contains( playlist ) ) // make following static cast safe continue; - IpodPlaylist::Type type = KSharedPtr::staticCast( playlist )->type(); + IpodPlaylist::Type type = AmarokSharedPointer::staticCast( playlist )->type(); if( type == IpodPlaylist::Stale || type == IpodPlaylist::Orphaned ) { actions << m_coll->m_consolidateAction; @@ -136,7 +136,7 @@ { if( !m_playlists.contains( playlist ) ) // make following static cast safe return; - KSharedPtr ipodPlaylist = KSharedPtr::staticCast( playlist ); + AmarokSharedPointer ipodPlaylist = AmarokSharedPointer::staticCast( playlist ); if( ipodPlaylist->type() != IpodPlaylist::Normal ) return; // special playlists cannot be renamed @@ -155,7 +155,7 @@ { if( !m_playlists.contains( playlist ) ) continue; - if( KSharedPtr::staticCast( playlist )->type() != IpodPlaylist::Normal ) + if( AmarokSharedPointer::staticCast( playlist )->type() != IpodPlaylist::Normal ) continue; // special playlists cannot be removed using this method m_playlists.removeOne( playlist ); @@ -188,7 +188,7 @@ } void -IpodPlaylistProvider::scheduleCopyAndInsertToPlaylist( KSharedPtr playlist ) +IpodPlaylistProvider::scheduleCopyAndInsertToPlaylist( AmarokSharedPointer playlist ) { m_copyTracksTo.insert( playlist ); QTimer::singleShot( 0, this, SLOT(slotCopyAndInsertToPlaylists()) ); @@ -325,10 +325,10 @@ void IpodPlaylistProvider::slotCopyAndInsertToPlaylists() { - QMutableSetIterator< KSharedPtr > it( m_copyTracksTo ); + QMutableSetIterator< AmarokSharedPointer > it( m_copyTracksTo ); while( it.hasNext() ) { - KSharedPtr ipodPlaylist = it.next(); + AmarokSharedPointer ipodPlaylist = it.next(); TrackPositionList tracks = ipodPlaylist->takeTracksToCopy(); copyAndInsertToPlaylist( tracks, Playlists::PlaylistPtr::staticCast( ipodPlaylist ) ); it.remove(); diff --git a/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.h b/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.h --- a/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.h +++ b/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.h @@ -46,7 +46,7 @@ * @param goingToRemoveSources whether this is in fact a move operation */ IpodCopyTracksJob( const QMap &sources, - const QWeakPointer &collection, + const QPointer &collection, const Transcoding::Configuration &configuration, bool goingToRemoveSources ); void run(ThreadWeaver::JobPointer self = QSharedPointer(), ThreadWeaver::Thread *thread = 0) Q_DECL_OVERRIDE; @@ -103,7 +103,7 @@ private: void trackProcessed( CopiedStatus status, Meta::TrackPtr srcTrack, Meta::TrackPtr destTrack = Meta::TrackPtr() ); - QWeakPointer m_coll; + QPointer m_coll; Transcoding::Configuration m_transcodingConfig; QMap m_sources; QMultiHash m_sourceTrackStatus; diff --git a/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.cpp b/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.cpp --- a/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.cpp +++ b/src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.cpp @@ -36,7 +36,7 @@ #include // fsync() IpodCopyTracksJob::IpodCopyTracksJob( const QMap &sources, - const QWeakPointer &collection, + const QPointer &collection, const Transcoding::Configuration &configuration, bool goingToRemoveSources ) : Job() @@ -60,11 +60,11 @@ Q_UNUSED(thread); if( !m_coll ) return; // destructed behind our back - float totalSafeCapacity = m_coll.data()->totalCapacity() - m_coll.data()->capacityMargin(); - QByteArray mountPoint = QFile::encodeName( m_coll.data()->mountPoint() ); - QString collectionPrettyName = m_coll.data()->prettyName(); + float totalSafeCapacity = m_coll->totalCapacity() - m_coll->capacityMargin(); + QByteArray mountPoint = QFile::encodeName( m_coll->mountPoint() ); + QString collectionPrettyName = m_coll->prettyName(); - itdb_start_sync( m_coll.data()->m_itdb ); + itdb_start_sync( m_coll->m_itdb ); QMapIterator it( m_sources ); while( it.hasNext() ) { @@ -87,14 +87,14 @@ if( !m_coll ) break; // destructed behind our back - bool isJustCopy = m_transcodingConfig.isJustCopy( track, m_coll.data()->supportedFormats() ); + bool isJustCopy = m_transcodingConfig.isJustCopy( track, m_coll->supportedFormats() ); if( isJustCopy // if not copying, we catch big files later - && track->filesize() > totalSafeCapacity - m_coll.data()->usedCapacity() ) + && track->filesize() > totalSafeCapacity - m_coll->usedCapacity() ) { // this is a best effort check, we do one definite one after the file is copied debug() << "Refusing to copy" << track->prettyUrl() << "to iPod: there are only" - << totalSafeCapacity - m_coll.data()->usedCapacity() << "free bytes (not" + << totalSafeCapacity - m_coll->usedCapacity() << "free bytes (not" << "counting a safety margin) on iPod and track has" << track->filesize() << "bytes."; trackProcessed( ExceededingSafeCapacity, track ); @@ -106,7 +106,7 @@ else fileExtension = Amarok::Components::transcodingController()->format( m_transcodingConfig.encoder() )->fileExtension(); - if( !m_coll.data()->supportedFormats().contains( fileExtension ) ) + if( !m_coll->supportedFormats().contains( fileExtension ) ) { m_notPlayableFormats.insert( fileExtension ); trackProcessed( NotPlayable, track ); @@ -132,7 +132,7 @@ } // start the physical copying - QUrl destUrl = QUrl( QFile::decodeName( destFilename ) ); + QUrl destUrl = QUrl::fromLocalFile( QFile::decodeName( destFilename ) ); emit startCopyOrTranscodeJob( sourceUrl, destUrl, isJustCopy ); // wait for copying to finish: @@ -148,10 +148,10 @@ } if( !m_coll ) break; // destructed behind our back - if( m_coll.data()->usedCapacity() > totalSafeCapacity ) + if( m_coll->usedCapacity() > totalSafeCapacity ) { debug() << "We exceeded total safe-to-use capacity on iPod (safe-to-use:" - << totalSafeCapacity << "B, used:" << m_coll.data()->usedCapacity() + << totalSafeCapacity << "B, used:" << m_coll->usedCapacity() << "): removing copied track from iPod"; destFile.remove(); trackProcessed( ExceededingSafeCapacity, track ); @@ -202,7 +202,7 @@ delete ipodTrack; break; // we were waiting for copying, m_coll may got destoryed } - Meta::TrackPtr newTrack = m_coll.data()->addTrack( ipodTrack ); + Meta::TrackPtr newTrack = m_coll->addTrack( ipodTrack ); if( !newTrack ) { destFile.remove(); @@ -213,7 +213,7 @@ } if( m_coll ) - itdb_stop_sync( m_coll.data()->m_itdb ); + itdb_stop_sync( m_coll->m_itdb ); emit endProgressOperation( this ); int sourceSize = m_sources.size(); @@ -278,7 +278,7 @@ void IpodCopyTracksJob::slotStartDuplicateTrackSearch( const Meta::TrackPtr &track ) { - Collections::QueryMaker *qm = m_coll.data()->queryMaker(); + Collections::QueryMaker *qm = m_coll->queryMaker(); qm->setQueryType( Collections::QueryMaker::Track ); // we cannot qm->addMatch( track ) - it matches by uidUrl() @@ -322,7 +322,7 @@ if( isJustCopy ) { if( m_goingToRemoveSources && m_coll && - sourceUrl.toLocalFile().startsWith( m_coll.data()->mountPoint() ) ) + sourceUrl.toLocalFile().startsWith( m_coll->mountPoint() ) ) { // special case for "add orphaned tracks" to either save space and significantly // speed-up the process: @@ -361,7 +361,7 @@ int successCount = m_sourceTrackStatus.count( Success ); // match string with IpodCollectionLocation::prettyLocation() - QString collName = m_coll ? m_coll.data()->prettyName() : i18n( "Disconnected iPod/iPad/iPhone" ); + QString collName = m_coll ? m_coll->prettyName() : i18n( "Disconnected iPod/iPad/iPhone" ); QString caption = i18nc( "%1 is collection pretty name, e.g. My Little iPod", "Transferred Tracks to %1", collName ); QString text; @@ -378,8 +378,10 @@ details += i18np( "One track was not transferred because it would exceed iPod capacity.
", "%1 tracks were not transferred because it would exceed iPod capacity.
", exceededingSafeCapacityCount ); - QString reservedSpace = m_coll ? KGlobal::locale()->formatByteSize( - m_coll.data()->capacityMargin(), 1 ) : QString( "???" ); // improbable, don't bother translators + + QString reservedSpace = m_coll ? QLocale().toString( + m_coll->capacityMargin(), 1 ) : QString( "???" ); // improbable, don't bother translators + details += i18nc( "Example of %1 would be: 20.0 MiB", "Amarok reserves %1 on iPod for iTunes database writing.
", reservedSpace ); diff --git a/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.h b/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.h --- a/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.h +++ b/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.h @@ -29,7 +29,7 @@ public: explicit IpodDeleteTracksJob( const Meta::TrackList &sources, - const QWeakPointer &collection ); + const QPointer &collection ); void run(ThreadWeaver::JobPointer self = QSharedPointer(), ThreadWeaver::Thread *thread = 0) Q_DECL_OVERRIDE; Q_SIGNALS: @@ -52,7 +52,7 @@ private: Meta::TrackList m_sources; - QWeakPointer m_coll; + QPointer m_coll; }; #endif // IPODDELETETRACKSJOB_H diff --git a/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.cpp b/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.cpp --- a/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.cpp +++ b/src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.cpp @@ -25,7 +25,7 @@ #include IpodDeleteTracksJob::IpodDeleteTracksJob( const Meta::TrackList &sources, - const QWeakPointer &collection ) + const QPointer &collection ) : QObject() , ThreadWeaver::Job() , m_sources( sources ) @@ -44,7 +44,7 @@ QString operationText = i18np( "Removing one track from iPod", "Removing %1 tracks from iPod", trackCount ); Amarok::Components::logger()->newProgressOperation( this, operationText, trackCount ); - itdb_start_sync( m_coll.data()->m_itdb ); + itdb_start_sync( m_coll->m_itdb ); QListIterator it( m_sources ); while( it.hasNext() ) @@ -60,14 +60,14 @@ if( file.exists() ) success = file.remove(); if( success ) - m_coll.data()->removeTrack( track ); + m_coll->removeTrack( track ); incrementProgress(); } emit endProgressOperation( this ); if( m_coll ) - itdb_stop_sync( m_coll.data()->m_itdb ); + itdb_stop_sync( m_coll->m_itdb ); } void diff --git a/src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.cpp b/src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.cpp --- a/src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.cpp +++ b/src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.cpp @@ -176,7 +176,7 @@ QString canonPath = info.canonicalFilePath(); if( knownPaths.contains( canonPath ) ) continue; // already in iTunes database - Meta::TrackPtr track( new MetaFile::Track( QUrl( canonPath ) ) ); + Meta::TrackPtr track( new MetaFile::Track( QUrl::fromLocalFile( canonPath ) ) ); orphanedTracks << track; } } diff --git a/src/core-impl/collections/ipodcollection/support/IphoneMountPoint.cpp b/src/core-impl/collections/ipodcollection/support/IphoneMountPoint.cpp --- a/src/core-impl/collections/ipodcollection/support/IphoneMountPoint.cpp +++ b/src/core-impl/collections/ipodcollection/support/IphoneMountPoint.cpp @@ -19,7 +19,7 @@ #include "core/support/Debug.h" -#include +#include #include #include @@ -96,7 +96,7 @@ QString IphoneMountPoint::constructMountpoint( const QString &uuid ) { - QString mountPointCandidate = KStandardDirs::locateLocal( "tmp", "amarok/" ); + QString mountPointCandidate = QStandardPaths::locate( QStandardPaths::TempLocation, "amarok/" ); mountPointCandidate += "imobiledevice"; if( !uuid.isEmpty() ) mountPointCandidate += "_uuid_" + uuid; diff --git a/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.h b/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.h --- a/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.h +++ b/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.h @@ -21,7 +21,7 @@ #include "amarok_export.h" #include "core/transcoding/TranscodingConfiguration.h" -#include +#include #include @@ -57,13 +57,13 @@ /** * Fills in a dialog with iPod configuration. * - * @param configureDialog KDialog that coutains the ui. Must not be null + * @param configureDialog QDialog that coutains the ui. Must not be null * @param configureDialogUi ui of the dialog. Must not be null * @param itdb itdb of the device or null if could not be parsed * @param transcodeConfig current transcoding configuration preference * @param errorMessage from parsing/initializing itsb (empty if no error) */ - AMAROK_EXPORT void fillInConfigureDialog( KDialog *configureDialog, + AMAROK_EXPORT void fillInConfigureDialog( QDialog *configureDialog, Ui::IpodConfiguration *configureDialogUi, const QString &mountPoint, Itdb_iTunesDB *itdb, diff --git a/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.cpp b/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.cpp --- a/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.cpp +++ b/src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.cpp @@ -18,11 +18,13 @@ #include "core/support/Debug.h" -#include - +#include #include #include + #include +#include +#include Itdb_iTunesDB* @@ -273,7 +275,7 @@ while( info->model_number ) { QString generation = QString::fromUtf8( itdb_info_get_ipod_generation_string( info->ipod_generation) ); - QString capacity = KGlobal::locale()->formatByteSize( info->capacity * 1073741824.0, 0 ); + QString capacity = KFormat().formatByteSize( info->capacity * 1073741824.0, 0 ); QString modelName = QString::fromUtf8( itdb_info_get_ipod_model_name_string( info->ipod_model ) ); QString modelNumber = QString::fromUtf8( info->model_number ); QString label = i18nc( "Examples: " @@ -399,7 +401,7 @@ configureDialogUi->notesPlaceholder->setText( notes ); configureDialogUi->notesPlaceholder->adjustSize(); - configureDialog->okButton->setEnabled( isSafeToWrite ); + configureDialog->findChild()->button( QDialogButtonBox::Ok )->setEnabled( isSafeToWrite ); } bool diff --git a/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.h b/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.h --- a/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.h +++ b/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.h @@ -40,7 +40,7 @@ virtual void setSavedConfiguration( const Transcoding::Configuration &configuration ); private: - QWeakPointer m_coll; + QPointer m_coll; QString m_configFilePath; // must be absolute }; diff --git a/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.cpp b/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.cpp --- a/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.cpp +++ b/src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.cpp @@ -16,6 +16,7 @@ #include "IpodTranscodeCapability.h" +#include using namespace Capabilities; @@ -35,7 +36,7 @@ IpodTranscodeCapability::playableFileTypes() { if( m_coll ) - return m_coll.data()->supportedFormats(); + return m_coll->supportedFormats(); return QStringList(); } diff --git a/src/core-impl/collections/mediadevicecollection/MediaDeviceCollectionLocation.cpp b/src/core-impl/collections/mediadevicecollection/MediaDeviceCollectionLocation.cpp --- a/src/core-impl/collections/mediadevicecollection/MediaDeviceCollectionLocation.cpp +++ b/src/core-impl/collections/mediadevicecollection/MediaDeviceCollectionLocation.cpp @@ -22,7 +22,7 @@ #include "core-impl/collections/mediadevicecollection/MediaDeviceCollection.h" #include -#include +#include #include #include diff --git a/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.h b/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.h --- a/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.h +++ b/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.h @@ -24,7 +24,7 @@ #include #include -#include +#include namespace Collections { class MediaDeviceCollection; @@ -44,12 +44,12 @@ class MediaDeviceComposer; class MediaDeviceYear; -typedef KSharedPtr MediaDeviceTrackPtr; -typedef KSharedPtr MediaDeviceArtistPtr; -typedef KSharedPtr MediaDeviceAlbumPtr; -typedef KSharedPtr MediaDeviceGenrePtr; -typedef KSharedPtr MediaDeviceComposerPtr; -typedef KSharedPtr MediaDeviceYearPtr; +typedef AmarokSharedPointer MediaDeviceTrackPtr; +typedef AmarokSharedPointer MediaDeviceArtistPtr; +typedef AmarokSharedPointer MediaDeviceAlbumPtr; +typedef AmarokSharedPointer MediaDeviceGenrePtr; +typedef AmarokSharedPointer MediaDeviceComposerPtr; +typedef AmarokSharedPointer MediaDeviceYearPtr; typedef QList MediaDeviceTrackList; @@ -156,7 +156,7 @@ void commitChanges(); private: - QWeakPointer m_collection; + QPointer m_collection; MediaDeviceArtistPtr m_artist; MediaDeviceAlbumPtr m_album; @@ -236,8 +236,8 @@ void setAlbumArtist( MediaDeviceArtistPtr artist ); private: - QWeakPointer m_collection; - QWeakPointer m_artworkCapability; + QPointer m_collection; + QPointer m_artworkCapability; QString m_name; TrackList m_tracks; diff --git a/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp b/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp --- a/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp +++ b/src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp @@ -87,7 +87,7 @@ if( m_playableUrl.isLocalFile() ) return m_playableUrl.toLocalFile(); - QString collName = m_collection ? m_collection.data()->prettyName() : i18n( "Unknown Collection" ); + QString collName = m_collection ? m_collection->prettyName() : i18n( "Unknown Collection" ); QString artistName = artist()? artist()->prettyName() : i18n( "Unknown Artist" ); // Check name() to prevent infinite recursion QString trackName = !name().isEmpty()? prettyName() : i18n( "Unknown track" ); @@ -105,7 +105,7 @@ MediaDeviceTrack::isEditable() const { if( m_collection ) - return m_collection.data()->isWritable(); + return m_collection->isWritable(); return false; } @@ -325,8 +325,8 @@ { Meta::MediaDeviceTrackPtr ptr = Meta::MediaDeviceTrackPtr( this ); - if( m_collection && m_collection.data()->handler() ) - m_collection.data()->handler()->prepareToPlay( ptr ); + if( m_collection && m_collection->handler() ) + m_collection->handler()->prepareToPlay( ptr ); } // TODO: employ observers (e.g. Handler) to take care of updated @@ -377,7 +377,7 @@ MediaDeviceAlbumPtr albumPtr; MediaDeviceTrackPtr track( this ); - AlbumMap albumMap = m_collection.data()->memoryCollection()->albumMap(); + AlbumMap albumMap = m_collection->memoryCollection()->albumMap(); // do cleanup of soon to be previous album @@ -417,9 +417,9 @@ // set track's album to the new album setAlbum( albumPtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setAlbumMap( albumMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setAlbumMap( albumMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -432,7 +432,7 @@ return; MediaDeviceArtistPtr artistPtr; - ArtistMap artistMap = m_collection.data()->memoryCollection()->artistMap(); + ArtistMap artistMap = m_collection->memoryCollection()->artistMap(); if( artistMap.contains( newAlbumArtist ) ) artistPtr = MediaDeviceArtistPtr::staticCast( artistMap.value( newAlbumArtist ) ); @@ -444,9 +444,9 @@ m_album->setAlbumArtist( artistPtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setArtistMap( artistMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setArtistMap( artistMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -457,7 +457,7 @@ MediaDeviceArtistPtr artistPtr; MediaDeviceTrackPtr track( this ); - ArtistMap artistMap = m_collection.data()->memoryCollection()->artistMap(); + ArtistMap artistMap = m_collection->memoryCollection()->artistMap(); // do cleanup of soon to be previous artist @@ -491,9 +491,9 @@ // set track's artist to the new artist setArtist( artistPtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setArtistMap( artistMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setArtistMap( artistMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -504,7 +504,7 @@ MediaDeviceGenrePtr genrePtr; MediaDeviceTrackPtr track( this ); - GenreMap genreMap = m_collection.data()->memoryCollection()->genreMap(); + GenreMap genreMap = m_collection->memoryCollection()->genreMap(); // do cleanup of soon to be previous genre @@ -538,9 +538,9 @@ // set track's genre to the new genre setGenre( genrePtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setGenreMap( genreMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setGenreMap( genreMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -551,7 +551,7 @@ MediaDeviceComposerPtr composerPtr; MediaDeviceTrackPtr track( this ); - ComposerMap composerMap = m_collection.data()->memoryCollection()->composerMap(); + ComposerMap composerMap = m_collection->memoryCollection()->composerMap(); // do cleanup of soon to be previous composer @@ -585,9 +585,9 @@ // set track's composer to the new composer setComposer( composerPtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setComposerMap( composerMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setComposerMap( composerMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -598,7 +598,7 @@ MediaDeviceYearPtr yearPtr; MediaDeviceTrackPtr track( this ); - YearMap yearMap = m_collection.data()->memoryCollection()->yearMap(); + YearMap yearMap = m_collection->memoryCollection()->yearMap(); // do cleanup of soon to be previous year @@ -632,9 +632,9 @@ // set track's year to the new year setYear( yearPtr ); - m_collection.data()->memoryCollection()->acquireWriteLock(); - m_collection.data()->memoryCollection()->setYearMap( yearMap ); - m_collection.data()->memoryCollection()->releaseLock(); + m_collection->memoryCollection()->acquireWriteLock(); + m_collection->memoryCollection()->setYearMap( yearMap ); + m_collection->memoryCollection()->releaseLock(); } void @@ -744,15 +744,15 @@ , m_image( QImage() ) , m_albumArtist( 0 ) { - MediaDeviceHandler *handler = m_collection.data()->handler(); + MediaDeviceHandler *handler = m_collection->handler(); if( handler && handler->hasCapabilityInterface( Handler::Capability::Artwork ) ) m_artworkCapability = handler->create(); } MediaDeviceAlbum::~MediaDeviceAlbum() { if( m_artworkCapability ) - m_artworkCapability.data()->deleteLater(); + m_artworkCapability->deleteLater(); CoverCache::invalidateAlbum( this ); } @@ -811,7 +811,7 @@ if( m_image.isNull() && m_artworkCapability ) { MediaDeviceTrackPtr track = MediaDeviceTrackPtr::staticCast( m_tracks.first() ); - m_image = m_artworkCapability.data()->getCover( track ); + m_image = m_artworkCapability->getCover( track ); m_hasImagePossibility = !m_image.isNull(); m_hasImageChecked = true; CoverCache::invalidateAlbum( this ); @@ -830,34 +830,34 @@ MediaDeviceAlbum::canUpdateImage() const { if( m_artworkCapability ) - return m_artworkCapability.data()->canUpdateCover(); + return m_artworkCapability->canUpdateCover(); return false; } void MediaDeviceAlbum::setImage( const QImage &image ) { - if( m_artworkCapability && m_artworkCapability.data()->canUpdateCover() ) + if( m_artworkCapability && m_artworkCapability->canUpdateCover() ) { // reset to initial values, let next call to image() re-fetch it m_hasImagePossibility = true; m_hasImageChecked = false; - m_artworkCapability.data()->setCover( MediaDeviceAlbumPtr( this ), image ); + m_artworkCapability->setCover( MediaDeviceAlbumPtr( this ), image ); CoverCache::invalidateAlbum( this ); } } void MediaDeviceAlbum::setImagePath( const QString &path ) { - if( m_artworkCapability && m_artworkCapability.data()->canUpdateCover() ) + if( m_artworkCapability && m_artworkCapability->canUpdateCover() ) { // reset to initial values, let next call to image() re-fetch it m_hasImagePossibility = true; m_hasImageChecked = false; - m_artworkCapability.data()->setCoverPath( MediaDeviceAlbumPtr( this ), path ); + m_artworkCapability->setCoverPath( MediaDeviceAlbumPtr( this ), path ); CoverCache::invalidateAlbum( this ); } } diff --git a/src/core-impl/collections/mediadevicecollection/handler/MediaDeviceHandlerCapability.h b/src/core-impl/collections/mediadevicecollection/handler/MediaDeviceHandlerCapability.h --- a/src/core-impl/collections/mediadevicecollection/handler/MediaDeviceHandlerCapability.h +++ b/src/core-impl/collections/mediadevicecollection/handler/MediaDeviceHandlerCapability.h @@ -26,7 +26,7 @@ * * Following rules apply when working with capabilities: * * Capabilities get deleted along their media device handler. Therefore use - * QWeakPointer everywhere to detect that. + * QPointer everywhere to detect that. * * the one who creates capability using create() must deleteLater() it when no * longer used. */ diff --git a/src/core-impl/collections/mediadevicecollection/playlist/MediaDevicePlaylist.h b/src/core-impl/collections/mediadevicecollection/playlist/MediaDevicePlaylist.h --- a/src/core-impl/collections/mediadevicecollection/playlist/MediaDevicePlaylist.h +++ b/src/core-impl/collections/mediadevicecollection/playlist/MediaDevicePlaylist.h @@ -26,7 +26,7 @@ class MediaDevicePlaylist; - typedef KSharedPtr MediaDevicePlaylistPtr; + typedef AmarokSharedPointer MediaDevicePlaylistPtr; typedef QList MediaDevicePlaylistList; class MediaDevicePlaylist : public Playlist diff --git a/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.h b/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.h --- a/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.h +++ b/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.h @@ -20,9 +20,10 @@ #include "core-impl/playlists/providers/user/UserPlaylistProvider.h" #include "MediaDevicePlaylist.h" -#include #include +#include + namespace Collections { class MediaDeviceCollection; } diff --git a/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.cpp b/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.cpp --- a/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.cpp +++ b/src/core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.cpp @@ -30,7 +30,7 @@ #include "playlistmanager/PlaylistManager.h" #include -#include +#include #include #include diff --git a/src/core-impl/collections/mediadevicecollection/podcast/MediaDevicePodcastMeta.h b/src/core-impl/collections/mediadevicecollection/podcast/MediaDevicePodcastMeta.h --- a/src/core-impl/collections/mediadevicecollection/podcast/MediaDevicePodcastMeta.h +++ b/src/core-impl/collections/mediadevicecollection/podcast/MediaDevicePodcastMeta.h @@ -25,11 +25,11 @@ namespace Handler { class MediaDevicePodcastChannel; - typedef KSharedPtr MediaDevicePodcastChannelPtr; + typedef AmarokSharedPointer MediaDevicePodcastChannelPtr; typedef QList MediaDevicePodcastChannelList; class MediaDevicePodcastEpisode; - typedef KSharedPtr MediaDevicePodcastEpisodePtr; + typedef AmarokSharedPointer MediaDevicePodcastEpisodePtr; typedef QList MediaDevicePodcastEpisodeList; class MediaDevicePodcastChannel : public Podcasts::PodcastChannel diff --git a/src/core-impl/collections/mediadevicecollection/support/ConnectionAssistant.cpp b/src/core-impl/collections/mediadevicecollection/support/ConnectionAssistant.cpp --- a/src/core-impl/collections/mediadevicecollection/support/ConnectionAssistant.cpp +++ b/src/core-impl/collections/mediadevicecollection/support/ConnectionAssistant.cpp @@ -17,6 +17,7 @@ #include "ConnectionAssistant.h" #include "MediaDeviceMonitor.h" +#include "core/support/Debug.h" ConnectionAssistant::ConnectionAssistant( bool wait ) : QObject() diff --git a/src/core-impl/collections/mediadevicecollection/support/mediadevicecollection_export.h b/src/core-impl/collections/mediadevicecollection/support/mediadevicecollection_export.h --- a/src/core-impl/collections/mediadevicecollection/support/mediadevicecollection_export.h +++ b/src/core-impl/collections/mediadevicecollection/support/mediadevicecollection_export.h @@ -17,16 +17,16 @@ #ifndef MEDIADEVICECOLLECTION_EXPORT_H #define MEDIADEVICECOLLECTION_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef MEDIADEVICECOLLECTION_EXPORT # if defined(MAKE_MEDIADEVICELIB_LIB) || defined(MAKE_AMAROKLIB_LIB) /* We are building this library */ -# define MEDIADEVICECOLLECTION_EXPORT KDE_EXPORT +# define MEDIADEVICECOLLECTION_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define MEDIADEVICECOLLECTION_EXPORT KDE_IMPORT +# define MEDIADEVICECOLLECTION_EXPORT Q_DECL_IMPORT # endif #endif diff --git a/src/core-impl/collections/mtpcollection/CMakeLists.txt b/src/core-impl/collections/mtpcollection/CMakeLists.txt --- a/src/core-impl/collections/mtpcollection/CMakeLists.txt +++ b/src/core-impl/collections/mtpcollection/CMakeLists.txt @@ -37,20 +37,15 @@ target_link_libraries(amarok_collection-mtpcollection amarokcore amaroklib - KF5::KDELibs4Support KF5::KIOCore - - ${KDE4_SOLID_LIBRARY} KF5::ThreadWeaver Qt5::Gui ${MTP_LIBRARIES} ) install(TARGETS amarok_collection-mtpcollection DESTINATION ${PLUGIN_INSTALL_DIR} ) +kcoreaddons_desktop_to_json(amarok_collection-mtpcollection amarok_collection-mtpcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) -########### install files ############### - -install( FILES amarok_collection-mtpcollection.desktop DESTINATION ${SERVICES_INSTALL_DIR}) endif () diff --git a/src/core-impl/collections/mtpcollection/handler/MtpHandler.h b/src/core-impl/collections/mtpcollection/handler/MtpHandler.h --- a/src/core-impl/collections/mtpcollection/handler/MtpHandler.h +++ b/src/core-impl/collections/mtpcollection/handler/MtpHandler.h @@ -31,16 +31,16 @@ #include "MediaDeviceHandler.h" #include -#include -#include #include #include #include #include #include #include #include +#include +#include class QString; @@ -238,7 +238,7 @@ // Keeps track of which tracks have been copied/cached for playing - QHash m_cachedTracks; + QHash m_cachedTracks; // Maps id's to tracks @@ -250,7 +250,7 @@ // Used as temporary location for copying files from mtp - KTempDir *m_tempDir; + QTemporaryDir *m_tempDir; }; class WorkerThread : public QObject, public ThreadWeaver::Job @@ -261,7 +261,7 @@ WorkerThread( int numrawdevices, LIBMTP_raw_device_t* rawdevices, MtpHandler* handler ); virtual ~WorkerThread(); - virtual bool success() const; + virtual bool success() const Q_DECL_OVERRIDE; protected: virtual void run(ThreadWeaver::JobPointer self = QSharedPointer(), ThreadWeaver::Thread *thread = 0) Q_DECL_OVERRIDE; diff --git a/src/core-impl/collections/mtpcollection/handler/MtpHandler.cpp b/src/core-impl/collections/mtpcollection/handler/MtpHandler.cpp --- a/src/core-impl/collections/mtpcollection/handler/MtpHandler.cpp +++ b/src/core-impl/collections/mtpcollection/handler/MtpHandler.cpp @@ -56,7 +56,7 @@ , m_dbChanged( false ) , m_trackcounter( 0 ) , m_copyParentId( 0 ) - , m_tempDir( new KTempDir() ) + , m_tempDir( new QTemporaryDir() ) { DEBUG_BLOCK m_copyingthreadsafe = true; @@ -385,7 +385,7 @@ QString trackFileName = QString::fromUtf8( m_mtpTrackHash.value( track )->filename ); - QString filename = m_tempDir->name() + trackFileName; + QString filename = m_tempDir->path() + '/' + trackFileName; debug() << "Temp Filename: " << filename; @@ -401,7 +401,7 @@ } else { - urls.insert( trackptr, QUrl(filename) ); + urls.insert( trackptr, QUrl::fromLocalFile( filename ) ); } } @@ -1301,7 +1301,7 @@ else { QString tempPath = setTempFile( track, libGetType( track ) ); - track->setPlayableUrl( QUrl(tempPath) ); + track->setPlayableUrl( QUrl::fromLocalFile( tempPath ) ); debug() << "Beginning temporary file copy"; // m_tempfile.open(); @@ -1324,8 +1324,8 @@ QString MtpHandler::setTempFile( Meta::MediaDeviceTrackPtr &track, const QString &format ) { - m_cachedTracks[ track ] = new KTemporaryFile(); - m_cachedTracks.value( track )->setSuffix( ('.' + format) ); // set suffix based on info from libmtp + m_cachedTracks[ track ] = new QTemporaryFile(); + m_cachedTracks.value( track )->setFileTemplate( QDir::tempPath() + "/XXXXXX." + format ); // set suffix based on info from libmtp if (!m_cachedTracks.value( track )->open()) return QString(); @@ -1363,7 +1363,7 @@ return; debug() << "Running slot device match failed"; - disconnect( job, SIGNAL(done(ThreadWeaver::JobPointer)), this, SLOT(slotDeviceMatchSucceeded(ThreadWeaver::JobPointer)) ); + disconnect( job.dynamicCast().data(), &WorkerThread::done, this, &MtpHandler::slotDeviceMatchSucceeded ); m_memColl->slotAttemptConnectionDone( false ); } @@ -1431,9 +1431,9 @@ , m_rawdevices( rawdevices ) , m_handler( handler ) { - connect( this, SIGNAL(failed(ThreadWeaver::JobPointer)), m_handler, SLOT(slotDeviceMatchFailed(ThreadWeaver::JobPointer)) ); - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), m_handler, SLOT(slotDeviceMatchSucceeded(ThreadWeaver::JobPointer)) ); - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), this, SLOT(deleteLater()) ); + connect( this, &WorkerThread::failed, m_handler, &Meta::MtpHandler::slotDeviceMatchFailed ); + connect( this, &WorkerThread::done, m_handler, &Meta::MtpHandler::slotDeviceMatchSucceeded ); + connect( this, &WorkerThread::done, this, &WorkerThread::deleteLater ); } WorkerThread::~WorkerThread() diff --git a/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.h b/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.h --- a/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.h +++ b/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.h @@ -21,7 +21,7 @@ #include "mediadevicecollection_export.h" #include "ReadCapability.h" -#include +#include namespace Meta { @@ -73,7 +73,7 @@ virtual float totalCapacity() const; private: - QWeakPointer m_handler; + QPointer m_handler; }; } diff --git a/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.cpp b/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.cpp --- a/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.cpp +++ b/src/core-impl/collections/mtpcollection/handler/capabilities/MtpReadCapability.cpp @@ -30,165 +30,165 @@ MtpReadCapability::prepareToParseTracks() { if( m_handler ) - m_handler.data()->prepareToParseTracks(); + m_handler->prepareToParseTracks(); } bool MtpReadCapability::isEndOfParseTracksList() { - return m_handler.data()->isEndOfParseTracksList(); + return m_handler->isEndOfParseTracksList(); } void MtpReadCapability::prepareToParseNextTrack() { if( m_handler ) - m_handler.data()->prepareToParseNextTrack(); + m_handler->prepareToParseNextTrack(); } void MtpReadCapability::nextTrackToParse() { if( m_handler ) - m_handler.data()->nextTrackToParse(); + m_handler->nextTrackToParse(); } void MtpReadCapability::setAssociateTrack( const Meta::MediaDeviceTrackPtr track ) { if( m_handler ) - m_handler.data()->setAssociateTrack( track ); + m_handler->setAssociateTrack( track ); } QString MtpReadCapability::libGetTitle( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetTitle( track ); + return m_handler->libGetTitle( track ); } QString MtpReadCapability::libGetAlbum( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetAlbum( track ); + return m_handler->libGetAlbum( track ); } QString MtpReadCapability::libGetArtist( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetArtist( track ); + return m_handler->libGetArtist( track ); } QString MtpReadCapability::libGetAlbumArtist( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetAlbumArtist( track ); + return m_handler->libGetAlbumArtist( track ); } QString MtpReadCapability::libGetComposer( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetComposer( track ); + return m_handler->libGetComposer( track ); } QString MtpReadCapability::libGetGenre( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetGenre( track ); + return m_handler->libGetGenre( track ); } int MtpReadCapability::libGetYear( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetYear( track ); + return m_handler->libGetYear( track ); } qint64 MtpReadCapability::libGetLength( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetLength( track ); + return m_handler->libGetLength( track ); } int MtpReadCapability::libGetTrackNumber( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetTrackNumber( track ); + return m_handler->libGetTrackNumber( track ); } QString MtpReadCapability::libGetComment( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetComment( track ); + return m_handler->libGetComment( track ); } int MtpReadCapability::libGetDiscNumber( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetDiscNumber( track ); + return m_handler->libGetDiscNumber( track ); } int MtpReadCapability::libGetBitrate( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetBitrate( track ); + return m_handler->libGetBitrate( track ); } int MtpReadCapability::libGetSamplerate( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetSamplerate( track ); + return m_handler->libGetSamplerate( track ); } qreal MtpReadCapability::libGetBpm( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetBpm( track ); + return m_handler->libGetBpm( track ); } int MtpReadCapability::libGetFileSize( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetFileSize( track ); + return m_handler->libGetFileSize( track ); } int MtpReadCapability::libGetPlayCount( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetPlayCount( track ); + return m_handler->libGetPlayCount( track ); } QDateTime MtpReadCapability::libGetLastPlayed( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetLastPlayed( track ); + return m_handler->libGetLastPlayed( track ); } int MtpReadCapability::libGetRating( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetRating( track ); + return m_handler->libGetRating( track ); } QString MtpReadCapability::libGetType( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetType( track ); + return m_handler->libGetType( track ); } QUrl MtpReadCapability::libGetPlayableUrl( const Meta::MediaDeviceTrackPtr &track ) { - return m_handler.data()->libGetPlayableUrl( track ); + return m_handler->libGetPlayableUrl( track ); } float MtpReadCapability::usedCapacity() const { - return m_handler.data()->usedCapacity(); + return m_handler->usedCapacity(); } float MtpReadCapability::totalCapacity() const { - return m_handler.data()->totalCapacity(); + return m_handler->totalCapacity(); } diff --git a/src/core-impl/collections/nepomukcollection/CMakeLists.txt b/src/core-impl/collections/nepomukcollection/CMakeLists.txt --- a/src/core-impl/collections/nepomukcollection/CMakeLists.txt +++ b/src/core-impl/collections/nepomukcollection/CMakeLists.txt @@ -38,8 +38,6 @@ amaroklib KF5::ThreadWeaver ${NEPOMUK_CORE_LIBRARY} - - KF5::KDELibs4Support ${SOPRANO_LIBRARIES} ) diff --git a/src/core-impl/collections/nepomukcollection/NepomukParser.cpp b/src/core-impl/collections/nepomukcollection/NepomukParser.cpp --- a/src/core-impl/collections/nepomukcollection/NepomukParser.cpp +++ b/src/core-impl/collections/nepomukcollection/NepomukParser.cpp @@ -72,7 +72,7 @@ Meta::TrackPtr track( m_collection->cache()->getTrack( resource ) ); objectList << track; - KSharedPtr ntrack( KSharedPtr::staticCast( track ) ); + AmarokSharedPointer ntrack( AmarokSharedPointer::staticCast( track ) ); if( !ntrack->isFilled() ) { Meta::ArtistList artist; @@ -139,7 +139,7 @@ Meta::ArtistPtr artist( m_collection->cache()->getArtist( resource ) ); objectList << artist; - KSharedPtr nartist( KSharedPtr::staticCast( artist ) ); + AmarokSharedPointer nartist( AmarokSharedPointer::staticCast( artist ) ); if( !nartist->isFilled() ) nartist->fill( queryResult.binding( NS_artistName ).literal().toString() ); @@ -156,7 +156,7 @@ Meta::AlbumPtr album( m_collection->cache()->getAlbum( resource ) ); objectList << album; - KSharedPtr nalbum( KSharedPtr::staticCast( album ) ); + AmarokSharedPointer nalbum( AmarokSharedPointer::staticCast( album ) ); if( !nalbum->isFilled() ) nalbum->fill( queryResult.binding( NS_albumTitle ).literal().toString() ); @@ -185,7 +185,7 @@ Meta::ComposerPtr composer( m_collection->cache()->getComposer( resource ) ); objectList << composer; - KSharedPtr ncomposer( KSharedPtr::staticCast( composer ) ); + AmarokSharedPointer ncomposer( AmarokSharedPointer::staticCast( composer ) ); if( !ncomposer->isFilled() ) ncomposer->fill( queryResult.binding( NS_composerName ).literal().toString() ); diff --git a/src/core-impl/collections/playdarcollection/CMakeLists.txt b/src/core-impl/collections/playdarcollection/CMakeLists.txt --- a/src/core-impl/collections/playdarcollection/CMakeLists.txt +++ b/src/core-impl/collections/playdarcollection/CMakeLists.txt @@ -15,10 +15,10 @@ amarokcore amaroklib ${QJSON_LIBRARIES} - KF5::KDELibs4Support KF5::ThreadWeaver KF5::KIOCore ) install(TARGETS amarok_collection-playdarcollection DESTINATION ${PLUGIN_INSTALL_DIR} ) -install(FILES amarok_collection-playdarcollection.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +kcoreaddons_desktop_to_json(amarok_collection-playdarcollection amarok_collection-playdarcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) + diff --git a/src/core-impl/collections/playdarcollection/PlaydarCollection.h b/src/core-impl/collections/playdarcollection/PlaydarCollection.h --- a/src/core-impl/collections/playdarcollection/PlaydarCollection.h +++ b/src/core-impl/collections/playdarcollection/PlaydarCollection.h @@ -55,7 +55,7 @@ private: Playdar::Controller* m_controller; - QWeakPointer< PlaydarCollection > m_collection; + QPointer< PlaydarCollection > m_collection; bool m_collectionIsManaged; }; @@ -97,7 +97,7 @@ QString m_collectionId; QSharedPointer< MemoryCollection > m_memoryCollection; - QList< QWeakPointer< Playdar::ProxyResolver > > m_proxyResolverList; + QList< QPointer< Playdar::ProxyResolver > > m_proxyResolverList; }; } diff --git a/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp b/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp --- a/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp +++ b/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp @@ -34,15 +34,15 @@ #include #include #include +#include namespace Collections { PlaydarCollectionFactory::PlaydarCollectionFactory() : CollectionFactory() , m_controller( 0 ) , m_collectionIsManaged( false ) { - m_info = KPluginInfo( "amarok_collection-playdarcollection.desktop" ); DEBUG_BLOCK } @@ -198,10 +198,11 @@ { DEBUG_BLOCK + QUrlQuery query( url ); if( url.scheme() == uidUrlProtocol() && - url.hasQueryItem( QString( "artist" ) ) && - url.hasQueryItem( QString( "album" ) ) && - url.hasQueryItem( QString( "title" ) ) ) + query.hasQueryItem( QString( "artist" ) ) && + query.hasQueryItem( QString( "album" ) ) && + query.hasQueryItem( QString( "title" ) ) ) return true; else return false; diff --git a/src/core-impl/collections/playdarcollection/PlaydarMeta.h b/src/core-impl/collections/playdarcollection/PlaydarMeta.h --- a/src/core-impl/collections/playdarcollection/PlaydarMeta.h +++ b/src/core-impl/collections/playdarcollection/PlaydarMeta.h @@ -22,9 +22,9 @@ #include #include #include -#include +#include -#include +#include "AmarokSharedPointer.h" #include namespace Collections @@ -43,19 +43,19 @@ class PlaydarYear; class PlaydarLabel; - typedef KSharedPtr< PlaydarTrack > PlaydarTrackPtr; + typedef AmarokSharedPointer< PlaydarTrack > PlaydarTrackPtr; typedef QList< PlaydarTrackPtr > PlaydarTrackList; - typedef KSharedPtr< PlaydarArtist > PlaydarArtistPtr; + typedef AmarokSharedPointer< PlaydarArtist > PlaydarArtistPtr; typedef QList< PlaydarArtistPtr > PlaydarArtistList; - typedef KSharedPtr< PlaydarAlbum > PlaydarAlbumPtr; + typedef AmarokSharedPointer< PlaydarAlbum > PlaydarAlbumPtr; typedef QList< PlaydarAlbumPtr > PlaydarAlbumList; - typedef KSharedPtr< PlaydarComposer > PlaydarComposerPtr; + typedef AmarokSharedPointer< PlaydarComposer > PlaydarComposerPtr; typedef QList< PlaydarComposerPtr > PlaydarComposerList; - typedef KSharedPtr< PlaydarGenre > PlaydarGenrePtr; + typedef AmarokSharedPointer< PlaydarGenre > PlaydarGenrePtr; typedef QList< PlaydarGenrePtr > PlaydarGenreList; - typedef KSharedPtr< PlaydarYear > PlaydarYearPtr; + typedef AmarokSharedPointer< PlaydarYear > PlaydarYearPtr; typedef QList< PlaydarYearPtr > PlaydarYearList; - typedef KSharedPtr< PlaydarLabel > PlaydarLabelPtr; + typedef AmarokSharedPointer< PlaydarLabel > PlaydarLabelPtr; typedef QList< PlaydarLabelPtr > PlaydarLabelList; class PlaydarTrack : public Track @@ -131,7 +131,7 @@ PlaydarLabelList playdarLabels(); private: - QWeakPointer< Collections::PlaydarCollection > m_collection; + QPointer< Collections::PlaydarCollection > m_collection; PlaydarAlbumPtr m_album; PlaydarArtistPtr m_artist; diff --git a/src/core-impl/collections/playdarcollection/PlaydarMeta.cpp b/src/core-impl/collections/playdarcollection/PlaydarMeta.cpp --- a/src/core-impl/collections/playdarcollection/PlaydarMeta.cpp +++ b/src/core-impl/collections/playdarcollection/PlaydarMeta.cpp @@ -17,6 +17,7 @@ #include "PlaydarMeta.h" #include "amarokconfig.h" +#include "AmarokSharedPointer.h" #include "core/meta/Meta.h" #include "core-impl/meta/default/DefaultMetaTypes.h" #include "core-impl/support/UrlStatisticsStore.h" @@ -28,9 +29,8 @@ #include #include #include - -#include #include +#include namespace Collections { @@ -70,11 +70,13 @@ , m_comment( QString( "" ) ) , m_source( source ) { + QUrlQuery query; m_uidUrl.setScheme( QString( "playdar" ) ); m_uidUrl.setPath(m_uidUrl.path() + '/' + source ); - m_uidUrl.addQueryItem( QString( "artist" ), artist ); - m_uidUrl.addQueryItem( QString( "album" ), album ); - m_uidUrl.addQueryItem( QString( "title" ), name ); + query.addQueryItem( QString( "artist" ), artist ); + query.addQueryItem( QString( "album" ), album ); + query.addQueryItem( QString( "title" ), name ); + m_uidUrl.setQuery( query ); m_statsStore = new UrlStatisticsStore( this ); } @@ -308,7 +310,7 @@ if( m_collection.data() ) { PlaydarTrackPtr sharedThis( this ); - m_collection.data()->addNewTrack( sharedThis ); + m_collection->addNewTrack( sharedThis ); } } diff --git a/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.h b/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.h --- a/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.h +++ b/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.h @@ -111,10 +111,10 @@ typedef QMap< qint64, QString > FilterMap; FilterMap m_filterMap; - QWeakPointer< PlaydarCollection > m_collection; - QWeakPointer< QueryMaker > m_memoryQueryMaker; + QPointer< PlaydarCollection > m_collection; + QPointer< QueryMaker > m_memoryQueryMaker; - QWeakPointer< Playdar::Controller > m_controller; + QPointer< Playdar::Controller > m_controller; void runMemoryQueryAgain(); }; diff --git a/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp b/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp --- a/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp +++ b/src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp @@ -111,23 +111,23 @@ if( !artist.isEmpty() && !title.isEmpty() ) { m_activeQueryCount++; - m_controller.data()->resolve( artist, album, title ); + m_controller->resolve( artist, album, title ); } } m_activeQueryCount++; m_memoryQueryIsRunning = true; - m_memoryQueryMaker.data()->run(); + m_memoryQueryMaker->run(); } void PlaydarQueryMaker::abortQuery() { DEBUG_BLOCK - m_memoryQueryMaker.data()->abortQuery(); + m_memoryQueryMaker->abortQuery(); - m_controller.data()->disconnect( this ); + m_controller->disconnect( this ); } QueryMaker* @@ -476,7 +476,7 @@ return QueryMaker::ValidFilters( ArtistFilter ) | QueryMaker::ValidFilters( AlbumFilter ) | QueryMaker::ValidFilters( TitleFilter ) | - m_memoryQueryMaker.data()->validFilterMask(); + m_memoryQueryMaker->validFilterMask(); } void @@ -504,7 +504,7 @@ DEBUG_BLOCK track->addToCollection( m_collection.data() ); - if( m_collection.data()->trackForUrl( QUrl(track->uidUrl()) ) == Meta::TrackPtr::staticCast( track ) ) + if( m_collection->trackForUrl( QUrl(track->uidUrl()) ) == Meta::TrackPtr::staticCast( track ) ) m_collectionUpdated = true; } diff --git a/src/core-impl/collections/playdarcollection/support/Controller.h b/src/core-impl/collections/playdarcollection/support/Controller.h --- a/src/core-impl/collections/playdarcollection/support/Controller.h +++ b/src/core-impl/collections/playdarcollection/support/Controller.h @@ -18,7 +18,7 @@ #define PLAYDAR_CONTROLLER_H #include -#include +#include class QUrl; class KJob; diff --git a/src/core-impl/collections/playdarcollection/support/Controller.cpp b/src/core-impl/collections/playdarcollection/support/Controller.cpp --- a/src/core-impl/collections/playdarcollection/support/Controller.cpp +++ b/src/core-impl/collections/playdarcollection/support/Controller.cpp @@ -23,12 +23,13 @@ #include -#include #include +#include #include +#include +#include #include -#include #include namespace Playdar { @@ -56,10 +57,11 @@ const QString baseUrl( "http://localhost:60210/api/?method=resolve" ); QUrl resolveUrl( baseUrl ); - - resolveUrl.addQueryItem( QString( "artist" ), artist ); - resolveUrl.addQueryItem( QString( "album" ), album ); - resolveUrl.addQueryItem( QString( "track" ), title ); + QUrlQuery query( resolveUrl ); + query.addQueryItem( QString( "artist" ), artist ); + query.addQueryItem( QString( "album" ), album ); + query.addQueryItem( QString( "track" ), title ); + resolveUrl.setQuery( query ); debug() << "Starting storedGetJob for " << resolveUrl.url(); @@ -74,9 +76,11 @@ const QString baseUrl( "http://localhost:60210/api/?method=get_results" ); QUrl getResultsUrl( baseUrl ); - - getResultsUrl.addQueryItem( QString( "qid" ), query->qid() ); - + QUrlQuery q( getResultsUrl ); + + q.addQueryItem( QString( "qid" ), query->qid() ); + getResultsUrl.setQuery( q ); + KJob* getResultsJob = KIO::storedGet( getResultsUrl, KIO::Reload, KIO::HideProgressInfo ); connect( getResultsJob, &KJob::result, query, &Query::receiveResults ); } @@ -88,9 +92,11 @@ const QString baseUrl( "http://localhost:60210/api/?method=get_results_long" ); QUrl getResultsUrl( baseUrl ); - - getResultsUrl.addQueryItem( QString( "qid" ), query->qid() ); - + QUrlQuery q( getResultsUrl ); + + q.addQueryItem( QString( "qid" ), query->qid() ); + getResultsUrl.setQuery( q ); + KJob* getResultsJob = KIO::storedGet( getResultsUrl, KIO::Reload, KIO::HideProgressInfo ); connect( getResultsJob, &KJob::result, query, &Query::receiveResults ); } diff --git a/src/core-impl/collections/playdarcollection/support/ProxyResolver.cpp b/src/core-impl/collections/playdarcollection/support/ProxyResolver.cpp --- a/src/core-impl/collections/playdarcollection/support/ProxyResolver.cpp +++ b/src/core-impl/collections/playdarcollection/support/ProxyResolver.cpp @@ -21,9 +21,9 @@ #include "../PlaydarMeta.h" #include "core-impl/meta/proxy/MetaProxy.h" -#include - #include +#include +#include Playdar::ProxyResolver::ProxyResolver( Collections::PlaydarCollection *collection, const QUrl &url, MetaProxy::TrackPtr track ) diff --git a/src/core-impl/collections/playdarcollection/support/Query.h b/src/core-impl/collections/playdarcollection/support/Query.h --- a/src/core-impl/collections/playdarcollection/support/Query.h +++ b/src/core-impl/collections/playdarcollection/support/Query.h @@ -21,7 +21,7 @@ #include "core/meta/forward_declarations.h" #include "../PlaydarMeta.h" -#include +#include class KJob; @@ -103,7 +103,7 @@ void playdarError( Playdar::Controller::ErrorState ); private: - QWeakPointer< Playdar::Controller > m_controller; + QPointer< Playdar::Controller > m_controller; bool m_waitForSolution; QString m_qid; diff --git a/src/core-impl/collections/playdarcollection/support/Query.cpp b/src/core-impl/collections/playdarcollection/support/Query.cpp --- a/src/core-impl/collections/playdarcollection/support/Query.cpp +++ b/src/core-impl/collections/playdarcollection/support/Query.cpp @@ -50,10 +50,10 @@ if( m_waitForSolution ) { m_receivedFirstResults = true; - m_controller.data()->getResultsLongPoll( this ); + m_controller->getResultsLongPoll( this ); } else - m_controller.data()->getResults( this ); + m_controller->getResults( this ); } Query::~Query() @@ -161,7 +161,7 @@ { QVariantMap result = resultVariant.toMap(); Meta::PlaydarTrackPtr aTrack; - QUrl resultUrl( m_controller.data()->urlForSid( result.value( "sid" ).toString() ) ); + QUrl resultUrl( m_controller->urlForSid( result.value( "sid" ).toString() ) ); QString trackSid = result.value( "sid" ).toString(); QString trackUrl = resultUrl.url(); @@ -213,7 +213,7 @@ else { m_receivedFirstResults = true; - m_controller.data()->getResultsLongPoll( this ); + m_controller->getResultsLongPoll( this ); } } } diff --git a/src/core-impl/collections/support/ArtistHelper.cpp b/src/core-impl/collections/support/ArtistHelper.cpp --- a/src/core-impl/collections/support/ArtistHelper.cpp +++ b/src/core-impl/collections/support/ArtistHelper.cpp @@ -16,10 +16,10 @@ #include "ArtistHelper.h" -#include - #include +#include + QString ArtistHelper::bestGuessAlbumArtist( const QString &albumArtist, const QString &trackArtist, const QString &genre, const QString &composer) diff --git a/src/core-impl/collections/support/CollectionLocationDelegateImpl.cpp b/src/core-impl/collections/support/CollectionLocationDelegateImpl.cpp --- a/src/core-impl/collections/support/CollectionLocationDelegateImpl.cpp +++ b/src/core-impl/collections/support/CollectionLocationDelegateImpl.cpp @@ -23,7 +23,7 @@ #include "core/support/Components.h" #include "transcoding/TranscodingAssistantDialog.h" -#include +#include #include using namespace Collections; diff --git a/src/core-impl/collections/support/CollectionManager.cpp b/src/core-impl/collections/support/CollectionManager.cpp --- a/src/core-impl/collections/support/CollectionManager.cpp +++ b/src/core-impl/collections/support/CollectionManager.cpp @@ -23,7 +23,6 @@ #include "core/collections/MetaQueryMaker.h" #include "core/support/Amarok.h" #include "core/support/Debug.h" -#include "core/support/SmartPointerList.h" #include "core-impl/meta/file/FileTrackProvider.h" #include "core-impl/meta/stream/Stream.h" #include "core-impl/meta/timecode/TimecodeTrackProvider.h" @@ -37,8 +36,6 @@ #include #include -#include -#include typedef QPair CollectionPair; @@ -261,7 +258,7 @@ const QMetaObject *mo = metaObject(); const QMetaEnum me = mo->enumerator( mo->indexOfEnumerator( "CollectionStatus" ) ); - const QString &value = KGlobal::config()->group( "CollectionManager" ).readEntry( newCollection->collectionId() ); + const QString &value = Amarok::config( "CollectionManager" ).readEntry( newCollection->collectionId() ); int enumValue = me.keyToValue( value.toLocal8Bit().constData() ); CollectionStatus status; enumValue == -1 ? status = CollectionEnabled : status = (CollectionStatus) enumValue; diff --git a/src/core-impl/collections/support/FileCollectionLocation.cpp b/src/core-impl/collections/support/FileCollectionLocation.cpp --- a/src/core-impl/collections/support/FileCollectionLocation.cpp +++ b/src/core-impl/collections/support/FileCollectionLocation.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include diff --git a/src/core-impl/collections/support/MemoryMeta.h b/src/core-impl/collections/support/MemoryMeta.h --- a/src/core-impl/collections/support/MemoryMeta.h +++ b/src/core-impl/collections/support/MemoryMeta.h @@ -50,7 +50,7 @@ private: QString m_name; - /* We cannot easily store KSharedPtr to tracks, because it creates reference + /* We cannot easily store AmarokSharedPointer to tracks, because it creates reference * counting cycle: MemoryMeta::Track::m_album -> MemoryMeta::Album::tracks() -> * MemoryMeta::Track. We therefore store plain pointers and rely on * MemoryMeta::Track to notify when it is destroyed. */ @@ -210,7 +210,7 @@ // MemoryMeta::Track methods: - /* All of these set* methods pass the pointer to KSharedPtr (thus memory-manage it), + /* All of these set* methods pass the pointer to AmarokSharedPointer (thus memory-manage it), * remove this track from previous {Album,Artist,Composer,Genre,Year} entity (if any) * and add this track to newly set entity. (if non-null) * All these methods are reentrant, but not thread-safe: caller must ensure that diff --git a/src/core-impl/collections/support/MemoryMeta.cpp b/src/core-impl/collections/support/MemoryMeta.cpp --- a/src/core-impl/collections/support/MemoryMeta.cpp +++ b/src/core-impl/collections/support/MemoryMeta.cpp @@ -28,7 +28,7 @@ Meta::TrackList Base::tracks() { - // construct KSharedPtrs on demand, see m_track comment + // construct AmarokSharedPointers on demand, see m_track comment QReadLocker locker( &m_tracksLock ); Meta::TrackList list; foreach( Track *track, m_tracks ) diff --git a/src/core-impl/collections/support/MemoryQueryMakerInternal.h b/src/core-impl/collections/support/MemoryQueryMakerInternal.h --- a/src/core-impl/collections/support/MemoryQueryMakerInternal.h +++ b/src/core-impl/collections/support/MemoryQueryMakerInternal.h @@ -47,9 +47,6 @@ * Creates a new MemoryQueryMakerInternal that will query collection. * This class will run in a dedicated thread. It exists so the actual MemoryQueryMaker * can be safely deleted in the original thread while the query is still running. - * @param guard a class that will be deleted before collection. It is used to - * ensure that MemoryQueryMakerInternal does not access a dangling MemoryCollection - * pointer. * @param collection the MemoryCollection instance that the query should be run on. */ MemoryQueryMakerInternal( const QWeakPointer &collection ); @@ -87,7 +84,6 @@ private: QWeakPointer m_collection; - QWeakPointer m_guard; MemoryMatcher *m_matchers; MemoryFilter *m_filters; int m_maxSize; diff --git a/src/core-impl/collections/support/TextualQueryFilter.cpp b/src/core-impl/collections/support/TextualQueryFilter.cpp --- a/src/core-impl/collections/support/TextualQueryFilter.cpp +++ b/src/core-impl/collections/support/TextualQueryFilter.cpp @@ -25,8 +25,7 @@ #include "FileType.h" #include "core/support/Debug.h" -#include -#include +#include using namespace Meta; @@ -262,13 +261,12 @@ const QString lowerText = text.toLower(); const QDateTime curTime = QDateTime::currentDateTime(); - QDateTime result; if( absolute ) *absolute = false; // parse date using local settings - KLocalizedDate localizedDate = KLocalizedDate::readDate( text, KLocale::ShortFormat ); + QDateTime result = QLocale().toDateTime( text, QLocale::ShortFormat ); // parse date using a backup standard independent from local settings QRegExp shortDateReg("(\\d{1,2})[-.](\\d{1,2})"); @@ -287,9 +285,8 @@ else if( ( lowerText.compare( "three months ago" ) == 0 ) || ( lowerText.compare( i18n( "three months ago" ) ) == 0 ) ) result = curTime.addMonths( -3 ); } - else if( localizedDate.isValid() ) + else if( result.isValid() ) { - result = QDateTime( localizedDate.date() ); if( absolute ) *absolute = true; } diff --git a/src/core-impl/collections/support/TrashCollectionLocation.cpp b/src/core-impl/collections/support/TrashCollectionLocation.cpp --- a/src/core-impl/collections/support/TrashCollectionLocation.cpp +++ b/src/core-impl/collections/support/TrashCollectionLocation.cpp @@ -25,7 +25,7 @@ #include -#include +#include #include diff --git a/src/core-impl/collections/umscollection/CMakeLists.txt b/src/core-impl/collections/umscollection/CMakeLists.txt --- a/src/core-impl/collections/umscollection/CMakeLists.txt +++ b/src/core-impl/collections/umscollection/CMakeLists.txt @@ -27,7 +27,6 @@ amaroklib amarokcore amarok-transcoding - KF5::KDELibs4Support KF5::KIOCore ${KDE4_SOLID_LIBRARY} @@ -40,10 +39,4 @@ DESTINATION ${PLUGIN_INSTALL_DIR} ) -########### install files ############### - -install(FILES - amarok_collection-umscollection.desktop - DESTINATION - ${SERVICES_INSTALL_DIR}) - +kcoreaddons_desktop_to_json(amarok_collection-umscollection amarok_collection-umscollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/core-impl/collections/umscollection/UmsCollection.h b/src/core-impl/collections/umscollection/UmsCollection.h --- a/src/core-impl/collections/umscollection/UmsCollection.h +++ b/src/core-impl/collections/umscollection/UmsCollection.h @@ -137,8 +137,8 @@ using Meta::Observer::metadataChanged; // silence compiler warning about hidder overloads /* own methods */ - const QUrl &musicPath() const { return m_musicPath; } - const QUrl &podcastPath() const { return m_podcastPath; } + const QUrl &musicUrl() const { return m_musicUrl; } + const QUrl &podcastUrl() const { return m_podcastUrl; } /** * Get location where track @param track should be transferred to. @@ -216,8 +216,8 @@ bool m_autoConnect; QString m_mountPoint; - QUrl m_musicPath; - QUrl m_podcastPath; + QUrl m_musicUrl; + QUrl m_podcastUrl; QString m_musicFilenameScheme; bool m_vfatSafe; bool m_asciiOnly; diff --git a/src/core-impl/collections/umscollection/UmsCollection.cpp b/src/core-impl/collections/umscollection/UmsCollection.cpp --- a/src/core-impl/collections/umscollection/UmsCollection.cpp +++ b/src/core-impl/collections/umscollection/UmsCollection.cpp @@ -35,24 +35,23 @@ #include "dialogs/TrackOrganizer.h" //TODO: move to core/utils #include "scanner/GenericScanManager.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include #include + UmsCollectionFactory::UmsCollectionFactory() : CollectionFactory() {} @@ -279,25 +278,25 @@ KConfigGroup entries = config.group( QString() ); // default group if( entries.hasKey( s_musicFolderKey ) ) { - m_musicPath = QUrl( m_mountPoint ); - m_musicPath = m_musicPath.adjusted(QUrl::StripTrailingSlash); - m_musicPath.setPath(m_musicPath.path() + '/' + ( entries.readPathEntry( s_musicFolderKey, QString() ) )); - m_musicPath.setPath( QDir::cleanPath(m_musicPath.path()) ); - if( !QDir( m_musicPath.toLocalFile() ).exists() ) + m_musicUrl = QUrl::fromLocalFile( m_mountPoint ); + m_musicUrl = m_musicUrl.adjusted(QUrl::StripTrailingSlash); + m_musicUrl.setPath(m_musicUrl.path() + '/' + ( entries.readPathEntry( s_musicFolderKey, QString() ) )); + m_musicUrl.setPath( QDir::cleanPath(m_musicUrl.path()) ); + if( !QDir( m_musicUrl.toLocalFile() ).exists() ) { QString message = i18n( "File %1 suggests that we should use %2 " "as music folder on the device, but it doesn't exist. Falling back to " "%3 instead", m_mountPoint + '/' + s_settingsFileName, - m_musicPath.toLocalFile(), m_mountPoint ); + m_musicUrl.toLocalFile(), m_mountPoint ); Amarok::Components::logger()->longMessage( message, Amarok::Logger::Warning ); - m_musicPath = QUrl(m_mountPoint); + m_musicUrl = QUrl::fromLocalFile(m_mountPoint); } } else if( !entries.keyList().isEmpty() ) // config file exists, but has no s_musicFolderKey -> music should be disabled - m_musicPath = QUrl(); + m_musicUrl = QUrl(); else - m_musicPath = QUrl(m_mountPoint); // related BR 259849 + m_musicUrl = QUrl::fromLocalFile(m_mountPoint); // related BR 259849 QString scheme = entries.readEntry( s_musicFilenameSchemeKey ); m_musicFilenameScheme = !scheme.isEmpty() ? scheme : m_musicFilenameScheme; m_vfatSafe = entries.readEntry( s_vfatSafeKey, m_vfatSafe ); @@ -308,10 +307,10 @@ m_replaceText = entries.readEntry( s_replaceTextKey, m_replaceText ); if( entries.hasKey( s_podcastFolderKey ) ) { - m_podcastPath = QUrl( m_mountPoint ); - m_podcastPath = m_podcastPath.adjusted(QUrl::StripTrailingSlash); - m_podcastPath.setPath(m_podcastPath.path() + '/' + ( entries.readPathEntry( s_podcastFolderKey, QString() ) )); - m_podcastPath.setPath( QDir::cleanPath(m_podcastPath.path()) ); + m_podcastUrl = QUrl::fromLocalFile( m_mountPoint ); + m_podcastUrl = m_podcastUrl.adjusted(QUrl::StripTrailingSlash); + m_podcastUrl.setPath(m_podcastUrl.path() + '/' + ( entries.readPathEntry( s_podcastFolderKey, QString() ) )); + m_podcastUrl.setPath( QDir::cleanPath(m_podcastUrl.path()) ); } m_autoConnect = entries.readEntry( s_autoConnectKey, m_autoConnect ); m_collectionName = entries.readEntry( s_collectionName, m_collectionName ); @@ -485,14 +484,14 @@ trackOrganizer.setFormatString( "%collectionroot%/" + m_musicFilenameScheme + ".%filetype%" ); trackOrganizer.setVfatSafe( m_vfatSafe ); trackOrganizer.setAsciiOnly( m_asciiOnly ); - trackOrganizer.setFolderPrefix( m_musicPath.path() ); + trackOrganizer.setFolderPrefix( m_musicUrl.path() ); trackOrganizer.setPostfixThe( m_postfixThe ); trackOrganizer.setReplaceSpaces( m_replaceSpaces ); trackOrganizer.setReplace( m_regexText, m_replaceText ); if( !fileExtension.isEmpty() ) trackOrganizer.setTargetFileExtension( fileExtension ); - return QUrl( trackOrganizer.getDestinations().value( track ) ); + return QUrl::fromLocalFile( trackOrganizer.getDestinations().value( track ) ); } void @@ -515,7 +514,7 @@ void UmsCollection::slotTrackAdded( QUrl location ) { - Q_ASSERT( m_musicPath.isParentOf( location ) || m_musicPath.matches( location , QUrl::StripTrailingSlash) ); + Q_ASSERT( m_musicUrl.isParentOf( location ) || m_musicUrl.matches( location , QUrl::StripTrailingSlash) ); MetaFile::Track *fileTrack = new MetaFile::Track( location ); fileTrack->setCollection( this ); Meta::TrackPtr fileTrackPtr = Meta::TrackPtr( fileTrack ); @@ -564,7 +563,7 @@ } m_tracksParsed = true; - m_scanManager->requestScan( QList() << m_musicPath, GenericScanManager::FullScan ); + m_scanManager->requestScan( QList() << m_musicUrl, GenericScanManager::FullScan ); } void @@ -577,7 +576,7 @@ void UmsCollection::slotConfigure() { - KDialog umsSettingsDialog; + QDialog umsSettingsDialog; QWidget *settingsWidget = new QWidget( &umsSettingsDialog ); QScopedPointer tc( create() ); @@ -587,103 +586,106 @@ settings->m_autoConnect->setChecked( m_autoConnect ); settings->m_musicFolder->setMode( KFile::Directory ); - settings->m_musicCheckBox->setChecked( !m_musicPath.isEmpty() ); + settings->m_musicCheckBox->setChecked( !m_musicUrl.isEmpty() ); settings->m_musicWidget->setEnabled( settings->m_musicCheckBox->isChecked() ); - settings->m_musicFolder->setUrl( m_musicPath.isEmpty() ? QUrl( m_mountPoint ) : m_musicPath ); + settings->m_musicFolder->setUrl( m_musicUrl.isEmpty() ? QUrl::fromLocalFile( m_mountPoint ) : m_musicUrl ); settings->m_transcodeConfig->fillInChoices( tc->savedConfiguration() ); settings->m_podcastFolder->setMode( KFile::Directory ); - settings->m_podcastCheckBox->setChecked( !m_podcastPath.isEmpty() ); + settings->m_podcastCheckBox->setChecked( !m_podcastUrl.isEmpty() ); settings->m_podcastWidget->setEnabled( settings->m_podcastCheckBox->isChecked() ); - settings->m_podcastFolder->setUrl( m_podcastPath.isEmpty() ? QUrl( m_mountPoint ) - : m_podcastPath ); + settings->m_podcastFolder->setUrl( m_podcastUrl.isEmpty() ? QUrl::fromLocalFile( m_mountPoint ) + : m_podcastUrl ); settings->m_collectionName->setText( prettyName() ); - OrganizeCollectionWidget layoutWidget( &umsSettingsDialog ); + OrganizeCollectionWidget *layoutWidget = new OrganizeCollectionWidget; //TODO: save the setting that are normally written in onAccept() // connect( this, SIGNAL(accepted()), &layoutWidget, SLOT(onAccept()) ); - QVBoxLayout layout( &umsSettingsDialog ); - layout.addWidget( &layoutWidget ); - settings->m_filenameSchemeBox->setLayout( &layout ); + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget( layoutWidget ); + settings->m_filenameSchemeBox->setLayout( layout ); //hide the unuse preset selector. //TODO: change the presets to concurrent presets for regular albums v.s. compilations // layoutWidget.setformatPresetVisible( false ); - layoutWidget.setScheme( m_musicFilenameScheme ); - - OrganizeCollectionOptionWidget optionsWidget; - optionsWidget.setVfatCompatible( m_vfatSafe ); - optionsWidget.setAsciiOnly( m_asciiOnly ); - optionsWidget.setPostfixThe( m_postfixThe ); - optionsWidget.setReplaceSpaces( m_replaceSpaces ); - optionsWidget.setRegexpText( m_regexText ); - optionsWidget.setReplaceText( m_replaceText ); - - layout.addWidget( &optionsWidget ); - - umsSettingsDialog.setButtons( KDialog::Ok | KDialog::Cancel ); - umsSettingsDialog.setMainWidget( settingsWidget ); - + layoutWidget->setScheme( m_musicFilenameScheme ); + + OrganizeCollectionOptionWidget *optionsWidget = new OrganizeCollectionOptionWidget; + optionsWidget->setVfatCompatible( m_vfatSafe ); + optionsWidget->setAsciiOnly( m_asciiOnly ); + optionsWidget->setPostfixThe( m_postfixThe ); + optionsWidget->setReplaceSpaces( m_replaceSpaces ); + optionsWidget->setRegexpText( m_regexText ); + optionsWidget->setReplaceText( m_replaceText ); + + layout->addWidget( optionsWidget ); + + umsSettingsDialog.setLayout( new QVBoxLayout ); + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); + connect( buttonBox, &QDialogButtonBox::accepted, &umsSettingsDialog, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, &umsSettingsDialog, &QDialog::reject ); + umsSettingsDialog.layout()->addWidget( settingsWidget ); + umsSettingsDialog.layout()->addWidget( buttonBox ); umsSettingsDialog.setWindowTitle( i18n( "Configure USB Mass Storage Device" ) ); if( umsSettingsDialog.exec() == QDialog::Accepted ) { debug() << "accepted"; if( settings->m_musicCheckBox->isChecked() ) { - if( settings->m_musicFolder->url() != m_musicPath ) + if( settings->m_musicFolder->url() != m_musicUrl ) { - debug() << "music location changed from " << m_musicPath.toLocalFile() << " to "; + debug() << "music location changed from " << m_musicUrl.toLocalFile() << " to "; debug() << settings->m_musicFolder->url().toLocalFile(); - m_musicPath = settings->m_musicFolder->url(); + m_musicUrl = settings->m_musicFolder->url(); //TODO: reparse music } - QString scheme = layoutWidget.getParsableScheme().simplified(); + QString scheme = layoutWidget->getParsableScheme().simplified(); //protect against empty string. if( !scheme.isEmpty() ) m_musicFilenameScheme = scheme; } else { debug() << "music support is disabled"; - m_musicPath = QUrl(); + m_musicUrl = QUrl(); //TODO: remove all tracks from the MemoryCollection. } - m_asciiOnly = optionsWidget.asciiOnly(); - m_postfixThe = optionsWidget.postfixThe(); - m_replaceSpaces = optionsWidget.replaceSpaces(); - m_regexText = optionsWidget.regexpText(); - m_replaceText = optionsWidget.replaceText(); + m_asciiOnly = optionsWidget->asciiOnly(); + m_postfixThe = optionsWidget->postfixThe(); + m_replaceSpaces = optionsWidget->replaceSpaces(); + m_regexText = optionsWidget->regexpText(); + m_replaceText = optionsWidget->replaceText(); m_collectionName = settings->m_collectionName->text(); if( settings->m_podcastCheckBox->isChecked() ) { - if( settings->m_podcastFolder->url() != m_podcastPath ) + if( settings->m_podcastFolder->url() != m_podcastUrl ) { - debug() << "podcast location changed from " << m_podcastPath << " to "; + debug() << "podcast location changed from " << m_podcastUrl << " to "; debug() << settings->m_podcastFolder->url().url(); - m_podcastPath = QUrl(settings->m_podcastFolder->url().toLocalFile()); + m_podcastUrl = QUrl(settings->m_podcastFolder->url()); //TODO: reparse podcasts } } else { debug() << "podcast support is disabled"; - m_podcastPath = QUrl(); + m_podcastUrl = QUrl(); //TODO: remove the PodcastProvider } m_autoConnect = settings->m_autoConnect->isChecked(); - if( !m_musicPath.isEmpty() && m_autoConnect ) + if( !m_musicUrl.isEmpty() && m_autoConnect ) QTimer::singleShot( 0, this, SLOT(slotParseTracks()) ); // write the data to the on-disk file KConfig config( m_mountPoint + '/' + s_settingsFileName, KConfig::SimpleConfig ); KConfigGroup entries = config.group( QString() ); // default group - if( !m_musicPath.isEmpty() ) - entries.writePathEntry( s_musicFolderKey, QDir( m_mountPoint ).relativeFilePath( m_musicPath.toLocalFile() )); + if( !m_musicUrl.isEmpty() ) + entries.writePathEntry( s_musicFolderKey, QDir( m_mountPoint ).relativeFilePath( m_musicUrl.toLocalFile() )); else entries.deleteEntry( s_musicFolderKey ); entries.writeEntry( s_musicFilenameSchemeKey, m_musicFilenameScheme ); @@ -693,8 +695,8 @@ entries.writeEntry( s_replaceSpacesKey, m_replaceSpaces ); entries.writeEntry( s_regexTextKey, m_regexText ); entries.writeEntry( s_replaceTextKey, m_replaceText ); - if( !m_podcastPath.isEmpty() ) - entries.writePathEntry( s_podcastFolderKey, QDir( m_mountPoint ).relativeFilePath( m_podcastPath.toLocalFile() )); + if( !m_podcastUrl.isEmpty() ) + entries.writePathEntry( s_podcastFolderKey, QDir( m_mountPoint ).relativeFilePath( m_podcastUrl.toLocalFile() )); else entries.deleteEntry( s_podcastFolderKey ); entries.writeEntry( s_autoConnectKey, m_autoConnect ); @@ -721,7 +723,7 @@ { //TODO: use proxy tracks so no real file read is required // following method calls startUpdateTimer(), no need to emit updated() - slotTrackAdded( QUrl(scannerTrack->path()) ); + slotTrackAdded( QUrl::fromLocalFile(scannerTrack->path()) ); } //TODO: read playlists diff --git a/src/core-impl/collections/umscollection/UmsCollectionLocation.cpp b/src/core-impl/collections/umscollection/UmsCollectionLocation.cpp --- a/src/core-impl/collections/umscollection/UmsCollectionLocation.cpp +++ b/src/core-impl/collections/umscollection/UmsCollectionLocation.cpp @@ -23,15 +23,14 @@ #include "core-impl/meta/file/File.h" #include "transcoding/TranscodingJob.h" +#include +#include + #include #include #include -#include -#include #include -#include - UmsCollectionLocation::UmsCollectionLocation( UmsCollection *umsCollection ) : CollectionLocation( umsCollection ) , m_umsCollection( umsCollection ) @@ -45,7 +44,7 @@ QString UmsCollectionLocation::prettyLocation() const { - return m_umsCollection->musicPath().adjusted(QUrl::StripTrailingSlash).toLocalFile(); + return m_umsCollection->musicUrl().adjusted(QUrl::StripTrailingSlash).toLocalFile(); } QStringList @@ -57,7 +56,7 @@ bool UmsCollectionLocation::isWritable() const { - const QFileInfo info( m_umsCollection->musicPath().toLocalFile() ); + const QFileInfo info( m_umsCollection->musicUrl().toLocalFile() ); return info.isWritable(); } diff --git a/src/core-impl/collections/umscollection/podcasts/UmsPodcastMeta.h b/src/core-impl/collections/umscollection/podcasts/UmsPodcastMeta.h --- a/src/core-impl/collections/umscollection/podcasts/UmsPodcastMeta.h +++ b/src/core-impl/collections/umscollection/podcasts/UmsPodcastMeta.h @@ -31,8 +31,8 @@ class UmsPodcastProvider; -typedef KSharedPtr UmsPodcastEpisodePtr; -typedef KSharedPtr UmsPodcastChannelPtr; +typedef AmarokSharedPointer UmsPodcastEpisodePtr; +typedef AmarokSharedPointer UmsPodcastChannelPtr; typedef QList UmsPodcastEpisodeList; typedef QList UmsPodcastChannelList; diff --git a/src/core-impl/collections/umscollection/podcasts/UmsPodcastProvider.cpp b/src/core-impl/collections/umscollection/podcasts/UmsPodcastProvider.cpp --- a/src/core-impl/collections/umscollection/podcasts/UmsPodcastProvider.cpp +++ b/src/core-impl/collections/umscollection/podcasts/UmsPodcastProvider.cpp @@ -16,21 +16,22 @@ #include "UmsPodcastProvider.h" #include "core/support/Debug.h" -#include +#include #include #include #include -#include #include +#include +#include #include #include #include #include +#include #include #include #include -#include using namespace Podcasts; @@ -92,7 +93,7 @@ if( !localFilePath.isLocalFile() ) return PodcastEpisodePtr(); - QUrl destination = QUrl( m_scanDirectory ); + QUrl destination = m_scanDirectory; destination = destination.adjusted(QUrl::StripTrailingSlash); destination.setPath(destination.path() + '/' + ( Amarok::vfatPath( episode->channel()->prettyName() ) )); KIO::mkdir( destination ); @@ -251,31 +252,29 @@ foreach( UmsPodcastEpisodePtr umsEpisode, umsEpisodes ) urlsToDelete << umsEpisode->playableUrl(); - KDialog dialog; - dialog.setCaption( i18n( "Confirm Delete" ) ); - dialog.setButtons( KDialog::Ok | KDialog::Cancel ); - - QLabel label( i18np( "Are you sure you want to delete this episode?", - "Are you sure you want to delete these %1 episodes?", - urlsToDelete.count() ) - , &dialog - ); - QListWidget listWidget( &dialog ); - listWidget.setSelectionMode( QAbstractItemView::NoSelection ); + QDialog dialog; + dialog.setWindowTitle( i18n( "Confirm Delete" ) ); + + QLabel *label = new QLabel( i18np( "Are you sure you want to delete this episode?", + "Are you sure you want to delete these %1 episodes?", + urlsToDelete.count() ), + &dialog ); + QListWidget *listWidget = new QListWidget( &dialog ); + listWidget->setSelectionMode( QAbstractItemView::NoSelection ); foreach( const QUrl &url, urlsToDelete ) { - new QListWidgetItem( url.toLocalFile(), &listWidget ); + new QListWidgetItem( url.toLocalFile(), listWidget ); } QWidget *widget = new QWidget( &dialog ); + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); QVBoxLayout *layout = new QVBoxLayout( widget ); - layout->addWidget( &label ); - layout->addWidget( &listWidget ); - - dialog.setButtonText( KDialog::Ok, i18n( "Yes, delete from %1.", - QString("TODO: replace me") ) ); + layout->addWidget( label ); + layout->addWidget( listWidget ); + layout->addWidget( buttonBox ); - dialog.setMainWidget( widget ); + buttonBox->button( QDialogButtonBox::Ok )->setText( i18n( "Yes, delete from %1.", + QString("TODO: replace me") ) ); if( dialog.exec() != QDialog::Accepted ) return; @@ -486,7 +485,7 @@ // if( mime.inherits( mimetype ) ) // { addFile( MetaFile::TrackPtr( new MetaFile::Track( - QUrl( info.canonicalFilePath() ) ) ) ); + QUrl::fromLocalFile( info.canonicalFilePath() ) ) ) ); return 2; // } // } diff --git a/src/core-impl/collections/upnpcollection/CMakeLists.txt b/src/core-impl/collections/upnpcollection/CMakeLists.txt --- a/src/core-impl/collections/upnpcollection/CMakeLists.txt +++ b/src/core-impl/collections/upnpcollection/CMakeLists.txt @@ -39,7 +39,4 @@ install(TARGETS amarok_collection-upnpcollection DESTINATION ${PLUGIN_INSTALL_DIR} ) - -########### install files ############### - -install( FILES amarok_collection-upnpcollection.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +kcoreaddons_desktop_to_json(amarok_collection-upnpcollection amarok_collection-upnpcollection.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/core-impl/collections/upnpcollection/UpnpBrowseCollection.cpp b/src/core-impl/collections/upnpcollection/UpnpBrowseCollection.cpp --- a/src/core-impl/collections/upnpcollection/UpnpBrowseCollection.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpBrowseCollection.cpp @@ -27,17 +27,16 @@ #include "UpnpQueryMaker.h" #include "UpnpMeta.h" #include "UpnpCache.h" +#include "upnptypes.h" #include #include #include #include -#include -#include -#include "upnptypes.h" +#include #include -#include +#include using namespace Meta; diff --git a/src/core-impl/collections/upnpcollection/UpnpCache.cpp b/src/core-impl/collections/upnpcollection/UpnpCache.cpp --- a/src/core-impl/collections/upnpcollection/UpnpCache.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpCache.cpp @@ -17,7 +17,6 @@ #include -#include #include "upnptypes.h" #include "UpnpMeta.h" diff --git a/src/core-impl/collections/upnpcollection/UpnpCollectionBase.cpp b/src/core-impl/collections/upnpcollection/UpnpCollectionBase.cpp --- a/src/core-impl/collections/upnpcollection/UpnpCollectionBase.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpCollectionBase.cpp @@ -20,7 +20,6 @@ #include "upnptypes.h" #include -#include #include #include "core/support/Debug.h" diff --git a/src/core-impl/collections/upnpcollection/UpnpCollectionFactory.cpp b/src/core-impl/collections/upnpcollection/UpnpCollectionFactory.cpp --- a/src/core-impl/collections/upnpcollection/UpnpCollectionFactory.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpCollectionFactory.cpp @@ -17,10 +17,6 @@ #define DEBUG_PREFIX "UpnpCollectionFactory" #include "UpnpCollectionFactory.h" -#include -#include -#include -#include #include #include #include @@ -42,6 +38,7 @@ namespace Collections { + UpnpCollectionFactory::UpnpCollectionFactory() : Collections::CollectionFactory() { @@ -245,11 +242,11 @@ && searchCaps.contains( "dc:title" ) && searchCaps.contains( "upnp:artist" ) && searchCaps.contains( "upnp:album" ) ) { - kDebug() << "Supports all search meta-data required, using UpnpSearchCollection"; + qDebug() << "Supports all search meta-data required, using UpnpSearchCollection"; m_devices[dev.uuid()] = new UpnpSearchCollection( dev, searchCaps ); } else { - kDebug() << "Supported Search() meta-data" << searchCaps << "not enough. Using UpnpBrowseCollection"; + qDebug() << "Supported Search() meta-data" << searchCaps << "not enough. Using UpnpBrowseCollection"; m_devices[dev.uuid()] = new UpnpBrowseCollection( dev ); } emit newCollection( m_devices[dev.uuid()] ); diff --git a/src/core-impl/collections/upnpcollection/UpnpMemoryQueryMaker.h b/src/core-impl/collections/upnpcollection/UpnpMemoryQueryMaker.h --- a/src/core-impl/collections/upnpcollection/UpnpMemoryQueryMaker.h +++ b/src/core-impl/collections/upnpcollection/UpnpMemoryQueryMaker.h @@ -22,6 +22,8 @@ #include "MemoryCollection.h" #include "core-impl/collections/support/MemoryQueryMaker.h" +#include + namespace Collections { class UpnpMemoryQueryMaker : public MemoryQueryMaker diff --git a/src/core-impl/collections/upnpcollection/UpnpMeta.h b/src/core-impl/collections/upnpcollection/UpnpMeta.h --- a/src/core-impl/collections/upnpcollection/UpnpMeta.h +++ b/src/core-impl/collections/upnpcollection/UpnpMeta.h @@ -33,12 +33,12 @@ class UpnpComposer; class UpnpYear; -typedef KSharedPtr UpnpTrackPtr; -typedef KSharedPtr UpnpArtistPtr; -typedef KSharedPtr UpnpAlbumPtr; -typedef KSharedPtr UpnpGenrePtr; -typedef KSharedPtr UpnpComposerPtr; -typedef KSharedPtr UpnpYearPtr; +typedef AmarokSharedPointer UpnpTrackPtr; +typedef AmarokSharedPointer UpnpArtistPtr; +typedef AmarokSharedPointer UpnpAlbumPtr; +typedef AmarokSharedPointer UpnpGenrePtr; +typedef AmarokSharedPointer UpnpComposerPtr; +typedef AmarokSharedPointer UpnpYearPtr; class UpnpTrack : public Meta::Track { diff --git a/src/core-impl/collections/upnpcollection/UpnpMeta.cpp b/src/core-impl/collections/upnpcollection/UpnpMeta.cpp --- a/src/core-impl/collections/upnpcollection/UpnpMeta.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpMeta.cpp @@ -24,7 +24,7 @@ #include -#include +#include using namespace Meta; @@ -387,7 +387,7 @@ { QString path; if( m_albumArtUrl.isValid() - && KIO::NetAccess::download( m_albumArtUrl, path, NULL ) ) + && KIO::copy( m_albumArtUrl, QUrl::fromLocalFile( path ) )->exec() ) { m_image = QImage( path ); CoverCache::invalidateAlbum( this ); diff --git a/src/core-impl/collections/upnpcollection/UpnpQueryMaker.cpp b/src/core-impl/collections/upnpcollection/UpnpQueryMaker.cpp --- a/src/core-impl/collections/upnpcollection/UpnpQueryMaker.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpQueryMaker.cpp @@ -18,10 +18,12 @@ #include "UpnpQueryMaker.h" -#include #include "upnptypes.h" -#include -#include + +#include + +#include +#include #include "core/support/Debug.h" #include "UpnpSearchCollection.h" @@ -81,15 +83,21 @@ DEBUG_BLOCK QUrl baseUrl( m_collection->collectionId() ); - baseUrl.addQueryItem( "search", "1" ); + QUrlQuery query( baseUrl ); + query.addQueryItem( "search", "1" ); + baseUrl.setQuery( query ); if( m_queryType == Custom ) { switch( m_returnFunction ) { case Count: + { m_query.reset(); m_query.setType( "( upnp:class derivedfrom \"object.item.audioItem\" )" ); - baseUrl.addQueryItem( "getCount", "1" ); + QUrlQuery query( baseUrl ); + query.addQueryItem( "getCount", "1" ); + baseUrl.setQuery( query ); break; + } case Sum: case Max: case Min: @@ -161,7 +169,9 @@ continue; QUrl url( baseUrl ); - url.addQueryItem( "query", queryList[i] ); + QUrlQuery query( url ); + query.addQueryItem( "query", queryList[i] ); + url.setQuery( query ); debug() << this << "Running query" << url; m_internalQM->runQuery( url ); diff --git a/src/core-impl/collections/upnpcollection/UpnpQueryMakerInternal.cpp b/src/core-impl/collections/upnpcollection/UpnpQueryMakerInternal.cpp --- a/src/core-impl/collections/upnpcollection/UpnpQueryMakerInternal.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpQueryMakerInternal.cpp @@ -19,8 +19,12 @@ #include "UpnpQueryMakerInternal.h" #include "upnptypes.h" -#include -#include + +#include + +#include +#include +#include #include "UpnpSearchCollection.h" #include "UpnpCache.h" @@ -69,7 +73,9 @@ && remoteCount > 0 && filter ) { debug() << "FILTERING BY CLASS ONLY"; - query.addQueryItem( "filter", "upnp:class" ); + QUrlQuery q( query ); + q.addQueryItem( "filter", "upnp:class" ); + query.setQuery( q ); } KIO::ListJob *job = KIO::listDir( query, KIO::HideProgressInfo ); @@ -82,7 +88,9 @@ void UpnpQueryMakerInternal::runStat( const QString& id ) { QUrl url( m_collection->collectionId() ); - url.addQueryItem( "id", id ); + QUrlQuery query( url ); + query.addQueryItem( "id", id ); + url.setQuery( query ); debug() << "STAT URL" << url; KIO::StatJob *job = KIO::stat( url, KIO::HideProgressInfo ); connect( job, &KJob::result, this, &UpnpQueryMakerInternal::slotStatDone ); diff --git a/src/core-impl/collections/upnpcollection/UpnpSearchCollection.cpp b/src/core-impl/collections/upnpcollection/UpnpSearchCollection.cpp --- a/src/core-impl/collections/upnpcollection/UpnpSearchCollection.cpp +++ b/src/core-impl/collections/upnpcollection/UpnpSearchCollection.cpp @@ -23,16 +23,14 @@ #include "UpnpQueryMaker.h" #include "UpnpMeta.h" #include "UpnpCache.h" +#include "upnptypes.h" #include #include -#include +#include #include -#include -#include "upnptypes.h" -#include -#include +#include using namespace Meta; @@ -49,7 +47,7 @@ DEBUG_BLOCK OrgKdeKDirNotifyInterface *notify = new OrgKdeKDirNotifyInterface("", "", QDBusConnection::sessionBus(), this ); - connect( notify, SIGNAL(FilesChanged(QStringList)), SLOT(slotFilesChanged(QStringList)) ); + connect( notify, &OrgKdeKDirNotifyInterface::FilesChanged, this, &UpnpSearchCollection::slotFilesChanged ); } UpnpSearchCollection::~UpnpSearchCollection() diff --git a/src/core-impl/logger/ProxyLogger.h b/src/core-impl/logger/ProxyLogger.h --- a/src/core-impl/logger/ProxyLogger.h +++ b/src/core-impl/logger/ProxyLogger.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include @@ -34,12 +34,12 @@ struct ProgressData { - QWeakPointer sender; - QWeakPointer job; - QWeakPointer reply; + QPointer sender; + QPointer job; + QPointer reply; QString text; int maximum; - QWeakPointer cancelObject; + QPointer cancelObject; const char *slot; Qt::ConnectionType type; }; diff --git a/src/core-impl/meta/cue/CueFileSupport.cpp b/src/core-impl/meta/cue/CueFileSupport.cpp --- a/src/core-impl/meta/cue/CueFileSupport.cpp +++ b/src/core-impl/meta/cue/CueFileSupport.cpp @@ -43,16 +43,15 @@ CueFileItemMap CueFileSupport::loadCueFile( const QUrl &cuefile, const QUrl &trackUrl, qint64 trackLen ) { - DEBUG_BLOCK CueFileItemMap cueItems; debug() << "CUEFILE: " << cuefile.toDisplayString(); - if ( QFile::exists ( cuefile.toDisplayString() ) ) + if ( QFile::exists ( cuefile.toLocalFile() ) ) { debug() << " EXISTS!"; - QFile file ( cuefile.toDisplayString() ); + QFile file ( cuefile.toLocalFile() ); int trackNr = 0; QString defaultArtist; QString defaultAlbum; @@ -245,7 +244,7 @@ if ( validateCueSheet ( cueFile ) ) { debug() << "[CUEFILE]: " << cueFile << " - Shoot blindly, found and loaded. "; - return QUrl ( cueFile ); + return QUrl::fromLocalFile( cueFile ); } debug() << "[CUEFILE]: " << cueFile << " - Shoot blindly and missed, searching for other cue files."; @@ -293,7 +292,7 @@ } if ( foundCueFile ) - return QUrl ( cueFile ); + return QUrl::fromLocalFile( cueFile ); debug() << "[CUEFILE]: - Didn't find any matching cue file." << endl; return QUrl(); } @@ -449,7 +448,7 @@ foreach( const CueFileItem &item, itemMap ) { Meta::TimecodeTrack *track = new Meta::TimecodeTrack( item.title(), - baseTrack->playableUrl().url(), item.index(), item.index() + item.length() ); + baseTrack->playableUrl(), item.index(), item.index() + item.length() ); track->beginUpdate(); track->setArtist( item.artist() ); track->setAlbum( item.album() ); diff --git a/src/core-impl/meta/default/DefaultMetaTypes.h b/src/core-impl/meta/default/DefaultMetaTypes.h --- a/src/core-impl/meta/default/DefaultMetaTypes.h +++ b/src/core-impl/meta/default/DefaultMetaTypes.h @@ -23,7 +23,7 @@ #include "core/support/Debug.h" #include "core/meta/Meta.h" -#include +#include namespace Meta diff --git a/src/core-impl/meta/file/File.h b/src/core-impl/meta/file/File.h --- a/src/core-impl/meta/file/File.h +++ b/src/core-impl/meta/file/File.h @@ -26,7 +26,7 @@ { class Track; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; class AMAROK_EXPORT Track : public Meta::Track, public Meta::Statistics, Meta::TrackEditor { diff --git a/src/core-impl/meta/file/File.cpp b/src/core-impl/meta/file/File.cpp --- a/src/core-impl/meta/file/File.cpp +++ b/src/core-impl/meta/file/File.cpp @@ -26,6 +26,7 @@ #include "MainWindow.h" #include "amarokurls/BookmarkMetaActions.h" #include "amarokurls/PlayUrlRunner.h" +#include "browsers/BrowserDock.h" #include "browsers/filebrowser/FileBrowser.h" #include "core/capabilities/BookmarkThisCapability.h" #include "core/capabilities/FindInSourceCapability.h" @@ -68,7 +69,7 @@ } private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; class TimecodeLoadCapabilityImpl : public Capabilities::TimecodeLoadCapability @@ -93,7 +94,7 @@ } private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; @@ -129,7 +130,7 @@ } private: - KSharedPtr m_track; + AmarokSharedPointer m_track; }; @@ -197,7 +198,7 @@ bool Track::isEditable() const { - QFileInfo info = QFileInfo( playableUrl().toDisplayString() ); + QFileInfo info = QFileInfo( playableUrl().toLocalFile() ); return info.isFile() && info.isWritable(); } diff --git a/src/core-impl/meta/file/File_p.h b/src/core-impl/meta/file/File_p.h --- a/src/core-impl/meta/file/File_p.h +++ b/src/core-impl/meta/file/File_p.h @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include @@ -121,8 +121,8 @@ Meta::GenrePtr genre; Meta::ComposerPtr composer; Meta::YearPtr year; - QWeakPointer readLabelCapability; - QWeakPointer collection; + QPointer readLabelCapability; + QPointer collection; /** * Number of current batch operations started by @see beginUpdate() and not @@ -245,7 +245,7 @@ return name() == other.name(); } - QWeakPointer const d; + QPointer const d; const bool m_isAlbumArtist; }; @@ -375,7 +375,7 @@ return name() == other.name(); } - QWeakPointer const d; + QPointer const d; }; class FileGenre : public Meta::Genre @@ -401,7 +401,7 @@ return name() == other.name(); } - QWeakPointer const d; + QPointer const d; }; class FileComposer : public Meta::Composer @@ -427,7 +427,7 @@ return name() == other.name(); } - QWeakPointer const d; + QPointer const d; }; class FileYear : public Meta::Year @@ -453,7 +453,7 @@ return name() == other.name(); } - QWeakPointer const d; + QPointer const d; }; } diff --git a/src/core-impl/meta/proxy/MetaProxy.h b/src/core-impl/meta/proxy/MetaProxy.h --- a/src/core-impl/meta/proxy/MetaProxy.h +++ b/src/core-impl/meta/proxy/MetaProxy.h @@ -33,7 +33,7 @@ namespace MetaProxy { class Track; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; class AMAROK_EXPORT Track : public Meta::Track, public Meta::TrackEditor { public: @@ -46,7 +46,7 @@ /** * Construct a lazy-loading proxying track. You must assign this track to a - * KSharedPtr right after constructing it. + * AmarokSharedPointer right after constructing it. * * If @param lookupType is AutomaticLookup (the default), an asynchronous * job employing CollectionManager to lookup the track in TrackProviders is diff --git a/src/core-impl/meta/proxy/MetaProxy.cpp b/src/core-impl/meta/proxy/MetaProxy.cpp --- a/src/core-impl/meta/proxy/MetaProxy.cpp +++ b/src/core-impl/meta/proxy/MetaProxy.cpp @@ -21,7 +21,7 @@ #include "core-impl/meta/proxy/MetaProxy_p.h" #include "core-impl/meta/proxy/MetaProxyWorker.h" -#include +#include "AmarokSharedPointer.h" #include #include #include diff --git a/src/core-impl/meta/timecode/TimecodeMeta.h b/src/core-impl/meta/timecode/TimecodeMeta.h --- a/src/core-impl/meta/timecode/TimecodeMeta.h +++ b/src/core-impl/meta/timecode/TimecodeMeta.h @@ -31,18 +31,18 @@ class TimecodeComposer; class TimecodeYear; - typedef KSharedPtr TimecodeTrackPtr; - typedef KSharedPtr TimecodeArtistPtr; - typedef KSharedPtr TimecodeAlbumPtr; - typedef KSharedPtr TimecodeGenrePtr; - typedef KSharedPtr TimecodeComposerPtr; - typedef KSharedPtr TimecodeYearPtr; + typedef AmarokSharedPointer TimecodeTrackPtr; + typedef AmarokSharedPointer TimecodeArtistPtr; + typedef AmarokSharedPointer TimecodeAlbumPtr; + typedef AmarokSharedPointer TimecodeGenrePtr; + typedef AmarokSharedPointer TimecodeComposerPtr; + typedef AmarokSharedPointer TimecodeYearPtr; class TimecodeTrack : public Track, public TrackEditor { public: - TimecodeTrack( const QString &name, const QString &url, qint64 start, qint64 end ); + TimecodeTrack( const QString &name, const QUrl &url, qint64 start, qint64 end ); virtual ~TimecodeTrack(); virtual QString name() const; @@ -119,7 +119,7 @@ int m_discNumber; QString m_comment; QString m_displayUrl; - QString m_playableUrl; + QUrl m_playableUrl; int m_updatedFields; QMap m_fields; diff --git a/src/core-impl/meta/timecode/TimecodeMeta.cpp b/src/core-impl/meta/timecode/TimecodeMeta.cpp --- a/src/core-impl/meta/timecode/TimecodeMeta.cpp +++ b/src/core-impl/meta/timecode/TimecodeMeta.cpp @@ -26,12 +26,14 @@ #include "core-impl/capabilities/AlbumActionsCapability.h" #include "core-impl/capabilities/timecode/TimecodeBoundedPlaybackCapability.h" +#include + using namespace Meta; using namespace Capabilities; ////////////////// TRACK ////////////////// -TimecodeTrack::TimecodeTrack( const QString &name, const QString &url, qint64 start, qint64 end ) +TimecodeTrack::TimecodeTrack( const QString &name, const QUrl &url, qint64 start, qint64 end ) : m_name( name ) , m_start( start ) , m_end( end ) @@ -43,7 +45,7 @@ , m_playableUrl( url ) , m_updatedFields( 0 ) { - m_displayUrl = url + ':' + QString::number( start ) + '-' + QString::number( end ); + m_displayUrl = url.toDisplayString() + ':' + QString::number( start ) + '-' + QString::number( end ); } TimecodeTrack::~ TimecodeTrack() @@ -59,7 +61,7 @@ QUrl TimecodeTrack::playableUrl() const { - return QUrl::fromLocalFile(m_playableUrl); + return m_playableUrl; } QString @@ -77,7 +79,10 @@ QString TimecodeTrack::notPlayableReason() const { - return localFileNotPlayableReason( m_playableUrl ); + if( !m_playableUrl.isLocalFile() ) + return i18n( "Url is not a local file" ); + + return localFileNotPlayableReason( m_playableUrl.toLocalFile() ); } AlbumPtr diff --git a/src/core-impl/meta/timecode/TimecodeTrackProvider.cpp b/src/core-impl/meta/timecode/TimecodeTrackProvider.cpp --- a/src/core-impl/meta/timecode/TimecodeTrackProvider.cpp +++ b/src/core-impl/meta/timecode/TimecodeTrackProvider.cpp @@ -42,11 +42,11 @@ rx.setPattern( "^(.+):(\\d+)-(\\d+)$" ); if( rx.indexIn( urlString ) != -1 ) { - QString baseUrl = rx.cap(1); + QString baseUrlString = rx.cap(1); int start = rx.cap(2).toInt(); int end = rx.cap(3).toInt(); - Meta::TimecodeTrack * track = new Meta::TimecodeTrack( "TimecodeTrack", baseUrl, start, end ); + Meta::TimecodeTrack * track = new Meta::TimecodeTrack( "TimecodeTrack", QUrl( baseUrlString ), start, end ); return Meta::TrackPtr( track ); } return Meta::TrackPtr(); diff --git a/src/core-impl/playlists/types/file/PlaylistFile.h b/src/core-impl/playlists/types/file/PlaylistFile.h --- a/src/core-impl/playlists/types/file/PlaylistFile.h +++ b/src/core-impl/playlists/types/file/PlaylistFile.h @@ -33,7 +33,7 @@ class PlaylistFile; class PlaylistFileLoaderJob; - typedef KSharedPtr PlaylistFilePtr; + typedef AmarokSharedPointer PlaylistFilePtr; typedef QList PlaylistFileList; /** diff --git a/src/core-impl/playlists/types/file/PlaylistFile.cpp b/src/core-impl/playlists/types/file/PlaylistFile.cpp --- a/src/core-impl/playlists/types/file/PlaylistFile.cpp +++ b/src/core-impl/playlists/types/file/PlaylistFile.cpp @@ -23,7 +23,6 @@ #include #include -#include #include @@ -163,14 +162,20 @@ PlaylistFile::getAbsolutePath( const QUrl &url ) { QUrl absUrl = url; - if( url.isRelative() ) + + if( url.scheme().isEmpty() ) + absUrl.setScheme( QStringLiteral( "file" ) ); + + if( !absUrl.isLocalFile() ) + return url; + + if( !url.path().startsWith( '/' ) ) { m_relativePaths = true; - // example: url = QUrl("../tunes/tune.ogg") - const QString relativePath = url.path(); // "../tunes/tune.ogg" + // example: url = QUrl( "file://../tunes/tune.ogg" ) absUrl = m_url.adjusted(QUrl::RemoveFilename); // file:///playlists/ absUrl = absUrl.adjusted(QUrl::StripTrailingSlash); - absUrl.setPath(absUrl.path() + '/' + ( relativePath )); + absUrl.setPath( absUrl.path() + '/' + url.path() ); absUrl.setPath( QDir::cleanPath(absUrl.path()) ); // file:///playlists/tunes/tune.ogg } return absUrl; diff --git a/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.h b/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.h --- a/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.h +++ b/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.h @@ -19,7 +19,8 @@ #include "core-impl/playlists/types/file/PlaylistFile.h" -#include +#include + #include class KJob; @@ -60,7 +61,7 @@ private: PlaylistFilePtr m_playlist; - KTemporaryFile m_tempFile; + QTemporaryFile m_tempFile; QString m_actualPlaylistFile; // path to local playlist file to actually load QSemaphore m_downloadSemaphore; }; diff --git a/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.cpp b/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.cpp --- a/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.cpp +++ b/src/core-impl/playlists/types/file/PlaylistFileLoaderJob.cpp @@ -23,15 +23,15 @@ #include "core/support/Debug.h" #include "core/support/SemaphoreReleaser.h" -#include +#include #include -#include #include #include #include #include #include +#include using namespace Playlists; @@ -51,7 +51,7 @@ } else { - m_tempFile.setSuffix( '.' + Amarok::extension( url.url() ) ); +// m_tempFile.setFileTemplate( QDir::tempPath() + "/XXXXXX." + Amarok::extension( url.url() ) ); if( !m_tempFile.open() ) { Amarok::Components::logger()->longMessage( diff --git a/src/core-impl/playlists/types/file/PlaylistFileSupport.h b/src/core-impl/playlists/types/file/PlaylistFileSupport.h --- a/src/core-impl/playlists/types/file/PlaylistFileSupport.h +++ b/src/core-impl/playlists/types/file/PlaylistFileSupport.h @@ -27,7 +27,7 @@ AMAROK_EXPORT PlaylistFilePtr loadPlaylistFile( const QUrl &url, PlaylistFileProvider *provider = 0 ); - bool exportPlaylistFile( const Meta::TrackList &list, const QUrl &path, bool relative = false, + bool exportPlaylistFile( const Meta::TrackList &list, const QUrl &url, bool relative = false, const QList &queued = QList() ); /* HACK: diff --git a/src/core-impl/playlists/types/file/PlaylistFileSupport.cpp b/src/core-impl/playlists/types/file/PlaylistFileSupport.cpp --- a/src/core-impl/playlists/types/file/PlaylistFileSupport.cpp +++ b/src/core-impl/playlists/types/file/PlaylistFileSupport.cpp @@ -30,14 +30,12 @@ #include "amarokconfig.h" - -#include -#include -#include +#include #include #include #include +#include using namespace Playlists; @@ -86,29 +84,29 @@ } bool -Playlists::exportPlaylistFile( const Meta::TrackList &list, const QUrl &path, bool relative, +Playlists::exportPlaylistFile( const Meta::TrackList &list, const QUrl &url, bool relative, const QList &queued ) { - PlaylistFormat format = Playlists::getFormat( path ); + PlaylistFormat format = Playlists::getFormat( url ); bool result = false; PlaylistFilePtr playlist; switch( format ) { case ASX: - playlist = new ASXPlaylist( QUrl::fromLocalFile(path.toLocalFile()) ); + playlist = new ASXPlaylist( url ); break; case PLS: - playlist = new PLSPlaylist( QUrl::fromLocalFile(path.toLocalFile()) ); + playlist = new PLSPlaylist( url ); break; case M3U: - playlist = new M3UPlaylist( QUrl::fromLocalFile(path.toLocalFile()) ); + playlist = new M3UPlaylist( url ); break; case XSPF: - playlist = new XSPFPlaylist( QUrl::fromLocalFile(path.toLocalFile()) ); + playlist = new XSPFPlaylist( url ); break; default: - debug() << "Could not export playlist file " << path; + debug() << "Could not export playlist file " << url; break; } @@ -148,13 +146,15 @@ { int trailingNumber = 1; KLocalizedString fileName = ki18n("Playlist_%1"); - QUrl url( Amarok::saveLocation( "playlists" ) ); + QUrl url = QUrl::fromLocalFile( Amarok::saveLocation( "playlists" ) ); url = url.adjusted(QUrl::StripTrailingSlash); url.setPath(url.path() + '/' + ( fileName.subs( trailingNumber ).toString() )); while( QFileInfo( url.path() ).exists() ) + { url = url.adjusted(QUrl::RemoveFilename); url.setPath(url.path() + fileName.subs( ++trailingNumber ).toString() ); + } - return QUrl( QString( "%1.%2" ).arg( url.path(), fileExtension ) ); + return QUrl::fromLocalFile( QString( "%1.%2" ).arg( url.path(), fileExtension ) ); } diff --git a/src/core-impl/playlists/types/file/m3u/M3UPlaylist.cpp b/src/core-impl/playlists/types/file/m3u/M3UPlaylist.cpp --- a/src/core-impl/playlists/types/file/m3u/M3UPlaylist.cpp +++ b/src/core-impl/playlists/types/file/m3u/M3UPlaylist.cpp @@ -32,7 +32,6 @@ { if( m_tracksLoaded ) return true; - const QString directory = m_url.adjusted(QUrl::RemoveFilename).path(); m_tracksLoaded = true; int length = -1; diff --git a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp --- a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp +++ b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp @@ -484,7 +484,7 @@ { if( subSubNode.nodeName() == "location" ) { - QByteArray path = subSubNode.firstChild().nodeValue().toAscii(); + QByteArray path = subSubNode.firstChild().nodeValue().toLatin1(); path.replace( '\\', '/' ); QUrl url = getAbsolutePath( QUrl::fromEncoded( path ) ); diff --git a/src/core-impl/podcasts/sql/PodcastSettingsBase.ui b/src/core-impl/podcasts/sql/PodcastSettingsBase.ui --- a/src/core-impl/podcasts/sql/PodcastSettingsBase.ui +++ b/src/core-impl/podcasts/sql/PodcastSettingsBase.ui @@ -107,7 +107,7 @@
- + Media Download @@ -186,7 +186,7 @@ - + The maximum number of podcast items to store @@ -257,9 +257,9 @@ - KIntSpinBox + QSpinBox QSpinBox -
knuminput.h
+
qspinbox.h
1
@@ -269,16 +269,16 @@ 1 - KButtonGroup + QGroupBox QGroupBox -
kbuttongroup.h
+
qgroupbox.h
1
kurlrequester.h - klineedit.h - kpushbutton.h + qlineedit.h + qpushbutton.h diff --git a/src/core-impl/podcasts/sql/PodcastSettingsDialog.cpp b/src/core-impl/podcasts/sql/PodcastSettingsDialog.cpp --- a/src/core-impl/podcasts/sql/PodcastSettingsDialog.cpp +++ b/src/core-impl/podcasts/sql/PodcastSettingsDialog.cpp @@ -78,7 +78,7 @@ m_ps->m_purgeCheck->setChecked( m_channel->hasPurge() ); m_ps->m_purgeCountSpinBox->setValue( m_channel->purgeCount() ); - m_ps->m_purgeCountSpinBox->setSuffix( ki18np( " Item", " Items" ) ); + m_ps->m_purgeCountSpinBox->setSuffix( i18np( " Item", " Items", m_ps->m_purgeCountSpinBox->value() ) ); if( !m_channel->hasPurge() ) { diff --git a/src/core-impl/podcasts/sql/SqlPodcastMeta.h b/src/core-impl/podcasts/sql/SqlPodcastMeta.h --- a/src/core-impl/podcasts/sql/SqlPodcastMeta.h +++ b/src/core-impl/podcasts/sql/SqlPodcastMeta.h @@ -29,8 +29,8 @@ class SqlPodcastChannel; class SqlPodcastProvider; -typedef KSharedPtr SqlPodcastEpisodePtr; -typedef KSharedPtr SqlPodcastChannelPtr; +typedef AmarokSharedPointer SqlPodcastEpisodePtr; +typedef AmarokSharedPointer SqlPodcastChannelPtr; typedef QList SqlPodcastEpisodeList; typedef QList SqlPodcastChannelList; diff --git a/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp b/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp --- a/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp +++ b/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp @@ -276,7 +276,7 @@ } else { - //if we had a local file previously it should get deleted by the KSharedPtr. + //if we had a local file previously it should get deleted by the AmarokSharedPointer. m_localFile = new MetaFile::Track( m_localUrl ); if( m_channel->writeTags() ) writeTagsToFile(); @@ -820,7 +820,7 @@ stream << "' WHERE id="; stream << m_dbId; stream << ";"; - kDebug() << command; + debug() << command; sqlStorage->query( command ); } else @@ -845,7 +845,7 @@ stream << (m_writeTags ? boolTrue : boolFalse) << ", '"; stream << escape(m_filenameLayout); stream << "');"; - kDebug() << command; + debug() << command; m_dbId = sqlStorage->insert( command, "podcastchannels" ); } } diff --git a/src/core-impl/podcasts/sql/SqlPodcastProvider.h b/src/core-impl/podcasts/sql/SqlPodcastProvider.h --- a/src/core-impl/podcasts/sql/SqlPodcastProvider.h +++ b/src/core-impl/podcasts/sql/SqlPodcastProvider.h @@ -22,12 +22,12 @@ #include "SqlPodcastMeta.h" #include -#include -#include + +#include class PodcastImageFetcher; -class KDialog; +class QDialog; class QUrl; class PodcastReader; class SqlStorage; @@ -185,7 +185,7 @@ QUrl m_baseDownloadDir; - KDialog *m_providerSettingsDialog; + QDialog *m_providerSettingsDialog; Ui::SqlPodcastProviderSettingsWidget *m_providerSettingsWidget; QList m_providerActions; diff --git a/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp b/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp --- a/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp +++ b/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp @@ -22,8 +22,8 @@ #include "SvgHandler.h" #include "QStringx.h" #include "browsers/playlistbrowser/PodcastModel.h" -#include "context/popupdropper/libpud/PopupDropper.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" +// #include "context/popupdropper/libpud/PopupDropper.h" +// #include "context/popupdropper/libpud/PopupDropperItem.h" #include #include "core/interfaces/Logger.h" #include "core/podcasts/PodcastImageFetcher.h" @@ -38,23 +38,25 @@ #include "ui_SqlPodcastProviderSettingsWidget.h" #include -#include +#include #include #include #include -#include -#include -#include -#include -#include -#include +#include #include #include +#include +#include #include #include #include +#include +#include +#include +#include #include +#include using namespace Podcasts; @@ -586,7 +588,7 @@ void SqlPodcastProvider::configureProvider() { - m_providerSettingsDialog = new KDialog( The::mainWindow() ); + m_providerSettingsDialog = new QDialog( The::mainWindow() ); QWidget *settingsWidget = new QWidget( m_providerSettingsDialog ); m_providerSettingsDialog->setObjectName( "SqlPodcastProviderSettings" ); Ui::SqlPodcastProviderSettingsWidget settings; @@ -599,17 +601,16 @@ settings.m_autoUpdateInterval->setValue( m_autoUpdateInterval ); settings.m_autoUpdateInterval->setPrefix( i18nc( "prefix to 'x minutes'", "every " ) ); - settings.m_autoUpdateInterval->setSuffix( ki18np( " minute", " minutes" ) ); + settings.m_autoUpdateInterval->setSuffix( i18np( " minute", " minutes", settings.m_autoUpdateInterval->value() ) ); - m_providerSettingsDialog->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply ); - m_providerSettingsDialog->setMainWidget( settingsWidget ); + auto buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply, m_providerSettingsDialog ); connect( settings.m_baseDirUrl, &KUrlRequester::textChanged, this, &SqlPodcastProvider::slotConfigChanged ); - connect( settings.m_autoUpdateInterval, QOverload::of(&KIntSpinBox::valueChanged), + connect( settings.m_autoUpdateInterval, QOverload::of(&QSpinBox::valueChanged), this, &SqlPodcastProvider::slotConfigChanged ); m_providerSettingsDialog->setWindowTitle( i18n( "Configure Local Podcasts" ) ); - m_providerSettingsDialog->enableButtonApply( false ); + buttonBox->button( QDialogButtonBox::Apply )->setEnabled( false ); if( m_providerSettingsDialog->exec() == QDialog::Accepted ) { @@ -628,21 +629,11 @@ if( !m_channels.isEmpty() ) { //TODO: check if there actually are downloaded episodes - KDialog moveAllDialog; - moveAllDialog.setCaption( i18n( "Move Podcasts" ) ); - - KVBox *vbox = new KVBox( &moveAllDialog ); - - QString question( i18n( "Do you want to move all downloaded episodes to the " - "new location?") ); - QLabel *label = new QLabel( question, vbox ); - label->setWordWrap( true ); - label->setMaximumWidth( 400 ); - - moveAllDialog.setMainWidget( vbox ); - moveAllDialog.setButtons( KDialog::Yes | KDialog::No ); + auto button = QMessageBox::question( The::mainWindow(), + i18n( "Move Podcasts" ), + i18n( "Do you want to move all downloaded episodes to the new location?") ); - if( moveAllDialog.exec() == KDialog::Yes ) + if( button == QMessageBox::Yes ) { foreach( SqlPodcastChannelPtr sqlChannel, m_channels ) { @@ -677,7 +668,8 @@ if( m_providerSettingsWidget->m_autoUpdateInterval->value() != m_autoUpdateInterval || m_providerSettingsWidget->m_baseDirUrl->url() != m_baseDownloadDir ) { - m_providerSettingsDialog->enableButtonApply( true ); + auto buttonBox = m_providerSettingsDialog->findChild(); + buttonBox->button( QDialogButtonBox::Apply )->setEnabled( true ); } } @@ -700,19 +692,23 @@ } //TODO: add checkbox as widget to filedialog to include podcast settings. - KFileDialog fileDialog( QUrl("kfiledialog:///podcast/amarok_podcasts.opml"), "*.opml", - The::mainWindow() ); - fileDialog.setMode( KFile::File ); + QFileDialog fileDialog; + fileDialog.restoreState( Amarok::config( "amarok-podcast-export-dialog" ).readEntry( "state", QByteArray() ) ); + + fileDialog.setMimeTypeFilters( QStringList( QStringLiteral( "*.opml" ) ) ); + fileDialog.setAcceptMode( QFileDialog::AcceptSave ); + fileDialog.setFileMode( QFileDialog::AnyFile ); fileDialog.setWindowTitle( i18n( "Select file for OPML export") ); - if( fileDialog.exec() != KDialog::Accepted ) + + if( fileDialog.exec() != QDialog::Accepted ) return; - QUrl filePath = fileDialog.selectedUrl(); + QString filePath = fileDialog.selectedFiles().value( 0 ); - QFile *opmlFile = new QFile( filePath.toLocalFile(), this ); + QFile *opmlFile = new QFile( filePath, this ); if( !opmlFile->open( QIODevice::WriteOnly | QIODevice::Truncate ) ) { - error() << "could not open OPML file " << filePath.url(); + error() << "could not open OPML file " << filePath; return; } OpmlWriter *opmlWriter = new OpmlWriter( rootOutlines, headerData, opmlFile ); @@ -805,7 +801,7 @@ KIO::Job *moveJob = KIO::move( episode->localUrl(), newLocation, KIO::HideProgressInfo ); //wait until job is finished. - if( KIO::NetAccess::synchronousRun( moveJob, The::mainWindow() ) ) + if( moveJob->exec() ) episode->setLocalUrl( newLocation ); } } @@ -849,22 +845,15 @@ QPair SqlPodcastProvider::confirmUnsubscribe( Podcasts::SqlPodcastChannelPtr channel ) { - KDialog unsubscribeDialog; - unsubscribeDialog.setCaption( i18n( "Unsubscribe" ) ); - - KVBox *vbox = new KVBox( &unsubscribeDialog ); + QMessageBox unsubscribeDialog; + unsubscribeDialog.setText( i18n( "Do you really want to unsubscribe from \"%1\"?", channel->title() ) ); + unsubscribeDialog.setStandardButtons( QMessageBox::Ok | QMessageBox::Cancel ); - QString question( i18n( "Do you really want to unsubscribe from \"%1\"?", channel->title() ) ); - QLabel *label = new QLabel( question, vbox ); - label->setWordWrap( true ); - label->setMaximumWidth( 400 ); - - QCheckBox *deleteMediaCheckBox = new QCheckBox( i18n( "Delete downloaded episodes" ), vbox ); - unsubscribeDialog.setMainWidget( vbox ); - unsubscribeDialog.setButtons( KDialog::Ok | KDialog::Cancel ); + QCheckBox *deleteMediaCheckBox = new QCheckBox( i18n( "Delete downloaded episodes" ), Q_NULLPTR ); + unsubscribeDialog.setCheckBox( deleteMediaCheckBox ); QPair result; - result.first = unsubscribeDialog.exec() == QDialog::Accepted; + result.first = unsubscribeDialog.exec() == QMessageBox::Ok; result.second = deleteMediaCheckBox->isChecked(); return result; } @@ -983,23 +972,22 @@ { debug() << QString( "There are still %1 podcast download jobs running!" ) .arg( m_downloadJobMap.count() ); - KProgressDialog progressDialog( The::mainWindow(), - i18n( "Waiting for Podcast Downloads to Finish" ), - i18np( "There is still a podcast download in progress", - "There are still %1 podcast downloads in progress", - m_downloadJobMap.count() ) + QProgressDialog progressDialog( i18np( "There is still a podcast download in progress", + "There are still %1 podcast downloads in progress", + m_downloadJobMap.count() ), + i18n("Cancel Download and Quit."), + 0, m_downloadJobMap.size(), The::mainWindow() ); - progressDialog.setButtonText( i18n("Cancel Download and Quit.") ); - + progressDialog.setValue( 0 ); m_completedDownloads = 0; foreach( KJob *job, m_downloadJobMap.keys() ) { connect( job, SIGNAL(percent(KJob*,ulong)), this, SLOT(slotDownloadProgress(KJob*,ulong)) ); } connect( this, &SqlPodcastProvider::totalPodcastDownloadProgress, - progressDialog.progressBar(), &QProgressBar::setValue ); + &progressDialog, &QProgressDialog::setValue ); int result = progressDialog.exec(); if( result == QDialog::Rejected ) { @@ -1014,8 +1002,8 @@ void SqlPodcastProvider::autoUpdate() { - if( Solid::Networking::status() != Solid::Networking::Connected - && Solid::Networking::status() != Solid::Networking::Unknown ) + QNetworkConfigurationManager mgr; + if( !mgr.isOnline() ) { debug() << "Solid reports we are not online, canceling podcast auto-update"; return; @@ -1243,7 +1231,7 @@ else tempName = QUrl::toPercentEncoding( sqlEpisode->uidUrl() ); - QString tempNameMd5( KMD5( tempName.toUtf8() ).hexDigest() ); + QString tempNameMd5( QCryptographicHash::hash( tempName.toUtf8(), QCryptographicHash::Md5 ).toHex() ); localUrl = localUrl.adjusted(QUrl::StripTrailingSlash); localUrl.setPath(localUrl.path() + '/' + ( tempNameMd5 + PODCAST_TMP_POSTFIX )); diff --git a/src/core-impl/podcasts/sql/SqlPodcastProviderSettingsWidget.ui b/src/core-impl/podcasts/sql/SqlPodcastProviderSettingsWidget.ui --- a/src/core-impl/podcasts/sql/SqlPodcastProviderSettingsWidget.ui +++ b/src/core-impl/podcasts/sql/SqlPodcastProviderSettingsWidget.ui @@ -37,7 +37,7 @@
- + 0 @@ -117,9 +117,9 @@ - KIntSpinBox + QSpinBox QSpinBox -
knuminput.h
+
qspinbox.h
1
diff --git a/src/core-impl/storage/sql/amarok_sqlstorage_export.h b/src/core-impl/storage/sql/amarok_sqlstorage_export.h --- a/src/core-impl/storage/sql/amarok_sqlstorage_export.h +++ b/src/core-impl/storage/sql/amarok_sqlstorage_export.h @@ -17,31 +17,31 @@ #ifndef AMAROK_SQLSTORAGE_EXPORT_H #define AMAROK_SQLSTORAGE_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_SQLSTORAGE_EXPORT # if defined(MAKE_AMAROK_SQLSTORAGE_LIB) /* We are building this library */ -# define AMAROK_SQLSTORAGE_EXPORT KDE_EXPORT +# define AMAROK_SQLSTORAGE_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_SQLSTORAGE_EXPORT KDE_IMPORT +# define AMAROK_SQLSTORAGE_EXPORT Q_DECL_IMPORT # endif #endif #ifndef AMAROK_SQLSTORAGE_MYSQLE_EXPORT # if defined(MAKE_AMAROK_STORAGE_MYSQLESTORAGE_LIB) /* We are building this library */ -# define AMAROK_SQLSTORAGE_MYSQLE_EXPORT KDE_EXPORT +# define AMAROK_SQLSTORAGE_MYSQLE_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_SQLSTORAGE_MYSQLE_EXPORT KDE_IMPORT +# define AMAROK_SQLSTORAGE_MYSQLE_EXPORT Q_DECL_IMPORT # endif #endif # ifndef AMAROK_SQLSTORAGE_EXPORT_DEPRECATED -# define AMAROK_SQLSTORAGE_EXPORT_DEPRECATED KDE_DEPRECATED AMAROK_SQLSTORAGE_EXPORT +# define AMAROK_SQLSTORAGE_EXPORT_DEPRECATED QT_DEPRECATED AMAROK_SQLSTORAGE_EXPORT # endif #endif diff --git a/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt b/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt --- a/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt +++ b/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt @@ -20,7 +20,6 @@ # amarok-sqlstorage amarokcore amaroklib - KF5::KDELibs4Support Qt5::Core Qt5::Gui ${MYSQL_EMBEDDED_LIBRARIES} diff --git a/src/core-impl/storage/sql/mysqlestorage/MySqlEmbeddedStorageFactory.cpp b/src/core-impl/storage/sql/mysqlestorage/MySqlEmbeddedStorageFactory.cpp --- a/src/core-impl/storage/sql/mysqlestorage/MySqlEmbeddedStorageFactory.cpp +++ b/src/core-impl/storage/sql/mysqlestorage/MySqlEmbeddedStorageFactory.cpp @@ -19,8 +19,6 @@ #include -#include - MySqleStorageFactory::MySqleStorageFactory() : StorageFactory() diff --git a/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt b/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt --- a/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt +++ b/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt @@ -20,7 +20,6 @@ # amarok-sqlstorage amarokcore amaroklib - KF5::KDELibs4Support Qt5::Core Qt5::Gui ${MYSQL_LIBRARIES} diff --git a/src/core-impl/support/PersistentStatisticsStore.h b/src/core-impl/support/PersistentStatisticsStore.h --- a/src/core-impl/support/PersistentStatisticsStore.h +++ b/src/core-impl/support/PersistentStatisticsStore.h @@ -34,7 +34,7 @@ * change. PersistentStatisticsStore uses some trickery not to hold reference to your * track to avoid circular reference counting. PersistentStatisticsStore can even deal * with your track being destroyed and is implemented in thread-safe way. You should - * store is as StatisticsPtr (a KSharedPtr) in your Track class. + * store is as StatisticsPtr (a AmarokSharedPointer) in your Track class. */ class AMAROK_EXPORT PersistentStatisticsStore : public Meta::Statistics, private Meta::Observer { @@ -44,7 +44,7 @@ * not be null. * * This methods takes plain pointer so that you can call it in the Track - * constructor without KSharedPtr deleting it right away. + * constructor without AmarokSharedPointer deleting it right away. */ PersistentStatisticsStore( Meta::Track *track ); virtual ~PersistentStatisticsStore(); diff --git a/src/core-impl/support/TrackLoader.h b/src/core-impl/support/TrackLoader.h --- a/src/core-impl/support/TrackLoader.h +++ b/src/core-impl/support/TrackLoader.h @@ -107,7 +107,6 @@ private Q_SLOTS: void processNextSourceUrl(); void directoryListResults( KIO::Job *job, const KIO::UDSEntryList &list ); - void listJobFinished(); void processNextResultUrl(); /** * Emits the result and auto-destroys the TrackLoader @@ -135,8 +134,6 @@ Playlists::PlaylistList m_resultPlaylists; /// the tracks found Meta::TrackList m_tracks; - /// temporary list of results of the list job, to keep right sorting - QList m_listJobResults; /// set of unresolved MetaProxy::Tracks that we wait for QSet m_unresolvedTracks; QMutex m_unresolvedTracksMutex; diff --git a/src/core-impl/support/TrackLoader.cpp b/src/core-impl/support/TrackLoader.cpp --- a/src/core-impl/support/TrackLoader.cpp +++ b/src/core-impl/support/TrackLoader.cpp @@ -74,13 +74,18 @@ } QUrl sourceUrl = m_sourceUrls.takeFirst(); + if( !sourceUrl.isValid() ) + { + error() << "Url is invalid:" << sourceUrl; + QTimer::singleShot( 0, this, &TrackLoader::processNextSourceUrl ); + return; + } if( sourceUrl.isLocalFile() && QFileInfo( sourceUrl.toLocalFile() ).isDir() ) { // KJobs delete themselves - KIO::ListJob *lister = KIO::listRecursive( sourceUrl, KIO::HideProgressInfo ); - connect( lister, &KIO::ListJob::finished, this, &TrackLoader::listJobFinished ); + KIO::ListJob *lister = KIO::listRecursive( sourceUrl ); + connect( lister, &KIO::ListJob::result, this, &TrackLoader::processNextSourceUrl ); connect( lister, &KIO::ListJob::entries, this, &TrackLoader::directoryListResults ); - // listJobFinished() calls processNextSourceUrl() in the end, don't do it here: return; } else @@ -100,21 +105,13 @@ KFileItem item( entry, dir, true, true ); QUrl url = item.url(); if( MetaFile::Track::isTrack( url ) ) - m_listJobResults << url; + { + auto insertIter = std::upper_bound( m_resultUrls.begin(), m_resultUrls.end(), url, directorySensitiveLessThan ); + m_resultUrls.insert( insertIter, url ); + } } } -void -TrackLoader::listJobFinished() -{ - qSort( m_listJobResults.begin(), m_listJobResults.end(), directorySensitiveLessThan ); - - m_resultUrls << m_listJobResults; - m_listJobResults.clear(); - - QTimer::singleShot( 0, this, &TrackLoader::processNextSourceUrl ); -} - void TrackLoader::processNextResultUrl() { diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,10 +1,3 @@ -include_directories( - ${CMAKE_SOURCE_DIR}/src - ${CMAKE_SOURCE_DIR}/shared - - -) - set(libcore_interfaces_SRCS interfaces/Logger.cpp interfaces/MetaCapability.cpp @@ -105,16 +98,24 @@ add_library(amarokcore SHARED ${libcore_LIB_SRCS}) +target_include_directories( amarokcore PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/support + ${CMAKE_CURRENT_SOURCE_DIR}/meta +) + target_link_libraries(amarokcore amarokshared ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} + Qt5::Core + Qt5::Network KF5::KIOCore - ${KDE4_SOLID_LIBRARY} + KF5::ConfigCore KF5::ThreadWeaver - ${QT_CORE_LIBRARY} - KF5::KDELibs4Support KF5::I18n + KF5::XmlGui ) if(APPLE) diff --git a/src/core/amarokcore_export.h b/src/core/amarokcore_export.h --- a/src/core/amarokcore_export.h +++ b/src/core/amarokcore_export.h @@ -19,16 +19,16 @@ #ifndef AMAROKCORE_EXPORT_H #define AMAROKCORE_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_CORE_EXPORT # ifdef MAKE_AMAROKCORE_LIB /* We are building this library */ -# define AMAROK_CORE_EXPORT KDE_EXPORT +# define AMAROK_CORE_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_CORE_EXPORT KDE_IMPORT +# define AMAROK_CORE_EXPORT Q_DECL_IMPORT # endif // MAKE_AMAROKCORE_LIB #endif // AMAROK_CORE_EXPORT diff --git a/src/core/collections/Collection.h b/src/core/collections/Collection.h --- a/src/core/collections/Collection.h +++ b/src/core/collections/Collection.h @@ -21,14 +21,13 @@ #include "core/amarokcore_export.h" #include "core/interfaces/MetaCapability.h" #include "core/support/PluginFactory.h" - -#include +#include "AmarokSharedPointer.h" #include namespace Meta { class Track; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; } namespace Playlists { class UserPlaylistProvider; diff --git a/src/core/collections/CollectionLocation.h b/src/core/collections/CollectionLocation.h --- a/src/core/collections/CollectionLocation.h +++ b/src/core/collections/CollectionLocation.h @@ -207,7 +207,7 @@ * TODO: Remove this hack * @return true if the database entry was inserted, false otherwise */ - virtual bool insert( const Meta::TrackPtr &track, const QString &url ); + virtual bool insert( const Meta::TrackPtr &track, const QString &path ); /** explicitly inform the source collection of successful transfer. diff --git a/src/core/meta/Base.h b/src/core/meta/Base.h --- a/src/core/meta/Base.h +++ b/src/core/meta/Base.h @@ -108,14 +108,14 @@ // thread-safe, because we already hold m_observersLock (which is recursive), // so other threads wait on potential unsubscribe(). if( m_observers.contains( observer ) ) - observer->metadataChanged( KSharedPtr( const_cast( self ) ) ); + observer->metadataChanged( AmarokSharedPointer( const_cast( self ) ) ); } } } Q_DECLARE_METATYPE( Meta::DataPtr ) Q_DECLARE_METATYPE( Meta::DataList ) -AMAROK_CORE_EXPORT QDebug &operator<<( QDebug dbg, const Meta::Base &base ); +AMAROK_CORE_EXPORT QDebug operator<<( QDebug dbg, const Meta::Base &base ); #endif // META_BASE_H diff --git a/src/core/meta/Base.cpp b/src/core/meta/Base.cpp --- a/src/core/meta/Base.cpp +++ b/src/core/meta/Base.cpp @@ -56,7 +56,7 @@ m_observers.remove( observer ); } -QDebug & +QDebug operator<<( QDebug dbg, const Base &base ) { dbg.nospace() << "Meta::Base(" << base.name() << " at " << &base << ")"; diff --git a/src/core/meta/Meta.cpp b/src/core/meta/Meta.cpp --- a/src/core/meta/Meta.cpp +++ b/src/core/meta/Meta.cpp @@ -27,9 +27,9 @@ #include "core/support/Debug.h" #include +#include -#include -#include +#include using namespace Meta; @@ -202,16 +202,10 @@ QString Track::networkNotPlayableReason() const { - switch( Solid::Networking::status() ) - { - case Solid::Networking::Unconnected: - case Solid::Networking::Disconnecting: - case Solid::Networking::Connecting: - return i18n( "No network connection" ); - case Solid::Networking::Unknown: - case Solid::Networking::Connected: - return QString(); - } + QNetworkConfigurationManager mgr; + if( !mgr.isOnline() ) + return i18n( "No network connection" ); + return QString(); } diff --git a/src/core/meta/Observer.h b/src/core/meta/Observer.h --- a/src/core/meta/Observer.h +++ b/src/core/meta/Observer.h @@ -54,9 +54,9 @@ * destruction. */ template - void subscribeTo( KSharedPtr entity ) { subscribeTo( entity.data() ); } + void subscribeTo( AmarokSharedPointer entity ) { subscribeTo( entity.data() ); } template - void unsubscribeFrom( KSharedPtr entity ) { unsubscribeFrom( entity.data() ); } + void unsubscribeFrom( AmarokSharedPointer entity ) { unsubscribeFrom( entity.data() ); } /** * This method is called when the metadata of a track has changed. @@ -76,7 +76,7 @@ virtual void entityDestroyed(); private: - friend class ::PersistentStatisticsStore; // so that it can call KSharedPtr-free subscribe: + friend class ::PersistentStatisticsStore; // so that it can call AmarokSharedPointer-free subscribe: void subscribeTo( Base *ptr ); void unsubscribeFrom( Base *ptr ); diff --git a/src/core/meta/Statistics.h b/src/core/meta/Statistics.h --- a/src/core/meta/Statistics.h +++ b/src/core/meta/Statistics.h @@ -19,7 +19,7 @@ #include "core/amarokcore_export.h" -#include +#include "AmarokSharedPointer.h" class QDateTime; @@ -29,7 +29,7 @@ * Interface that can be provided by tracks that can support play-related statistics: * rating, score, first/last played, play count. * - * This class is memory-managed exclusively using KSharedPtrs: always use + * This class is memory-managed exclusively using AmarokSharedPointers: always use * StatisticsPtr to store or pass pointer to this class. This class must be * implemented in a reentrant manner. Additionally, underlying Meta::Track must be * thread-safe -- if you return same instance of Statistics every time then it means @@ -124,8 +124,8 @@ virtual void endUpdate(); }; - typedef KSharedPtr StatisticsPtr; - typedef KSharedPtr ConstStatisticsPtr; + typedef AmarokSharedPointer StatisticsPtr; + typedef AmarokSharedPointer ConstStatisticsPtr; } #endif // META_STATISTICS_H diff --git a/src/core/meta/TrackEditor.h b/src/core/meta/TrackEditor.h --- a/src/core/meta/TrackEditor.h +++ b/src/core/meta/TrackEditor.h @@ -20,7 +20,7 @@ #include "core/amarokcore_export.h" -#include +#include "AmarokSharedPointer.h" namespace Meta { @@ -30,7 +30,7 @@ * If you are calling more than one setter method, you should call beginUpdate() * before calling any setter methods and endUpdate() when you're done. * - * This class is memory-managed exclusively using KSharedPtrs: always use + * This class is memory-managed exclusively using AmarokSharedPointers: always use * TrackEditorPtr to store or pass pointer to this class. This class must be * implemented in a reentrant manner. Additionally, underlying Meta::Track must * be thread-safe -- if you return same instance of TrackEditor every time then it @@ -66,7 +66,7 @@ virtual void endUpdate() = 0; }; - typedef KSharedPtr TrackEditorPtr; + typedef AmarokSharedPointer TrackEditorPtr; } #endif // META_TRACKEDITOR_H diff --git a/src/core/meta/forward_declarations.h b/src/core/meta/forward_declarations.h --- a/src/core/meta/forward_declarations.h +++ b/src/core/meta/forward_declarations.h @@ -17,50 +17,50 @@ #ifndef AMAROKCORE_META_FORWARD_DECLARATIONS_H #define AMAROKCORE_META_FORWARD_DECLARATIONS_H -#include +#include "AmarokSharedPointer.h" #include namespace Meta { class Base; - typedef KSharedPtr DataPtr; + typedef AmarokSharedPointer DataPtr; typedef QList DataList; class Track; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; typedef QList TrackList; class Artist; - typedef KSharedPtr ArtistPtr; + typedef AmarokSharedPointer ArtistPtr; typedef QList ArtistList; class Album; - typedef KSharedPtr AlbumPtr; + typedef AmarokSharedPointer AlbumPtr; typedef QList AlbumList; class Genre; - typedef KSharedPtr GenrePtr; + typedef AmarokSharedPointer GenrePtr; typedef QList GenreList; class Composer; - typedef KSharedPtr ComposerPtr; + typedef AmarokSharedPointer ComposerPtr; typedef QList ComposerList; class Year; - typedef KSharedPtr YearPtr; + typedef AmarokSharedPointer YearPtr; typedef QList YearList; class Label; - typedef KSharedPtr
kcombobox.h - klineedit.h + qlineedit.h diff --git a/src/dialogs/OrganizeCollectionOptions.ui b/src/dialogs/OrganizeCollectionOptions.ui --- a/src/dialogs/OrganizeCollectionOptions.ui +++ b/src/dialogs/OrganizeCollectionOptions.ui @@ -142,7 +142,7 @@
- + 0 @@ -183,7 +183,7 @@ - + 0 @@ -207,9 +207,9 @@ - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
diff --git a/src/dialogs/TagDialog.h b/src/dialogs/TagDialog.h --- a/src/dialogs/TagDialog.h +++ b/src/dialogs/TagDialog.h @@ -30,7 +30,7 @@ #include "core/meta/Observer.h" #include "core/collections/MetaQueryMaker.h" -#include +#include #include #include @@ -47,7 +47,7 @@ class QComboBox; -class AMAROK_EXPORT TagDialog : public KDialog, public Meta::Observer +class AMAROK_EXPORT TagDialog : public QDialog, public Meta::Observer { Q_OBJECT diff --git a/src/dialogs/TagDialog.cpp b/src/dialogs/TagDialog.cpp --- a/src/dialogs/TagDialog.cpp +++ b/src/dialogs/TagDialog.cpp @@ -43,10 +43,11 @@ #include "ui_TagDialogBase.h" // needs to be after including CoverLabel, silly #include "TagGuesserDialog.h" -#include +#include #include +#include + #include -#include namespace Meta { namespace Field { @@ -59,7 +60,7 @@ } TagDialog::TagDialog( const Meta::TrackList &tracks, QWidget *parent ) - : KDialog( parent ) + : QDialog( parent ) , m_perTrack( true ) , m_currentTrackNum( 0 ) , m_changed( false ) @@ -71,14 +72,14 @@ foreach( Meta::TrackPtr track, tracks ) addTrack( track ); - ui->setupUi( mainWidget() ); + ui->setupUi( this ); resize( minimumSizeHint() ); initUi(); setCurrentTrack( 0 ); } TagDialog::TagDialog( Meta::TrackPtr track, QWidget *parent ) - : KDialog( parent ) + : QDialog( parent ) , m_perTrack( true ) , m_currentTrackNum( 0 ) , m_changed( false ) @@ -88,25 +89,25 @@ DEBUG_BLOCK addTrack( track ); - ui->setupUi( mainWidget() ); + ui->setupUi( this ); resize( minimumSizeHint() ); initUi(); setCurrentTrack( 0 ); QTimer::singleShot( 0, this, &TagDialog::show ); } TagDialog::TagDialog( Collections::QueryMaker *qm ) - : KDialog( The::mainWindow() ) + : QDialog( The::mainWindow() ) , m_perTrack( true ) , m_currentTrackNum( 0 ) , m_changed( false ) , m_queryMaker( qm ) , ui( new Ui::TagDialogBase() ) { DEBUG_BLOCK - ui->setupUi( mainWidget() ); + ui->setupUi( this ); resize( minimumSizeHint() ); qm->setQueryType( Collections::QueryMaker::Track ); @@ -124,7 +125,7 @@ { DEBUG_BLOCK - Amarok::config( "TagDialog" ).writeEntry( "CurrentTab", ui->kTabWidget->currentIndex() ); + Amarok::config( "TagDialog" ).writeEntry( "CurrentTab", ui->qTabWidget->currentIndex() ); if( m_currentTrack && m_currentTrack->album() ) unsubscribeFrom( m_currentTrack->album() ); @@ -358,7 +359,7 @@ ui->pushButton_ok->setEnabled( false ); //visual feedback saveTags(); - KDialog::accept(); + QDialog::accept(); } @@ -419,13 +420,13 @@ ui->removeButton->setEnabled( ui->labelsList->selectionModel()->hasSelection() ); } -//creates a KDialog and executes the FilenameLayoutWidget. Grabs a filename scheme, extracts tags (via TagGuesser) from filename and fills the appropriate fields on TagDialog. +//creates a QDialog and executes the FilenameLayoutWidget. Grabs a filename scheme, extracts tags (via TagGuesser) from filename and fills the appropriate fields on TagDialog. void TagDialog::guessFromFilename() //SLOT { TagGuesserDialog dialog( m_currentTrack->playableUrl().path(), this ); - if( dialog.exec() == KDialog::Accepted ) + if( dialog.exec() == QDialog::Accepted ) { dialog.onAccept(); @@ -499,23 +500,22 @@ DEBUG_BLOCK // delete itself when closing setAttribute( Qt::WA_DeleteOnClose ); - setButtons( KDialog::None ); KConfigGroup config = Amarok::config( "TagDialog" ); - ui->kTabWidget->addTab( ui->summaryTab , i18n( "Summary" ) ); - ui->kTabWidget->addTab( ui->tagsTab , i18n( "Tags" ) ); - ui->kTabWidget->addTab( ui->lyricsTab , i18n( "Lyrics" ) ); - ui->kTabWidget->addTab( ui->labelsTab , i18n( "Labels" ) ); + ui->qTabWidget->addTab( ui->summaryTab , i18n( "Summary" ) ); + ui->qTabWidget->addTab( ui->tagsTab , i18n( "Tags" ) ); + ui->qTabWidget->addTab( ui->lyricsTab , i18n( "Lyrics" ) ); + ui->qTabWidget->addTab( ui->labelsTab , i18n( "Labels" ) ); ui->kComboBox_label->completionObject()->setIgnoreCase( true ); ui->kComboBox_label->setCompletionMode( KCompletion::CompletionPopup ); m_labelModel = new LabelListModel( QStringList(), this ); ui->labelsList->setModel( m_labelModel ); ui->labelsTab->setEnabled( true ); - ui->kTabWidget->setCurrentIndex( config.readEntry( "CurrentTab", 0 ) ); + ui->qTabWidget->setCurrentIndex( config.readEntry( "CurrentTab", 0 ) ); ui->kComboBox_artist->completionObject()->setIgnoreCase( true ); ui->kComboBox_artist->setCompletionMode( KCompletion::CompletionPopup ); @@ -545,17 +545,17 @@ // Connects for modification check // only set to overwrite-on-save if the text has changed - connect( ui->kLineEdit_title, &KLineEdit::textChanged, this, &TagDialog::checkChanged ); + connect( ui->kLineEdit_title, &QLineEdit::textChanged, this, &TagDialog::checkChanged ); connect( ui->kComboBox_composer, QOverload::of(&QComboBox::activated), this, &TagDialog::checkChanged ); - connect( ui->kComboBox_composer, &KComboBox::editTextChanged, this, &TagDialog::checkChanged ); + connect( ui->kComboBox_composer, &QComboBox::editTextChanged, this, &TagDialog::checkChanged ); connect( ui->kComboBox_artist, QOverload::of(&QComboBox::activated), this, &TagDialog::checkChanged ); - connect( ui->kComboBox_artist, &KComboBox::editTextChanged, this, &TagDialog::checkChanged ); + connect( ui->kComboBox_artist, &QComboBox::editTextChanged, this, &TagDialog::checkChanged ); connect( ui->kComboBox_album, QOverload::of(&QComboBox::activated), this, &TagDialog::checkChanged ); - connect( ui->kComboBox_album, &KComboBox::editTextChanged, this, &TagDialog::checkChanged ); + connect( ui->kComboBox_album, &QComboBox::editTextChanged, this, &TagDialog::checkChanged ); connect( ui->kComboBox_albumArtist, QOverload::of(&QComboBox::activated), this, &TagDialog::checkChanged ); - connect( ui->kComboBox_albumArtist, &KComboBox::editTextChanged, this, &TagDialog::checkChanged ); + connect( ui->kComboBox_albumArtist, &QComboBox::editTextChanged, this, &TagDialog::checkChanged ); connect( ui->kComboBox_genre, QOverload::of(&QComboBox::activated), this, &TagDialog::checkChanged ); - connect( ui->kComboBox_genre, &KComboBox::editTextChanged, this, &TagDialog::checkChanged ); + connect( ui->kComboBox_genre, &QComboBox::editTextChanged, this, &TagDialog::checkChanged ); connect( ui->kLineEdit_Bpm, &QLineEdit::textChanged, this, &TagDialog::checkChanged ); connect( ui->ratingWidget, QOverload::of(&KRatingWidget::ratingChanged), this, &TagDialog::checkChanged ); connect( ui->qSpinBox_track, QOverload::of(&QSpinBox::valueChanged), this, &TagDialog::checkChanged ); @@ -574,8 +574,8 @@ connect( ui->addButton, &QAbstractButton::clicked, this, &TagDialog::addLabelPressed ); connect( ui->removeButton, &QAbstractButton::clicked, this, &TagDialog::removeLabelPressed ); - connect( ui->kComboBox_label, QOverload::of(&QComboBox::activated), this, &TagDialog::labelModified ); - connect( ui->kComboBox_label, &KComboBox::editTextChanged, this, &TagDialog::labelModified ); + connect( ui->kComboBox_label, QOverload::of(&KComboBox::activated), this, &TagDialog::labelModified ); + connect( ui->kComboBox_label, &QComboBox::editTextChanged, this, &TagDialog::labelModified ); connect( ui->kComboBox_label, QOverload<>::of(&KComboBox::returnPressed), this, &TagDialog::addLabelPressed ); connect( ui->kComboBox_label, QOverload<>::of(&KComboBox::returnPressed), this, &TagDialog::checkChanged ); connect( ui->labelsList, &QListView::pressed, this, &TagDialog::labelSelected ); @@ -726,13 +726,13 @@ QString curTrackAlbName; QString curArtistName; - QString curTrackName = fnt.elidedText( Qt::escape( m_currentTrack->name() ), Qt::ElideRight, len ); - QString curTrackPretName = fnt.elidedText( Qt::escape( m_currentTrack->prettyName() ), Qt::ElideRight, len ); + QString curTrackName = fnt.elidedText( m_currentTrack->name().toHtmlEscaped(), Qt::ElideRight, len ); + QString curTrackPretName = fnt.elidedText( m_currentTrack->prettyName().toHtmlEscaped(), Qt::ElideRight, len ); if( m_currentTrack->album() ) - curTrackAlbName = fnt.elidedText( Qt::escape( m_currentTrack->album()->name() ), Qt::ElideRight, len ); + curTrackAlbName = fnt.elidedText( m_currentTrack->album()->name().toHtmlEscaped(), Qt::ElideRight, len ); if( m_currentTrack->artist() ) - curArtistName = fnt.elidedText( Qt::escape( m_currentTrack->artist()->name() ), Qt::ElideRight, len ); + curArtistName = fnt.elidedText( m_currentTrack->artist()->name().toHtmlEscaped(), Qt::ElideRight, len ); if( m_currentTrack->album() && m_currentTrack->album()->name().isEmpty() ) @@ -1251,15 +1251,15 @@ { bool editable = m_currentTrack ? bool( m_currentTrack->editor() ) : true; - ui->kTabWidget->setTabEnabled( ui->kTabWidget->indexOf(ui->lyricsTab), + ui->qTabWidget->setTabEnabled( ui->qTabWidget->indexOf(ui->lyricsTab), m_perTrack ); ui->kLineEdit_title->setEnabled( m_perTrack && editable ); - ui->kLineEdit_title->setClearButtonShown( m_perTrack && editable ); + ui->kLineEdit_title->setClearButtonEnabled( m_perTrack && editable ); #define enableOrDisable( X ) \ ui->X->setEnabled( editable ); \ - qobject_cast(ui->X->lineEdit())->setClearButtonShown( editable ) + qobject_cast(ui->X->lineEdit())->setClearButtonEnabled( editable ) enableOrDisable( kComboBox_artist ); enableOrDisable( kComboBox_albumArtist ); @@ -1273,7 +1273,7 @@ ui->qSpinBox_discNumber->setEnabled( editable ); ui->qSpinBox_year->setEnabled( editable ); ui->kLineEdit_Bpm->setEnabled( editable ); - ui->kLineEdit_Bpm->setClearButtonShown( editable ); + ui->kLineEdit_Bpm->setClearButtonEnabled( editable ); ui->qPlainTextEdit_comment->setEnabled( editable ); ui->pushButton_guessTags->setEnabled( m_perTrack && editable ); @@ -1412,5 +1412,3 @@ else setTagsToUi( getTagsFromMultipleTracks() ); } - -#include "moc_TagDialog.cpp" diff --git a/src/dialogs/TagDialogBase.ui b/src/dialogs/TagDialogBase.ui --- a/src/dialogs/TagDialogBase.ui +++ b/src/dialogs/TagDialogBase.ui @@ -26,7 +26,7 @@ - + 1 @@ -526,7 +526,7 @@ - + 0 @@ -823,7 +823,7 @@ - + true @@ -1058,7 +1058,7 @@ - + Qt::StrongFocus @@ -1175,19 +1175,19 @@
kcombobox.h
- KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
KTextEdit QTextEdit
ktextedit.h
- KTabWidget + QTabWidget QTabWidget -
ktabwidget.h
+
qtabwidget.h
1
@@ -1207,7 +1207,7 @@ - kTabWidget + qTabWidget qSpinBox_score kLineEdit_title kComboBox_artist @@ -1236,22 +1236,22 @@ pushButton_cancel - klineedit.h - ktabwidget.h + qlineedit.h + qtabwidget.h covermanager/CoverFetcher.h kcombobox.h - klineedit.h - klineedit.h - knuminput.h - knuminput.h + qlineedit.h + qlineedit.h + qspinbox.h + qspinbox.h kcombobox.h - klineedit.h - knuminput.h + qlineedit.h + qspinbox.h kcombobox.h - klineedit.h + qlineedit.h kcombobox.h - klineedit.h - knuminput.h + qlineedit.h + qspinbox.h kcombobox.h diff --git a/src/dialogs/TagGuessOptions.ui b/src/dialogs/TagGuessOptions.ui --- a/src/dialogs/TagGuessOptions.ui +++ b/src/dialogs/TagGuessOptions.ui @@ -12,7 +12,7 @@ - + Options @@ -342,9 +342,9 @@ - KButtonGroup + QGroupBox QGroupBox -
kbuttongroup.h
+
qgroupbox.h
1
diff --git a/src/dialogs/TagGuesserDialog.cpp b/src/dialogs/TagGuesserDialog.cpp --- a/src/dialogs/TagGuesserDialog.cpp +++ b/src/dialogs/TagGuesserDialog.cpp @@ -224,7 +224,7 @@ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); QWidget* mainWidget = new QWidget( this ); - QBoxLayout* mainLayout = new QVBoxLayout( mainWidget ); + QBoxLayout* mainLayout = new QVBoxLayout; setLayout(mainLayout); QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); okButton->setDefault(true); diff --git a/src/dialogs/TrackOrganizer.cpp b/src/dialogs/TrackOrganizer.cpp --- a/src/dialogs/TrackOrganizer.cpp +++ b/src/dialogs/TrackOrganizer.cpp @@ -25,7 +25,7 @@ #include "core/meta/Statistics.h" #include "core/support/Amarok.h" -#include +#include TrackOrganizer::TrackOrganizer( const Meta::TrackList &tracks, QObject* parent ) : QObject( parent ) diff --git a/src/dialogs/deletedialog.h b/src/dialogs/deletedialog.h --- a/src/dialogs/deletedialog.h +++ b/src/dialogs/deletedialog.h @@ -20,7 +20,7 @@ #include "ui_deletedialogbase.h" -#include +#include #include #include @@ -51,7 +51,7 @@ virtual void slotShouldDelete(bool shouldDelete); }; -class DeleteDialog : public KDialog +class DeleteDialog : public QDialog { Q_OBJECT diff --git a/src/dialogs/deletedialog.cpp b/src/dialogs/deletedialog.cpp --- a/src/dialogs/deletedialog.cpp +++ b/src/dialogs/deletedialog.cpp @@ -25,11 +25,11 @@ #include "statusbar/StatusBar.h" #include -#include -#include +#include + #include #include -#include +#include #include #include @@ -83,7 +83,7 @@ ////////////////////////////////////////////////////////////////////////////// DeleteDialog::DeleteDialog( QWidget *parent, const char *name ) - : KDialog( parent ), + : QDialog( parent ), m_trashGuiItem(i18n("&Send to Trash"), "user-trash-full") { //Swallow, Qt::WStyle_DialogBorder, parent, name, @@ -130,7 +130,7 @@ messageGroup.writeEntry("deleteInsteadOfTrash", shouldDelete()); messageGroup.sync(); - KDialog::accept(); + QDialog::accept(); } void DeleteDialog::slotShouldDelete(bool shouldDelete) @@ -148,7 +148,7 @@ KIO::Job* job = 0; bool shouldDelete = dialog.shouldDelete(); if ( ( shouldDelete && (job = KIO::del( files )) ) || - ( job = App::instance()->trashFiles( files ) ) ) + ( job = pApp->trashFiles( files ) ) ) { if(shouldDelete) //amarok::trashFiles already does the progress operation The::statusBar()->newProgressOperation( job, i18n("Deleting files") ); diff --git a/src/dialogs/deviceconfiguredialog.h b/src/dialogs/deviceconfiguredialog.h --- a/src/dialogs/deviceconfiguredialog.h +++ b/src/dialogs/deviceconfiguredialog.h @@ -18,7 +18,7 @@ #ifndef DEVICECONFIGUREDIALOG_H #define DEVICECONFIGUREDIALOG_H -#include +#include class HintLineEdit; class MediaDevice; diff --git a/src/dialogs/deviceconfiguredialog.cpp b/src/dialogs/deviceconfiguredialog.cpp --- a/src/dialogs/deviceconfiguredialog.cpp +++ b/src/dialogs/deviceconfiguredialog.cpp @@ -25,8 +25,8 @@ #include "core/support/PluginManager.h" #include "scripting/scriptmanager/ScriptManager.h" -#include -#include +#include +#include #include #include @@ -62,7 +62,7 @@ setWindowTitle( i18n( "Configure Media Device" ) ); buttonBox->button(QDialogButtonBox::Apply)->setVisible(false); - KVBox* vbox = new KVBox( this ); + QVBoxLayout* vbox = new QVBoxLayout( this ); mainLayout->addWidget(vbox); vbox->setSpacing( QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing) ); //TODO KF5:PM_DefaultLayoutSpacing is obsolete. Look in QStyle docs for correctly replacing it. diff --git a/src/dynamic/Bias.cpp b/src/dynamic/Bias.cpp --- a/src/dynamic/Bias.cpp +++ b/src/dynamic/Bias.cpp @@ -27,7 +27,7 @@ #include "dynamic/DynamicModel.h" #include "dynamic/biases/SearchQueryBias.h" -#include +#include #include #include diff --git a/src/dynamic/BiasFactory.cpp b/src/dynamic/BiasFactory.cpp --- a/src/dynamic/BiasFactory.cpp +++ b/src/dynamic/BiasFactory.cpp @@ -118,7 +118,7 @@ s_biasFactories.append( new Dynamic::QuizPlayBiasFactory() ); s_biasFactories.append( new Dynamic::EchoNestBiasFactory() ); - s_instance = new BiasFactory( App::instance() ); + s_instance = new BiasFactory( pApp ); } return s_instance; } diff --git a/src/dynamic/DynamicModel.cpp b/src/dynamic/DynamicModel.cpp --- a/src/dynamic/DynamicModel.cpp +++ b/src/dynamic/DynamicModel.cpp @@ -45,8 +45,6 @@ #include #include -#include - /* general note: For the sake of this file we are handling a modified active playlist as a different one. @@ -59,7 +57,7 @@ { if( !s_instance ) { - s_instance = new DynamicModel( App::instance() ); + s_instance = new DynamicModel( pApp ); s_instance->loadPlaylists(); } return s_instance; diff --git a/src/dynamic/biases/AlbumPlayBias.cpp b/src/dynamic/biases/AlbumPlayBias.cpp --- a/src/dynamic/biases/AlbumPlayBias.cpp +++ b/src/dynamic/biases/AlbumPlayBias.cpp @@ -24,7 +24,7 @@ #include "core/support/Debug.h" #include "dynamic/TrackSet.h" -#include +#include #include #include diff --git a/src/dynamic/biases/EchoNestBias.cpp b/src/dynamic/biases/EchoNestBias.cpp --- a/src/dynamic/biases/EchoNestBias.cpp +++ b/src/dynamic/biases/EchoNestBias.cpp @@ -24,17 +24,18 @@ #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" -#include #include -#include +#include #include #include #include #include #include #include +#include #include +#include #include #include #include @@ -137,7 +138,7 @@ QVBoxLayout *layout = new QVBoxLayout( widget ); QLabel *imageLabel = new QLabel(); - imageLabel->setPixmap( QPixmap( KStandardDirs::locate( "data", "amarok/images/echonest.png" ) ) ); + imageLabel->setPixmap( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/echonest.png" ) ) ); QLabel *label = new QLabel( i18n( "the echonest thinks the artist is similar to" ) ); QRadioButton *rb1 = new QRadioButton( i18n( "the previous track's artist" ) ); @@ -270,7 +271,7 @@ this, &EchoNestBias::updateFinished ); // - run the query - m_qm.data()->run(); + m_qm->run(); } void @@ -380,6 +381,7 @@ params.insert( "format", "xml" ); QUrl url; + QUrlQuery query; url.setScheme( "http" ); url.setHost( "developer.echonest.com" ); url.setPath( "/api/v4/" + method ); @@ -391,8 +393,9 @@ i.next(); QByteArray const key = QUrl::toPercentEncoding( i.key() ); QByteArray const value = QUrl::toPercentEncoding( i.value() ); - url.addEncodedQueryItem( key, value ); + query.addQueryItem( key, value ); } + url.setQuery( query ); return url; } diff --git a/src/dynamic/biases/IfElseBias.cpp b/src/dynamic/biases/IfElseBias.cpp --- a/src/dynamic/biases/IfElseBias.cpp +++ b/src/dynamic/biases/IfElseBias.cpp @@ -28,7 +28,7 @@ #include #include -#include +#include QString Dynamic::IfElseBiasFactory::i18nName() const diff --git a/src/dynamic/biases/PartBias.cpp b/src/dynamic/biases/PartBias.cpp --- a/src/dynamic/biases/PartBias.cpp +++ b/src/dynamic/biases/PartBias.cpp @@ -24,7 +24,7 @@ #include "core/support/Debug.h" #include "widgets/SliderWidget.h" -#include +#include #include #include // for qRound diff --git a/src/dynamic/biases/QuizPlayBias.cpp b/src/dynamic/biases/QuizPlayBias.cpp --- a/src/dynamic/biases/QuizPlayBias.cpp +++ b/src/dynamic/biases/QuizPlayBias.cpp @@ -35,7 +35,7 @@ #include #include -#include +#include QString Dynamic::QuizPlayBiasFactory::i18nName() const diff --git a/src/dynamic/biases/SearchQueryBias.cpp b/src/dynamic/biases/SearchQueryBias.cpp --- a/src/dynamic/biases/SearchQueryBias.cpp +++ b/src/dynamic/biases/SearchQueryBias.cpp @@ -27,7 +27,7 @@ #include "core-impl/collections/support/TextualQueryFilter.h" #include "dynamic/TrackSet.h" -#include +#include #include #include @@ -124,10 +124,10 @@ QWidget *widget = new QWidget( parent ); QVBoxLayout *layout = new QVBoxLayout( widget ); - KLineEdit *edit = new KLineEdit( m_filter ); + QLineEdit *edit = new QLineEdit( m_filter ); layout->addWidget( edit ); - connect( edit, &KLineEdit::textChanged, + connect( edit, &QLineEdit::textChanged, this, &SearchQueryBias::setFilter ); return widget; diff --git a/src/equalizer/EqualizerPresets.cpp b/src/equalizer/EqualizerPresets.cpp --- a/src/equalizer/EqualizerPresets.cpp +++ b/src/equalizer/EqualizerPresets.cpp @@ -20,7 +20,7 @@ #include "amarokconfig.h" #include "core/support/Debug.h" -#include +#include #define NUM_EQ_VALUES 11 diff --git a/src/fht.h b/src/fht.h deleted file mode 100644 --- a/src/fht.h +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************************** - * Copyright (c) 2004 Melchior FRANZ * - * * - * This program is free software; you can redistribute it and/or modify it under * - * the terms of the GNU General Public License as published by the Free Software * - * Foundation; either version 2 of the License, or (at your option) any later * - * version. * - * * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * - * PARTICULAR PURPOSE. See the GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along with * - * this program. If not, see . * - ****************************************************************************************/ - -#ifndef FHT_H -#define FHT_H - -/** - * Implementation of the Hartley Transform after Bracewell's discrete - * algorithm. The algorithm is subject to US patent No. 4,646,256 (1987) - * but was put into public domain by the Board of Trustees of Stanford - * University in 1994 and is now freely available[1]. - * - * [1] Computer in Physics, Vol. 9, No. 4, Jul/Aug 1995 pp 373-379 - */ -class FHT -{ - int m_exp2; - int m_num; - float *m_buf; - float *m_tab; - int *m_log; - - /** - * Create a table of "cas" (cosine and sine) values. - * Has only to be done in the constructor and saves from - * calculating the same values over and over while transforming. - */ - void makeCasTable(); - - /** - * Recursive in-place Hartley transform. For internal use only! - */ - void _transform(float *, int, int); - - public: - /** - * Prepare transform for data sets with @f$2^n@f$ numbers, whereby @f$n@f$ - * should be at least 3. Values of more than 3 need a trigonometry table. - * @see makeCasTable() - */ - FHT(int); - - ~FHT(); - inline int sizeExp() const { return m_exp2; } - inline int size() const { return m_num; } - float *copy(float *, float *); - float *clear(float *); - void scale(float *, float); - - /** - * Exponentially Weighted Moving Average (EWMA) filter. - * @param d is the filtered data. - * @param s is fresh input. - * @param w is the weighting factor. - */ - void ewma(float *d, float *s, float w); - - /** - * Logarithmic audio spectrum. Maps semi-logarithmic spectrum - * to logarithmic frequency scale, interpolates missing values. - * A logarithmic index map is calculated at the first run only. - * @param p is the input array. - * @param out is the spectrum. - */ - void logSpectrum(float *out, float *p); - - /** - * Semi-logarithmic audio spectrum. - */ - void semiLogSpectrum(float *); - - /** - * Fourier spectrum. - */ - void spectrum(float *); - - /** - * Calculates a mathematically correct FFT power spectrum. - * If further scaling is applied later, use power2 instead - * and factor the 0.5 in the final scaling factor. - * @see FHT::power2() - */ - void power(float *); - - /** - * Calculates an FFT power spectrum with doubled values as a - * result. The values need to be multiplied by 0.5 to be exact. - * Note that you only get @f$2^{n-1}@f$ power values for a data set - * of @f$2^n@f$ input values. This is the fastest transform. - * @see FHT::power() - */ - void power2(float *); - - /** - * Discrete Hartley transform of data sets with 8 values. - */ - void transform8(float *); - - void transform(float *); -}; - -#endif diff --git a/src/fht.cpp b/src/fht.cpp deleted file mode 100644 --- a/src/fht.cpp +++ /dev/null @@ -1,238 +0,0 @@ -/**************************************************************************************** - * Copyright (c) 2004 Melchior FRANZ * - * * - * This program is free software; you can redistribute it and/or modify it under * - * the terms of the GNU General Public License as published by the Free Software * - * Foundation; either version 2 of the License, or (at your option) any later * - * version. * - * * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * - * PARTICULAR PURPOSE. See the GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along with * - * this program. If not, see . * - ****************************************************************************************/ - -#include "fht.h" - -#include -#include - -FHT::FHT(int n) : - m_buf(0), - m_tab(0), - m_log(0) -{ - if (n < 3) { - m_num = 0; - m_exp2 = -1; - return; - } - m_exp2 = n; - m_num = 1 << n; - if (n > 3) { - m_buf = new float[m_num]; - m_tab = new float[m_num * 2]; - makeCasTable(); - } -} - - -FHT::~FHT() -{ - delete[] m_buf; - delete[] m_tab; - delete[] m_log; -} - - -void FHT::makeCasTable(void) -{ - float d, *costab, *sintab; - int ul, ndiv2 = m_num / 2; - - for (costab = m_tab, sintab = m_tab + m_num / 2 + 1, ul = 0; ul < m_num; ul++) { - d = M_PI * ul / ndiv2; - *costab = *sintab = cos(d); - - costab += 2, sintab += 2; - if (sintab > m_tab + m_num * 2) - sintab = m_tab + 1; - } -} - - -float* FHT::copy(float *d, float *s) -{ - return (float *)memcpy(d, s, m_num * sizeof(float)); -} - - -float* FHT::clear(float *d) -{ - return (float *)memset(d, 0, m_num * sizeof(float)); -} - - -void FHT::scale(float *p, float d) -{ - for (int i = 0; i < (m_num / 2); i++) - *p++ *= d; -} - - -void FHT::ewma(float *d, float *s, float w) -{ - for (int i = 0; i < (m_num / 2); i++, d++, s++) - *d = *d * w + *s * (1 - w); -} - - -void FHT::logSpectrum(float *out, float *p) -{ - int n = m_num / 2, i, j, k, *r; - if (!m_log) { - m_log = new int[n]; - float f = n / log10((double)n); - for (i = 0, r = m_log; i < n; i++, r++) { - j = int(rint(log10(i + 1.0) * f)); - *r = j >= n ? n - 1 : j; - } - } - semiLogSpectrum(p); - *out++ = *p = *p / 100; - for (k = i = 1, r = m_log; i < n; ++i) { - j = *r++; - if (i == j) - *out++ = p[i]; - else { - float base = p[k - 1]; - float step = (p[j] - base) / (j - (k - 1)); - for (float corr = 0; k <= j; k++, corr += step) - *out++ = base + corr; - } - } -} - - -void FHT::semiLogSpectrum(float *p) -{ - float e; - power2(p); - for (int i = 0; i < (m_num / 2); i++, p++) { - e = 10.0 * log10(sqrt(*p * .5)); - *p = e < 0 ? 0 : e; - } -} - - -void FHT::spectrum(float *p) -{ - power2(p); - for (int i = 0; i < (m_num / 2); i++, p++) - *p = (float)sqrt(*p * .5); -} - - -void FHT::power(float *p) -{ - power2(p); - for (int i = 0; i < (m_num / 2); i++) - *p++ *= .5; -} - - -void FHT::power2(float *p) -{ - int i; - float *q; - _transform(p, m_num, 0); - - *p = (*p * *p), *p += *p, p++; - - for (i = 1, q = p + m_num - 2; i < (m_num / 2); i++, --q) - *p = (*p * *p) + (*q * *q), p++; -} - - -void FHT::transform(float *p) -{ - if (m_num == 8) - transform8(p); - else - _transform(p, m_num, 0); -} - - -void FHT::transform8(float *p) -{ - float a, b, c, d, e, f, g, h, b_f2, d_h2; - float a_c_eg, a_ce_g, ac_e_g, aceg, b_df_h, bdfh; - - a = *p++, b = *p++, c = *p++, d = *p++; - e = *p++, f = *p++, g = *p++, h = *p; - b_f2 = (b - f) * M_SQRT2; - d_h2 = (d - h) * M_SQRT2; - - a_c_eg = a - c - e + g; - a_ce_g = a - c + e - g; - ac_e_g = a + c - e - g; - aceg = a + c + e + g; - - b_df_h = b - d + f - h; - bdfh = b + d + f + h; - - *p = a_c_eg - d_h2; - *--p = a_ce_g - b_df_h; - *--p = ac_e_g - b_f2; - *--p = aceg - bdfh; - *--p = a_c_eg + d_h2; - *--p = a_ce_g + b_df_h; - *--p = ac_e_g + b_f2; - *--p = aceg + bdfh; -} - - -void FHT::_transform(float *p, int n, int k) -{ - if (n == 8) { - transform8(p + k); - return; - } - - int i, j, ndiv2 = n / 2; - float a, *t1, *t2, *t3, *t4, *ptab, *pp; - - for (i = 0, t1 = m_buf, t2 = m_buf + ndiv2, pp = &p[k]; i < ndiv2; i++) - *t1++ = *pp++, *t2++ = *pp++; - - memcpy(p + k, m_buf, sizeof(float) * n); - - _transform(p, ndiv2, k); - _transform(p, ndiv2, k + ndiv2); - - j = m_num / ndiv2 - 1; - t1 = m_buf; - t2 = t1 + ndiv2; - t3 = p + k + ndiv2; - ptab = m_tab; - pp = p + k; - - a = *ptab++ * *t3++; - a += *ptab * *pp; - ptab += j; - - *t1++ = *pp + a; - *t2++ = *pp++ - a; - - for (i = 1, t4 = p + k + n; i < ndiv2; i++, ptab += j) { - a = *ptab++ * *t3++; - a += *ptab * *--t4; - - *t1++ = *pp + a; - *t2++ = *pp++ - a; - } - memcpy(p + k, m_buf, sizeof(float) * n); -} - diff --git a/src/mac/GrowlInterface.cpp b/src/mac/GrowlInterface.cpp --- a/src/mac/GrowlInterface.cpp +++ b/src/mac/GrowlInterface.cpp @@ -63,13 +63,13 @@ if( text.isEmpty() ) //still text = i18n("No information available for this track"); - if( App::instance()->trayIcon() ) + if( pApp->trayIcon() ) { if( track && track->album() ) { - App::instance()->trayIcon()->setIconByPixmap( The::svgHandler()->imageWithBorder( track->album(), 100, 5 ) ); + pApp->trayIcon()->setIconByPixmap( The::svgHandler()->imageWithBorder( track->album(), 100, 5 ) ); } - App::instance()->trayIcon()->showMessage( "Amarok", text, QString() ); + pApp->trayIcon()->showMessage( "Amarok", text, QString() ); } } diff --git a/src/main.cpp b/src/main.cpp --- a/src/main.cpp +++ b/src/main.cpp @@ -20,21 +20,18 @@ #include "aboutdialog/OcsData.h" #include -#include -#include #include #include -#include +#include +#include #ifdef Q_WS_X11 #include #endif #include -#include -//#define AMAROK_USE_DRKONQI #ifdef Q_OS_WIN AMAROK_EXPORT OcsData ocsData; #endif diff --git a/src/musicbrainz/MusicBrainzFinder.cpp b/src/musicbrainz/MusicBrainzFinder.cpp --- a/src/musicbrainz/MusicBrainzFinder.cpp +++ b/src/musicbrainz/MusicBrainzFinder.cpp @@ -32,6 +32,7 @@ #include #include #include +#include /* * Levenshtein distance algorithm implementation carefully pirated from Wikibooks @@ -576,7 +577,7 @@ QNetworkRequest MusicBrainzFinder::compileTrackRequest( const Meta::TrackPtr &track ) { - QString query; + QString queryString; QVariantMap metadata = guessMetadata( track ); // These characters are not considered in the query, and some of them can break it. @@ -599,39 +600,45 @@ */ #define VALUE( k ) metadata.value( k ).toString().remove( unsafe ).replace( special, escape ).replace( endOfWord, fuzzy ) if( metadata.contains( Meta::Field::TITLE ) ) - query += QString( "(\"%1\"^20 %1)" ).arg( VALUE( Meta::Field::TITLE ) ); + queryString += QString( "(\"%1\"^20 %1)" ).arg( VALUE( Meta::Field::TITLE ) ); if( metadata.contains( Meta::Field::ARTIST ) ) - query += QString( " AND artist:(\"%1\"^2 %1)" ).arg( VALUE( Meta::Field::ARTIST ) ); + queryString += QString( " AND artist:(\"%1\"^2 %1)" ).arg( VALUE( Meta::Field::ARTIST ) ); if( metadata.contains( Meta::Field::ALBUM ) ) - query += QString( " AND release:(\"%1\"^7 %1)" ).arg( VALUE( Meta::Field::ALBUM ) ); + queryString += QString( " AND release:(\"%1\"^7 %1)" ).arg( VALUE( Meta::Field::ALBUM ) ); #undef VALUE m_parsedMetadata.insert( track, metadata ); QUrl url; + QUrlQuery query; url.setPath( mb_pathPrefix + "/recording" ); - url.addQueryItem( "limit", "10" ); - url.addQueryItem( "query", query ); + query.addQueryItem( "limit", "10" ); + query.addQueryItem( "query", queryString ); + url.setQuery( query ); return compileRequest( url ); } QNetworkRequest MusicBrainzFinder::compilePUIDRequest( const QString &puid ) { QUrl url; + QUrlQuery query; url.setPath( mb_pathPrefix + "/recording" ); - url.addQueryItem( "query", "puid:" + puid ); + query.addQueryItem( "query", "puid:" + puid ); + url.setQuery( query ); return compileRequest( url ); } QNetworkRequest MusicBrainzFinder::compileReleaseGroupRequest( const QString &releaseGroupID ) { QUrl url; + QUrlQuery query; url.setPath( mb_pathPrefix + "/release-group/" + releaseGroupID ); - url.addQueryItem( "inc", "artists" ); + query.addQueryItem( "inc", "artists" ); + url.setQuery( query ); return compileRequest( url ); } diff --git a/src/musicbrainz/MusicBrainzTagsItem.cpp b/src/musicbrainz/MusicBrainzTagsItem.cpp --- a/src/musicbrainz/MusicBrainzTagsItem.cpp +++ b/src/musicbrainz/MusicBrainzTagsItem.cpp @@ -20,8 +20,9 @@ #include "MusicBrainzTagsItem.h" #include "AmarokMimeData.h" -#include "core/support/Debug.h" #include "MusicBrainzMeta.h" +#include "core/support/Debug.h" +#include "core/collections/QueryMaker.h" MusicBrainzTagsItem::MusicBrainzTagsItem( MusicBrainzTagsItem *parent, const Meta::TrackPtr track, diff --git a/src/musicbrainz/MusicBrainzTagsModel.cpp b/src/musicbrainz/MusicBrainzTagsModel.cpp --- a/src/musicbrainz/MusicBrainzTagsModel.cpp +++ b/src/musicbrainz/MusicBrainzTagsModel.cpp @@ -20,10 +20,10 @@ #include "MusicBrainzTagsModel.h" #include "AmarokMimeData.h" -#include "core/support/Debug.h" #include "MusicBrainzMeta.h" #include "MusicBrainzTagsItem.h" - +#include "core/support/Debug.h" +#include "support/MetaConstants.h" #include #include diff --git a/src/musicbrainz/MusicBrainzTagsView.cpp b/src/musicbrainz/MusicBrainzTagsView.cpp --- a/src/musicbrainz/MusicBrainzTagsView.cpp +++ b/src/musicbrainz/MusicBrainzTagsView.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include @@ -35,9 +35,9 @@ MusicBrainzTagsView::MusicBrainzTagsView( QWidget *parent ) : QTreeView( parent ) { - m_artistIcon = QIcon::fromTheme( KStandardDirs::locate( "data", "amarok/images/mb_aicon.png" ) ); - m_releaseIcon = QIcon::fromTheme( KStandardDirs::locate( "data", "amarok/images/mb_licon.png" ) ); - m_trackIcon = QIcon::fromTheme( KStandardDirs::locate( "data", "amarok/images/mb_ticon.png" ) ); + m_artistIcon = QIcon::fromTheme( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/mb_aicon.png" ) ); + m_releaseIcon = QIcon::fromTheme( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/mb_licon.png" ) ); + m_trackIcon = QIcon::fromTheme( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/mb_ticon.png" ) ); } MusicBrainzTagsModel * diff --git a/src/musicbrainz/MusicDNSFinder.cpp b/src/musicbrainz/MusicDNSFinder.cpp --- a/src/musicbrainz/MusicDNSFinder.cpp +++ b/src/musicbrainz/MusicDNSFinder.cpp @@ -24,6 +24,7 @@ #include #include +#include MusicDNSFinder::MusicDNSFinder( QObject *parent, const QString &host, const int port, const QString &pathPrefix, @@ -189,25 +190,27 @@ MusicDNSFinder::compileRequest( const QString &fingerprint, const Meta::TrackPtr track ) { QUrl url; + QUrlQuery query; url.setScheme( "http" ); url.setHost( mdns_host ); url.setPort( mdns_port ); url.setPath( mdns_pathPrefix+"/track/" ); - url.addQueryItem( "gnr", "" ); - url.addQueryItem( "art", track->artist().isNull()?"":track->artist()->name() ); - url.addQueryItem( "rmd", "0" ); - url.addQueryItem( "cid", mdns_clientId ); - url.addQueryItem( "alb", track->album().isNull()?"":track->album()->name() ); - url.addQueryItem( "fmt", "" ); - url.addQueryItem( "brt", QString::number( track->bitrate() ) ); - url.addQueryItem( "cvr", mdns_clientVersion ); - url.addQueryItem( "fpt", fingerprint ); - url.addQueryItem( "ttl", track->name().isNull()?track->playableUrl().fileName().remove( + query.addQueryItem( "gnr", "" ); + query.addQueryItem( "art", track->artist().isNull()?"":track->artist()->name() ); + query.addQueryItem( "rmd", "0" ); + query.addQueryItem( "cid", mdns_clientId ); + query.addQueryItem( "alb", track->album().isNull()?"":track->album()->name() ); + query.addQueryItem( "fmt", "" ); + query.addQueryItem( "brt", QString::number( track->bitrate() ) ); + query.addQueryItem( "cvr", mdns_clientVersion ); + query.addQueryItem( "fpt", fingerprint ); + query.addQueryItem( "ttl", track->name().isNull()?track->playableUrl().fileName().remove( QRegExp( "^.*(\\.+(?:\\w{2,5}))$" ) ):track->name() ); - url.addQueryItem( "tnm", "" ); - url.addQueryItem( "lkt", "" ); - url.addQueryItem( "dur", QString::number( track->length() ) ); - url.addQueryItem( "yrr", "" ); + query.addQueryItem( "tnm", "" ); + query.addQueryItem( "lkt", "" ); + query.addQueryItem( "dur", QString::number( track->length() ) ); + query.addQueryItem( "yrr", "" ); + url.setQuery( query ); QNetworkRequest req( url ); req.setRawHeader( "User-Agent" , "Amarok" ); diff --git a/src/network/NetworkAccessManagerProxy.cpp b/src/network/NetworkAccessManagerProxy.cpp --- a/src/network/NetworkAccessManagerProxy.cpp +++ b/src/network/NetworkAccessManagerProxy.cpp @@ -30,7 +30,7 @@ #include #include -#include +#include NetworkAccessManagerProxy *NetworkAccessManagerProxy::s_instance = 0; @@ -87,7 +87,7 @@ if( cb->receiver ) { bool success( false ); - const QMetaObject *mo = cb->receiver.data()->metaObject(); + const QMetaObject *mo = cb->receiver->metaObject(); int methodIndex = mo->indexOfSlot( sig ); if( methodIndex != -1 ) { @@ -136,11 +136,11 @@ ~CallBackData() { if( reply ) - reply.data()->deleteLater(); + reply->deleteLater(); } - QWeakPointer receiver; - QWeakPointer reply; + QPointer receiver; + QPointer reply; const char *method; Qt::ConnectionType type; }; @@ -312,7 +312,6 @@ d->_replyFinished(); } - namespace The { NetworkAccessManagerProxy *networkAccessManager() diff --git a/src/playback/EqualizerController.h b/src/playback/EqualizerController.h --- a/src/playback/EqualizerController.h +++ b/src/playback/EqualizerController.h @@ -24,7 +24,7 @@ #include "amarok_export.h" -#include +#include #include #include @@ -115,7 +115,7 @@ void presetsChanged( QString name ); private: - QWeakPointer m_equalizer; + QPointer m_equalizer; Phonon::Path m_path; }; diff --git a/src/playback/EqualizerController.cpp b/src/playback/EqualizerController.cpp --- a/src/playback/EqualizerController.cpp +++ b/src/playback/EqualizerController.cpp @@ -101,7 +101,7 @@ { if( !m_equalizer ) return 100; - QList equalizerParameters = m_equalizer.data()->parameters(); + QList equalizerParameters = m_equalizer->parameters(); if( equalizerParameters.isEmpty() ) return 100.0; double mScale; @@ -121,7 +121,7 @@ QStringList bandFrequencies; if( !m_equalizer ) return bandFrequencies; - QList equalizerParameters = m_equalizer.data()->parameters(); + QList equalizerParameters = m_equalizer->parameters(); if( equalizerParameters.isEmpty() ) return bandFrequencies; QRegExp rx( "\\d+(?=Hz)" ); @@ -158,7 +158,7 @@ else { // Set equalizer parameter according to the gains from settings - QList equalizerParameters = m_equalizer.data()->parameters(); + QList equalizerParameters = m_equalizer->parameters(); equalizerParametersCfg = AmarokConfig::equalizerGains(); QListIterator equalizerParametersIt( equalizerParametersCfg ); @@ -176,7 +176,7 @@ scaledVal *= qAbs(mParam.maximumValue().toDouble() ) + qAbs( mParam.minimumValue().toDouble() ); scaledVal /= 200.0; - m_equalizer.data()->setParameterValue( mParam, scaledVal ); + m_equalizer->setParameterValue( mParam, scaledVal ); } // Insert effect into path if needed if( m_path.effects().indexOf( m_equalizer.data() ) == -1 ) diff --git a/src/playback/Fadeouter.h b/src/playback/Fadeouter.h --- a/src/playback/Fadeouter.h +++ b/src/playback/Fadeouter.h @@ -20,7 +20,7 @@ #include #include -#include +#include namespace Phonon { class MediaObject; @@ -40,8 +40,8 @@ Q_OBJECT public: - Fadeouter( const QWeakPointer &media, - const QWeakPointer &fader, + Fadeouter( const QPointer &media, + const QPointer &fader, int fadeOutLength ); /** @@ -64,7 +64,7 @@ void slotFinalizeFadeout(); private: - QWeakPointer m_fader; + QPointer m_fader; }; #endif // FADEOUTER_H diff --git a/src/playback/Fadeouter.cpp b/src/playback/Fadeouter.cpp --- a/src/playback/Fadeouter.cpp +++ b/src/playback/Fadeouter.cpp @@ -23,17 +23,17 @@ static const int safetyDelay = 300; // in ms -Fadeouter::Fadeouter( const QWeakPointer &media, - const QWeakPointer &fader, +Fadeouter::Fadeouter( const QPointer &media, + const QPointer &fader, int fadeOutLength ) : QObject( fader.data() ) , m_fader( fader ) { Q_ASSERT( media ); Q_ASSERT( fader ); Q_ASSERT( fadeOutLength > 0 ); - m_fader.data()->fadeOut( fadeOutLength ); + m_fader->fadeOut( fadeOutLength ); // add a bit of a second so that the effect is not cut even if there are some delays QTimer::singleShot( fadeOutLength + safetyDelay, this, &Fadeouter::slotFinalizeFadeout ); @@ -50,7 +50,7 @@ if( m_fader ) // warning: phonon-gstreamer bug 313551 (still present in 4.6.2) prevents // following call to succeed if a fade is still in progress - m_fader.data()->fadeIn( safetyDelay ); // fade-in, just in case, be nice to ears + m_fader->fadeIn( safetyDelay ); // fade-in, just in case, be nice to ears } void diff --git a/src/playback/PowerManager.h b/src/playback/PowerManager.h --- a/src/playback/PowerManager.h +++ b/src/playback/PowerManager.h @@ -20,6 +20,7 @@ #include class EngineController; +class QDBusInterface; /** * Handle Amarok behavior on system suspend @@ -34,15 +35,16 @@ private Q_SLOTS: void slotSettingsChanged(); - void slotResumingFromSuspend(); + void slotHandleSuspend(); void slotPlaying(); void slotNotPlaying(); private: void startInhibitingSuspend(); void stopInhibitingSuspend(); int m_inhibitionCookie; + QDBusInterface *m_interface; }; #endif // AMAROK_POWERMANAGER_H diff --git a/src/playback/PowerManager.cpp b/src/playback/PowerManager.cpp --- a/src/playback/PowerManager.cpp +++ b/src/playback/PowerManager.cpp @@ -20,22 +20,30 @@ #include "amarokconfig.h" #include "App.h" +#include "Debug.h" #include "EngineController.h" -#include -#include #include +#include +#include + +#include PowerManager::PowerManager( EngineController *engine ) : QObject( engine ) , m_inhibitionCookie( -1 ) { connect( engine, &EngineController::stopped, this, &PowerManager::slotNotPlaying ); connect( engine, &EngineController::paused, this, &PowerManager::slotNotPlaying ); connect( engine, &EngineController::trackPlaying, this, &PowerManager::slotPlaying ); - connect( App::instance(), &App::settingsChanged, this, &PowerManager::slotSettingsChanged ); - connect( Solid::PowerManagement::notifier(), &Solid::PowerManagement::Notifier::resumingFromSuspend, - this, &PowerManager::slotResumingFromSuspend ); + connect( pApp, &App::settingsChanged, this, &PowerManager::slotSettingsChanged ); + + // TODO: Port this to the new Solid API when that is ready + QDBusConnection::systemBus().connect( QStringLiteral("org.freedesktop.login1"), + QStringLiteral("/org/freedesktop/login1"), + QStringLiteral("org.freedesktop.login1.Manager"), + QStringLiteral("PrepareForSleep"), + this, SLOT( slotHandleSuspend() ) ); } PowerManager::~PowerManager() @@ -57,8 +65,10 @@ } void -PowerManager::slotResumingFromSuspend() +PowerManager::slotHandleSuspend() { + DEBUG_BLOCK + if( AmarokConfig::pauseOnSuspend() && The::engineController()->isPlaying() ) The::engineController()->playPause(); } @@ -75,16 +85,18 @@ void PowerManager::startInhibitingSuspend() { - if( m_inhibitionCookie == -1 ) - m_inhibitionCookie = Solid::PowerManagement::beginSuppressingSleep( i18n( "Amarok is currently playing a track" ) ); + // TODO: Port this to the new Solid API when that is ready +// if( m_inhibitionCookie == -1 ) +// m_inhibitionCookie = Solid::PowerManagement::beginSuppressingSleep( i18n( "Amarok is currently playing a track" ) ); } void PowerManager::stopInhibitingSuspend() { if( m_inhibitionCookie != -1 ) { - Solid::PowerManagement::stopSuppressingSleep( m_inhibitionCookie ); - m_inhibitionCookie = -1; + // TODO: Port this to the new Solid API when that is ready +// Solid::PowerManagement::stopSuppressingSleep( m_inhibitionCookie ); +// m_inhibitionCookie = -1; } } diff --git a/src/playlist/PlaylistActions.cpp b/src/playlist/PlaylistActions.cpp --- a/src/playlist/PlaylistActions.cpp +++ b/src/playlist/PlaylistActions.cpp @@ -47,7 +47,7 @@ #include "playlist/PlaylistRestorer.h" #include "playlistmanager/PlaylistManager.h" -#include +#include #include Playlist::Actions* Playlist::Actions::s_instance = 0; @@ -248,7 +248,7 @@ AmarokConfig::setDynamicMode( enable ); // TODO: turn off other incompatible modes // TODO: should we restore the state of other modes? - AmarokConfig::self()->writeConfig(); + AmarokConfig::self()->save(); Playlist::Dock *dock = The::mainWindow()->playlistDock(); Playlist::SortWidget *sorting = dock ? dock->sortWidget() : 0; diff --git a/src/playlist/PlaylistBreadcrumbItem.h b/src/playlist/PlaylistBreadcrumbItem.h --- a/src/playlist/PlaylistBreadcrumbItem.h +++ b/src/playlist/PlaylistBreadcrumbItem.h @@ -21,8 +21,7 @@ #include "PlaylistBreadcrumbItemSortButton.h" #include "PlaylistBreadcrumbLevel.h" #include "PlaylistDefines.h" - -#include +#include "widgets/BoxWidget.h" #include #include @@ -75,7 +74,7 @@ * A single item that represents a level of a general-purpose breadcrumb ribbon. * @author Téo Mrnjavac */ -class BreadcrumbItem : public KHBox +class BreadcrumbItem : public BoxWidget { Q_OBJECT diff --git a/src/playlist/PlaylistBreadcrumbItem.cpp b/src/playlist/PlaylistBreadcrumbItem.cpp --- a/src/playlist/PlaylistBreadcrumbItem.cpp +++ b/src/playlist/PlaylistBreadcrumbItem.cpp @@ -20,7 +20,7 @@ #include "PlaylistSortWidget.h" #include -#include +#include namespace Playlist { @@ -62,7 +62,7 @@ /////// BreadcrumbItem methods begin here BreadcrumbItem::BreadcrumbItem( BreadcrumbLevel *level, QWidget *parent ) - : KHBox( parent ) + : BoxWidget( false, parent ) , m_name( level->name() ) , m_prettyName( level->prettyName() ) { diff --git a/src/playlist/PlaylistBreadcrumbItemSortButton.cpp b/src/playlist/PlaylistBreadcrumbItemSortButton.cpp --- a/src/playlist/PlaylistBreadcrumbItemSortButton.cpp +++ b/src/playlist/PlaylistBreadcrumbItemSortButton.cpp @@ -103,10 +103,10 @@ const bool isHovered = isDisplayHintEnabled( HoverHint ); if( isHovered ) { - QStyleOptionViewItemV4 option; + QStyleOptionViewItem option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; - option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; + option.viewItemPosition = QStyleOptionViewItem::OnlyOne; if( m_arrowHovered ) { diff --git a/src/playlist/PlaylistBreadcrumbLevel.cpp b/src/playlist/PlaylistBreadcrumbLevel.cpp --- a/src/playlist/PlaylistBreadcrumbLevel.cpp +++ b/src/playlist/PlaylistBreadcrumbLevel.cpp @@ -18,7 +18,7 @@ #include "PlaylistDefines.h" -#include +#include namespace Playlist { diff --git a/src/playlist/PlaylistDefines.cpp b/src/playlist/PlaylistDefines.cpp --- a/src/playlist/PlaylistDefines.cpp +++ b/src/playlist/PlaylistDefines.cpp @@ -20,7 +20,7 @@ #include "PlaylistDefines.h" #include "core/meta/support/MetaConstants.h" -#include +#include QStringList *Playlist::PlaylistColumnInfos::s_internalNames = 0; diff --git a/src/playlist/PlaylistDock.h b/src/playlist/PlaylistDock.h --- a/src/playlist/PlaylistDock.h +++ b/src/playlist/PlaylistDock.h @@ -24,11 +24,11 @@ #include "widgets/AmarokDockWidget.h" #include "core-impl/playlists/providers/user/UserPlaylistProvider.h" -#include +#include class KActionCollection; class KActionMenu; -class KVBox; +class BoxWidget; class QLabel; class QWidget; class PlaylistQueueEditor; @@ -78,17 +78,17 @@ KActionMenu *m_savePlaylistMenu; KActionCollection *m_saveActions; - QWeakPointer m_playlistQueueEditor; + QPointer m_playlistQueueEditor; PrettyListView *m_playlistView; ProgressiveSearchWidget *m_searchWidget; SortWidget *m_sortWidget; QLabel *m_dynamicHintWidget; - KVBox *m_mainWidget; - QFrame *m_barBox; + BoxWidget *m_mainWidget; + BoxWidget *m_barBox; }; } -Q_DECLARE_METATYPE( QWeakPointer ) +Q_DECLARE_METATYPE( QPointer ) #endif diff --git a/src/playlist/PlaylistDock.cpp b/src/playlist/PlaylistDock.cpp --- a/src/playlist/PlaylistDock.cpp +++ b/src/playlist/PlaylistDock.cpp @@ -41,15 +41,14 @@ #include "playlistmanager/PlaylistManager.h" #include "core-impl/playlists/providers/user/UserPlaylistProvider.h" #include "widgets/HorizontalDivider.h" - -#include -#include -#include -#include +#include "widgets/BoxWidget.h" #include +#include #include -#include + +#include +#include static const QString s_dynMode( "dynamic_mode" ); static const QString s_repopulate( "repopulate" ); @@ -87,7 +86,7 @@ void Playlist::Dock::polish() { - m_mainWidget = new KVBox( this ); + m_mainWidget = new BoxWidget( true, this ); setWidget( m_mainWidget ); m_mainWidget->setContentsMargins( 0, 0, 0, 0 ); m_mainWidget->setFrameShape( QFrame::NoFrame ); @@ -117,7 +116,7 @@ showDynamicHint(); - paletteChanged( App::instance()->palette() ); + paletteChanged( pApp->palette() ); connect( The::paletteHandler(), &PaletteHandler::newPalette, this, &Playlist::Dock::paletteChanged ); @@ -163,7 +162,7 @@ { // START: Playlist toolbar // action toolbar - m_barBox = new KHBox( m_mainWidget ); + m_barBox = new BoxWidget( false, m_mainWidget ); m_barBox->setObjectName( "PlaylistBarBox" ); m_barBox->setContentsMargins( 0, 0, 4, 0 ); m_barBox->setFixedHeight( 36 ); @@ -233,11 +232,10 @@ return QSize( static_cast( parent() )->size().width() / 4 , 300 ); } - void Playlist::Dock::paletteChanged( const QPalette &palette ) { - const QString backgroundColor = PaletteHandler::highlightColor().name(); + const QString backgroundColor = palette.color( QPalette::Active, QPalette::Mid ).name(); const QString textColor = palette.color( QPalette::Active, QPalette::HighlightedText ).name(); const QString linkColor = palette.color( QPalette::Active, QPalette::Link ).name(); const QString ridgeColor = palette.color( QPalette::Active, QPalette::Window ).name(); @@ -271,8 +269,7 @@ QAction *action = new QAction( userProvider->icon(), i18n("&Save playlist to \"%1\"", provider->prettyName() ), this ); - action->setData( QVariant::fromValue( - QWeakPointer( userProvider ) ) ); + action->setData( QVariant::fromValue( QPointer( userProvider ) ) ); m_saveActions->addAction( QString::number( (qlonglong) userProvider ), action ); // insert the playlist provider actions before "export" @@ -315,12 +312,12 @@ Playlist::Dock::slotEditQueue() { if( m_playlistQueueEditor ) { - m_playlistQueueEditor.data()->raise(); + m_playlistQueueEditor->raise(); return; } m_playlistQueueEditor = new PlaylistQueueEditor; - m_playlistQueueEditor.data()->setAttribute( Qt::WA_DeleteOnClose ); - m_playlistQueueEditor.data()->show(); + m_playlistQueueEditor->setAttribute( Qt::WA_DeleteOnClose ); + m_playlistQueueEditor->show(); } void diff --git a/src/playlist/PlaylistModel.h b/src/playlist/PlaylistModel.h --- a/src/playlist/PlaylistModel.h +++ b/src/playlist/PlaylistModel.h @@ -33,8 +33,7 @@ #include #include -#include -#include +#include class AmarokMimeData; class QMimeData; diff --git a/src/playlist/PlaylistModel.cpp b/src/playlist/PlaylistModel.cpp --- a/src/playlist/PlaylistModel.cpp +++ b/src/playlist/PlaylistModel.cpp @@ -45,18 +45,15 @@ #include "core-impl/support/TrackLoader.h" #include "playlist/UndoCommands.h" -#include +#include #include -#include -#include #include #include #include #include -#include +#include -#include #define TOOLTIP_STATIC_LINEBREAK 50 @@ -257,7 +254,6 @@ Playlist::Model::tooltipFor( Meta::TrackPtr track ) const { QString text; - KLocale *locale = KGlobal::locale(); // get the shared pointers now to be thread safe Meta::ArtistPtr artist = track->artist(); Meta::AlbumPtr album = track->album(); @@ -329,7 +325,7 @@ text += HTMLLine( Playlist::PlayCount, statistics->playCount(), true ); if( s_tooltipColumns[Playlist::LastPlayed] && statistics->lastPlayed().isValid() ) - text += HTMLLine( Playlist::LastPlayed, locale->formatDateTime( statistics->lastPlayed() ) ); + text += HTMLLine( Playlist::LastPlayed, QLocale().toString( statistics->lastPlayed() ) ); if( s_tooltipColumns[Playlist::Bitrate] && track->bitrate() ) text += HTMLLine( Playlist::Bitrate, i18nc( "%1: bitrate", "%1 kbps", track->bitrate() ) ); diff --git a/src/playlist/PlaylistRestorer.cpp b/src/playlist/PlaylistRestorer.cpp --- a/src/playlist/PlaylistRestorer.cpp +++ b/src/playlist/PlaylistRestorer.cpp @@ -26,7 +26,7 @@ #include "playlist/PlaylistModelStack.h" #include "playlistmanager/PlaylistManager.h" -#include +#include using namespace Playlist; @@ -55,7 +55,7 @@ DEBUG_BLOCK if( AmarokConfig::playFirstRunJingle() ) { - QString jingle = KStandardDirs::locate( "data", "amarok/data/first_run_jingle.ogg" ); + QString jingle = QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/first_run_jingle.ogg" ); The::playlistController()->clear(); The::playlistController()->insertTrack( 0, CollectionManager::instance()->trackForUrl( QUrl::fromLocalFile(jingle) ) ); AmarokConfig::setPlayFirstRunJingle( false ); diff --git a/src/playlist/PlaylistSortWidget.cpp b/src/playlist/PlaylistSortWidget.cpp --- a/src/playlist/PlaylistSortWidget.cpp +++ b/src/playlist/PlaylistSortWidget.cpp @@ -22,7 +22,7 @@ #include "proxymodels/SortScheme.h" #include -#include +#include namespace Playlist { @@ -39,7 +39,7 @@ m_layout->setContentsMargins( 0, 0, 0, 0 ); BreadcrumbItemButton *rootItem = new BreadcrumbItemButton( - QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/playlist-sorting-16.png" ) ) ), + QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/playlist-sorting-16.png" ) ) ), QString(), this ); rootItem->setToolTip( i18n( "Clear the playlist sorting configuration." ) ); m_layout->addWidget( rootItem ); diff --git a/src/playlist/PlaylistViewUrlGenerator.cpp b/src/playlist/PlaylistViewUrlGenerator.cpp --- a/src/playlist/PlaylistViewUrlGenerator.cpp +++ b/src/playlist/PlaylistViewUrlGenerator.cpp @@ -23,8 +23,8 @@ #include "PlaylistSortWidget.h" #include "ProgressiveSearchWidget.h" -#include -#include +#include +#include namespace Playlist { @@ -104,7 +104,7 @@ QIcon ViewUrlGenerator::icon() { - return QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/playlist-bookmark-16.png" ) ) ); + return QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/playlist-bookmark-16.png" ) ) ); } } //namespace Playlist diff --git a/src/playlist/PlaylistViewUrlRunner.cpp b/src/playlist/PlaylistViewUrlRunner.cpp --- a/src/playlist/PlaylistViewUrlRunner.cpp +++ b/src/playlist/PlaylistViewUrlRunner.cpp @@ -24,12 +24,12 @@ #include "playlist/PlaylistDock.h" #include "playlist/ProgressiveSearchWidget.h" -#include -#include +#include +#include #include +#include #include -#include namespace Playlist { @@ -49,22 +49,22 @@ DEBUG_BLOCK const QMap< QString, QString > args = url.args(); - QWeakPointer playlistDock = The::mainWindow()->playlistDock(); + auto playlistDock = The::mainWindow()->playlistDock(); if( args.keys().contains( "filter" ) ) { const QString filterExpr = args.value( "filter" ); - playlistDock.data()->searchWidget()->setCurrentFilter( filterExpr ); + playlistDock->searchWidget()->setCurrentFilter( filterExpr ); if( args.keys().contains( "matches" ) ) { const QString onlyMatches = args.value( "matches" ); - playlistDock.data()->searchWidget()->slotShowOnlyMatches( ( onlyMatches == QString( "true" ) ) ); + playlistDock->searchWidget()->slotShowOnlyMatches( ( onlyMatches == QString( "true" ) ) ); } } if( args.keys().contains( "sort" ) ) { const QString sortPath = args.value( "sort" ); - playlistDock.data()->sortWidget()->readSortPath( sortPath ); + playlistDock->sortWidget()->readSortPath( sortPath ); } if( args.keys().contains( "layout" ) ) @@ -93,7 +93,7 @@ QIcon ViewUrlRunner::icon() const { - return QIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/playlist-bookmark-16.png" ) ) ); + return QIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/playlist-bookmark-16.png" ) ) ); } } //namespace Playlist diff --git a/src/playlist/ProgressiveSearchWidget.h b/src/playlist/ProgressiveSearchWidget.h --- a/src/playlist/ProgressiveSearchWidget.h +++ b/src/playlist/ProgressiveSearchWidget.h @@ -18,8 +18,7 @@ #define PROGRESSIVESEARCHWIDGET_H #include "widgets/LineEdit.h" - -#include +#include "widgets/BoxWidget.h" class QAction; class QKeyEvent; @@ -41,7 +40,7 @@ @author Nikolaj Hald Nielsen */ -class ProgressiveSearchWidget : public KVBox +class ProgressiveSearchWidget : public BoxWidget { Q_OBJECT @@ -63,7 +62,7 @@ /** * Signal emitted when the search term has changed. * @param filter The new search term. - * @param filelds The mask containing the fields to match against. + * @param fiellds The mask containing the fields to match against. */ void filterChanged( const QString &filter, int fields, bool showOnlyMatches ); @@ -75,21 +74,21 @@ /** * Signal emitted when the "next" button is pressed. * @param filter The current search term. - * @param filelds The mask containing the fields to match against. + * @param fiellds The mask containing the fields to match against. */ void next( const QString &filter, int fields ); /** * Signal emitted when the "previous" button is pressed. * @param filter The current search term. - * @param filelds The mask containing the fields to match against. + * @param fiellds The mask containing the fields to match against. */ void previous( const QString &filter, int fields ); /** * Signal emitted when the user changes the value of the "Play only * matches" option. - * @param showOnlyMatches The value selected by the user. + * @param onlyMatches The value selected by the user. */ void showOnlyMatches( bool onlyMatches ); @@ -131,7 +130,7 @@ * Toggle navigate only tracks that match the current search term and * search fields. (The user can always manually select a track that * is not a part of the search results. - * @param showOnlyMatches On/off. + * @param onlyMatches On/off. */ void slotShowOnlyMatches( bool onlyMatches ); diff --git a/src/playlist/ProgressiveSearchWidget.cpp b/src/playlist/ProgressiveSearchWidget.cpp --- a/src/playlist/ProgressiveSearchWidget.cpp +++ b/src/playlist/ProgressiveSearchWidget.cpp @@ -19,12 +19,13 @@ #include "core/support/Debug.h" #include "playlist/PlaylistModel.h" -#include #include #include -#include -#include +#include +#include +#include +#include #include #include #include @@ -35,18 +36,18 @@ { ProgressiveSearchWidget::ProgressiveSearchWidget( QWidget * parent ) - : KVBox( parent ) +: BoxWidget( true, parent ) { DEBUG_BLOCK readConfig(); - KHBox *searchBox = new KHBox( this ); + BoxWidget *searchBox = new BoxWidget( false, this ); m_searchEdit = new Amarok::LineEdit( searchBox ); - m_searchEdit->setClickMessage( i18n( "Search playlist" ) ); + m_searchEdit->setPlaceholderText( i18n( "Search playlist" ) ); m_searchEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); - m_searchEdit->setClearButtonShown( true ); + m_searchEdit->setClearButtonEnabled( true ); m_searchEdit->setFrame( true ); m_searchEdit->setToolTip( i18n( "Start typing to progressively search through the playlist" ) ); m_searchEdit->setFocusPolicy( Qt::ClickFocus ); // Without this, the widget goes into text input mode directly on startup @@ -368,7 +369,7 @@ else { event->ignore(); - KHBox::keyPressEvent( event ); + BoxWidget::keyPressEvent( event ); } } diff --git a/src/playlist/layouts/LayoutConfigAction.h b/src/playlist/layouts/LayoutConfigAction.h --- a/src/playlist/layouts/LayoutConfigAction.h +++ b/src/playlist/layouts/LayoutConfigAction.h @@ -19,7 +19,7 @@ #define LAYOUTCONFIGACTION_H #include -#include +#include #include class QComboBox; diff --git a/src/playlist/layouts/LayoutConfigAction.cpp b/src/playlist/layouts/LayoutConfigAction.cpp --- a/src/playlist/layouts/LayoutConfigAction.cpp +++ b/src/playlist/layouts/LayoutConfigAction.cpp @@ -24,7 +24,7 @@ #include "widgets/EditDeleteComboBoxView.h" #include "MainWindow.h" -#include +#include #include #include @@ -37,7 +37,7 @@ : QAction( parent ) , m_layoutDialog( 0 ) { - QIcon actionIcon( QPixmap( KStandardDirs::locate( "data", "amarok/images/playlist-layouts-22.png") ) ); //TEMPORARY ICON + QIcon actionIcon( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/playlist-layouts-22.png") ) ); //TEMPORARY ICON setIcon( actionIcon ); m_layoutMenu = new QMenu( parent ); setMenu( m_layoutMenu ); diff --git a/src/playlist/layouts/LayoutEditDialog.h b/src/playlist/layouts/LayoutEditDialog.h --- a/src/playlist/layouts/LayoutEditDialog.h +++ b/src/playlist/layouts/LayoutEditDialog.h @@ -18,7 +18,7 @@ #define LAYOUTEDITDIALOG_H #include -#include +#include class HintingLineEdit; class QLineEdit; @@ -40,7 +40,7 @@ void apply(); void setAutomaticWidth( bool peer ); private: - QWeakPointer m_token; + QPointer m_token; HintingLineEdit *m_prefix; HintingLineEdit *m_suffix; QLabel *m_element; diff --git a/src/playlist/layouts/LayoutEditDialog.cpp b/src/playlist/layouts/LayoutEditDialog.cpp --- a/src/playlist/layouts/LayoutEditDialog.cpp +++ b/src/playlist/layouts/LayoutEditDialog.cpp @@ -20,7 +20,7 @@ #include "widgets/TokenDropTarget.h" #include -#include +#include #include #include @@ -194,18 +194,18 @@ if( !m_token ) return; - m_token.data()->setPrefix( m_prefix->text() ); - m_token.data()->setSuffix( m_suffix->text() ); - m_token.data()->setWidth( m_width->value() ); + m_token->setPrefix( m_prefix->text() ); + m_token->setSuffix( m_suffix->text() ); + m_token->setWidth( m_width->value() ); if ( m_alignLeft->isChecked() ) - m_token.data()->setAlignment( Qt::AlignLeft ); + m_token->setAlignment( Qt::AlignLeft ); else if ( m_alignCenter->isChecked() ) - m_token.data()->setAlignment( Qt::AlignHCenter ); + m_token->setAlignment( Qt::AlignHCenter ); else if ( m_alignRight->isChecked() ) - m_token.data()->setAlignment( Qt::AlignRight ); - m_token.data()->setBold( m_bold->isChecked() ); - m_token.data()->setItalic( m_italic->isChecked() ); - m_token.data()->setUnderline( m_underline->isChecked() ); + m_token->setAlignment( Qt::AlignRight ); + m_token->setBold( m_bold->isChecked() ); + m_token->setItalic( m_italic->isChecked() ); + m_token->setUnderline( m_underline->isChecked() ); // we do this here to avoid reliance on the connection order (i.e. prevent close before apply) if( sender() ) @@ -242,15 +242,15 @@ m_token = t; if ( m_token ) { - m_element->setText( m_token.data()->name() ); - m_prefix->setText( m_token.data()->prefix() ); - m_suffix->setText( m_token.data()->suffix() ); + m_element->setText( m_token->name() ); + m_prefix->setText( m_token->prefix() ); + m_suffix->setText( m_token->suffix() ); // Compute the remaining space from the tokens on the same line. // this should still not be done here as it makes upward assumptions // solution(?) token->element->row->elements - TokenDropTarget *editWidget = qobject_cast( m_token.data()->parentWidget() ); + TokenDropTarget *editWidget = qobject_cast( m_token->parentWidget() ); if( editWidget ) { qreal spareWidth = 100.0; @@ -270,29 +270,29 @@ int max = qMax( spareWidth, qreal( 0.0 ) ); - if( max >= m_token.data()->width() * 100.0 ) + if( max >= m_token->width() * 100.0 ) m_width->setMaximum( qMax( spareWidth, qreal( 0.0 ) ) ); else - m_width->setMaximum( m_token.data()->width() * 100.0 ); + m_width->setMaximum( m_token->width() * 100.0 ); } - m_width->setValue( m_token.data()->width() * 100.0 ); + m_width->setValue( m_token->width() * 100.0 ); m_previousWidth = m_width->value(); - if ( m_token.data()->width() > 0.0 ) + if ( m_token->width() > 0.0 ) m_fixedWidth->setChecked( true ); else m_automaticWidth->setChecked( true ); - if ( m_token.data()->alignment() & Qt::AlignLeft ) + if ( m_token->alignment() & Qt::AlignLeft ) m_alignLeft->setChecked(true); - else if ( m_token.data()->alignment() & Qt::AlignHCenter ) + else if ( m_token->alignment() & Qt::AlignHCenter ) m_alignCenter->setChecked(true); - else if ( m_token.data()->alignment() & Qt::AlignRight ) + else if ( m_token->alignment() & Qt::AlignRight ) m_alignRight->setChecked(true); - m_bold->setChecked( m_token.data()->bold() ); - m_italic->setChecked( m_token.data()->italic() ); - m_underline->setChecked( m_token.data()->underline() ); + m_bold->setChecked( m_token->bold() ); + m_italic->setChecked( m_token->italic() ); + m_underline->setChecked( m_token->underline() ); } } diff --git a/src/playlist/layouts/LayoutEditWidget.cpp b/src/playlist/layouts/LayoutEditWidget.cpp --- a/src/playlist/layouts/LayoutEditWidget.cpp +++ b/src/playlist/layouts/LayoutEditWidget.cpp @@ -20,7 +20,7 @@ #include "playlist/PlaylistDefines.h" #include "widgets/TokenDropTarget.h" -#include +#include #include #include @@ -39,10 +39,10 @@ mainLayout->addWidget( m_dragstack, 1 ); // connect ( m_dragstack, SIGNAL(focusReceived(QWidget*)), this, SIGNAL(focusReceived(QWidget*)) ); - connect ( m_dragstack, SIGNAL(changed()), this, SIGNAL(changed()) ); + connect ( m_dragstack, &TokenDropTarget::changed, this, &LayoutEditWidget::changed ); m_showCoverCheckBox = new QCheckBox( i18n( "Show cover" ), this ); - connect ( m_showCoverCheckBox, SIGNAL(stateChanged(int)), this, SIGNAL(changed()) ); + connect ( m_showCoverCheckBox, &QCheckBox::stateChanged, this, &LayoutEditWidget::changed ); mainLayout->addWidget( m_showCoverCheckBox, 0 ); } @@ -55,9 +55,9 @@ DEBUG_BLOCK int rowCount = config.rows(); - disconnect ( m_showCoverCheckBox, SIGNAL(stateChanged(int)), this, SIGNAL(changed()) ); + disconnect ( m_showCoverCheckBox, &QCheckBox::stateChanged, this, &LayoutEditWidget::changed ); m_showCoverCheckBox->setChecked( config.showCover() ); - connect ( m_showCoverCheckBox, SIGNAL(stateChanged(int)), this, SIGNAL(changed()) ); + connect ( m_showCoverCheckBox, &QCheckBox::stateChanged, this, &LayoutEditWidget::changed ); m_dragstack->clear(); @@ -101,7 +101,7 @@ token->setSuffix( element.suffix() ); m_dragstack->insertToken( token, i, j ); // Do all modifications on the token above that line, otherwise the dialog will think it's been modified by the user - connect ( token, SIGNAL(changed()), this, SIGNAL(changed()) ); + connect ( token, &TokenWithLayout::changed, this, &LayoutEditWidget::changed ); } } diff --git a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp --- a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp +++ b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp @@ -25,7 +25,7 @@ #include -#include +#include #include Playlist::PlaylistLayoutEditDialog::PlaylistLayoutEditDialog( QWidget *parent ) @@ -154,8 +154,9 @@ Playlist::PlaylistLayoutEditDialog::newLayout() //SLOT { bool ok; - QString layoutName = KInputDialog::getText( i18n( "Choose a name for the new playlist layout" ), - i18n( "Please enter a name for the playlist layout you are about to define:" ),QString(), &ok, this ); + QString layoutName = QInputDialog::getText( this, i18n( "Choose a name for the new playlist layout" ), + i18n( "Please enter a name for the playlist layout you are about to define:" ), + QLineEdit::Normal, QString(), &ok ); if( !ok ) return; if( layoutName.isEmpty() ) @@ -202,9 +203,10 @@ QString layoutName = layoutListWidget->currentItem()->text(); bool ok; - layoutName = KInputDialog::getText( i18n( "Choose a name for the new playlist layout" ), - i18n( "Please enter a name for the playlist layout you are about to define as copy of the layout '%1':", layoutName ), - layoutName, &ok, this ); + layoutName = QInputDialog::getText( this, + i18n( "Choose a name for the new playlist layout" ), + i18n( "Please enter a name for the playlist layout you are about to define as copy of the layout '%1':", layoutName ), + QLineEdit::Normal, layoutName, &ok ); if( !ok) return; @@ -260,9 +262,10 @@ while( layoutName.isEmpty() || m_layoutsMap->keys().contains( layoutName ) ) { bool ok; - layoutName = KInputDialog::getText( i18n( "Choose a new name for the playlist layout" ), - i18n( "Please enter a new name for the playlist layout you are about to rename:" ), - layoutListWidget->currentItem()->text(), &ok, this); + layoutName = QInputDialog::getText( this, + i18n( "Choose a new name for the playlist layout" ), + i18n( "Please enter a new name for the playlist layout you are about to rename:" ), + QLineEdit::Normal, layoutListWidget->currentItem()->text(), &ok ); if ( !ok ) { //Cancelled so just return diff --git a/src/playlist/layouts/PlaylistLayoutEditDialog.ui b/src/playlist/layouts/PlaylistLayoutEditDialog.ui --- a/src/playlist/layouts/PlaylistLayoutEditDialog.ui +++ b/src/playlist/layouts/PlaylistLayoutEditDialog.ui @@ -145,7 +145,7 @@ QLayout::SetDefaultConstraint - + 0 @@ -155,7 +155,7 @@ - + 0 @@ -165,7 +165,7 @@ - + 0 @@ -175,7 +175,7 @@ - + 0 @@ -325,9 +325,9 @@ - KPushButton + QPushButton QPushButton -
kpushbutton.h
+
qpushbutton.h
TokenPool diff --git a/src/playlist/navigators/NavigatorConfigAction.cpp b/src/playlist/navigators/NavigatorConfigAction.cpp --- a/src/playlist/navigators/NavigatorConfigAction.cpp +++ b/src/playlist/navigators/NavigatorConfigAction.cpp @@ -21,8 +21,8 @@ #include "playlist/PlaylistActions.h" #include -#include -#include +#include +#include NavigatorConfigAction::NavigatorConfigAction( QWidget * parent ) : QAction( parent ) diff --git a/src/playlist/proxymodels/ProxyBase.cpp b/src/playlist/proxymodels/ProxyBase.cpp --- a/src/playlist/proxymodels/ProxyBase.cpp +++ b/src/playlist/proxymodels/ProxyBase.cpp @@ -20,6 +20,7 @@ #include "core/meta/Meta.h" #include "core/meta/Statistics.h" #include "core-impl/playlists/types/file/PlaylistFileSupport.h" +#include "playlist/PlaylistModel.h" namespace Playlist { @@ -33,8 +34,10 @@ // Proxy the Playlist::AbstractModel signals. // If you need to do something special in a subclass, disconnect() this signal and // do your own connect() call. - connect( sourceModel(), SIGNAL(activeTrackChanged(quint64)), this, SIGNAL(activeTrackChanged(quint64)) ); - connect( sourceModel(), SIGNAL(queueChanged()), this, SIGNAL(queueChanged()) ); + connect( qobject_cast( sourceModel() ), &Playlist::Model::activeTrackChanged, + this, &ProxyBase::activeTrackChanged ); + connect( qobject_cast( sourceModel() ), &Playlist::Model::queueChanged, + this, &ProxyBase::queueChanged ); } ProxyBase::~ProxyBase() diff --git a/src/playlist/proxymodels/SortAlgorithms.h b/src/playlist/proxymodels/SortAlgorithms.h --- a/src/playlist/proxymodels/SortAlgorithms.h +++ b/src/playlist/proxymodels/SortAlgorithms.h @@ -59,7 +59,7 @@ private: template - int compareBySortableName( const KSharedPtr &left, const KSharedPtr &right ) const; + int compareBySortableName( const AmarokSharedPointer &left, const AmarokSharedPointer &right ) const; SortScheme m_scheme; //!< The current sorting scheme. long m_randomSalt; //!< Change the random row order from run to run. diff --git a/src/playlist/proxymodels/SortAlgorithms.cpp b/src/playlist/proxymodels/SortAlgorithms.cpp --- a/src/playlist/proxymodels/SortAlgorithms.cpp +++ b/src/playlist/proxymodels/SortAlgorithms.cpp @@ -156,8 +156,8 @@ template int -multilevelLessThan::compareBySortableName( const KSharedPtr &left, - const KSharedPtr &right ) const +multilevelLessThan::compareBySortableName( const AmarokSharedPointer &left, + const AmarokSharedPointer &right ) const { if( !left && right ) return -1; diff --git a/src/playlist/proxymodels/SortScheme.cpp b/src/playlist/proxymodels/SortScheme.cpp --- a/src/playlist/proxymodels/SortScheme.cpp +++ b/src/playlist/proxymodels/SortScheme.cpp @@ -20,7 +20,7 @@ #include "core/support/Debug.h" -#include +#include namespace Playlist { diff --git a/src/playlist/view/listview/InlineEditorWidget.h b/src/playlist/view/listview/InlineEditorWidget.h --- a/src/playlist/view/listview/InlineEditorWidget.h +++ b/src/playlist/view/listview/InlineEditorWidget.h @@ -18,16 +18,15 @@ #define INLINEEDITORWIDGET_H #include "playlist/layouts/LayoutItemConfig.h" - -#include +#include "widgets/BoxWidget.h" #include #include /** An inline editor for a playlist item. Relies on the same item layout configuration as is used by the delegate, and strives to have a simmilar look. */ -class InlineEditorWidget : public KHBox +class InlineEditorWidget : public BoxWidget { Q_OBJECT diff --git a/src/playlist/view/listview/InlineEditorWidget.cpp b/src/playlist/view/listview/InlineEditorWidget.cpp --- a/src/playlist/view/listview/InlineEditorWidget.cpp +++ b/src/playlist/view/listview/InlineEditorWidget.cpp @@ -26,23 +26,22 @@ #include "playlist/proxymodels/GroupingProxy.h" #include "playlist/view/listview/PrettyItemDelegate.h" -#include #include -#include #include -#include +#include #include #include #include #include #include +#include using namespace Playlist; InlineEditorWidget::InlineEditorWidget( QWidget * parent, const QModelIndex &index, PlaylistLayout layout, int height, int width ) - : KHBox( parent ) + : BoxWidget( false, parent ) , m_index( index ) , m_layout( layout ) , m_widgetHeight( height ) @@ -123,7 +122,7 @@ } } - KVBox *rowsWidget = new KVBox( this ); + BoxWidget *rowsWidget = new BoxWidget( true, this ); // --- paint all the rows for( int i = 0; i < rowCount; i++ ) @@ -418,6 +417,6 @@ return false; } else - return KHBox::eventFilter( obj, event ); + return BoxWidget::eventFilter( obj, event ); } diff --git a/src/playlist/view/listview/PrettyItemDelegate.cpp b/src/playlist/view/listview/PrettyItemDelegate.cpp --- a/src/playlist/view/listview/PrettyItemDelegate.cpp +++ b/src/playlist/view/listview/PrettyItemDelegate.cpp @@ -27,6 +27,7 @@ #include "App.h" #include "EngineController.h" +#include "MainWindow.h" #include "PaletteHandler.h" #include "SvgHandler.h" #include "QStringx.h" @@ -42,7 +43,7 @@ #include "playlist/view/listview/InlineEditorWidget.h" #include -#include // #include does not work on some distros +#include // #include does not work on some distros #include #include @@ -63,7 +64,7 @@ m_animationTimeLine = new QTimeLine( 900, this ); m_animationTimeLine->setFrameRange( 1000, 600 ); - connect( m_animationTimeLine, SIGNAL( frameChanged( int ) ), this, SIGNAL( redrawRequested() ) ); + connect( m_animationTimeLine, &QTimeLine::frameChanged, this, &PrettyItemDelegate::redrawRequested ); #ifdef Q_WS_X11 connect( KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, &PrettyItemDelegate::currentDesktopChanged ); diff --git a/src/playlist/view/listview/PrettyListView.cpp b/src/playlist/view/listview/PrettyListView.cpp --- a/src/playlist/view/listview/PrettyListView.cpp +++ b/src/playlist/view/listview/PrettyListView.cpp @@ -27,9 +27,8 @@ #include "amarokconfig.h" #include "AmarokMimeData.h" -#include "context/ContextView.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" -#include "context/popupdropper/libpud/PopupDropper.h" +// #include "context/ContextView.h" +// #include "context/popupdropper/libpud/PopupDropper.h" #include "core/support/Debug.h" #include "EngineController.h" #include "dialogs/TagDialog.h" @@ -51,23 +50,25 @@ #include "SourceSelectionPopup.h" #include -#include -#include -#include - #include #include #include #include #include #include +#include #include #include #include #include #include #include +#include #include +#include + +#include + Playlist::PrettyListView::PrettyListView( QWidget* parent ) : QListView( parent ) @@ -112,13 +113,15 @@ connect( selectionModel(), &QItemSelectionModel::selectionChanged, this, &Playlist::PrettyListView::slotSelectionChanged ); - connect( LayoutManager::instance(), &LayoutManager::activeLayoutChanged, this, &Playlist::PrettyListView::playlistLayoutChanged ); + connect( LayoutManager::instance(), &LayoutManager::activeLayoutChanged, this, &PrettyListView::playlistLayoutChanged ); if (auto m = static_cast(model())) { connect( m, &Playlist::Model::activeTrackChanged, this, &Playlist::PrettyListView::slotPlaylistActiveTrackChanged ); connect( m, &Playlist::Model::queueChanged, viewport(), QOverload<>::of(&QWidget::update) ); } + else + warning() << "Model is not a Playlist::Model"; // Warning, this one doesn't connect to the normal 'model()' (i.e. '->top()'), but to '->bottom()'. connect( Playlist::ModelStack::instance()->bottom(), &Playlist::Model::rowsInserted, this, &Playlist::PrettyListView::bottomModelRowsInserted ); @@ -714,10 +717,10 @@ return; ongoingDrags = true; -/* FIXME: disabled temporarily for KF5 porting +/* FIXME: disabled temporarily for KF5 porting if( !m_pd ) m_pd = The::popupDropperFactory()->createPopupDropper( Context::ContextView::self() ); -*/ + if( m_pd && m_pd->isHidden() ) { m_pd->setSvgRenderer( The::svgHandler()->getRenderer( "amarok/images/pud_items.svg" ) ); @@ -731,6 +734,7 @@ m_pd->show(); } +*/ QListView::startDrag( supportedActions ); debug() << "After the drag!"; diff --git a/src/playlist/view/listview/SourceSelectionPopup.cpp b/src/playlist/view/listview/SourceSelectionPopup.cpp --- a/src/playlist/view/listview/SourceSelectionPopup.cpp +++ b/src/playlist/view/listview/SourceSelectionPopup.cpp @@ -17,7 +17,7 @@ #include "SourceSelectionPopup.h" #include -#include +#include #include #include @@ -31,7 +31,6 @@ : QDialog( parent ) , m_msc( msc ) { - QLabel * label = new QLabel( i18n( "The following sources are available for this track:" ) ); label->setWordWrap( true ); diff --git a/src/playlistgenerator/ConstraintSolver.cpp b/src/playlistgenerator/ConstraintSolver.cpp --- a/src/playlistgenerator/ConstraintSolver.cpp +++ b/src/playlistgenerator/ConstraintSolver.cpp @@ -16,10 +16,6 @@ #define DEBUG_PREFIX "APG::ConstraintSolver" -// WORKAROUND for QTBUG-25960. Required for Qt versions < 4.8.5 in combination with libc++. -#define QT_NO_STL 1 - #include -#undef QT_NO_STL #include "ConstraintSolver.h" @@ -33,7 +29,9 @@ #include "core-impl/collections/support/CollectionManager.h" #include "playlist/PlaylistModel.h" +#include #include + #include #include #include @@ -179,10 +177,14 @@ break; } } - debug() << "solution at" << (void*)(best); - - m_solvedPlaylist = best->mid( 0 ); - m_finalSatisfaction = m_constraintTreeRoot->satisfaction( m_solvedPlaylist ); + + if( best ) + { + debug() << "solution at" << (void*)(best); + + m_solvedPlaylist = best->mid( 0 ); + m_finalSatisfaction = m_constraintTreeRoot->satisfaction( m_solvedPlaylist ); + } /* clean up */ Population::iterator it = population.begin(); diff --git a/src/playlistgenerator/Preset.h b/src/playlistgenerator/Preset.h --- a/src/playlistgenerator/Preset.h +++ b/src/playlistgenerator/Preset.h @@ -19,7 +19,7 @@ #include "core/meta/forward_declarations.h" -#include +#include "AmarokSharedPointer.h" #include #include @@ -37,8 +37,8 @@ Q_OBJECT public: - static KSharedPtr createFromXml( QDomElement& ); - static KSharedPtr createNew(); + static AmarokSharedPointer createFromXml( QDomElement& ); + static AmarokSharedPointer createNew(); ~Preset(); QString title() const { return m_title; } @@ -67,6 +67,6 @@ ConstraintNode* m_constraintTreeRoot; }; - typedef KSharedPtr PresetPtr; + typedef AmarokSharedPointer PresetPtr; } #endif diff --git a/src/playlistgenerator/Preset.cpp b/src/playlistgenerator/Preset.cpp --- a/src/playlistgenerator/Preset.cpp +++ b/src/playlistgenerator/Preset.cpp @@ -30,12 +30,11 @@ #include "core-impl/collections/support/CollectionManager.h" #include "playlist/PlaylistController.h" -#include +#include #include #include -#include APG::PresetPtr APG::Preset::createFromXml( QDomElement& xmlelem ) diff --git a/src/playlistgenerator/PresetModel.h b/src/playlistgenerator/PresetModel.h --- a/src/playlistgenerator/PresetModel.h +++ b/src/playlistgenerator/PresetModel.h @@ -19,9 +19,8 @@ #include "Preset.h" -#include - #include +#include #include #include @@ -80,7 +79,7 @@ QList m_presetList; }; // class PresetModel - class PresetModel::ExportDialog : public KFileDialog { + class PresetModel::ExportDialog : public QFileDialog { Q_OBJECT public: diff --git a/src/playlistgenerator/PresetModel.cpp b/src/playlistgenerator/PresetModel.cpp --- a/src/playlistgenerator/PresetModel.cpp +++ b/src/playlistgenerator/PresetModel.cpp @@ -28,16 +28,14 @@ #include "playlistgenerator/Preset.h" #include "playlistgenerator/PresetEditDialog.h" -#include -#include - #include #include #include #include #include #include #include +#include #include APG::PresetModel* APG::PresetModel::s_instance = 0; @@ -153,10 +151,9 @@ void APG::PresetModel::import() { - QString filename = KFileDialog::getOpenFileName( QUrl( QDesktopServices::storageLocation( QDesktopServices::MusicLocation ) ), - QString("*.xml|" + i18n("Preset files (*.xml)") ), - 0, - i18n("Import preset") ); + QString filename = QFileDialog::getOpenFileName( Q_NULLPTR, i18n("Import preset"), + QStandardPaths::writableLocation( QStandardPaths::MusicLocation ), + QString("*.xml|" + i18n("Preset files (*.xml)") ) ); if( !filename.isEmpty() ) loadPresetsFromXml( filename ); } @@ -274,7 +271,7 @@ beginInsertRows( QModelIndex(), row, row ); m_presetList.append( ps ); endInsertRows(); - connect( ps.data(), SIGNAL(lock(bool)), this, SIGNAL(lock(bool)) ); + connect( ps.data(), &APG::Preset::lock, this, &PresetModel::lock ); } } @@ -297,26 +294,23 @@ * ExportDialog nested class */ APG::PresetModel::ExportDialog::ExportDialog( APG::PresetPtr ps ) - : KFileDialog( QUrl( QDesktopServices::storageLocation( QDesktopServices::MusicLocation ) ), - QString("*.xml|" + i18n("Preset files (*.xml)") ), - 0 ) - + : QFileDialog( Q_NULLPTR, i18n( "Export \"%1\" preset", ps->title() ), + QStandardPaths::writableLocation( QStandardPaths::MusicLocation ), + QString("*.xml|" + i18n("Preset files (*.xml)") ) ) { m_presetsToExportList.append( ps ); - setMode( KFile::File ); - setSelection( ps->title() + ".xml" ); - setOperationMode( KFileDialog::Saving ); - setKeepLocation( true ); - QWidget::setWindowTitle( i18n( "Export \"%1\" preset", ps->title() ) ); + setFileMode( QFileDialog::AnyFile ); + selectFile( ps->title() + ".xml" ); + setAcceptMode( QFileDialog::AcceptSave ); connect( this, &ExportDialog::accept, this, &ExportDialog::recvAccept ); } APG::PresetModel::ExportDialog::~ExportDialog() {} void APG::PresetModel::ExportDialog::recvAccept() const { - emit pleaseExport( selectedFile(), m_presetsToExportList ); + emit pleaseExport( selectedFiles().first(), m_presetsToExportList ); } const QString APG::PresetModel::presetExamples = diff --git a/src/playlistgenerator/TreeModel.cpp b/src/playlistgenerator/TreeModel.cpp --- a/src/playlistgenerator/TreeModel.cpp +++ b/src/playlistgenerator/TreeModel.cpp @@ -19,7 +19,7 @@ #include "Constraint.h" #include "ConstraintFactory.h" -#include +#include APG::TreeModel::TreeModel( ConstraintNode* r, QObject* p ) : QAbstractItemModel( p ), m_rootNode( r ) { @@ -220,7 +220,7 @@ APG::TreeModel::connectDCSlotToNode( ConstraintNode* n ) { if ( n ) { - connect( n, SIGNAL(dataChanged()), this, SLOT (slotConstraintDataChanged()) ); + connect( n, &ConstraintNode::dataChanged, this, &TreeModel::slotConstraintDataChanged ); int rc = n->getRowCount(); for ( int i = 0; i < rc; i++ ) { connectDCSlotToNode( n->getChild( i ) ); diff --git a/src/playlistgenerator/constraints/Checkpoint.cpp b/src/playlistgenerator/constraints/Checkpoint.cpp --- a/src/playlistgenerator/constraints/Checkpoint.cpp +++ b/src/playlistgenerator/constraints/Checkpoint.cpp @@ -401,15 +401,15 @@ { ui.setupUi( this ); - ui.timeEdit_Position->setTime( QTime().addMSecs( length ) ); + ui.timeEdit_Position->setTime( QTime(0, 0, 0).addMSecs( length ) ); ui.slider_Strictness->setValue( strictness ); ui.trackSelector->setData( data ); } void ConstraintTypes::CheckpointEditWidget::on_timeEdit_Position_timeChanged( const QTime& t ) { - emit positionChanged( QTime().msecsTo( t ) ); + emit positionChanged( QTime(0, 0, 0).msecsTo( t ) ); emit updated(); } diff --git a/src/playlistgenerator/constraints/PlaylistDuration.cpp b/src/playlistgenerator/constraints/PlaylistDuration.cpp --- a/src/playlistgenerator/constraints/PlaylistDuration.cpp +++ b/src/playlistgenerator/constraints/PlaylistDuration.cpp @@ -124,7 +124,7 @@ } else { v = ki18n( "Playlist duration: unknown"); } - v = v.subs( QTime().addMSecs( m_duration ).toString( "H:mm:ss" ) ); + v = v.subs( QTime(0, 0, 0).addMSecs( m_duration ).toString( "H:mm:ss" ) ); return v.toString(); } @@ -189,15 +189,15 @@ { ui.setupUi( this ); - ui.timeEdit_Duration->setTime( QTime().addMSecs( duration ) ); + ui.timeEdit_Duration->setTime( QTime(0, 0, 0).addMSecs( duration ) ); ui.comboBox_Comparison->setCurrentIndex( comparison ); ui.slider_Strictness->setValue( strictness ); } void ConstraintTypes::PlaylistDurationEditWidget::on_timeEdit_Duration_timeChanged( const QTime& t ) { - emit durationChanged( QTime().msecsTo( t ) ); + emit durationChanged( QTime(0, 0, 0).msecsTo( t ) ); emit updated(); } diff --git a/src/playlistgenerator/constraints/PlaylistFileSize.cpp b/src/playlistgenerator/constraints/PlaylistFileSize.cpp --- a/src/playlistgenerator/constraints/PlaylistFileSize.cpp +++ b/src/playlistgenerator/constraints/PlaylistFileSize.cpp @@ -25,7 +25,8 @@ #include #include -#include +#include + Constraint* ConstraintTypes::PlaylistFileSize::createFromXml( QDomElement& xmlelem, ConstraintNode* p ) @@ -127,7 +128,7 @@ } else { v = ki18n( "Total file size of playlist: unknown"); } - v = v.subs( KGlobal::locale()->formatByteSize( (double)getWantedSize(), 1, KLocale::MetricBinaryDialect ) ); + v = v.subs( KFormat().formatByteSize( getWantedSize(), 1, KFormat::MetricBinaryDialect ) ); return v.toString(); } diff --git a/src/playlistgenerator/constraints/TagMatch.cpp b/src/playlistgenerator/constraints/TagMatch.cpp --- a/src/playlistgenerator/constraints/TagMatch.cpp +++ b/src/playlistgenerator/constraints/TagMatch.cpp @@ -177,7 +177,7 @@ double r = m_value.toDouble() / 2.0; return v.arg( i18ncp("number of stars in the rating of a track", "%1 star", "%1 stars", r) ); } else if ( m_field == "length" ) { - return v.arg( QTime().addMSecs( m_value.toInt() ).toString( "H:mm:ss" ) ); + return v.arg( QTime(0, 0, 0).addMSecs( m_value.toInt() ).toString( "H:mm:ss" ) ); } else { if ( m_fieldsModel->type_of( m_field ) == FieldTypeString ) { // put quotes around any strings (eg, track title or artist name) ... @@ -530,14 +530,14 @@ ui.setupUi( this ); // plural support in combobox labels - connect( ui.spinBox_ValueDateValue, QOverload::of(&KIntSpinBox::valueChanged), + connect( ui.spinBox_ValueDateValue, QOverload::of(&QSpinBox::valueChanged), this, &TagMatchEditWidget::slotUpdateComboBoxLabels ); ui.comboBox_ValueDateUnit->insertItem(0, i18ncp("within the last %1 days", "day", "days", 0)); ui.comboBox_ValueDateUnit->insertItem(1, i18ncp("within the last %1 months", "month", "months", 0)); ui.comboBox_ValueDateUnit->insertItem(2, i18ncp("within the last %1 years", "year", "years", 0)); // fill in appropriate defaults for some attributes - ui.kdatewidget_DateSpecific->setDate( QDate::currentDate() ); + ui.qcalendarwidget_DateSpecific->setSelectedDate( QDate::currentDate() ); // fill in user-specified values before the slots have been connected to we don't have to call back to the constraint a dozen times ui.comboBox_Field->setModel( m_fieldsModel ); @@ -550,7 +550,7 @@ } else if ( field == "length" ) { ui.comboBox_ComparisonTime->setCurrentIndex( comparison ); ui.slider_StrictnessTime->setValue( strictness ); - ui.timeEdit_TimeValue->setTime( QTime().addMSecs( value.toInt() ) ); + ui.timeEdit_TimeValue->setTime( QTime(0, 0, 0).addMSecs( value.toInt() ) ); } else if ( m_fieldsModel->type_of( field ) == TagMatch::FieldTypeInt ) { ui.comboBox_ComparisonInt->setCurrentIndex( comparison ); ui.slider_StrictnessInt->setValue( strictness ); @@ -564,7 +564,7 @@ ui.comboBox_ValueDateUnit->setCurrentIndex( value.value().second ); } else { ui.stackedWidget_Date->setCurrentIndex( 0 ); - ui.kdatewidget_DateSpecific->setDate( value.toDate() ); + ui.qcalendarwidget_DateSpecific->setSelectedDate( value.toDate() ); } } else if ( m_fieldsModel->type_of( field ) == TagMatch::FieldTypeString ) { ui.comboBox_ComparisonString->setCurrentIndex( comparison ); @@ -627,7 +627,7 @@ ui.stackedWidget_Field->setCurrentIndex( 3 ); c = ui.comboBox_ComparisonTime->currentIndex(); s = ui.slider_StrictnessTime->value(); - v = QTime().msecsTo( ui.timeEdit_TimeValue->time() ); + v = QTime(0, 0, 0).msecsTo( ui.timeEdit_TimeValue->time() ); } else if ( field == "rating" ) { ui.stackedWidget_Field->setCurrentIndex( 4 ); c = ui.comboBox_ComparisonRating->currentIndex(); @@ -650,7 +650,7 @@ v = QVariant::fromValue( DateRange( a, b ) ); } else { ui.stackedWidget_Date->setCurrentIndex( 0 ); - v = ui.kdatewidget_DateSpecific->date(); + v = ui.qcalendarwidget_DateSpecific->selectedDate(); } } else if ( m_fieldsModel->type_of( field ) == TagMatch::FieldTypeString ) { ui.stackedWidget_Field->setCurrentIndex( 2 ); @@ -742,7 +742,7 @@ void ConstraintTypes::TagMatchEditWidget::on_timeEdit_TimeValue_timeChanged( const QTime& t ) { - int v = QTime().msecsTo( t ); + int v = QTime(0, 0, 0).msecsTo( t ); emit valueChanged( QVariant( v ) ); } diff --git a/src/playlistgenerator/constraints/TagMatchEditWidget.ui b/src/playlistgenerator/constraints/TagMatchEditWidget.ui --- a/src/playlistgenerator/constraints/TagMatchEditWidget.ui +++ b/src/playlistgenerator/constraints/TagMatchEditWidget.ui @@ -128,7 +128,7 @@ - + The numerical value that the track characteristic should match. @@ -269,7 +269,7 @@ - + 0 @@ -303,7 +303,7 @@ - + 999 @@ -721,14 +721,14 @@ - KDateWidget + QCalendarWidget QWidget -
kdatewidget.h
+
qcalendarwidget.h
- KIntSpinBox + QSpinBox QSpinBox -
knuminput.h
+
qspinbox.h
KRatingWidget diff --git a/src/playlistmanager/PlaylistManager.h b/src/playlistmanager/PlaylistManager.h --- a/src/playlistmanager/PlaylistManager.h +++ b/src/playlistmanager/PlaylistManager.h @@ -37,7 +37,7 @@ class PlaylistFile; class PlaylistFileProvider; class UserPlaylistProvider; - typedef KSharedPtr PlaylistFilePtr; + typedef AmarokSharedPointer PlaylistFilePtr; } namespace Podcasts { diff --git a/src/playlistmanager/PlaylistManager.cpp b/src/playlistmanager/PlaylistManager.cpp --- a/src/playlistmanager/PlaylistManager.cpp +++ b/src/playlistmanager/PlaylistManager.cpp @@ -38,8 +38,8 @@ #include #include #include -#include -#include +#include +#include #include #include diff --git a/src/playlistmanager/SyncedPlaylist.h b/src/playlistmanager/SyncedPlaylist.h --- a/src/playlistmanager/SyncedPlaylist.h +++ b/src/playlistmanager/SyncedPlaylist.h @@ -71,7 +71,7 @@ Playlists::PlaylistList m_playlists; }; -typedef KSharedPtr SyncedPlaylistPtr; +typedef AmarokSharedPointer SyncedPlaylistPtr; typedef QList SyncedPlaylistList; Q_DECLARE_METATYPE( SyncedPlaylistPtr ) diff --git a/src/playlistmanager/SyncedPlaylist.cpp b/src/playlistmanager/SyncedPlaylist.cpp --- a/src/playlistmanager/SyncedPlaylist.cpp +++ b/src/playlistmanager/SyncedPlaylist.cpp @@ -21,7 +21,7 @@ #include "core/playlists/PlaylistProvider.h" #include "core/support/Debug.h" -#include +#include using namespace Meta; diff --git a/src/playlistmanager/SyncedPodcast.h b/src/playlistmanager/SyncedPodcast.h --- a/src/playlistmanager/SyncedPodcast.h +++ b/src/playlistmanager/SyncedPodcast.h @@ -83,7 +83,7 @@ Podcasts::PodcastChannelPtr m_master; }; -typedef KSharedPtr SyncedPodcastPtr; +typedef AmarokSharedPointer SyncedPodcastPtr; typedef QList SyncedPodcastList; Q_DECLARE_METATYPE( SyncedPodcastPtr ) diff --git a/src/playlistmanager/SyncedPodcast.cpp b/src/playlistmanager/SyncedPodcast.cpp --- a/src/playlistmanager/SyncedPodcast.cpp +++ b/src/playlistmanager/SyncedPodcast.cpp @@ -19,7 +19,7 @@ #include "core/playlists/Playlist.h" #include "core/support/Debug.h" -#include +#include using namespace Meta; diff --git a/src/playlistmanager/file/PlaylistFileProvider.cpp b/src/playlistmanager/file/PlaylistFileProvider.cpp --- a/src/playlistmanager/file/PlaylistFileProvider.cpp +++ b/src/playlistmanager/file/PlaylistFileProvider.cpp @@ -28,16 +28,16 @@ #include "playlist/PlaylistModelStack.h" #include "playlistmanager/PlaylistManager.h" -#include -#include -#include -#include - #include #include +#include #include #include #include +#include + +#include +#include using Playlist::ModelStack; @@ -136,7 +136,7 @@ DEBUG_BLOCK QString filename = name.isEmpty() ? QDateTime::currentDateTime().toString( "ddd MMMM d yy hh-mm") : name; - filename.replace( QLatin1Char('/'), QLatin1Char('-') ); + filename.replace( '/', QLatin1Char('-') ); filename.replace( QLatin1Char('\\'), QLatin1Char('-') ); Playlists::PlaylistFormat format = Playlists::getFormat( QUrl::fromUserInput(filename) ); diff --git a/src/playlistmanager/sql/SqlPlaylist.h b/src/playlistmanager/sql/SqlPlaylist.h --- a/src/playlistmanager/sql/SqlPlaylist.h +++ b/src/playlistmanager/sql/SqlPlaylist.h @@ -24,11 +24,11 @@ { class PlaylistProvider; class SqlPlaylist; -typedef KSharedPtr SqlPlaylistPtr; +typedef AmarokSharedPointer SqlPlaylistPtr; typedef QList SqlPlaylistList; class SqlPlaylistGroup; -typedef KSharedPtr SqlPlaylistGroupPtr; +typedef AmarokSharedPointer SqlPlaylistGroupPtr; typedef QList SqlPlaylistGroupList; /** diff --git a/src/playlistmanager/sql/SqlPlaylistGroup.h b/src/playlistmanager/sql/SqlPlaylistGroup.h --- a/src/playlistmanager/sql/SqlPlaylistGroup.h +++ b/src/playlistmanager/sql/SqlPlaylistGroup.h @@ -23,11 +23,11 @@ #include #include -#include +#include "AmarokSharedPointer.h" namespace Playlists { class SqlPlaylistGroup; - typedef KSharedPtr SqlPlaylistGroupPtr; + typedef AmarokSharedPointer SqlPlaylistGroupPtr; typedef QList SqlPlaylistGroupList; /** diff --git a/src/playlistmanager/sql/SqlPlaylistGroup.cpp b/src/playlistmanager/sql/SqlPlaylistGroup.cpp --- a/src/playlistmanager/sql/SqlPlaylistGroup.cpp +++ b/src/playlistmanager/sql/SqlPlaylistGroup.cpp @@ -115,7 +115,7 @@ void SqlPlaylistGroup::clear() { - /* m_childPlaylists, m_childGroups are KSharedPtrs, so we should be able to + /* m_childPlaylists, m_childGroups are AmarokSharedPointers, so we should be able to just clear the list and the playlistptrs will delete themselves */ m_childGroups.clear(); diff --git a/src/playlistmanager/sql/SqlUserPlaylistProvider.h b/src/playlistmanager/sql/SqlUserPlaylistProvider.h --- a/src/playlistmanager/sql/SqlUserPlaylistProvider.h +++ b/src/playlistmanager/sql/SqlUserPlaylistProvider.h @@ -21,9 +21,10 @@ #include "SqlPlaylist.h" #include "SqlPlaylistGroup.h" -#include #include +#include + class QAction; namespace Playlists { diff --git a/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp b/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp --- a/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp +++ b/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp @@ -29,17 +29,15 @@ #include "core-impl/playlists/types/file/xspf/XSPFPlaylist.h" #include "core-impl/playlists/types/file/PlaylistFileSupport.h" -#include -#include -#include -#include -#include -#include -#include - #include +#include +#include #include #include +#include + +#include +#include #include static const int USERPLAYLIST_DB_VERSION = 3; @@ -126,7 +124,7 @@ SqlUserPlaylistProvider::save( const Meta::TrackList &tracks ) { DEBUG_BLOCK - QString name = KGlobal::locale()->formatDateTime( QDateTime::currentDateTime(), KLocale::LongDate, true ); + QString name = QLocale().toString( QDateTime::currentDateTime(), QLocale::LongFormat ); return save( tracks, name ); } diff --git a/src/scanner/AbstractDirectoryWatcher.cpp b/src/scanner/AbstractDirectoryWatcher.cpp --- a/src/scanner/AbstractDirectoryWatcher.cpp +++ b/src/scanner/AbstractDirectoryWatcher.cpp @@ -140,6 +140,8 @@ void AbstractDirectoryWatcher::abort() { + DEBUG_BLOCK + m_aborted = true; m_waitCondition.wakeAll(); } diff --git a/src/scanner/GenericScanManager.h b/src/scanner/GenericScanManager.h --- a/src/scanner/GenericScanManager.h +++ b/src/scanner/GenericScanManager.h @@ -142,15 +142,11 @@ void succeeded(); void failed( const QString& message ); - protected Q_SLOTS: - void slotSucceeded(); - void slotFailed( const QString& message ); - protected: /** Connects all the signals to m_scannerJob */ void connectSignalsToJob(); - GenericScannerJob* m_scannerJob; + QWeakPointer m_scannerJob; /** * This mutex is protecting the variables: diff --git a/src/scanner/GenericScanManager.cpp b/src/scanner/GenericScanManager.cpp --- a/src/scanner/GenericScanManager.cpp +++ b/src/scanner/GenericScanManager.cpp @@ -34,7 +34,6 @@ GenericScanManager::GenericScanManager( QObject *parent ) : QObject( parent ) - , m_scannerJob( ) { qRegisterMetaType( "GenericScanManager::ScanType" ); qRegisterMetaType >( "QSharedPointer" ); @@ -96,9 +95,10 @@ if( scanDirsSet.isEmpty() && type == PartialUpdateScan ) return; // nothing to do - m_scannerJob = new GenericScannerJob( this, scanDirsSet.toList(), type ); + auto scannerJob = QSharedPointer( new GenericScannerJob( this, scanDirsSet.toList(), type ) ); + m_scannerJob = scannerJob.toWeakRef(); connectSignalsToJob(); - ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(m_scannerJob) ); + ThreadWeaver::Queue::instance()->enqueue( scannerJob ); } void @@ -112,54 +112,37 @@ return; } - m_scannerJob = new GenericScannerJob( this, input, type ); + auto scannerJob = QSharedPointer( new GenericScannerJob( this, input, type ) ); + m_scannerJob = scannerJob.toWeakRef(); connectSignalsToJob(); - ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(m_scannerJob) ); + ThreadWeaver::Queue::instance()->enqueue( scannerJob ); } void GenericScanManager::abort() { QMutexLocker locker( &m_mutex ); - if( m_scannerJob ) - m_scannerJob->abort(); -} - -void -GenericScanManager::slotSucceeded() -{ - { - QMutexLocker locker( &m_mutex ); - m_scannerJob = 0; - } - emit succeeded(); -} - -void -GenericScanManager::slotFailed( const QString& message ) -{ - { - QMutexLocker locker( &m_mutex ); - m_scannerJob = 0; - } - emit failed( message ); + auto scannerJob = m_scannerJob.toStrongRef(); + if( scannerJob ) + scannerJob->abort(); } void GenericScanManager::connectSignalsToJob() { + auto scannerJob = m_scannerJob.data(); // we used to have direct connections here, but that caused too much work being done - // int the non-main thread, even in code that wasn't thread-safe, which lead to + // in the non-main thread, even in code that wasn't thread-safe, which lead to // crashes (bug 319835) and other potential data races - connect( m_scannerJob, QOverload::of(&GenericScannerJob::started), + connect( scannerJob, QOverload::of(&GenericScannerJob::started), this, &GenericScanManager::started ); - connect( m_scannerJob, &GenericScannerJob::directoryCount, + connect( scannerJob, &GenericScannerJob::directoryCount, this, &GenericScanManager::directoryCount); - connect( m_scannerJob, &GenericScannerJob::directoryScanned, + connect( scannerJob, &GenericScannerJob::directoryScanned, this, &GenericScanManager::directoryScanned ); - connect( m_scannerJob, &GenericScannerJob::succeeded, - this, &GenericScanManager::slotSucceeded ); - connect( m_scannerJob, QOverload::of(&GenericScannerJob::failed), - this, &GenericScanManager::slotFailed ); + connect( scannerJob, &GenericScannerJob::succeeded, + this, &GenericScanManager::succeeded ); + connect( scannerJob, QOverload::of(&GenericScannerJob::failed), + this, &GenericScanManager::failed ); } diff --git a/src/scanner/GenericScannerJob.cpp b/src/scanner/GenericScannerJob.cpp --- a/src/scanner/GenericScannerJob.cpp +++ b/src/scanner/GenericScannerJob.cpp @@ -56,8 +56,6 @@ , m_recursive( recursive ) , m_charsetDetect( detectCharset ) { - connect( this, &GenericScannerJob::done, - this, &GenericScannerJob::deleteLater ); // auto delete } GenericScannerJob::GenericScannerJob( GenericScanManager* manager, @@ -75,8 +73,6 @@ , m_recursive( true ) , m_charsetDetect( false ) { - connect( this, &GenericScannerJob::done, - this, &GenericScannerJob::deleteLater ); // auto delete } diff --git a/src/scripting/scriptconsole/CompletionModel.cpp b/src/scripting/scriptconsole/CompletionModel.cpp --- a/src/scripting/scriptconsole/CompletionModel.cpp +++ b/src/scripting/scriptconsole/CompletionModel.cpp @@ -19,17 +19,17 @@ #include "core/support/Debug.h" #include +#include -#include #include #include using namespace ScriptConsoleNS; AmarokScriptCodeCompletionModel::AmarokScriptCodeCompletionModel( QObject *parent ) -: CodeCompletionModel( parent ) + : CodeCompletionModel( parent ) { - const QUrl url( KStandardDirs::locate( "data", "amarok/scriptconsole/" ) ); + const QUrl url( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/scriptconsole/" ) ); QFile file( url.path() + "AutoComplete.txt" ); if( file.open( QFile::ReadOnly ) ) { @@ -45,16 +45,18 @@ AmarokScriptCodeCompletionModel::completionInvoked( KTextEditor::View *view, const KTextEditor::Range &range, KTextEditor::CodeCompletionModel::InvocationType invocationType ) { Q_UNUSED( invocationType ) + + beginResetModel(); m_completionList.clear(); const QString ¤tText = view->document()->text( range ); foreach( const QString &completionItem, m_autoCompleteStrings ) { int index = completionItem.indexOf( currentText, Qt::CaseInsensitive ) + currentText.length(); if( index != -1 && !QStringRef( &completionItem, index, completionItem.size()-index ).contains( '.' ) && completionItem != currentText ) m_completionList << completionItem; } - reset(); setRowCount( m_completionList.count() ); + endResetModel(); } QVariant diff --git a/src/scripting/scriptconsole/ScriptConsole.h b/src/scripting/scriptconsole/ScriptConsole.h --- a/src/scripting/scriptconsole/ScriptConsole.h +++ b/src/scripting/scriptconsole/ScriptConsole.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include namespace KTextEditor{ class Editor; @@ -65,12 +65,12 @@ ScriptConsoleItem* createScriptItem( const QString &script ); QScriptEngineDebugger *m_debugger; - QWeakPointer m_scriptItem; + QPointer m_scriptItem; QDockWidget *m_codeWidget; QString m_savePath; KTextEditor::Editor *m_editor; ScriptListDockWidget *m_scriptListDock; - static QWeakPointer s_instance; + static QPointer s_instance; }; class ScriptListDockWidget : public QDockWidget diff --git a/src/scripting/scriptconsole/ScriptConsole.cpp b/src/scripting/scriptconsole/ScriptConsole.cpp --- a/src/scripting/scriptconsole/ScriptConsole.cpp +++ b/src/scripting/scriptconsole/ScriptConsole.cpp @@ -17,32 +17,34 @@ #include "ScriptConsole.h" #define DEBUG_PREFIX "ScriptConsole" +#include "core/support/Amarok.h" #include "core/support/Debug.h" #include "MainWindow.h" #include "ScriptEditorDocument.h" #include "ScriptConsoleItem.h" +#include #include #include #include +#include #include #include #include +#include #include #include -#include #include -#include #include #include #include -#include + using namespace AmarokScript; using namespace ScriptConsoleNS; -QWeakPointer ScriptConsole::s_instance; +QPointer ScriptConsole::s_instance; ScriptConsole* ScriptConsole::instance() @@ -156,7 +158,7 @@ settings.endGroup(); if( m_savePath.isEmpty() ) - m_savePath = QUrl( KStandardDirs::locateLocal( "data", "amarok/scriptconsole/" ) ).path(); + m_savePath = Amarok::saveLocation("scriptconsole"); slotNewScript(); connect( m_debugger, &QScriptEngineDebugger::evaluationSuspended, this, &ScriptConsole::slotEvaluationSuspended ); @@ -168,10 +170,10 @@ void ScriptConsole::slotExecuteNewScript() { - if( m_scriptItem.data()->document()->text().isEmpty() ) + if( m_scriptItem->document()->text().isEmpty() ) return; - QScriptSyntaxCheckResult syntaxResult = m_scriptItem.data()->engine()->checkSyntax( m_scriptItem.data()->document()->text() ); + QScriptSyntaxCheckResult syntaxResult = m_scriptItem->engine()->checkSyntax( m_scriptItem->document()->text() ); if( QScriptSyntaxCheckResult::Valid != syntaxResult.state() ) { debug() << "Syntax error: " << syntaxResult.errorLineNumber() << syntaxResult.errorMessage(); @@ -184,15 +186,15 @@ return; } - m_scriptItem.data()->document()->save(); + m_scriptItem->document()->save(); m_codeWidget->setWidget( m_debugger->widget( QScriptEngineDebugger::CodeWidget ) ); - m_scriptItem.data()->start( false ); + m_scriptItem->start( false ); } void ScriptConsole::closeEvent( QCloseEvent *event ) { - QSettings settings( "Amarok", "Script Console" ); + QSettings settings( "KDE", "Amarok" ); settings.beginGroup( "ScriptConsole" ); settings.setValue( "geometry", saveGeometry() ); settings.setValue( "savepath", m_savePath ); @@ -204,7 +206,7 @@ void ScriptConsole::slotEditScript( ScriptConsoleItem *item ) { - if( m_scriptItem.data()->running() && KMessageBox::warningContinueCancel( this, i18n( "This will stop this script! Continue?" ), QString(), KStandardGuiItem::cont() + if( m_scriptItem->running() && KMessageBox::warningContinueCancel( this, i18n( "This will stop this script! Continue?" ), QString(), KStandardGuiItem::cont() , KStandardGuiItem::cancel(), "stopRunningScriptWarning" ) == KMessageBox::Cancel ) return; @@ -248,34 +250,34 @@ slotNewScript(); return; } - debug() << "Is Evaluating() " << m_scriptItem.data()->engine()->isEvaluating(); - debug() << "Exception isValid()" << m_scriptItem.data()->engine()->uncaughtException().isValid(); - if( m_scriptItem.data()->engine() && m_scriptItem.data()->engine()->uncaughtException().isValid() ) + debug() << "Is Evaluating() " << m_scriptItem->engine()->isEvaluating(); + debug() << "Exception isValid()" << m_scriptItem->engine()->uncaughtException().isValid(); + if( m_scriptItem->engine() && m_scriptItem->engine()->uncaughtException().isValid() ) return; - KTextEditor::View *view = m_scriptItem.data()->createEditorView( m_codeWidget ); + KTextEditor::View *view = m_scriptItem->createEditorView( m_codeWidget ); view->installEventFilter( this ); view->document()->installEventFilter( this ); m_codeWidget->setWidget( view ); } void ScriptConsole::slotEvaluationResumed() { - debug() << "Is Evaluating() " << m_scriptItem.data()->engine()->isEvaluating(); - debug() << "Exception isValid()" << m_scriptItem.data()->engine()->uncaughtException().isValid(); - if( !m_scriptItem.data()->engine() || !m_scriptItem.data()->engine()->isEvaluating() ) + debug() << "Is Evaluating() " << m_scriptItem->engine()->isEvaluating(); + debug() << "Exception isValid()" << m_scriptItem->engine()->uncaughtException().isValid(); + if( !m_scriptItem->engine() || !m_scriptItem->engine()->isEvaluating() ) return; - KTextEditor::View *view = m_scriptItem.data()->createEditorView( m_codeWidget ); + KTextEditor::View *view = m_scriptItem->createEditorView( m_codeWidget ); view->installEventFilter( this ); m_codeWidget->setWidget( view ); } void ScriptConsole::slotAbortEvaluation() { - m_scriptItem.data()->pause(); + m_scriptItem->pause(); } QDockWidget* @@ -338,7 +340,7 @@ ScriptListDockWidget::ScriptListDockWidget( QWidget *parent ) : QDockWidget( i18n( "Scripts" ), parent ) { - QWidget *widget = new KVBox( this ); + QWidget *widget = new BoxWidget( true, this ); setWidget( widget ); m_scriptListWidget = new QListWidget( widget ); m_scriptListWidget->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); @@ -351,6 +353,9 @@ void ScriptListDockWidget::addScript( ScriptConsoleItem *script ) { + if( !script ) + return; + QListWidgetItem *item = new QListWidgetItem( script->name(), 0 ); item->setData( ScriptRole, QVariant::fromValue( script ) ); m_scriptListWidget->addItem( item ); diff --git a/src/scripting/scriptconsole/ScriptConsoleItem.h b/src/scripting/scriptconsole/ScriptConsoleItem.h --- a/src/scripting/scriptconsole/ScriptConsoleItem.h +++ b/src/scripting/scriptconsole/ScriptConsoleItem.h @@ -54,7 +54,7 @@ private: bool m_clearOnDelete; ScriptEditorDocument *m_viewFactory; - QWeakPointer m_view; + QPointer m_view; void timerEvent(QTimerEvent* event); void initializeScriptEngine(); diff --git a/src/scripting/scriptconsole/ScriptConsoleItem.cpp b/src/scripting/scriptconsole/ScriptConsoleItem.cpp --- a/src/scripting/scriptconsole/ScriptConsoleItem.cpp +++ b/src/scripting/scriptconsole/ScriptConsoleItem.cpp @@ -62,7 +62,7 @@ debug() << "Directory %1 not removed, contains other files"; } if( m_view ) - m_view.data()->deleteLater(); + m_view->deleteLater(); } KPluginInfo @@ -88,6 +88,7 @@ } QTextStream stream( &file ); stream << specs; + file.close(); return KPluginInfo( specPath ); } @@ -113,7 +114,7 @@ if( !m_view ) m_view = m_viewFactory->createView( parent ); else - m_view.data()->setParent( parent ); + m_view->setParent( parent ); return m_view.data(); } diff --git a/src/scripting/scriptconsole/ScriptEditorDocument.h b/src/scripting/scriptconsole/ScriptEditorDocument.h --- a/src/scripting/scriptconsole/ScriptEditorDocument.h +++ b/src/scripting/scriptconsole/ScriptEditorDocument.h @@ -17,10 +17,10 @@ #ifndef SCRIPT_EDITOR_DOCUMENT_H #define SCRIPT_EDITOR_DOCUMENT_H -#include +#include "AmarokSharedPointer.h" #include -#include +#include namespace KTextEditor { @@ -52,7 +52,7 @@ private: KTextEditor::Document *m_document; - static QWeakPointer s_completionModel; + static QPointer s_completionModel; }; } diff --git a/src/scripting/scriptconsole/ScriptEditorDocument.cpp b/src/scripting/scriptconsole/ScriptEditorDocument.cpp --- a/src/scripting/scriptconsole/ScriptEditorDocument.cpp +++ b/src/scripting/scriptconsole/ScriptEditorDocument.cpp @@ -29,7 +29,7 @@ using namespace ScriptConsoleNS; -QWeakPointer ScriptEditorDocument::s_completionModel; +QPointer ScriptEditorDocument::s_completionModel; ScriptEditorDocument::ScriptEditorDocument( QObject *parent, KTextEditor::Document* document ) : QObject( parent ) diff --git a/src/scripting/scriptengine/AmarokCollectionScript.cpp b/src/scripting/scriptengine/AmarokCollectionScript.cpp --- a/src/scripting/scriptengine/AmarokCollectionScript.cpp +++ b/src/scripting/scriptengine/AmarokCollectionScript.cpp @@ -48,11 +48,12 @@ engine->globalObject().property( "Amarok" ).setProperty( "CollectionManager", scriptObject ); CollectionManager *instance = CollectionManager::instance(); - connect( instance, SIGNAL(collectionDataChanged(Collections::Collection*)), - SIGNAL(collectionDataChanged(Collections::Collection*)) ); - connect( instance, SIGNAL(collectionAdded(Collections::Collection*,CollectionManager::CollectionStatus)), - SIGNAL(collectionAdded(Collections::Collection*)) ); - connect( instance, SIGNAL(collectionRemoved(QString)), SIGNAL(collectionRemoved(QString)) ); + connect( instance, &CollectionManager::collectionDataChanged, + this, &AmarokCollectionScript::collectionDataChanged ); + connect( instance, &CollectionManager::collectionAdded, + this, &AmarokCollectionScript::collectionAdded ); + connect( instance, &CollectionManager::collectionRemoved, + this, &AmarokCollectionScript::collectionRemoved ); } int diff --git a/src/scripting/scriptengine/AmarokCollectionViewScript.h b/src/scripting/scriptengine/AmarokCollectionViewScript.h --- a/src/scripting/scriptengine/AmarokCollectionViewScript.h +++ b/src/scripting/scriptengine/AmarokCollectionViewScript.h @@ -117,7 +117,7 @@ void setMergedView( bool merged ); static QMap s_instances; - static QWeakPointer s_selection; + static QPointer s_selection; QScriptValue m_actionFunction; CollectionWidget *m_collectionWidget; AmarokScriptEngine *m_engine; @@ -139,7 +139,6 @@ Q_PROPERTY( QList children READ children ) Q_PROPERTY( int row READ row ) Q_PROPERTY( int level READ level ) - Q_PROPERTY( int childCount READ childCount ) Q_PROPERTY( Collections::Collection* parentCollection READ parentCollection ) Q_PROPERTY( bool isCollection READ isCollection ) Q_PROPERTY( bool isDataItem READ isDataItem ) diff --git a/src/scripting/scriptengine/AmarokCollectionViewScript.cpp b/src/scripting/scriptengine/AmarokCollectionViewScript.cpp --- a/src/scripting/scriptengine/AmarokCollectionViewScript.cpp +++ b/src/scripting/scriptengine/AmarokCollectionViewScript.cpp @@ -31,17 +31,17 @@ #include "widgets/SearchWidget.h" #include - #include #include +#include Q_DECLARE_METATYPE( QAction* ) Q_DECLARE_METATYPE( QList ) using namespace AmarokScript; QMap AmarokCollectionViewScript::s_instances; -QWeakPointer AmarokCollectionViewScript::s_selection; +QPointer AmarokCollectionViewScript::s_selection; AmarokCollectionViewScript::AmarokCollectionViewScript( AmarokScriptEngine *engine, const QString &scriptName ) : QObject( engine ) @@ -64,7 +64,7 @@ engine->registerArrayType< QList >(); engine->registerArrayType(); s_instances[m_scriptName] = this; - connect( The::mainWindow()->collectionBrowser()->searchWidget(), SIGNAL(filterChanged(QString)), SIGNAL(filterChanged(QString)) ); + connect( The::mainWindow()->collectionBrowser()->searchWidget(), &SearchWidget::filterChanged, this, &AmarokCollectionViewScript::filterChanged ); } AmarokCollectionViewScript::~AmarokCollectionViewScript() diff --git a/src/scripting/scriptengine/AmarokLyricsScript.cpp b/src/scripting/scriptengine/AmarokLyricsScript.cpp --- a/src/scripting/scriptengine/AmarokLyricsScript.cpp +++ b/src/scripting/scriptengine/AmarokLyricsScript.cpp @@ -27,15 +27,13 @@ #include "core/support/Debug.h" #include - #include #include #include -#include -#include using namespace AmarokScript; + AmarokLyricsScript::AmarokLyricsScript( QScriptEngine *engine ) : QObject( engine ) { @@ -53,9 +51,7 @@ Meta::TrackPtr track = The::engineController()->currentTrack(); if( !track ) return; -/* FIXME: disabled temporarily for KF5 porting. LyricsManager::self()->lyricsResult( lyrics, false ); -*/ } void @@ -65,43 +61,35 @@ Meta::TrackPtr track = The::engineController()->currentTrack(); if( !track ) return; -/* FIXME: disabled temporarily for KF5 porting. LyricsManager::self()->lyricsResultHtml( lyrics, false ); -*/ } void AmarokLyricsScript::showLyricsError( const QString &error ) const { DEBUG_BLOCK -/* FIXME: disabled temporarily for KF5 porting. LyricsManager::self()->lyricsError( error ); -*/ } void AmarokLyricsScript::showLyricsNotFound( const QString &msg ) const { DEBUG_BLOCK -/* FIXME: disabled temporarily for KF5 porting. LyricsManager::self()->lyricsNotFound( msg ); -*/ } QString AmarokLyricsScript::escape( const QString &str ) { - return Qt::escape( str ); + return str.toHtmlEscaped(); } void AmarokLyricsScript::setLyricsForTrack( const QString &trackUrl, const QString &lyrics ) const { -/* FIXME: disabled temporarily for KF5 porting. LyricsManager::self()->setLyricsForTrack( trackUrl, lyrics ); -*/ } QString diff --git a/src/scripting/scriptengine/AmarokNetworkScript.cpp b/src/scripting/scriptengine/AmarokNetworkScript.cpp --- a/src/scripting/scriptengine/AmarokNetworkScript.cpp +++ b/src/scripting/scriptengine/AmarokNetworkScript.cpp @@ -24,6 +24,7 @@ #include #include + #include using namespace AmarokScript; @@ -83,14 +84,19 @@ if( !context->argument( 1 ).isFunction() ) //TODO: check QUrl { - debug() << "ERROR! Constructor not called with a QUrl and function!"; + debug() << "ERROR! Constructor not called with a Url and function!"; return object; } - QUrl url( qscriptvalue_cast( context->argument( 0 ) ) ); + QUrl url = QUrl::fromEncoded( context->argument( 0 ).toString().toLatin1(), QUrl::StrictMode ); + + if( !url.isValid() ) + { + debug() << "ERROR! Constructor not called with a valid Url!"; + return object; + } // start download, and connect to it - //FIXME: url is not working directly. if( stringResult ) { QString encoding = "UTF-8"; diff --git a/src/scripting/scriptengine/AmarokPlaylistManagerScript.h b/src/scripting/scriptengine/AmarokPlaylistManagerScript.h --- a/src/scripting/scriptengine/AmarokPlaylistManagerScript.h +++ b/src/scripting/scriptengine/AmarokPlaylistManagerScript.h @@ -27,7 +27,7 @@ class Playlist; class PlaylistProvider; - typedef KSharedPtr PlaylistPtr; + typedef AmarokSharedPointer PlaylistPtr; typedef QList PlaylistList; typedef QList PlaylistProviderList; } diff --git a/src/scripting/scriptengine/AmarokScript.cpp b/src/scripting/scriptengine/AmarokScript.cpp --- a/src/scripting/scriptengine/AmarokScript.cpp +++ b/src/scripting/scriptengine/AmarokScript.cpp @@ -34,13 +34,13 @@ QScriptEngine::ExcludeSuperClassContents ); engine->globalObject().setProperty( "Amarok", scriptObject ); if( ScriptManager::instance()->m_scripts.contains( name ) ) - connect( ScriptManager::instance()->m_scripts[name], SIGNAL(uninstalled()), this, SIGNAL(uninstalled()) ); + connect( ScriptManager::instance()->m_scripts[name], &ScriptItem::uninstalled, this, &AmarokScript::uninstalled ); } void AmarokScript::AmarokScript::quitAmarok() { - App::instance()->quit(); + pApp->quit(); } void diff --git a/src/scripting/scriptengine/AmarokScriptConfig.cpp b/src/scripting/scriptengine/AmarokScriptConfig.cpp --- a/src/scripting/scriptengine/AmarokScriptConfig.cpp +++ b/src/scripting/scriptengine/AmarokScriptConfig.cpp @@ -16,9 +16,10 @@ #include "AmarokScriptConfig.h" +#include "core/support/Amarok.h" + #include #include -#include #include @@ -37,11 +38,11 @@ QVariant AmarokScriptConfig::readConfig( const QString &name, const QVariant &defaultValue ) const { - return KGlobal::config()->group( m_name ).readEntry( name, defaultValue ); + return Amarok::config( m_name ).readEntry( name, defaultValue ); } void AmarokScriptConfig::writeConfig( const QString &name, const QVariant &content ) { - KGlobal::config()->group( m_name ).writeEntry( name, content ); + Amarok::config( m_name ).writeEntry( name, content ); } diff --git a/src/scripting/scriptengine/AmarokScriptXml.h b/src/scripting/scriptengine/AmarokScriptXml.h new file mode 100644 --- /dev/null +++ b/src/scripting/scriptengine/AmarokScriptXml.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2017 Malte Veerman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifndef AMAROKSCRIPTXML_H +#define AMAROKSCRIPTXML_H + +#include + +class QDomDocument; +class QScriptEngine; +class QXmlStreamReader; + +namespace AmarokScript +{ + +class AmarokScriptXml : public QObject +{ + Q_OBJECT + +public: + AmarokScriptXml( QScriptEngine *engine ); + ~AmarokScriptXml(); + + Q_INVOKABLE void setReaderData( const QString &data ); + Q_INVOKABLE bool setDomObjectData( const QString &data ); + Q_INVOKABLE QString readFirstStreamElementWithName( const QString &name ); + Q_INVOKABLE QString textOfFirstDomElementWithName( const QString &name ); + +private: + QXmlStreamReader *m_reader; + QDomDocument *m_domDocument; +}; + +} + +#endif // AMAROKSCRIPTXML_H diff --git a/src/scripting/scriptengine/AmarokScriptXml.cpp b/src/scripting/scriptengine/AmarokScriptXml.cpp new file mode 100644 --- /dev/null +++ b/src/scripting/scriptengine/AmarokScriptXml.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2017 Malte Veerman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include "AmarokScriptXml.h" + +#include "core/support/Debug.h" + +#include +#include +#include + +using namespace AmarokScript; + +AmarokScriptXml::AmarokScriptXml( QScriptEngine *engine ) + : QObject( engine ) + , m_reader( Q_NULLPTR ) + , m_domDocument( new QDomDocument ) +{ + QScriptValue scriptObject = engine->newQObject( this, QScriptEngine::AutoOwnership, + QScriptEngine::ExcludeSuperClassContents ); + engine->globalObject().property( "Amarok" ).setProperty( "Xml", scriptObject ); +} + +AmarokScriptXml::~AmarokScriptXml() +{ + delete m_domDocument; + + if( m_reader ) + delete m_reader; +} + +void AmarokScriptXml::setReaderData(const QString& data) +{ + if( m_reader ) + delete m_reader; + + m_reader = new QXmlStreamReader( data ); +} + +bool AmarokScriptXml::setDomObjectData(const QString& data) +{ + return m_domDocument->setContent( data ); +} + +QString AmarokScriptXml::readFirstStreamElementWithName(const QString& name) +{ + if( !m_reader ) + return QString(); + + while( m_reader->readNextStartElement() ) + { + if( m_reader->name() == name ) + return m_reader->readElementText(); + } + + return QString(); +} + +QString AmarokScriptXml::textOfFirstDomElementWithName(const QString& name) +{ + auto elements = m_domDocument->elementsByTagName( name ); + + if( !elements.isEmpty() ) + { + auto element = elements.at( 0 ); + return element.toElement().text(); + } + + return QString(); +} diff --git a/src/scripting/scriptengine/AmarokWindowScript.h b/src/scripting/scriptengine/AmarokWindowScript.h --- a/src/scripting/scriptengine/AmarokWindowScript.h +++ b/src/scripting/scriptengine/AmarokWindowScript.h @@ -19,11 +19,12 @@ #define AMAROK_WINDOW_SCRIPT_H #include +#include #include #include #include #include -#include +#include class EventFilter; class QMenu; @@ -52,11 +53,12 @@ public: AmarokWindowScript( AmarokScriptEngine* scriptEngine ); - Q_INVOKABLE void addToolsMenu( QMenu *menu ); - Q_INVOKABLE void addSettingsMenu( QMenu *menu ); - Q_INVOKABLE bool addToolsMenu( QString id, QString menuTitle, QString icon = "amarok" ); + Q_INVOKABLE void addToolsMenu( const QString &name ); + Q_INVOKABLE void addSettingsMenu( const QString &name ); + Q_INVOKABLE bool addToolsAction( QString id, QString actionName, QString icon = "amarok" ); Q_INVOKABLE void addToolsSeparator(); - Q_INVOKABLE bool addSettingsMenu( QString id, QString menuTitle, QString icon = "amarok" ); + Q_INVOKABLE bool addSettingsAction( QString id, QString actionName, QString icon = "amarok" ); + Q_INVOKABLE bool addCustomAction( QString menuName, QString id, QString actionName, QString icon = "amarok" ); Q_INVOKABLE void addSettingsSeparator(); Q_INVOKABLE void showTrayIcon( bool show ); @@ -80,13 +82,13 @@ * * @param menu the menu to which the action will be added * @param id the ID of the action - * @param menuTitle the title of the action + * @param actionName the title of the action * @param menuProperty the name of the menu property for the script engine * @param icon the icon for the action * * @return true if adding the action was successful, false otherwise */ - bool addMenuAction( QWeakPointer menu, QString id, QString menuTitle, QString menuProperty, QString icon ); + bool addMenuAction( QMenu *menu, QString id, QString actionName, QString menuProperty, QString icon ); QString activeBrowserName(); bool isTrayIconShown(); @@ -98,8 +100,9 @@ QPalette palette() const; void setPalette( const QPalette & palette ); - QWeakPointer m_toolsMenu; - QWeakPointer m_settingsMenu; + QMap m_customMenus; + QPointer m_toolsMenu; + QPointer m_settingsMenu; AmarokScriptEngine* m_scriptEngine; }; } diff --git a/src/scripting/scriptengine/AmarokWindowScript.cpp b/src/scripting/scriptengine/AmarokWindowScript.cpp --- a/src/scripting/scriptengine/AmarokWindowScript.cpp +++ b/src/scripting/scriptengine/AmarokWindowScript.cpp @@ -43,10 +43,10 @@ ToolTipEventFilter(); bool eventFilter( QObject *object, QEvent *event ); - static QWeakPointer s_instance; + static QPointer s_instance; }; -QWeakPointer ToolTipEventFilter::s_instance; +QPointer ToolTipEventFilter::s_instance; ToolTipEventFilter* ToolTipEventFilter::instance() @@ -83,62 +83,84 @@ windowObject.setProperty( "ToolsMenu", scriptEngine->newObject() ); windowObject.setProperty( "SettingsMenu", scriptEngine->newObject() ); - connect( App::instance(), SIGNAL(prepareToQuit()), - this, SIGNAL(prepareToQuit()) ); + connect( pApp, &App::prepareToQuit, this, &AmarokWindowScript::prepareToQuit ); } void -AmarokWindowScript::addToolsMenu( QMenu *menu ) +AmarokWindowScript::addToolsMenu( const QString &name ) { - m_toolsMenu.data()->addMenu( menu ); + if( m_customMenus.contains( name ) ) + return; + + QMenu *menu = new QMenu( name ); + m_customMenus.insert( name, menu ); + m_toolsMenu->addMenu( menu ); + QScriptValue scriptMenu = m_scriptEngine->newQObject( menu ); + m_scriptEngine->globalObject().property( "Amarok" ).property( "Window" ).setProperty( name, scriptMenu ); } void -AmarokWindowScript::addSettingsMenu( QMenu *menu ) +AmarokWindowScript::addSettingsMenu( const QString &name ) { - m_settingsMenu.data()->addMenu( menu ); + if( m_customMenus.contains( name ) ) + return; + + QMenu *menu = new QMenu( name ); + m_customMenus.insert( name, menu ); + m_settingsMenu->addMenu( menu ); + QScriptValue scriptMenu = m_scriptEngine->newQObject( menu ); + m_scriptEngine->globalObject().property( "Amarok" ).property( "Window" ).setProperty( name, scriptMenu ); } bool -AmarokWindowScript::addToolsMenu( QString id, QString menuTitle, QString icon ) +AmarokWindowScript::addToolsAction( QString id, QString actionName, QString icon ) { - return addMenuAction( m_toolsMenu, id, menuTitle, "ToolsMenu", icon ); + return addMenuAction( m_toolsMenu, id, actionName, "ToolsMenu", icon ); } void AmarokWindowScript::addToolsSeparator() { - m_toolsMenu.data()->addSeparator(); + m_toolsMenu->addSeparator(); +} + +bool +AmarokWindowScript::addSettingsAction( QString id, QString actionName, QString icon ) +{ + return addMenuAction( m_settingsMenu, id, actionName, "SettingsMenu", icon ); } bool -AmarokWindowScript::addSettingsMenu( QString id, QString menuTitle, QString icon ) +AmarokScript::AmarokWindowScript::addCustomAction(QString menuName, QString id, QString actionName, QString icon) { - return addMenuAction( m_settingsMenu, id, menuTitle, "SettingsMenu", icon ); + if( !m_customMenus.contains( menuName ) ) + return false; + + return addMenuAction( m_customMenus.value( menuName ), id, actionName, menuName, icon ); } void AmarokWindowScript::addSettingsSeparator() { - m_settingsMenu.data()->addSeparator(); + m_settingsMenu->addSeparator(); } bool -AmarokWindowScript::addMenuAction( QWeakPointer menu, QString id, QString menuTitle, QString menuProperty, QString icon ) +AmarokWindowScript::addMenuAction( QMenu *menu, QString id, QString actionName, QString menuProperty, QString icon ) { KActionCollection* const ac = Amarok::actionCollection(); if( ac->action( id ) ) return false; - QAction *action = new QAction( QIcon::fromTheme( icon ), menuTitle, this ); + QAction *action = new QAction( QIcon::fromTheme( icon ), actionName, this ); ac->addAction( id, action ); // don't forget to read the shortcut settings from the config file so // the shortcuts for the actions are updated ac->readSettings(); // add the action to the given menu - menu.data()->addAction( ac->action( id ) ); + menu->addAction( ac->action( id ) ); QScriptValue newMenu = m_scriptEngine->newQObject( action ); m_scriptEngine->globalObject().property( "Amarok" ).property( "Window" ).property( menuProperty ).setProperty( id, newMenu ); @@ -149,7 +171,7 @@ AmarokWindowScript::showTrayIcon( bool show ) { AmarokConfig::setShowTrayIcon( show ); - App::instance()->applySettings(); + pApp->applySettings(); } QString diff --git a/src/scripting/scriptengine/ScriptImporter.h b/src/scripting/scriptengine/ScriptImporter.h --- a/src/scripting/scriptengine/ScriptImporter.h +++ b/src/scripting/scriptengine/ScriptImporter.h @@ -17,11 +17,11 @@ #ifndef SCRIPT_IMPORTER_H #define SCRIPT_IMPORTER_H -#include #include #include #include +#include class QScriptEngine; class QStringList; diff --git a/src/scripting/scriptengine/ScriptImporter.cpp b/src/scripting/scriptengine/ScriptImporter.cpp --- a/src/scripting/scriptengine/ScriptImporter.cpp +++ b/src/scripting/scriptengine/ScriptImporter.cpp @@ -25,9 +25,10 @@ #include "AmarokPlaylistManagerScript.h" #include "scripting/scriptmanager/ScriptManager.h" -#include +#include #include +#include using namespace AmarokScript; @@ -51,23 +52,9 @@ bool ScriptImporter::loadQtBinding( const QString& binding ) { - QStringList availableBindings = m_scriptEngine->availableExtensions(); - if( availableBindings.contains( binding ) ) - { - if( !m_importedBindings.contains( binding ) ) - { - if( m_scriptEngine->importExtension( binding ).isUndefined() ) - { // undefined indicates success - m_importedBindings << binding; - return true; - } - //else fall through and return false - } - else - return true; - } - else - warning() << __PRETTY_FUNCTION__ << "Binding \"" << binding << "\" could not be found!"; + Q_UNUSED( binding ) + + error() << __PRETTY_FUNCTION__ << "Loading Qt bindings in scripts not available in Qt5!"; return false; } diff --git a/src/scripting/scriptengine/exporters/CollectionTypeExporter.h b/src/scripting/scriptengine/exporters/CollectionTypeExporter.h --- a/src/scripting/scriptengine/exporters/CollectionTypeExporter.h +++ b/src/scripting/scriptengine/exporters/CollectionTypeExporter.h @@ -26,7 +26,7 @@ #include #include #include -#include +#include namespace Collections { @@ -185,7 +185,7 @@ Q_INVOKABLE Collections::QueryMaker *queryMaker(); private: - QWeakPointer m_collection; + QPointer m_collection; bool isOrganizable() const; bool isWritable() const; diff --git a/src/scripting/scriptengine/exporters/PlaylistProviderExporter.h b/src/scripting/scriptengine/exporters/PlaylistProviderExporter.h --- a/src/scripting/scriptengine/exporters/PlaylistProviderExporter.h +++ b/src/scripting/scriptengine/exporters/PlaylistProviderExporter.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include class QScriptEngine; class QScriptValue; @@ -33,7 +33,7 @@ { class Playlist; - typedef KSharedPtr PlaylistPtr; + typedef AmarokSharedPointer PlaylistPtr; typedef QList PlaylistList; } @@ -116,7 +116,7 @@ private: - QWeakPointer m_provider; + QPointer m_provider; bool isValid() const; virtual bool isWritable() const; diff --git a/src/scripting/scriptengine/exporters/PlaylistProviderExporter.cpp b/src/scripting/scriptengine/exporters/PlaylistProviderExporter.cpp --- a/src/scripting/scriptengine/exporters/PlaylistProviderExporter.cpp +++ b/src/scripting/scriptengine/exporters/PlaylistProviderExporter.cpp @@ -47,37 +47,37 @@ PlaylistProviderPrototype::addPlaylist(Playlists::PlaylistPtr playlist) { if( m_provider ) - return m_provider.data()->addPlaylist( playlist ); + return m_provider->addPlaylist( playlist ); return Playlists::PlaylistPtr(); } int PlaylistProviderPrototype::category() const { if( m_provider ) - return m_provider.data()->category(); + return m_provider->category(); return -1; } bool PlaylistProviderPrototype::deletePlaylists( const Playlists::PlaylistList &playlistlist ) { - return m_provider && m_provider.data()->deletePlaylists( playlistlist ); + return m_provider && m_provider->deletePlaylists( playlistlist ); } Playlists::PlaylistList PlaylistProviderPrototype::playlists() { if( m_provider ) - return m_provider.data()->playlists(); + return m_provider->playlists(); return Playlists::PlaylistList(); } void PlaylistProviderPrototype::renamePlaylist( Playlists::PlaylistPtr playlist, const QString &newName ) { if( m_provider ) - m_provider.data()->renamePlaylist( playlist, newName ); + m_provider->renamePlaylist( playlist, newName ); } Playlists::PlaylistPtr @@ -92,7 +92,7 @@ QString PlaylistProviderPrototype::toString() const { if( m_provider ) - return m_provider.data()->prettyName(); + return m_provider->prettyName(); return QString( "Invalid" ); } @@ -108,20 +108,20 @@ PlaylistProviderPrototype::icon() const { if( m_provider ) - return m_provider.data()->icon(); + return m_provider->icon(); return QIcon(); } bool PlaylistProviderPrototype::isWritable() const { - return m_provider && m_provider.data()->isWritable(); + return m_provider && m_provider->isWritable(); } int PlaylistProviderPrototype::playlistCount() const { if( m_provider ) - return m_provider.data()->playlistCount(); + return m_provider->playlistCount(); return -1; } diff --git a/src/scripting/scriptengine/exporters/QueryMakerExporter.h b/src/scripting/scriptengine/exporters/QueryMakerExporter.h --- a/src/scripting/scriptengine/exporters/QueryMakerExporter.h +++ b/src/scripting/scriptengine/exporters/QueryMakerExporter.h @@ -18,11 +18,12 @@ #define QUERYMAKER_EXPORTER_H #include "amarok_export.h" +#include "core/collections/QueryMaker.h" #include "core/meta/Meta.h" #include +#include #include -#include namespace Collections { @@ -57,7 +58,7 @@ static void init( QScriptEngine *engine ); QueryMakerPrototype( Collections::QueryMaker *collection ); ~QueryMakerPrototype(); - Collections::QueryMaker *data() const { return m_querymaker.data(); } + Collections::QueryMaker *data() const { return m_querymaker; } /** * Starts the query. This method returns immediately. All processing is done in one or more @@ -82,7 +83,7 @@ Q_INVOKABLE void addFilter( const QString &filter ); private: - QWeakPointer m_querymaker; + QPointer m_querymaker; QString m_filter; Meta::TrackList m_result; diff --git a/src/scripting/scriptengine/exporters/QueryMakerExporter.cpp b/src/scripting/scriptengine/exporters/QueryMakerExporter.cpp --- a/src/scripting/scriptengine/exporters/QueryMakerExporter.cpp +++ b/src/scripting/scriptengine/exporters/QueryMakerExporter.cpp @@ -17,7 +17,6 @@ #include "QueryMakerExporter.h" #include "core-impl/collections/support/TextualQueryFilter.h" -#include "core/collections/QueryMaker.h" #include "scripting/scriptengine/ScriptingDefines.h" #include @@ -50,8 +49,8 @@ { if( !m_querymaker ) return; - m_querymaker.data()->setQueryType( Collections::QueryMaker::Track ); - m_querymaker.data()->run(); + m_querymaker->setQueryType( Collections::QueryMaker::Track ); + m_querymaker->run(); } Meta::TrackList @@ -71,7 +70,7 @@ QueryMakerPrototype::abort() { if( m_querymaker ) - m_querymaker.data()->abortQuery(); + m_querymaker->abortQuery(); } //private @@ -108,5 +107,5 @@ QueryMakerPrototype::~QueryMakerPrototype() { if( m_querymaker ) - m_querymaker.data()->deleteLater(); + m_querymaker->deleteLater(); } diff --git a/src/scripting/scriptengine/exporters/ScriptableBiasExporter.h b/src/scripting/scriptengine/exporters/ScriptableBiasExporter.h --- a/src/scripting/scriptengine/exporters/ScriptableBiasExporter.h +++ b/src/scripting/scriptengine/exporters/ScriptableBiasExporter.h @@ -21,6 +21,7 @@ #include "dynamic/BiasFactory.h" #include +#include #include #include #include @@ -177,7 +178,7 @@ void ready( const Dynamic::TrackSet &trackSet ); private: - QWeakPointer m_scriptBias; + QPointer m_scriptBias; QScriptEngine *m_engine; QScriptValue m_biasObject; }; diff --git a/src/scripting/scriptengine/exporters/ScriptableBiasExporter.cpp b/src/scripting/scriptengine/exporters/ScriptableBiasExporter.cpp --- a/src/scripting/scriptengine/exporters/ScriptableBiasExporter.cpp +++ b/src/scripting/scriptengine/exporters/ScriptableBiasExporter.cpp @@ -245,28 +245,28 @@ void ScriptableBias::toXml( QXmlStreamWriter *writer ) const { - if( m_scriptBias.data()->toXmlFunction().isFunction() ) - m_scriptBias.data()->fromXmlFunction().call( m_biasObject, + if( m_scriptBias->toXmlFunction().isFunction() ) + m_scriptBias->fromXmlFunction().call( m_biasObject, QScriptValueList() << m_engine->toScriptValue( writer ) ); else Dynamic::AbstractBias::toXml( writer ); } void ScriptableBias::fromXml( QXmlStreamReader *reader ) { - if( m_scriptBias.data()->fromXmlFunction().isFunction() ) - m_scriptBias.data()->fromXmlFunction().call( m_biasObject, + if( m_scriptBias->fromXmlFunction().isFunction() ) + m_scriptBias->fromXmlFunction().call( m_biasObject, QScriptValueList() << m_engine->toScriptValue( reader ) ); else Dynamic::AbstractBias::fromXml( reader ); } QWidget* ScriptableBias::widget( QWidget *parent ) { - QWidget *widget = dynamic_cast( m_scriptBias.data()->widgetFunction().call( m_biasObject, - m_scriptBias.data()->engine()->newQObject( parent ) ).toQObject() ); + QWidget *widget = dynamic_cast( m_scriptBias->widgetFunction().call( m_biasObject, + m_scriptBias->engine()->newQObject( parent ) ).toQObject() ); if( widget ) return widget; return Dynamic::AbstractBias::widget( parent ); @@ -301,9 +301,9 @@ ScriptableBias::slotMatchingTracks( const Meta::TrackList &playlist, int contextCount, int finalCount, const Dynamic::TrackCollectionPtr universe ) const { Q_ASSERT( QThread::currentThread() == QCoreApplication::instance()->thread() ); - if( m_scriptBias.data()->matchingTracksFunction().isFunction() ) + if( m_scriptBias->matchingTracksFunction().isFunction() ) { - QScriptValue trackSetVal = m_scriptBias.data()->matchingTracksFunction().call( m_biasObject, + QScriptValue trackSetVal = m_scriptBias->matchingTracksFunction().call( m_biasObject, QScriptValueList() << m_engine->toScriptValue( playlist ) << contextCount << finalCount @@ -321,7 +321,7 @@ { QString name; if( m_scriptBias ) - name = m_scriptBias.data()->name(); + name = m_scriptBias->name(); return name.isEmpty() ? Dynamic::AbstractBias::name() : name; } @@ -347,14 +347,14 @@ QString ScriptableBias::toString() const { - return m_scriptBias.data()->toStringFunction().call( m_biasObject ).toString(); + return m_scriptBias->toStringFunction().call( m_biasObject ).toString(); } bool ScriptableBias::trackMatches( int position, const Meta::TrackList& playlist, int contextCount ) const { - if( m_scriptBias.data()->trackMatchesFunction().isFunction() ) - return m_scriptBias.data()->trackMatchesFunction().call( m_biasObject, + if( m_scriptBias->trackMatchesFunction().isFunction() ) + return m_scriptBias->trackMatchesFunction().call( m_biasObject, QScriptValueList() << position << m_engine->toScriptValue( playlist ) << contextCount diff --git a/src/scripting/scriptmanager/ScriptItem.h b/src/scripting/scriptmanager/ScriptItem.h --- a/src/scripting/scriptmanager/ScriptItem.h +++ b/src/scripting/scriptmanager/ScriptItem.h @@ -94,16 +94,16 @@ QString m_name; QUrl m_url; KPluginInfo m_info; - QWeakPointer m_engine; + QPointer m_engine; /** Currently activated in the Script Manager */ bool m_running; bool m_evaluating; QStringList m_log; - QWeakPointer m_service; + QPointer m_service; QStringList m_output; int m_runningTime; int m_timerId; - QWeakPointer m_popupWidget; + QPointer m_popupWidget; }; #endif /* AMAROK_SCRIPTITEM_H */ diff --git a/src/scripting/scriptmanager/ScriptItem.cpp b/src/scripting/scriptmanager/ScriptItem.cpp --- a/src/scripting/scriptmanager/ScriptItem.cpp +++ b/src/scripting/scriptmanager/ScriptItem.cpp @@ -47,27 +47,30 @@ #include "scripting/scriptengine/AmarokStatusbarScript.h" #include "scripting/scriptengine/AmarokStreamItemScript.h" #include "scripting/scriptengine/AmarokWindowScript.h" +#include "scripting/scriptengine/AmarokScriptXml.h" #include "scripting/scriptengine/exporters/CollectionTypeExporter.h" #include "scripting/scriptengine/exporters/MetaTypeExporter.h" #include "scripting/scriptengine/exporters/QueryMakerExporter.h" #include "scripting/scriptengine/exporters/ScriptableBiasExporter.h" #include "scripting/scriptengine/ScriptImporter.h" #include "scripting/scriptengine/ScriptingDefines.h" #include "ScriptManager.h" -#include -#include - -#include #include +#include +#include #include +#include +#include + +#include //////////////////////////////////////////////////////////////////////////////// // ScriptTerminatorWidget //////////////////////////////////////////////////////////////////////////////// ScriptTerminatorWidget::ScriptTerminatorWidget( const QString &message ) -: PopupWidget( 0 ) + : PopupWidget( 0 ) { setFrameStyle( QFrame::StyledPanel | QFrame::Raised ); @@ -87,10 +90,11 @@ alabel->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); alabel->setPalette( p ); - KPushButton *button = new KPushButton( i18n( "Terminate" ), this ); + QPushButton *button = new QPushButton( i18n( "Terminate" ), this ); button->setPalette(p);; connect( button, &QAbstractButton::clicked, this, &ScriptTerminatorWidget::terminate ); - button = new KPushButton( KStandardGuiItem::close(), this ); + auto closeItem = KStandardGuiItem::close(); + button = new QPushButton( closeItem.icon(), closeItem.text(), this ); button->setPalette(p); connect( button, &QAbstractButton::clicked, this, &ScriptTerminatorWidget::hide ); @@ -105,7 +109,7 @@ ScriptItem::ScriptItem( QObject *parent, const QString &name, const QString &path, const KPluginInfo &info ) : QObject( parent ) , m_name( name ) -, m_url( path ) +, m_url( QUrl::fromLocalFile( path ) ) , m_info( info ) , m_running( false ) , m_evaluating( false ) @@ -126,13 +130,13 @@ killTimer( m_timerId ); if( m_popupWidget ) { - m_popupWidget.data()->hide(); - m_popupWidget.data()->deleteLater();; + m_popupWidget->hide(); + m_popupWidget->deleteLater();; } //FIXME: Sometimes a script can be evaluating and cannot be abort? or can be reevaluating for some reason? - if( m_engine.data()->isEvaluating() ) + if( m_engine->isEvaluating() ) { - m_engine.data()->abortEvaluation(); + m_engine->abortEvaluation(); m_evaluating = false; return; } @@ -163,27 +167,30 @@ ScriptItem::timerEvent( QTimerEvent* event ) { Q_UNUSED( event ) - if( m_engine && m_engine.data()->isEvaluating() ) + if( m_engine && m_engine->isEvaluating() ) { m_runningTime += 100; if( m_runningTime >= 5000 ) { debug() << "5 seconds passed evaluating" << m_name; m_runningTime = 0; + if( !m_popupWidget ) + { m_popupWidget = new ScriptTerminatorWidget( i18n( "Script %1 has been evaluating for over" " 5 seconds now, terminate?" , m_name ) ); connect( m_popupWidget.data(), &ScriptTerminatorWidget::terminate, this, &ScriptItem::stop ); + } m_popupWidget.data()->show(); } } else { if( m_popupWidget ) - m_popupWidget.data()->deleteLater(); + m_popupWidget->deleteLater(); m_runningTime = 0; } } @@ -218,15 +225,15 @@ m_timerId = startTimer( 100 ); Q_ASSERT( m_engine ); - m_output << m_engine.data()->evaluate( scriptFile.readAll() ).toString(); + m_output << m_engine->evaluate( scriptFile.readAll() ).toString(); debug() << "After Evaluation "<< m_name; emit evaluated( m_output.join( "\n" ) ); scriptFile.close(); if ( m_evaluating ) { m_evaluating = false; - if ( m_engine.data()->hasUncaughtException() ) + if ( m_engine->hasUncaughtException() ) { m_log << handleError( m_engine.data() ); if( !silent ) @@ -236,7 +243,7 @@ return false; } if( m_info.category() == QLatin1String("Scriptable Service") ) - m_service.data()->slotCustomize( m_name ); + m_service->slotCustomize( m_name ); } else stop(); @@ -265,6 +272,7 @@ // common utils new AmarokScript::ScriptImporter( m_engine.data(), m_url ); new AmarokScript::AmarokScriptConfig( m_name, m_engine.data() ); + new AmarokScript::AmarokScriptXml( m_engine.data() ); new AmarokScript::InfoScript( m_url, m_engine.data() ); //new AmarokNetworkScript( m_engine.data() ); new AmarokScript::Downloader( m_engine.data() ); @@ -303,7 +311,7 @@ ScriptItem::stop() { pause(); - m_engine.data()->deleteLater(); + m_engine->deleteLater(); } diff --git a/src/scripting/scriptmanager/ScriptManager.h b/src/scripting/scriptmanager/ScriptManager.h --- a/src/scripting/scriptmanager/ScriptManager.h +++ b/src/scripting/scriptmanager/ScriptManager.h @@ -85,8 +85,6 @@ void ServiceScriptCustomize( const QString &name ); - static bool minimumBindingsAvailable(); - typedef QHash ScriptMap; ScriptMap m_scripts; QString m_lyricsScript; diff --git a/src/scripting/scriptmanager/ScriptManager.cpp b/src/scripting/scriptmanager/ScriptManager.cpp --- a/src/scripting/scriptmanager/ScriptManager.cpp +++ b/src/scripting/scriptmanager/ScriptManager.cpp @@ -36,15 +36,17 @@ #include "ScriptUpdater.h" #include -#include -#include +#include #include #include +#include +#include #include #include + ScriptManager* ScriptManager::s_instance = 0; ScriptManager::ScriptManager( QObject* parent ) @@ -57,42 +59,13 @@ if( AmarokConfig::enableScripts() == false ) { -#pragma message("PORTEME KF5: not sure if this is relevant in QT5") - /*if( !minimumBindingsAvailable() ) - { - KMessageBox::error( 0, - i18n( "Scripts have been disabled since you are missing the QtScriptQtBindings " - "package. Please install the package and restart Amarok for scripts to work." ), - i18n( "Scripts Disabled!" ) ); - return; - }*/ AmarokConfig::setEnableScripts( true ); } // Delay this call via eventloop, because it's a bit slow and would block QTimer::singleShot( 0, this, &ScriptManager::updateAllScripts ); } -bool -ScriptManager::minimumBindingsAvailable() -{ - QStringList minimumBindings; - minimumBindings << "qt.core" << "qt.gui" << "qt.sql" << "qt.xml" << "qt.uitools" << "qt.network"; - QScriptEngine engine; - foreach( const QString &binding, minimumBindings ) - { - // simply compare with availableExtensions()? Or can import still fail? - QScriptValue error = engine.importExtension( binding ); - if( error.isUndefined() ) - continue; // undefined indicates success - - debug() << "Extension" << binding << "not found:" << error.toString(); - debug() << "Available extensions:" << engine.availableExtensions(); - return false; - } - return true; -} - ScriptManager::~ScriptManager() {} @@ -176,9 +149,23 @@ { DEBUG_BLOCK // find all scripts (both in $KDEHOME and /usr) - QStringList foundScripts = KGlobal::dirs()->findAllResources( "data", "amarok/scripts/*/main.js", - KStandardDirs::Recursive | - KStandardDirs::NoDuplicates ); + QStringList foundScripts; + QStringList locations = QStandardPaths::standardLocations( QStandardPaths::GenericDataLocation ); + for( const auto &location : locations ) + { + QDir dir( location + "/amarok/scripts" ); + + if( !dir.exists() ) + continue; + + for( const auto &scriptLocation : dir.entryList( QDir::NoDotAndDotDot | QDir::Dirs ) ) + { + QDir scriptDir( dir.absoluteFilePath( scriptLocation ) ); + if( scriptDir.exists( QStringLiteral( "main.js" ) ) ) + foundScripts << scriptDir.absoluteFilePath( QStringLiteral( "main.js" ) ); + } + } + // remove deleted scripts foreach( ScriptItem *item, m_scripts ) { @@ -345,30 +332,32 @@ SupportAPIVersion << QLatin1String("API V1.0.0") << QLatin1String("API V1.0.1"); QString ScriptVersion; QFileInfo info( path ); - const QString specPath = QString( "%1/script.spec" ).arg( info.path() ); - if( !QFile::exists( specPath ) ) + const QString jsonPath = QString( "%1/script.json" ).arg( info.path() ); + if( !QFile::exists( jsonPath ) ) { - error() << "script.spec for "<< path << " is missing!"; + error() << "script.json for "<< path << " is missing!"; return false; } - KPluginInfo pluginInfo( specPath ); - if( !pluginInfo.isValid() ) + KPluginMetaData pluginMetadata( jsonPath ); + if( !pluginMetadata.isValid() ) { - error() << "PluginInfo invalid for" << specPath; + error() << "PluginMetaData invalid for" << jsonPath; return false; } - const QString pluginName = pluginInfo.pluginName(); - const QString category = pluginInfo.category(); - const QString version = pluginInfo.version(); + const QString pluginName = pluginMetadata.pluginId(); + const QString category = pluginMetadata.category(); + const QString version = pluginMetadata.version(); if( pluginName.isEmpty() || category.isEmpty() || version.isEmpty() ) { - error() << "PluginInfo has empty values for" << specPath; + error() << "PluginMetaData has empty values for" << jsonPath; return false; } + KPluginInfo pluginInfo( pluginMetadata ); + ScriptItem *item; if( !m_scripts.contains( pluginName ) ) { diff --git a/src/scripting/scriptmanager/ScriptUpdater.cpp b/src/scripting/scriptmanager/ScriptUpdater.cpp --- a/src/scripting/scriptmanager/ScriptUpdater.cpp +++ b/src/scripting/scriptmanager/ScriptUpdater.cpp @@ -22,9 +22,9 @@ #include #include -#include +#include #include -#include + #include #include @@ -225,9 +225,15 @@ emit finished( m_scriptPath ); return; } - const QString relativePath = KGlobal::dirs()->relativeLocation( "data", m_fileName ); + const QStringList locations = QStandardPaths::standardLocations( QStandardPaths::GenericDataLocation ); + QString relativePath; + for( const auto &location : locations ) + if( m_fileName.startsWith( location ) ) + relativePath = m_fileName.remove( location ); + if( relativePath.startsWith( '/' ) ) + relativePath.remove( 0, 1 ); const QFileInfo fileinfo( relativePath ); - const QString destination = KGlobal::dirs()->saveLocation( "data", fileinfo.path(), false ); + const QString destination = QStandardPaths::writableLocation( QStandardPaths::GenericDataLocation ) + '/' + fileinfo.path(); const QDir dir; if( !dir.exists( destination ) ) { diff --git a/src/scripting/scripts/CMakeLists.txt b/src/scripting/scripts/CMakeLists.txt --- a/src/scripting/scripts/CMakeLists.txt +++ b/src/scripting/scripts/CMakeLists.txt @@ -1,8 +1,8 @@ -add_subdirectory( radio_station_service ) -add_subdirectory( librivox_service ) +#add_subdirectory( radio_station_service ) +#add_subdirectory( librivox_service ) add_subdirectory( lyrics_lyricwiki ) #add_subdirectory( qtscript_debug ) -add_subdirectory( script_console ) +#add_subdirectory( script_console ) #add_subdirectory( templates ) #add_subdirectory( webcontrol) diff --git a/src/scripting/scripts/librivox_service/CMakeLists.txt b/src/scripting/scripts/librivox_service/CMakeLists.txt --- a/src/scripting/scripts/librivox_service/CMakeLists.txt +++ b/src/scripting/scripts/librivox_service/CMakeLists.txt @@ -12,10 +12,8 @@ DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/librivox_service ) -# Scripty is tailored to process desktop files only. On the other hand, there are standard spec files -# for RH-packaging. We use desktop files for translation and install them as spec files for use. -install( FILES - script.desktop +kcoreaddons_desktop_to_json("" script.desktop) + +install( FILES ${CMAKE_CURRENT_BINARY_DIR}/script.json DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/librivox_service - RENAME script.spec ) diff --git a/src/scripting/scripts/lyrics_lyricwiki/CMakeLists.txt b/src/scripting/scripts/lyrics_lyricwiki/CMakeLists.txt --- a/src/scripting/scripts/lyrics_lyricwiki/CMakeLists.txt +++ b/src/scripting/scripts/lyrics_lyricwiki/CMakeLists.txt @@ -3,10 +3,8 @@ DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/lyrics_lyricwiki ) -# Scripty is tailored to process desktop files only. On the other hand, there are standard spec files -# for RH-packaging. We use desktop files for translation and install them as spec files for use. -install( FILES - script.desktop - DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/lyrics_lyricwiki - RENAME script.spec +kcoreaddons_desktop_to_json("" script.desktop) + +install( FILES ${CMAKE_CURRENT_BINARY_DIR}/script.json + DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/lyrics_lyricwiki ) diff --git a/src/scripting/scripts/lyrics_lyricwiki/main.js b/src/scripting/scripts/lyrics_lyricwiki/main.js --- a/src/scripting/scripts/lyrics_lyricwiki/main.js +++ b/src/scripting/scripts/lyrics_lyricwiki/main.js @@ -25,10 +25,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * **************************************************************************/ -Importer.loadQtBinding( "qt.core" ); -Importer.loadQtBinding( "qt.gui" ); -Importer.loadQtBinding( "qt.xml" ); - /* GLOBAL VARIABLES */ // template for the xml object that will be populated and passed to Amarok.Lyrics.showLyrics() XML = "{lyrics}"; @@ -65,20 +61,14 @@ if( !embedLyrics ) return; - var xml = new QXmlStreamReader( lyricsXML ); - while( xml.readNextStartElement() ) + Amarok.Xml.setReaderData( lyricsXML ); + var lyrics = Amarok.Xml.readFirstElementWithName( "lyric" ); + if( lyrics !== "" ) { - if( xml.name() === "lyric" ) - { - var lyrics = xml.readElementText(); - if( lyrics !== "" ) - { - Amarok.Engine.currentTrack().changeTags( { "lyrics":lyrics }, false ); - Amarok.debug( "Writing lyrics to track." ); - Amarok.debug( lyrics ); - return; - } - } + Amarok.Engine.currentTrack().changeTags( { "lyrics":lyrics }, false ); + Amarok.debug( "Writing lyrics to track." ); + Amarok.debug( lyrics ); + return; } } @@ -95,15 +85,14 @@ Amarok.Lyrics.showLyricsError( ERRORMSG ); else { - var doc = new QDomDocument(); - doc.setContent(response); - var urlstr = doc.elementsByTagName( "url" ).at( 0 ).toElement().text(); + Amarok.Xml.setDomObjectData(response); + var urlstr = Amarok.Xml.textOfFirstDomElementWithName( "url" ); var capture; if(capture = /.+\/([^?=:]+:[^?=:]+)$/.exec(urlstr)) { // matched url is like this one: http://lyrics.wikia.com/Nightwish:Sleepwalker // but not like this: http://lyrics.wikia.com/index.php?title=Nightwish:Sleepwalker&action=edit - var url = QUrl.fromEncoded( new QByteArray( APIURL + capture[1] ), 1); + var url = APIURL + capture[1]; // this zero will not allow to execute this function again new Downloader( url, new Function("response", "onLyricsReceived(response, 0)") ); } @@ -129,11 +118,10 @@ Amarok.Lyrics.showLyricsError( "Unable to contact server - no website returned" ); // TODO: this should be i18n able else { - var doc = new QDomDocument(); - doc.setContent(response); + Amarok.Xml.setDomObjectData(response); var capture; - response = doc.elementsByTagName( "rev" ).at( 0 ).toElement().text(); + response = Amarok.Xml.textOfFirstDomElementWithName( "rev" ); if(capture = /<(lyrics?>)/i.exec(response)) { // ok, lyrics found @@ -158,15 +146,14 @@ return; } - var url = QUrl.fromEncoded( new QByteArray( APIURL + encodeURIComponent( capture[1] ) ), 1); + var url = APIURL + encodeURIComponent( capture[1] ); new Downloader( url, new Function("response", "onLyricsReceived(response, " + redirects + ")") ); } else if(redirects < 0) { // if we get here after redirect than something go wrong, so checks that redirects < 0 // maybe lyricwiki can help us var urlstr = "http://lyrics.wikia.com/api.php?action=lyrics&func=getSong&fmt=xml&artist=" + ARTIST + "&song=" + TITLE; - var url = QUrl.fromEncoded( new QByteArray( urlstr ), 1 ); - new Downloader( url, onHelpReceived ); + new Downloader( urlstr, onHelpReceived ); } else { @@ -229,10 +216,9 @@ try { var convertxml = "" + string + ""; - var doc = new QDomDocument(); - if(doc.setContent(convertxml)) + if(Amarok.Xml.setDomObjectData(convertxml)) { // xml is valid - return doc.elementsByTagName( "entity" ).at( 0 ).toElement().text(); + return Amarok.Xml.textOfFirstDomElementWithName( "entity" ); } return string; @@ -273,7 +259,7 @@ TITLE = title = URLify( entityDecode(title) ); // assemble the (encoded!) URL, build a QUrl out of it and dispatch the download request - var url = QUrl.fromEncoded( new QByteArray( APIURL + artist + ":" + title ), 1); + var url = APIURL + artist + ":" + title; Amarok.debug( "request URL: " + url.toString() ); // there was no redirections yet new Downloader( url, new Function("response", "onLyricsReceived(response, -1)") ); @@ -285,17 +271,14 @@ } -var menu = new QMenu( "LyricWiki", null ); -var embedLyricsAction = menu.addAction( "Embed Lyrics" ); -embedLyricsAction.checkable = true; -embedLyricsAction.toggled.connect( - function( checked ) - { - embedLyrics = checked; - Amarok.Script.writeConfig( "embedLyrics", embedLyrics ); - } - ); -embedLyricsAction.checked = embedLyrics; -Amarok.Window.addSettingsMenu( menu ); +Amarok.Window.addSettingsSeparator(); +Amarok.Window.addSettingsMenu( "LyricWiki" ); +Amarok.Window.addCustomAction( "LyricWiki", "EmbedLyrics", "Embed Lyrics" ); +Amarok.Window.LyricWiki.EmbedLyrics.checkable = true; +Amarok.Window.LyricWiki.EmbedLyrics.checked = embedLyrics; +Amarok.Window.LyricWiki.EmbedLyrics.toggled.connect( function( checked ) { + embedLyrics = checked; + Amarok.Script.writeConfig( "embedLyrics", embedLyrics ); + } ); Amarok.Lyrics.fetchLyrics.connect( getLyrics ); diff --git a/src/scripting/scripts/radio_station_service/CMakeLists.txt b/src/scripting/scripts/radio_station_service/CMakeLists.txt --- a/src/scripting/scripts/radio_station_service/CMakeLists.txt +++ b/src/scripting/scripts/radio_station_service/CMakeLists.txt @@ -4,10 +4,8 @@ DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/radio_station_service ) -# Scripty is tailored to process desktop files only. On the other hand, there are standard spec files -# for RH-packaging. We use desktop files for translation and install them as spec files for use. -install( FILES - script.desktop - DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/radio_station_service - RENAME script.spec +kcoreaddons_desktop_to_json("" script.desktop) + +install( FILES ${CMAKE_CURRENT_BINARY_DIR}/script.json + DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/radio_station_service ) diff --git a/src/scripting/scripts/script_console/CMakeLists.txt b/src/scripting/scripts/script_console/CMakeLists.txt --- a/src/scripting/scripts/script_console/CMakeLists.txt +++ b/src/scripting/scripts/script_console/CMakeLists.txt @@ -3,10 +3,8 @@ DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/script_console ) -# Scripty is tailored to process desktop files only. On the other hand, there are standard spec files -# for RH-packaging. We use desktop files for translation and install them as spec files for use. -install( FILES - script.desktop - DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/script_console - RENAME script.spec +kcoreaddons_desktop_to_json("" script.desktop) + +install( FILES ${CMAKE_CURRENT_BINARY_DIR}/script.json + DESTINATION ${DATA_INSTALL_DIR}/amarok/scripts/script_console ) diff --git a/src/services/InfoParserBase.cpp b/src/services/InfoParserBase.cpp --- a/src/services/InfoParserBase.cpp +++ b/src/services/InfoParserBase.cpp @@ -18,7 +18,7 @@ #include "core/support/Debug.h" -#include +#include #include #include @@ -36,7 +36,7 @@ if( s_loadingBaseHtml.isEmpty() ) { - const QUrl url( KStandardDirs::locate( "data", "amarok/data/" ) ); + const QUrl url( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/" ) ); QString htmlFile = url.path() + "InfoParserLoading.html"; if( !QFile::exists( htmlFile ) ) @@ -57,7 +57,7 @@ QString currentHtml = s_loadingBaseHtml; - const QUrl url( KStandardDirs::locate( "data", "amarok/images/" ) ); + const QUrl url( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/" ) ); currentHtml = currentHtml.replace( "%%IMAGEPATH%%", url.url() ); currentHtml = currentHtml.replace( "%%TEXT%%", message ); diff --git a/src/services/ServiceAlbumCoverDownloader.h b/src/services/ServiceAlbumCoverDownloader.h --- a/src/services/ServiceAlbumCoverDownloader.h +++ b/src/services/ServiceAlbumCoverDownloader.h @@ -22,7 +22,7 @@ #include #include -#include +#include #include @@ -32,7 +32,7 @@ //forward declaration class ServiceAlbumWithCover; -typedef KSharedPtr ServiceAlbumWithCoverPtr; +typedef AmarokSharedPointer ServiceAlbumWithCoverPtr; /** A specialized ServiceAlbum that supports fetching its cover from a known url. @@ -161,7 +161,7 @@ Meta::ServiceAlbumWithCoverPtr m_album; QString m_coverDownloadPath; KIO::FileCopyJob * m_albumDownloadJob; - KTempDir * m_tempDir; + QTemporaryDir * m_tempDir; }; } diff --git a/src/services/ServiceAlbumCoverDownloader.cpp b/src/services/ServiceAlbumCoverDownloader.cpp --- a/src/services/ServiceAlbumCoverDownloader.cpp +++ b/src/services/ServiceAlbumCoverDownloader.cpp @@ -121,7 +121,7 @@ ServiceAlbumCoverDownloader::ServiceAlbumCoverDownloader() : m_albumDownloadJob( ) { - m_tempDir = new KTempDir(); + m_tempDir = new QTemporaryDir(); m_tempDir->setAutoRemove( true ); } @@ -137,14 +137,13 @@ QUrl downloadUrl( album->coverUrl() ); - m_coverDownloadPath = m_tempDir->name() + downloadUrl.fileName(); + m_coverDownloadPath = m_tempDir->path() + '/' + downloadUrl.fileName(); debug() << "Download Cover: " << downloadUrl.url() << " to: " << m_coverDownloadPath; - m_albumDownloadJob = KIO::file_copy( downloadUrl, QUrl( m_coverDownloadPath ), -1, KIO::Overwrite | KIO::HideProgressInfo ); + m_albumDownloadJob = KIO::file_copy( downloadUrl, QUrl::fromLocalFile( m_coverDownloadPath ), -1, KIO::Overwrite | KIO::HideProgressInfo ); - connect( m_albumDownloadJob, SIGNAL(result(KJob*)), SLOT(coverDownloadComplete(KJob*)) ); - connect( m_albumDownloadJob, SIGNAL(canceled(KJob*)), SLOT(coverDownloadCanceled(KJob*)) ); + connect( m_albumDownloadJob, &KJob::result, this, &ServiceAlbumCoverDownloader::coverDownloadComplete ); } void @@ -156,18 +155,18 @@ return; } - if( !downloadJob || downloadJob->error() != 0 ) + if ( downloadJob != m_albumDownloadJob ) + return; //not the right job, so let's ignore it + + if( !downloadJob || downloadJob->error() ) { debug() << "Download Job failed!"; //we could not download, so inform album - m_album->imageDownloadCanceled(); + coverDownloadCanceled( downloadJob ); return; } - if ( downloadJob != m_albumDownloadJob ) - return; //not the right job, so let's ignore it - const QImage cover = QImage( m_coverDownloadPath ); if ( cover.isNull() ) { diff --git a/src/services/ServiceBase.h b/src/services/ServiceBase.h --- a/src/services/ServiceBase.h +++ b/src/services/ServiceBase.h @@ -27,19 +27,18 @@ #include "core-impl/meta/proxy/MetaProxy.h" #include "widgets/PrettyTreeView.h" -#include -#include #include #include #include #include #include #include +class BoxWidget; class ServiceBase; class SearchWidget; -class KMenuBar; +class QMenuBar; /** A virtual base class for factories for creating and handling the different types of service plugins @@ -114,7 +113,7 @@ * * @param removedService The service that has been removed */ - void removeService( ServiceBase *newService ); + void removeService( ServiceBase *removedService ); private Q_SLOTS: void slotNewService( ServiceBase *newService ); @@ -140,7 +139,7 @@ /** * Constructor. */ - ServiceBase( const QString &name, ServiceFactory* parent, bool useCollectionTreeView = true, const QString &m_prettyName = QString() ); + ServiceBase( const QString &name, ServiceFactory* parent, bool useCollectionTreeView = true, const QString &m_prettyName = QString() ); /** * Destructor. @@ -238,10 +237,10 @@ * Returns the service's parent factory. * @return the service's Factory */ - ServiceFactory* parent() const; + ServiceFactory* parent() const; - virtual QString filter() const; - virtual QList levels() const; + virtual QString filter() const; + virtual QList levels() const; public Q_SLOTS: //void treeViewSelectionChanged( const QItemSelection & selected ); @@ -288,7 +287,7 @@ * Signal emitted when the selection in the tree view has changed ( and is only a single item ). * @param item The selected item */ - void selectionChanged( CollectionTreeItem * ); + void selectionChanged( CollectionTreeItem *item ); /** * Signal emitted when the service is ready to be used. You don't need to emit this @@ -326,17 +325,17 @@ QTreeView *m_contentView; ServiceFactory *m_parentFactory; - KVBox *m_topPanel; - KVBox *m_bottomPanel; + BoxWidget *m_topPanel; + BoxWidget *m_bottomPanel; bool m_polished; bool m_useCollectionTreeView; QList m_urlsToInsert; InfoParserBase * m_infoParser; - KMenuBar *m_menubar; + QMenuBar *m_menubar; QMenu *m_filterMenu; SearchWidget * m_searchWidget; @@ -349,8 +348,5 @@ QSortFilterProxyModel *m_filterModel; }; -#define AMAROK_EXPORT_SERVICE_PLUGIN(libname, classname) \ -K_PLUGIN_FACTORY(factory, registerPlugin();) \ -K_EXPORT_PLUGIN(factory("amarok_service_" #libname))\ #endif diff --git a/src/services/ServiceBase.cpp b/src/services/ServiceBase.cpp --- a/src/services/ServiceBase.cpp +++ b/src/services/ServiceBase.cpp @@ -24,20 +24,19 @@ #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" #include "widgets/SearchWidget.h" +#include "widgets/BoxWidget.h" -#include -#include - -#include #include +#include +#include ServiceFactory::ServiceFactory() : Plugins::PluginFactory() { CollectionManager::instance()->addTrackProvider( this ); - connect( this, SIGNAL(newService(ServiceBase*)), SLOT(slotNewService(ServiceBase*)) ); - connect( this, SIGNAL(removeService(ServiceBase*)), SLOT(slotRemoveService(ServiceBase*)) ); + connect( this, &ServiceFactory::newService, this, &ServiceFactory::slotNewService ); + connect( this, &ServiceFactory::removeService, this, &ServiceFactory::slotRemoveService ); } ServiceFactory::~ServiceFactory() @@ -96,7 +95,7 @@ ServiceFactory::slotNewService( ServiceBase *newService ) { Q_ASSERT( newService ); - connect( newService, SIGNAL(ready()), this, SLOT(slotServiceReady()) ); + connect( newService, &ServiceBase::ready, this, &ServiceFactory::slotServiceReady ); m_activeServices << newService; } @@ -130,9 +129,9 @@ else setPrettyName( name ); - setSpacing( 1 ); + layout()->setSpacing( 1 ); - m_topPanel = new KVBox( this ); + m_topPanel = new BoxWidget( true, this ); if( useCollectionTreeView ) { @@ -142,21 +141,22 @@ m_contentView->sortByColumn ( 0, Qt::AscendingOrder ); m_contentView->setDragEnabled ( true ); m_contentView->setDragDropMode ( QAbstractItemView::DragOnly ); - connect( m_contentView, SIGNAL(itemSelected(CollectionTreeItem*)), this, SLOT(itemSelected(CollectionTreeItem*)) ); + connect( static_cast( m_contentView ), &ServiceCollectionTreeView::itemSelected, + this, &ServiceBase::itemSelected ); } - m_bottomPanel = new KVBox( this ); + m_bottomPanel = new BoxWidget( true, this ); m_bottomPanel->setFrameStyle( QFrame::NoFrame ); m_bottomPanel->setLineWidth(2); - m_bottomPanel->setSpacing( 2 ); - m_bottomPanel->setMargin( 2 ); + m_bottomPanel->layout()->setSpacing( 2 ); + m_bottomPanel->layout()->setMargin( 2 ); m_filterModel = new QSortFilterProxyModel( this ); m_filterModel->setSortCaseSensitivity( Qt::CaseInsensitive ); m_filterModel->setFilterCaseSensitivity( Qt::CaseInsensitive ); - m_menubar = new KMenuBar( m_topPanel ); + m_menubar = new QMenuBar( m_topPanel ); // Make sure we do not expose this menubar outside to ensure it does not // replace the main menubar when Amarok is used with Plasma Menubar m_menubar->setNativeMenuBar( false ); @@ -166,8 +166,8 @@ m_searchWidget = new SearchWidget( m_topPanel ); if( m_contentView ) - connect( m_searchWidget, SIGNAL(filterChanged(QString)), - m_contentView, SLOT(slotSetFilter(QString)) ); + connect( m_searchWidget, &SearchWidget::filterChanged, + static_cast( m_contentView ), &ServiceCollectionTreeView::slotSetFilter ); } ServiceBase::~ServiceBase() @@ -251,7 +251,7 @@ Meta::DataPtr ptr = item->data(); if ( ( ptr.data() == 0 ) || ( m_infoParser == 0 )) return; - debug() << "selected item: " << ptr.data()->name(); + debug() << "selected item: " << ptr->name(); ServiceDisplayInfoProvider * infoProvider = dynamic_cast( ptr.data() ); if (infoProvider == 0 ) return; @@ -322,7 +322,7 @@ { m_infoParser = infoParser; - connect ( m_infoParser, SIGNAL(info(QString)), this, SLOT(infoChanged(QString)) ); + connect ( m_infoParser, &InfoParserBase::info, this, &ServiceBase::infoChanged ); } InfoParserBase * diff --git a/src/services/ServiceMetaBase.h b/src/services/ServiceMetaBase.h --- a/src/services/ServiceMetaBase.h +++ b/src/services/ServiceMetaBase.h @@ -26,6 +26,7 @@ #include "ServiceCapabilities.h" #include +#include #include namespace Amarok @@ -107,7 +108,7 @@ virtual QAction * bookmarkAction() { return 0; }; protected: - QWeakPointer m_bookmarkAction; + QPointer m_bookmarkAction; }; @@ -120,12 +121,12 @@ class ServiceComposer; class ServiceYear; -typedef KSharedPtr ServiceTrackPtr; -typedef KSharedPtr ServiceArtistPtr; -typedef KSharedPtr ServiceAlbumPtr; -typedef KSharedPtr ServiceGenrePtr; -typedef KSharedPtr ServiceComposerPtr; -typedef KSharedPtr ServiceYearPtr; +typedef AmarokSharedPointer ServiceTrackPtr; +typedef AmarokSharedPointer ServiceArtistPtr; +typedef AmarokSharedPointer ServiceAlbumPtr; +typedef AmarokSharedPointer ServiceGenrePtr; +typedef AmarokSharedPointer ServiceComposerPtr; +typedef AmarokSharedPointer ServiceYearPtr; typedef QList ServiceTrackList; typedef QList ServiceArtistList; @@ -303,7 +304,7 @@ if ( isBookmarkable() ) { if ( m_bookmarkAction.isNull()) - m_bookmarkAction = QWeakPointer( new BookmarkArtistAction( this, ArtistPtr( this ) ) ); + m_bookmarkAction = QPointer( new BookmarkArtistAction( this, ArtistPtr( this ) ) ); return m_bookmarkAction.data(); } else @@ -376,7 +377,7 @@ if ( isBookmarkable() ) { if ( m_bookmarkAction.isNull()) - m_bookmarkAction = QWeakPointer( new BookmarkAlbumAction( this, AlbumPtr( this ) ) ); + m_bookmarkAction = QPointer( new BookmarkAlbumAction( this, AlbumPtr( this ) ) ); return m_bookmarkAction.data(); } else diff --git a/src/services/ServicePluginManager.cpp b/src/services/ServicePluginManager.cpp --- a/src/services/ServicePluginManager.cpp +++ b/src/services/ServicePluginManager.cpp @@ -92,8 +92,8 @@ if( !factory ) continue; - connect( factory, SIGNAL(newService(ServiceBase*)), SLOT(slotNewService(ServiceBase*)) ); - connect( factory, SIGNAL(removeService(ServiceBase*)), SLOT(slotRemoveService(ServiceBase*)) ); + connect( factory, &ServiceFactory::newService, this, &ServicePluginManager::slotNewService ); + connect( factory, &ServiceFactory::removeService, this, &ServicePluginManager::slotRemoveService ); } m_factories = factories; diff --git a/src/services/ServiceSqlCollection.cpp b/src/services/ServiceSqlCollection.cpp --- a/src/services/ServiceSqlCollection.cpp +++ b/src/services/ServiceSqlCollection.cpp @@ -21,8 +21,6 @@ #include #include -#include - using namespace Collections; ServiceSqlCollection::ServiceSqlCollection( const QString &id, const QString &prettyName, ServiceMetaFactory * metaFactory, ServiceSqlRegistry * registry ) diff --git a/src/services/ServiceSqlQueryMaker.cpp b/src/services/ServiceSqlQueryMaker.cpp --- a/src/services/ServiceSqlQueryMaker.cpp +++ b/src/services/ServiceSqlQueryMaker.cpp @@ -27,7 +27,6 @@ #include #include -#include using namespace Collections; @@ -112,7 +111,7 @@ AlbumQueryMode albumMode; bool withoutDuplicates; int maxResultSize; - ServiceSqlWorkerThread *worker; + QSharedPointer worker; QStack andStack; }; @@ -125,7 +124,6 @@ { //d->includedBuilder = true; //d->collectionRestriction = false; - d->worker = NULL; d->queryType = Private::NONE; d->linkedTables = 0; @@ -135,10 +133,7 @@ } ServiceSqlQueryMaker::~ServiceSqlQueryMaker() -{ - // what about d->worker? - delete d; -} +{} void ServiceSqlQueryMaker::abortQuery() @@ -155,25 +150,24 @@ if( d->worker && !d->worker->isFinished() ) { //the worker thread seems to be running - //TODO: wait or job to complete + //TODO: wait for job to complete } else { - d->worker = new ServiceSqlWorkerThread( this ); - connect( d->worker, SIGNAL(done(ThreadWeaver::JobPointer)),SLOT(done(ThreadWeaver::JobPointer)) ); + d->worker.reset( new ServiceSqlWorkerThread( this ) ); + connect( d->worker.data(), &ServiceSqlWorkerThread::done, this, &ServiceSqlQueryMaker::done ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(d->worker) ); } } void ServiceSqlQueryMaker::done( ThreadWeaver::JobPointer job ) { - ThreadWeaver::Queue::instance()->dequeue( job ); - ThreadWeaver::QObjectDecorator *qs = new ThreadWeaver::QObjectDecorator(job.data()); - qs->deleteLater(); - d->worker = NULL; + Q_UNUSED( job ) + + d->worker.clear(); emit queryDone(); } diff --git a/src/services/ServiceSqlRegistry.cpp b/src/services/ServiceSqlRegistry.cpp --- a/src/services/ServiceSqlRegistry.cpp +++ b/src/services/ServiceSqlRegistry.cpp @@ -252,11 +252,11 @@ for( QMutableHashIterator iter(x); iter.hasNext(); ) \ RealType::staticCast( iter.next().value() )->invalidateCache() - foreachInvalidateCache( AlbumPtr, KSharedPtr, m_albumMap ); - foreachInvalidateCache( ArtistPtr, KSharedPtr, m_artistMap ); - foreachInvalidateCache( GenrePtr, KSharedPtr, m_genreMap ); - foreachInvalidateCache( ComposerPtr, KSharedPtr, m_composerMap ); - foreachInvalidateCache( YearPtr, KSharedPtr, m_yearMap ); + foreachInvalidateCache( AlbumPtr, AmarokSharedPointer, m_albumMap ); + foreachInvalidateCache( ArtistPtr, AmarokSharedPointer, m_artistMap ); + foreachInvalidateCache( GenrePtr, AmarokSharedPointer, m_genreMap ); + foreachInvalidateCache( ComposerPtr, AmarokSharedPointer, m_composerMap ); + foreachInvalidateCache( YearPtr, AmarokSharedPointer, m_yearMap ); //elem.count() == 2 is correct because elem is one pointer to the object //and the other is stored in the hash map diff --git a/src/services/scriptable/ScriptableService.cpp b/src/services/scriptable/ScriptableService.cpp --- a/src/services/scriptable/ScriptableService.cpp +++ b/src/services/scriptable/ScriptableService.cpp @@ -26,7 +26,7 @@ #include "services/scriptable/ScriptableServiceInfoParser.h" #include "widgets/SearchWidget.h" -#include +#include using namespace Meta; @@ -43,7 +43,6 @@ debug() << "creating ScriptableService " << name; m_collection = 0; m_bottomPanel->hide(); - } ScriptableService::~ScriptableService() @@ -101,21 +100,21 @@ if( !callbackData.isEmpty() || playableUrl.isEmpty() ) return -1; - KSharedPtr track( new ScriptableServiceTrack( name ) ); + AmarokSharedPointer track( new ScriptableServiceTrack( name ) ); track->setAlbumId( parentId ); track->setUidUrl( playableUrl ); track->setServiceName( m_name ); track->setDescription( infoHtml ); if ( !m_customEmblem.isNull() ) track->setServiceEmblem( m_customEmblem ); else - track->setServiceEmblem( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-scripted.png" ) ) ); + track->setServiceEmblem( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted.png" ) ) ); if ( !m_customScalableEmblem.isEmpty() ) track->setServiceScalableEmblem( m_customScalableEmblem ); else - track->setServiceEmblem( KStandardDirs::locate( "data", "amarok/images/emblem-scripted-scalable.svgz" ) ); + track->setServiceEmblem( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted-scalable.svgz" ) ); if ( !albumOverride.isEmpty() ) track->setAlbumName( albumOverride ); @@ -152,12 +151,12 @@ if ( !m_customEmblem.isNull() ) album->setServiceEmblem( m_customEmblem ); else - album->setServiceEmblem( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-scripted.png" ) ) ); + album->setServiceEmblem( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted.png" ) ) ); if ( !m_customScalableEmblem.isEmpty() ) album->setServiceScalableEmblem( m_customScalableEmblem ); else - album->setServiceEmblem( KStandardDirs::locate( "data", "amarok/images/emblem-scripted-scalable.svgz" ) ); + album->setServiceEmblem( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted-scalable.svgz" ) ); return addAlbum( album ); @@ -178,12 +177,12 @@ if ( !m_customEmblem.isNull() ) artist->setServiceEmblem( m_customEmblem ); else - artist->setServiceEmblem( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-scripted.png" ) ) ); + artist->setServiceEmblem( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted.png" ) ) ); if ( !m_customScalableEmblem.isEmpty() ) artist->setServiceScalableEmblem( m_customScalableEmblem ); else - artist->setServiceEmblem( KStandardDirs::locate( "data", "amarok/images/emblem-scripted-scalable.svgz" ) ); + artist->setServiceEmblem( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted-scalable.svgz" ) ); return addArtist( artist ); @@ -205,12 +204,12 @@ if ( !m_customEmblem.isNull() ) genre->setServiceEmblem( m_customEmblem ); else - genre->setServiceEmblem( QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-scripted.png" ) ) ); + genre->setServiceEmblem( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted.png" ) ) ); if ( !m_customScalableEmblem.isEmpty() ) genre->setServiceScalableEmblem( m_customScalableEmblem ); else - genre->setServiceEmblem( KStandardDirs::locate( "data", "amarok/images/emblem-scripted-scalable.svgz" ) ); + genre->setServiceEmblem( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-scripted-scalable.svgz" ) ); return addGenre( genre ); diff --git a/src/services/scriptable/ScriptableServiceManager.cpp b/src/services/scriptable/ScriptableServiceManager.cpp --- a/src/services/scriptable/ScriptableServiceManager.cpp +++ b/src/services/scriptable/ScriptableServiceManager.cpp @@ -25,7 +25,6 @@ #include "../ServiceMetaBase.h" #include "browsers/servicebrowser/ServiceBrowser.h" -#include using namespace Meta; diff --git a/src/services/scriptable/ScriptableServiceMeta_p.h b/src/services/scriptable/ScriptableServiceMeta_p.h --- a/src/services/scriptable/ScriptableServiceMeta_p.h +++ b/src/services/scriptable/ScriptableServiceMeta_p.h @@ -29,7 +29,7 @@ #include #include -#include +#include diff --git a/src/statsyncing/Controller.h b/src/statsyncing/Controller.h --- a/src/statsyncing/Controller.h +++ b/src/statsyncing/Controller.h @@ -21,7 +21,7 @@ // for CollectionManager::CollectionStatus that cannont be fwd-declared #include "core-impl/collections/support/CollectionManager.h" -#include +#include #include #include @@ -216,7 +216,7 @@ // synchronization-related ProviderPtrList m_providers; - QWeakPointer m_currentProcess; + QPointer m_currentProcess; QTimer *m_startSyncingTimer; Config *m_config; diff --git a/src/statsyncing/Controller.cpp b/src/statsyncing/Controller.cpp --- a/src/statsyncing/Controller.cpp +++ b/src/statsyncing/Controller.cpp @@ -344,7 +344,7 @@ if( m_currentProcess ) { if( mode == StatSyncing::Process::Interactive ) - m_currentProcess.data()->raise(); + m_currentProcess->raise(); return; } @@ -383,7 +383,7 @@ } m_currentProcess = new Process( m_providers, checkedProviders, fields, mode, this ); - m_currentProcess.data()->start(); + m_currentProcess->start(); } void @@ -429,7 +429,7 @@ if( provider->id() == id ) return provider; - return ProviderPtr( 0 ); + return ProviderPtr(); } bool diff --git a/src/statsyncing/Process.h b/src/statsyncing/Process.h --- a/src/statsyncing/Process.h +++ b/src/statsyncing/Process.h @@ -20,15 +20,15 @@ #include "statsyncing/Options.h" #include "statsyncing/Provider.h" -#include +#include #include +#include -#include #include #include #include -class KDialog; +class QDialog; namespace ThreadWeaver { class Job; } @@ -100,9 +100,9 @@ TrackList m_tracksToScrobble; // gets deleted when MainWindow is deleted - QWeakPointer m_dialog; - QWeakPointer m_providersPage; - QWeakPointer m_tracksPage; + QPointer m_dialog; + QPointer m_providersPage; + QPointer m_tracksPage; }; } // namespace StatSyncing diff --git a/src/statsyncing/Process.cpp b/src/statsyncing/Process.cpp --- a/src/statsyncing/Process.cpp +++ b/src/statsyncing/Process.cpp @@ -32,6 +32,8 @@ #include "statsyncing/ui/ChooseProvidersPage.h" #include "statsyncing/ui/MatchedTracksPage.h" +#include + using namespace StatSyncing; Process::Process( const ProviderPtrList &providers, const ProviderPtrSet &preSelectedProviders, @@ -41,14 +43,14 @@ , m_providersModel( new ProvidersModel( providers, preSelectedProviders, this ) ) , m_checkedFields( checkedFields ) , m_matchedTracksModel( 0 ) - , m_dialog( new KDialog() ) + , m_dialog( new QDialog() ) { - m_dialog.data()->setCaption( i18n( "Synchronize Statistics" ) ); - m_dialog.data()->setButtons( KDialog::None ); - m_dialog.data()->setInitialSize( QSize( 860, 500 ) ); - m_dialog.data()->restoreDialogSize( Amarok::config( "StatSyncingDialog" ) ); + m_dialog->setWindowTitle( i18n( "Synchronize Statistics" ) ); + m_dialog->resize( QSize( 860, 500 ) ); + KWindowConfig::restoreWindowSize( m_dialog->windowHandle(), Amarok::config( "StatSyncingDialog" ) ); + // delete this process when user hits the close button - connect( m_dialog.data(), &KDialog::finished, this, &Process::slotSaveSizeAndDelete ); + connect( m_dialog.data(), &QDialog::finished, this, &Process::slotSaveSizeAndDelete ); /* we need to delete all QWidgets on application exit well before QApplication * is destroyed. We however don't set MainWindow as parent as this would make @@ -67,15 +69,24 @@ if( m_mode == Interactive ) { m_providersPage = new ChooseProvidersPage(); - m_providersPage.data()->setFields( Controller::availableFields(), m_checkedFields ); - m_providersPage.data()->setProvidersModel( m_providersModel, m_providersModel->selectionModel() ); + m_providersPage->setFields( Controller::availableFields(), m_checkedFields ); + m_providersPage->setProvidersModel( m_providersModel, m_providersModel->selectionModel() ); connect( m_providersPage.data(), &StatSyncing::ChooseProvidersPage::accepted, this, &Process::slotMatchTracks ); connect( m_providersPage.data(), &StatSyncing::ChooseProvidersPage::rejected, this, &Process::slotSaveSizeAndDelete ); - m_dialog.data()->mainWidget()->hide(); // otherwise it may last as a ghost image - m_dialog.data()->setMainWidget( m_providersPage.data() ); // takes ownership + + for( const auto &child : m_dialog->children() ) + { + auto widget = qobject_cast( child ); + if( widget ) + { + widget->hide(); // otherwise it may last as a ghost image + widget->deleteLater(); + } + } + m_providersPage->setParent( m_dialog ); // takes ownership raise(); } else if( m_checkedFields ) @@ -87,9 +98,9 @@ { if( m_providersPage || m_tracksPage ) { - m_dialog.data()->show(); - m_dialog.data()->activateWindow(); - m_dialog.data()->raise(); + m_dialog->show(); + m_dialog->activateWindow(); + m_dialog->raise(); } else m_mode = Interactive; // schedule dialog should be shown when something happens @@ -112,7 +123,7 @@ connect( job, &StatSyncing::MatchTracksJob::incrementProgress, page, &StatSyncing::ChooseProvidersPage::progressBarIncrementProgress ); connect( page, &StatSyncing::ChooseProvidersPage::rejected, job, &StatSyncing::MatchTracksJob::abort ); - connect( m_dialog.data(), &KDialog::finished, job, &StatSyncing::MatchTracksJob::abort ); + connect( m_dialog.data(), &QDialog::finished, job, &StatSyncing::MatchTracksJob::abort ); } else // background operation { @@ -168,25 +179,32 @@ if( m_matchedTracksModel->hasConflict() || m_mode == Interactive ) { m_tracksPage = new MatchedTracksPage(); - MatchedTracksPage *page = m_tracksPage.data(); // convenience - page->setProviders( matchJob->providers() ); - page->setMatchedTracksModel( m_matchedTracksModel ); + m_tracksPage->setProviders( matchJob->providers() ); + m_tracksPage->setMatchedTracksModel( m_matchedTracksModel ); foreach( ProviderPtr provider, matchJob->providers() ) { if( !matchJob->uniqueTracks().value( provider ).isEmpty() ) - page->addUniqueTracksModel( provider, new SingleTracksModel( - matchJob->uniqueTracks().value( provider ), columns, m_options, page ) ); + m_tracksPage->addUniqueTracksModel( provider, new SingleTracksModel( + matchJob->uniqueTracks().value( provider ), columns, m_options, m_tracksPage ) ); if( !matchJob->excludedTracks().value( provider ).isEmpty() ) - page->addExcludedTracksModel( provider, new SingleTracksModel( - matchJob->excludedTracks().value( provider ), columns, m_options, page ) ); + m_tracksPage->addExcludedTracksModel( provider, new SingleTracksModel( + matchJob->excludedTracks().value( provider ), columns, m_options, m_tracksPage ) ); } - page->setTracksToScrobble( m_tracksToScrobble, services ); + m_tracksPage->setTracksToScrobble( m_tracksToScrobble, services ); - connect( page, &StatSyncing::MatchedTracksPage::back, this, &Process::slotBack ); - connect( page, &StatSyncing::MatchedTracksPage::accepted, this, &Process::slotSynchronize ); - connect( page, &StatSyncing::MatchedTracksPage::rejected, this, &Process::slotSaveSizeAndDelete ); - m_dialog.data()->mainWidget()->hide(); // otherwise it may last as a ghost image - m_dialog.data()->setMainWidget( page ); // takes ownership + connect( m_tracksPage, &StatSyncing::MatchedTracksPage::back, this, &Process::slotBack ); + connect( m_tracksPage, &StatSyncing::MatchedTracksPage::accepted, this, &Process::slotSynchronize ); + connect( m_tracksPage, &StatSyncing::MatchedTracksPage::rejected, this, &Process::slotSaveSizeAndDelete ); + for( const auto &child : m_dialog->children() ) + { + auto widget = qobject_cast( child ); + if( widget ) + { + widget->hide(); // otherwise it may last as a ghost image + widget->deleteLater(); + } + } + m_tracksPage->setParent( m_dialog ); // takes ownership raise(); } else // NonInteractive mode without conflict @@ -204,7 +222,7 @@ Process::slotSynchronize() { // disconnect, otherwise we prematurely delete Process and thus m_matchedTracksModel - disconnect( m_dialog.data(), &KDialog::finished, this, &Process::slotSaveSizeAndDelete ); + disconnect( m_dialog.data(), &QDialog::finished, this, &Process::slotSaveSizeAndDelete ); m_dialog.data()->close(); SynchronizeTracksJob *job = new SynchronizeTracksJob( @@ -288,7 +306,7 @@ if( m_dialog ) { KConfigGroup group = Amarok::config( "StatSyncingDialog" ); - m_dialog.data()->saveDialogSize( group ); + group.writeEntry( "geometry", m_dialog->saveGeometry() ); } deleteLater(); } diff --git a/src/statsyncing/Provider.h b/src/statsyncing/Provider.h --- a/src/statsyncing/Provider.h +++ b/src/statsyncing/Provider.h @@ -19,7 +19,6 @@ #include "amarok_export.h" #include "statsyncing/Track.h" -#include "support/QSharedDataPointerMisc.h" // operator<() for ProviderPtr #include #include diff --git a/src/statsyncing/ScrobblingService.h b/src/statsyncing/ScrobblingService.h --- a/src/statsyncing/ScrobblingService.h +++ b/src/statsyncing/ScrobblingService.h @@ -18,16 +18,15 @@ #define STATSYNCING_SCROBBLINGSERVICE_H #include "amarok_export.h" -#include "support/QSharedDataPointerMisc.h" // operator<() for ScrobblingServicePtr #include #include #include -template class KSharedPtr; +template class AmarokSharedPointer; namespace Meta { class Track; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; } namespace StatSyncing diff --git a/src/statsyncing/Track.h b/src/statsyncing/Track.h --- a/src/statsyncing/Track.h +++ b/src/statsyncing/Track.h @@ -20,15 +20,15 @@ #include "amarok_export.h" #include "core/meta/Meta.h" -#include +#include "AmarokSharedPointer.h" #include #include #include #include namespace Meta { - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; } namespace StatSyncing @@ -188,7 +188,7 @@ Q_DISABLE_COPY(Track) }; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; typedef QList TrackList; /** diff --git a/src/statsyncing/collection/CollectionProvider.h b/src/statsyncing/collection/CollectionProvider.h --- a/src/statsyncing/collection/CollectionProvider.h +++ b/src/statsyncing/collection/CollectionProvider.h @@ -20,6 +20,7 @@ #include "core/meta/forward_declarations.h" #include "statsyncing/Provider.h" +#include #include namespace Collections { @@ -69,7 +70,7 @@ Q_DISABLE_COPY(CollectionProvider) /// collection can disappear at any time, use weak pointer to notice it - QWeakPointer m_coll; + QPointer m_coll; QSet m_foundArtists; QString m_currentArtistName; TrackList m_foundTracks; diff --git a/src/statsyncing/collection/CollectionProvider.cpp b/src/statsyncing/collection/CollectionProvider.cpp --- a/src/statsyncing/collection/CollectionProvider.cpp +++ b/src/statsyncing/collection/CollectionProvider.cpp @@ -41,19 +41,19 @@ QString CollectionProvider::id() const { - return m_coll ? m_coll.data()->collectionId() : QString(); + return m_coll ? m_coll->collectionId() : QString(); } QString CollectionProvider::prettyName() const { - return m_coll ? m_coll.data()->prettyName() : QString(); + return m_coll ? m_coll->prettyName() : QString(); } QIcon CollectionProvider::icon() const { - return m_coll ? m_coll.data()->icon() : QIcon(); + return m_coll ? m_coll->icon() : QIcon(); } qint64 @@ -128,7 +128,7 @@ return; } - Collections::QueryMaker *qm = m_coll.data()->queryMaker(); + Collections::QueryMaker *qm = m_coll->queryMaker(); qm->setAutoDelete( true ); qm->setQueryType( Collections::QueryMaker::Artist ); connect( qm, &Collections::QueryMaker::newArtistsReady, @@ -146,7 +146,7 @@ return; } - Collections::QueryMaker *qm = m_coll.data()->queryMaker(); + Collections::QueryMaker *qm = m_coll->queryMaker(); qm->setAutoDelete( true ); qm->setQueryType( Collections::QueryMaker::Track ); m_currentArtistName = artistName; diff --git a/src/statsyncing/models/MatchedTracksModel.cpp b/src/statsyncing/models/MatchedTracksModel.cpp --- a/src/statsyncing/models/MatchedTracksModel.cpp +++ b/src/statsyncing/models/MatchedTracksModel.cpp @@ -117,7 +117,7 @@ return QVariant(); return tupleData( tuple, field, role ); } - else if( index.internalId() >= 0 && index.internalId() < m_matchedTuples.count() ) + else if( index.internalId() < m_matchedTuples.count() ) { TrackTuple tuple = m_matchedTuples.value( index.internalId() ); ProviderPtr provider = tuple.provider( index.row() ); @@ -131,7 +131,7 @@ bool MatchedTracksModel::setData( const QModelIndex &idx, const QVariant &value, int role ) { - if( !idx.isValid() || idx.internalId() < 0 || + if( !idx.isValid() || idx.internalId() >= m_matchedTuples.count() || role != Qt::CheckStateRole ) { diff --git a/src/statsyncing/ui/ChooseProvidersPage.cpp b/src/statsyncing/ui/ChooseProvidersPage.cpp --- a/src/statsyncing/ui/ChooseProvidersPage.cpp +++ b/src/statsyncing/ui/ChooseProvidersPage.cpp @@ -20,21 +20,21 @@ #include "core/meta/support/MetaConstants.h" #include "statsyncing/models/ProvidersModel.h" -#include - #include +#include using namespace StatSyncing; ChooseProvidersPage::ChooseProvidersPage( QWidget *parent, Qt::WindowFlags f ) : QWidget( parent, f ) , m_providersModel( 0 ) { setupUi( this ); - KGuiItem configure = KStandardGuiItem::configure(); - configure.setText( i18n( "Configure Synchronization..." ) ); - buttonBox->addButton( configure, QDialogButtonBox::ActionRole, this, SLOT(openConfiguration()) ); - buttonBox->addButton( KGuiItem( i18n( "Next" ), "go-next" ), QDialogButtonBox::AcceptRole ); + QPushButton *configure = buttonBox->addButton( i18n( "Configure Synchronization..." ), QDialogButtonBox::ActionRole ); + connect( configure, &QPushButton::clicked, this, &ChooseProvidersPage::openConfiguration ); + QPushButton *next = buttonBox->addButton( i18n( "Next" ), QDialogButtonBox::ActionRole ); + next->setIcon( QIcon( "go-next" ) ); + connect( next, &QPushButton::clicked, buttonBox, &QDialogButtonBox::accepted ); connect( buttonBox, &QDialogButtonBox::accepted, this, &ChooseProvidersPage::accepted ); connect( buttonBox, &QDialogButtonBox::rejected, this, &ChooseProvidersPage::rejected ); progressBar->hide(); @@ -180,7 +180,7 @@ void ChooseProvidersPage::openConfiguration() { - App *app = App::instance(); + App *app = pApp; if( app ) app->slotConfigAmarok( "MetadataConfig" ); } diff --git a/src/statsyncing/ui/ChooseProvidersPage.ui b/src/statsyncing/ui/ChooseProvidersPage.ui --- a/src/statsyncing/ui/ChooseProvidersPage.ui +++ b/src/statsyncing/ui/ChooseProvidersPage.ui @@ -59,7 +59,7 @@
- + QDialogButtonBox::Cancel @@ -69,9 +69,9 @@ - KDialogButtonBox + QDialogButtonBox QDialogButtonBox -
kdialogbuttonbox.h
+
qdialogbuttonbox.h
diff --git a/src/statsyncing/ui/ConfigureProviderDialog.cpp b/src/statsyncing/ui/ConfigureProviderDialog.cpp --- a/src/statsyncing/ui/ConfigureProviderDialog.cpp +++ b/src/statsyncing/ui/ConfigureProviderDialog.cpp @@ -18,7 +18,7 @@ #include "statsyncing/Provider.h" -#include +#include #include #include diff --git a/src/statsyncing/ui/CreateProviderDialog.cpp b/src/statsyncing/ui/CreateProviderDialog.cpp --- a/src/statsyncing/ui/CreateProviderDialog.cpp +++ b/src/statsyncing/ui/CreateProviderDialog.cpp @@ -20,7 +20,7 @@ #include "statsyncing/Provider.h" #include "core/support/Components.h" -#include +#include #include #include diff --git a/src/statsyncing/ui/MatchedTracksPage.cpp b/src/statsyncing/ui/MatchedTracksPage.cpp --- a/src/statsyncing/ui/MatchedTracksPage.cpp +++ b/src/statsyncing/ui/MatchedTracksPage.cpp @@ -23,11 +23,9 @@ #include "statsyncing/models/MatchedTracksModel.h" #include "statsyncing/ui/TrackDelegate.h" -#include -#include - #include #include +#include #include #include @@ -120,7 +118,7 @@ connect( proxyModel, &QSortFilterProxyModel::rowsRemoved, this, &MatchedTracksPage::refresh##Name##StatusText ); \ name##TreeView->setModel( m_##name##ProxyModel ); \ name##TreeView->setItemDelegate( new TrackDelegate( name##TreeView ) ); \ - connect( name##FilterLine, SIGNAL(textChanged(QString)), proxyModel, SLOT(setFilterFixedString(QString)) ); \ + connect( name##FilterLine, &QLineEdit::textChanged, proxyModel, &QSortFilterProxyModel::setFilterFixedString ); \ name##TreeView->header()->setStretchLastSection( false ); \ name##TreeView->header()->setDefaultSectionSize( 80 ); @@ -134,13 +132,14 @@ connect( excludedFilterCombo, QOverload::of(&QComboBox::currentIndexChanged), this, &MatchedTracksPage::changeExcludedTracksProvider ); - KGuiItem configure = KStandardGuiItem::configure(); - configure.setText( i18n( "Configure Synchronization..." ) ); - buttonBox->addButton( configure, QDialogButtonBox::ActionRole, this, SLOT(openConfiguration()) ); - KPushButton *back = buttonBox->addButton( KStandardGuiItem::back(), - QDialogButtonBox::ActionRole ); - buttonBox->addButton( KGuiItem( i18n( "Synchronize" ), "document-save" ), - QDialogButtonBox::AcceptRole ); + QPushButton *configure = buttonBox->addButton( i18n( "Configure Synchronization..." ), QDialogButtonBox::ActionRole ); + connect( configure, &QPushButton::clicked, this, &MatchedTracksPage::openConfiguration ); + + QPushButton *back = buttonBox->addButton( i18n( "Back" ), QDialogButtonBox::ActionRole ); + + QPushButton *synchronize = buttonBox->addButton( i18n( "Synchronize" ), QDialogButtonBox::AcceptRole ); + synchronize->setIcon( QIcon( "document-save" ) ); + connect( back, &QAbstractButton::clicked, this, &MatchedTracksPage::back ); connect( buttonBox, &QDialogButtonBox::accepted, this, &MatchedTracksPage::accepted ); connect( buttonBox, &QDialogButtonBox::rejected, this, &MatchedTracksPage::rejected ); @@ -511,7 +510,7 @@ void MatchedTracksPage::openConfiguration() { - App *app = App::instance(); + App *app = pApp; if( app ) app->slotConfigAmarok( "MetadataConfig" ); } @@ -524,6 +523,6 @@ QVariant headerData = model->headerData( column, Qt::Horizontal, CommonModel::ResizeModeRole ); QHeaderView::ResizeMode mode = QHeaderView::ResizeMode( headerData.toInt() ); - header->setResizeMode( column, mode ); + header->setSectionResizeMode( column, mode ); } } diff --git a/src/statsyncing/ui/MatchedTracksPage.ui b/src/statsyncing/ui/MatchedTracksPage.ui --- a/src/statsyncing/ui/MatchedTracksPage.ui +++ b/src/statsyncing/ui/MatchedTracksPage.ui @@ -24,8 +24,8 @@ - - + + Filter Tracks... @@ -155,8 +155,8 @@ - - + + Filter Tracks... @@ -211,8 +211,8 @@ - - + + Filter Tracks... @@ -278,7 +278,7 @@ - + QDialogButtonBox::Cancel @@ -288,14 +288,14 @@ - KDialogButtonBox + QDialogButtonBox QDialogButtonBox -
kdialogbuttonbox.h
+
qdialogbuttonbox.h
- KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
KSeparator diff --git a/src/statsyncing/ui/TrackDelegate.cpp b/src/statsyncing/ui/TrackDelegate.cpp --- a/src/statsyncing/ui/TrackDelegate.cpp +++ b/src/statsyncing/ui/TrackDelegate.cpp @@ -20,9 +20,9 @@ #include "core/support/Debug.h" #include "statsyncing/models/CommonModel.h" -#include + #include -#include +#include #include #include @@ -88,10 +88,8 @@ { if( value.type() == QVariant::DateTime ) { - KLocale *klocale = KGlobal::locale(); QDateTime date = value.toDateTime(); - return date.isValid() ? klocale->formatDateTime( date, KLocale::FancyShortDate ) - : QString(); + return date.isValid() ? QLocale().toString( date, QLocale::ShortFormat ) : QString(); } return QStyledItemDelegate::displayText( value, locale ); } diff --git a/src/statusbar/CompoundProgressBar.cpp b/src/statusbar/CompoundProgressBar.cpp --- a/src/statusbar/CompoundProgressBar.cpp +++ b/src/statusbar/CompoundProgressBar.cpp @@ -19,11 +19,11 @@ #include "core/support/Debug.h" #include -#include - -#include #include +#include + + CompoundProgressBar::CompoundProgressBar( QWidget *parent ) : ProgressBar( parent ) , m_mutex( QMutex::Recursive ) diff --git a/src/statusbar/LongMessageWidget.cpp b/src/statusbar/LongMessageWidget.cpp --- a/src/statusbar/LongMessageWidget.cpp +++ b/src/statusbar/LongMessageWidget.cpp @@ -19,7 +19,7 @@ #include "core/support/Debug.h" -#include +#include #include #include @@ -47,10 +47,8 @@ QPalette p = QToolTip::palette(); setPalette( p ); - KHBox *hbox = new KHBox( this ); - layout()->addWidget( hbox ); - - hbox->setSpacing( 12 ); + BoxWidget *hbox = new BoxWidget( false, this ); + hbox->layout()->setSpacing( 12 ); m_countdownFrame = new CountdownFrame( hbox ); m_countdownFrame->setObjectName( "counterVisual" ); @@ -69,11 +67,9 @@ alabel->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); alabel->setPalette( p ); - hbox = new KHBox( this ); - layout()->addWidget( hbox ); + hbox = new BoxWidget( false, this ); - KPushButton *button = new KPushButton( KStandardGuiItem::close(), hbox ); - button->setObjectName( "closeButton" ); + QPushButton *button = new QPushButton( QStringLiteral( "closeButton" ), hbox ); connect( button, &QAbstractButton::clicked, this, &LongMessageWidget::close ); reposition(); diff --git a/src/statusbar/PopupWidget.h b/src/statusbar/PopupWidget.h --- a/src/statusbar/PopupWidget.h +++ b/src/statusbar/PopupWidget.h @@ -17,9 +17,9 @@ #ifndef POPUPWIDGET_H #define POPUPWIDGET_H -#include +#include "widgets/BoxWidget.h" -class PopupWidget : public KVBox +class PopupWidget : public BoxWidget { public: explicit PopupWidget( QWidget *anchor, const QString &name = QString() ); diff --git a/src/statusbar/PopupWidget.cpp b/src/statusbar/PopupWidget.cpp --- a/src/statusbar/PopupWidget.cpp +++ b/src/statusbar/PopupWidget.cpp @@ -20,9 +20,11 @@ #include "core/support/Debug.h" +#include + PopupWidget::PopupWidget( QWidget *anchor, const QString &name ) - : KVBox( The::mainWindow() ) + : BoxWidget( true, The::mainWindow() ) { Q_UNUSED( name ); Q_UNUSED( anchor ); @@ -36,7 +38,6 @@ setMinimumHeight( 26 ); setContentsMargins( 4, 4, 4, 4 ); - setSpacing( 0 ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); reposition(); diff --git a/src/statusbar/ProgressBar.h b/src/statusbar/ProgressBar.h --- a/src/statusbar/ProgressBar.h +++ b/src/statusbar/ProgressBar.h @@ -19,8 +19,6 @@ #include "amarok_export.h" -#include - #include #include #include diff --git a/src/statusbar/ProgressBar.cpp b/src/statusbar/ProgressBar.cpp --- a/src/statusbar/ProgressBar.cpp +++ b/src/statusbar/ProgressBar.cpp @@ -22,7 +22,7 @@ #include #include -#include +#include ProgressBar::ProgressBar( QWidget *parent ) : QFrame( parent ) diff --git a/src/support/QSharedDataPointerMisc.h b/src/support/QSharedDataPointerMisc.h deleted file mode 100644 --- a/src/support/QSharedDataPointerMisc.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************************** - * Copyright (c) 2012 Matěj Laitl * - * * - * This program is free software; you can redistribute it and/or modify it under * - * the terms of the GNU General Public License as published by the Free Software * - * Foundation; either version 2 of the License, or (at your option) any later * - * version. * - * * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * - * PARTICULAR PURPOSE. See the GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along with * - * this program. If not, see . * - ****************************************************************************************/ - -#ifndef QSHAREDDATAPOINTERMISC -#define QSHAREDDATAPOINTERMISC - -#include -#include - -/** - * @brief QSharedDataPointerMisc.h - * - * Qt doesn't provide operator<, operator== and qHash() for - * Q{,Explicitly}SharedDataPointer. - * - * Define those so that you can use Q{,Explicitly}SharedDataPointers in QMaps, - * QHashes etc. - * - * QMap needs operator< for key, however - * QExplicitlySharedDataPointer silently coerces to bool, which gives really - * hard to find bugs, because it makes QMap with it useless. - */ - -/** - * Define trivial comparison operator for QSharedDataPointer so that it doesn't - * coerce to bool. - */ -template -Q_INLINE_TEMPLATE bool operator<( const QSharedDataPointer &l, const QSharedDataPointer &r ) -{ - return l.data() < r.data(); -} - -/** - * Define trivial comparison operator for QExplicitlySharedDataPointer so - * that it doesn't coerce to bool. - */ -template -Q_INLINE_TEMPLATE bool operator<( const QExplicitlySharedDataPointer &l, const QExplicitlySharedDataPointer &r ) -{ - return l.data() < r.data(); -} - -/** - * Define trivial equivalence operator for QSharedDataPointer so that it can - * be used in Qt containers. - */ -template -Q_INLINE_TEMPLATE bool operator==( const QSharedDataPointer &l, const QSharedDataPointer &r ) -{ - return l.data() == r.data(); -} - -/** - * Define trivial equivalence operator for QExplicitlySharedDataPointer so - * that it can be used in Qt containers. - */ -template -Q_INLINE_TEMPLATE bool operator==( const QExplicitlySharedDataPointer &l, const QExplicitlySharedDataPointer &r ) -{ - return l.data() == r.data(); -} - -/** - * Define trivial qHash() for QSharedDataPointer so that it can - * be used in Qt containers. - */ -template -Q_INLINE_TEMPLATE uint qHash( const QSharedDataPointer &ptr ) -{ - return qHash( ptr.data() ); -} - -/** - * Define trivial qHash() for QExplicitlySharedDataPointer so that it can be - * used in Qt containers. - */ -template -Q_INLINE_TEMPLATE uint qHash( const QExplicitlySharedDataPointer &ptr ) -{ - return qHash( ptr.data() ); -} - -#endif // QSHAREDDATAPOINTERMISC diff --git a/src/toolbar/MainToolbar.cpp b/src/toolbar/MainToolbar.cpp --- a/src/toolbar/MainToolbar.cpp +++ b/src/toolbar/MainToolbar.cpp @@ -164,7 +164,7 @@ m_slider = new Amarok::TimeSlider( info ); connect( m_slider, &Amarok::TimeSlider::sliderReleased, The::engineController(), &EngineController::seekTo ); connect( m_slider, &Amarok::TimeSlider::valueChanged, this, &MainToolbar::setLabelTime ); - connect( App::instance(), &App::settingsChanged, this, &MainToolbar::layoutProgressBar ); + connect( pApp, &App::settingsChanged, this, &MainToolbar::layoutProgressBar ); m_remainingTimeLabel = new QLabel( info ); m_remainingTimeLabel->setAlignment( Qt::AlignVCenter | Qt::AlignLeft ); @@ -893,7 +893,6 @@ m_lastTime = secs; m_lastRemainingTime = remainingSecs; - } if(relayout) diff --git a/src/toolbar/SlimToolbar.cpp b/src/toolbar/SlimToolbar.cpp --- a/src/toolbar/SlimToolbar.cpp +++ b/src/toolbar/SlimToolbar.cpp @@ -26,8 +26,8 @@ #include #include -#include -#include +#include +#include #include #include diff --git a/src/toolbar/VolumePopupButton.cpp b/src/toolbar/VolumePopupButton.cpp --- a/src/toolbar/VolumePopupButton.cpp +++ b/src/toolbar/VolumePopupButton.cpp @@ -20,10 +20,11 @@ #include "ActionClasses.h" #include "EngineController.h" #include "core/support/Amarok.h" +#include "widgets/BoxWidget.h" #include "widgets/SliderWidget.h" -#include -#include +#include +#include #include #include @@ -39,18 +40,14 @@ //create the volume popup m_volumeMenu = new QMenu( this ); - KVBox * mainBox = new KVBox( this ); + BoxWidget * mainBox = new BoxWidget( true, this ); m_volumeLabel= new QLabel( mainBox ); m_volumeLabel->setAlignment( Qt::AlignHCenter ); - KHBox * sliderBox = new KHBox( mainBox ); + BoxWidget *sliderBox = new BoxWidget( false, mainBox ); m_volumeSlider = new Amarok::VolumeSlider( Amarok::VOLUME_MAX, sliderBox, false ); m_volumeSlider->setFixedHeight( 170 ); - mainBox->setMargin( 0 ); - mainBox->setSpacing( 0 ); - sliderBox->setSpacing( 0 ); - sliderBox->setMargin( 0 ); mainBox->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed ); sliderBox->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed ); diff --git a/src/transcoding/CMakeLists.txt b/src/transcoding/CMakeLists.txt --- a/src/transcoding/CMakeLists.txt +++ b/src/transcoding/CMakeLists.txt @@ -24,8 +24,6 @@ add_library(amarok-transcoding SHARED ${amarok_transcoding_SRCS}) target_link_libraries(amarok-transcoding - KF5::KDELibs4Support - KF5::KIOCore KF5::ThreadWeaver Qt5::Core diff --git a/src/transcoding/TranscodingAssistantDialog.h b/src/transcoding/TranscodingAssistantDialog.h --- a/src/transcoding/TranscodingAssistantDialog.h +++ b/src/transcoding/TranscodingAssistantDialog.h @@ -24,16 +24,15 @@ #include "core/transcoding/TranscodingFormat.h" #include "core/transcoding/TranscodingConfiguration.h" -#include #include class QListWidget; namespace Transcoding { /** - * A KDialog for initiating a transcoding operation. + * A QDialog for initiating a transcoding operation. * @author Téo Mrnjavac */ class AMAROK_TRANSCODING_EXPORT AssistantDialog : public KPageDialog diff --git a/src/transcoding/TranscodingAssistantDialog.cpp b/src/transcoding/TranscodingAssistantDialog.cpp --- a/src/transcoding/TranscodingAssistantDialog.cpp +++ b/src/transcoding/TranscodingAssistantDialog.cpp @@ -20,10 +20,10 @@ #include "core/transcoding/TranscodingController.h" #include -#include +#include + #include #include -#include #include using namespace Transcoding; diff --git a/src/transcoding/amarok_transcoding_export.h b/src/transcoding/amarok_transcoding_export.h --- a/src/transcoding/amarok_transcoding_export.h +++ b/src/transcoding/amarok_transcoding_export.h @@ -17,17 +17,17 @@ #ifndef AMAROK_TRANSCODING_EXPORT_H #define AMAROK_TRANSCODING_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_TRANSCODING_EXPORT # ifdef MAKE_AMAROK_TRANSCODING_LIB /* We are building this library */ -# define AMAROK_TRANSCODING_EXPORT KDE_EXPORT +# define AMAROK_TRANSCODING_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_TRANSCODING_EXPORT KDE_IMPORT +# define AMAROK_TRANSCODING_EXPORT Q_DECL_IMPORT # endif//MAKE_TRANSCODING_LIB #endif// AMAROK_EXPORT diff --git a/src/widgets/AlbumBreadcrumbWidget.h b/src/widgets/AlbumBreadcrumbWidget.h --- a/src/widgets/AlbumBreadcrumbWidget.h +++ b/src/widgets/AlbumBreadcrumbWidget.h @@ -18,8 +18,7 @@ #define AMAROK_ALBUMBREADCRUMBWIDGET_H #include "core/meta/forward_declarations.h" - -#include +#include "widgets/BoxWidget.h" class BreadcrumbItemButton; @@ -38,7 +37,7 @@ * * TODO: list artists/albums when clicking on the '>' to be more useful */ -class AlbumBreadcrumbWidget : public KHBox +class AlbumBreadcrumbWidget : public BoxWidget { Q_OBJECT diff --git a/src/widgets/AlbumBreadcrumbWidget.cpp b/src/widgets/AlbumBreadcrumbWidget.cpp --- a/src/widgets/AlbumBreadcrumbWidget.cpp +++ b/src/widgets/AlbumBreadcrumbWidget.cpp @@ -19,11 +19,13 @@ #include "core/meta/Meta.h" #include "widgets/BreadcrumbItemButton.h" +#include #include -#include + +#include AlbumBreadcrumbWidget::AlbumBreadcrumbWidget( const Meta::AlbumPtr album, QWidget *parent ) - : KHBox( parent ) + : BoxWidget( false, parent ) , m_album( album ) { const QIcon artistIcon = QIcon::fromTheme( "filename-artist-amarok" ); @@ -35,9 +37,10 @@ QWidget *spacer = new QWidget( this ); - setStretchFactor( m_artistButton, 1 ); - setStretchFactor( m_albumButton, 1 ); - setStretchFactor( spacer, 1 ); + auto l = static_cast( layout() ); + l->setStretchFactor( m_artistButton, 1 ); + l->setStretchFactor( m_albumButton, 1 ); + l->setStretchFactor( spacer, 1 ); connect( m_artistButton, &BreadcrumbItemButton::clicked, this, &AlbumBreadcrumbWidget::slotArtistClicked ); connect( m_albumButton, &BreadcrumbItemButton::clicked, this, &AlbumBreadcrumbWidget::slotAlbumClicked ); diff --git a/src/widgets/BookmarkPopup.cpp b/src/widgets/BookmarkPopup.cpp --- a/src/widgets/BookmarkPopup.cpp +++ b/src/widgets/BookmarkPopup.cpp @@ -22,7 +22,7 @@ #include "core/support/Debug.h" #include "widgets/BookmarkTriangle.h" -#include +#include #include #include @@ -34,7 +34,7 @@ { m_timer = new QTimer ( this ); - connect ( m_timer, SIGNAL (timeout()), this, SLOT (hideTimerAction()) ); + connect ( m_timer, &QTimer::timeout, this, &BookmarkPopup::hideTimerAction ); m_displayNeeded = true; m_hasMouseOver = false; @@ -47,7 +47,7 @@ m_edit = new QLineEdit ( m_label, 0 ); m_edit->setVisible ( false ); m_edit->setAlignment ( Qt::AlignHCenter ); - connect ( m_edit, SIGNAL (returnPressed()), this, SLOT (editValueChanged()) ); + connect ( m_edit, &QLineEdit::returnPressed, this, &BookmarkPopup::editValueChanged ); QVBoxLayout * layout = new QVBoxLayout; layout->setContentsMargins ( 1, 0, 0, 0 ); diff --git a/src/widgets/BookmarkTriangle.cpp b/src/widgets/BookmarkTriangle.cpp --- a/src/widgets/BookmarkTriangle.cpp +++ b/src/widgets/BookmarkTriangle.cpp @@ -27,7 +27,7 @@ #include "core/meta/support/MetaUtility.h" #include "core/support/Debug.h" -#include +#include #include #include diff --git a/src/widgets/BoxWidget.h b/src/widgets/BoxWidget.h new file mode 100644 --- /dev/null +++ b/src/widgets/BoxWidget.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 Malte Veerman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifndef BOXWIDGET_H +#define BOXWIDGET_H + +#include "amarok_export.h" + +#include + +class QBoxLayout; + +/** + * A Simple QFrame subclass that automatically adds new children to its layout + */ +class AMAROK_EXPORT BoxWidget : public QFrame +{ + Q_OBJECT + +public: + /** + * Constructor + * @param vertical defines if this BoxWidget has a vertical Layout. + * Has a horizontal if false. + */ + explicit BoxWidget( bool vertical = true, QWidget *parent = Q_NULLPTR ); + virtual ~BoxWidget() {} + + QBoxLayout* layout() const; + +protected: + virtual void childEvent(QChildEvent* event) Q_DECL_OVERRIDE; +}; + +#endif // BOXWIDGET_H diff --git a/src/widgets/BoxWidget.cpp b/src/widgets/BoxWidget.cpp new file mode 100644 --- /dev/null +++ b/src/widgets/BoxWidget.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 Malte Veerman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include "BoxWidget.h" + +#include +#include +#include + +BoxWidget::BoxWidget( bool vertical, QWidget *parent ) : QFrame( parent ) +{ + if( vertical ) + setLayout( new QVBoxLayout ); + else + setLayout( new QHBoxLayout ); + + layout()->setSpacing( 0 ); + layout()->setMargin( 0 ); +} + +QBoxLayout* BoxWidget::layout() const +{ + return static_cast( QWidget::layout() ); +} + +void BoxWidget::childEvent(QChildEvent *event) +{ + switch ( event->type() ) + { + case QEvent::ChildAdded: + { + if ( event->child()->isWidgetType() ) + { + QWidget *widget = static_cast( event->child() ); + layout()->addWidget( widget ); + } + break; + } + case QEvent::ChildRemoved: + { + if ( event->child()->isWidgetType() ) + { + QWidget *widget = static_cast( event->child() ); + layout()->removeWidget( widget ); + } + break; + } + default: + break; + } + QFrame::childEvent( event ); +} diff --git a/src/widgets/BreadcrumbItemButton.cpp b/src/widgets/BreadcrumbItemButton.cpp --- a/src/widgets/BreadcrumbItemButton.cpp +++ b/src/widgets/BreadcrumbItemButton.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include diff --git a/src/widgets/ComboBox.h b/src/widgets/ComboBox.h --- a/src/widgets/ComboBox.h +++ b/src/widgets/ComboBox.h @@ -26,7 +26,7 @@ { /** - * The Amarok::ComboBox class implements a few enhancements to an editable KComboBox. + * The Amarok::ComboBox class implements a few enhancements to an editable QComboBox. * Namely: * 1. Pressing the escape key clears the edit text * 2. Pressing down emits the downPressed signal diff --git a/src/widgets/FilenameLayoutWidget.h b/src/widgets/FilenameLayoutWidget.h --- a/src/widgets/FilenameLayoutWidget.h +++ b/src/widgets/FilenameLayoutWidget.h @@ -36,7 +36,7 @@ class QVBoxLayout; class QHBoxLayout; -class KLineEdit; +class QLineEdit; //Holds the TokenLayoutWidget and TokenPool and handles their interaction. Also holds a number of case and substitution options for the filename scheme. class AMAROK_EXPORT FilenameLayoutWidget : public QWidget @@ -142,7 +142,7 @@ QLabel *m_syntaxLabel; QFrame *m_filenameLayout; - KLineEdit *m_filenameLayoutEdit; + QLineEdit *m_filenameLayoutEdit; /** The name of the category used for storing the configuration */ QString m_configCategory; diff --git a/src/widgets/FilenameLayoutWidget.cpp b/src/widgets/FilenameLayoutWidget.cpp --- a/src/widgets/FilenameLayoutWidget.cpp +++ b/src/widgets/FilenameLayoutWidget.cpp @@ -28,8 +28,8 @@ #include "core/support/Debug.h" #include "core/meta/support/MetaConstants.h" -#include -#include +#include +#include #include #include @@ -137,7 +137,7 @@ m_syntaxLabel = new QLabel( this ); // placeholder for format description advancedLayout->addWidget( m_syntaxLabel ); - m_filenameLayoutEdit = new KLineEdit( this ); + m_filenameLayoutEdit = new QLineEdit( this ); advancedLayout->addWidget( m_filenameLayoutEdit ); m_schemeStack->addWidget( advancedLayoutWidget ); @@ -166,9 +166,9 @@ connect( m_updatePresetButton, &QPushButton::clicked, this, &FilenameLayoutWidget::slotUpdateFormat ); - connect( m_filenameLayoutEdit, &KLineEdit::textChanged, + connect( m_filenameLayoutEdit, &QLineEdit::textChanged, this, &FilenameLayoutWidget::schemeChanged ); - connect( m_filenameLayoutEdit, &KLineEdit::textChanged, + connect( m_filenameLayoutEdit, &QLineEdit::textChanged, this, &FilenameLayoutWidget::slotUpdatePresetButton ); } @@ -431,7 +431,7 @@ FilenameLayoutWidget::slotAddFormat() { bool ok = false; - QString name = KInputDialog::getText( i18n( "New Preset" ), i18n( "Preset Name" ), i18n( "New Preset" ), &ok, this ); + QString name = QInputDialog::getText( this, i18n( "New Preset" ), i18n( "Preset Name" ), QLineEdit::Normal, i18n( "New Preset" ), &ok ); if( !ok ) return; // user canceled. diff --git a/src/widgets/HintLineEdit.h b/src/widgets/HintLineEdit.h --- a/src/widgets/HintLineEdit.h +++ b/src/widgets/HintLineEdit.h @@ -17,13 +17,13 @@ #ifndef HINTLINEEDIT_H #define HINTLINEEDIT_H -#include //baseclass +#include //baseclass -class KVBox; +class BoxWidget; class QLabel; class QWidget; -class HintLineEdit : public KLineEdit +class HintLineEdit : public QLineEdit { Q_OBJECT @@ -39,7 +39,7 @@ private: void init(); - KVBox *m_vbox; + BoxWidget *m_vbox; QLabel *m_hint; }; diff --git a/src/widgets/HintLineEdit.cpp b/src/widgets/HintLineEdit.cpp --- a/src/widgets/HintLineEdit.cpp +++ b/src/widgets/HintLineEdit.cpp @@ -16,29 +16,29 @@ #include "HintLineEdit.h" -#include +#include "widgets/BoxWidget.h" #include #include HintLineEdit::HintLineEdit( const QString &hint, const QString &text, QWidget *parent ) - : KLineEdit( text, 0 ) - , m_vbox( new KVBox( parent ) ) + : QLineEdit( text, 0 ) + , m_vbox( new BoxWidget( true, parent ) ) { init(); m_hint->setText( hint ); } HintLineEdit::HintLineEdit( const QString &text, QWidget *parent ) - : KLineEdit( text, 0 ) - , m_vbox( new KVBox( parent ) ) + : QLineEdit( text, 0 ) + , m_vbox( new BoxWidget( true, parent ) ) { init(); } HintLineEdit::HintLineEdit( QWidget *parent ) - : KLineEdit( 0 ) - , m_vbox( new KVBox( parent ) ) + : QLineEdit( 0 ) + , m_vbox( new BoxWidget( true, parent ) ) { init(); } diff --git a/src/widgets/LineEdit.h b/src/widgets/LineEdit.h --- a/src/widgets/LineEdit.h +++ b/src/widgets/LineEdit.h @@ -17,20 +17,20 @@ #ifndef AMAROK_LINE_EDIT_H #define AMAROK_LINE_EDIT_H -#include //baseclass +#include //baseclass class QKeyEvent; namespace Amarok { /** - * The Amarok::LineEdit class implements a few enhancements to KLineEdit + * The Amarok::LineEdit class implements a few enhancements to QLineEdit * Namely: * 1. Pressing the escape key clears the contents * 2. Pressing down emits the downPressed signal * 3. Pressing up emits the upPressed signal */ - class LineEdit : public KLineEdit + class LineEdit : public QLineEdit { Q_OBJECT diff --git a/src/widgets/LineEdit.cpp b/src/widgets/LineEdit.cpp --- a/src/widgets/LineEdit.cpp +++ b/src/widgets/LineEdit.cpp @@ -22,7 +22,7 @@ { LineEdit::LineEdit( QWidget *parent ) - : KLineEdit( parent ) + : QLineEdit( parent ) { } @@ -46,7 +46,7 @@ emit upPressed(); return; } - KLineEdit::keyPressEvent( event ); + QLineEdit::keyPressEvent( event ); } } diff --git a/src/widgets/MetaQueryWidget.h b/src/widgets/MetaQueryWidget.h --- a/src/widgets/MetaQueryWidget.h +++ b/src/widgets/MetaQueryWidget.h @@ -22,21 +22,20 @@ #define AMAROK_METAQUERY_H #include -#include +#include #include "core/meta/forward_declarations.h" #include "core/meta/support/MetaConstants.h" #include -#include +#include class QFrame; class QGridLayout; class QHBoxLayout; -class QVBoxLayout; class QLabel; class QToolButton; +class QVBoxLayout; class KToolBar; -class KVBox; namespace Collections { @@ -58,15 +57,15 @@ template void connectChanged( typename QtPrivate::FunctionPointer::Object *receiver, Func slot ) { - connect( m_timeEdit, static_cast(&KIntSpinBox::valueChanged), + connect( m_timeEdit, QOverload::of(&QSpinBox::valueChanged), receiver, slot ); - connect( m_unitSelection, static_cast(&KComboBox::currentIndexChanged), + connect( m_unitSelection, QOverload::of(&QComboBox::currentIndexChanged), receiver, slot ); } protected: - KIntSpinBox *m_timeEdit; - KComboBox *m_unitSelection; + QSpinBox *m_timeEdit; + QComboBox *m_unitSelection; private Q_SLOTS: void slotUpdateComboBoxLabels( int value ); @@ -217,15 +216,15 @@ QVBoxLayout* m_layoutValueLabels; QVBoxLayout* m_layoutValueValues; - KComboBox* m_fieldSelection; + QComboBox* m_fieldSelection; QLabel* m_andLabel; - KComboBox* m_compareSelection; + QComboBox* m_compareSelection; QWidget* m_valueSelection1; QWidget* m_valueSelection2; Filter m_filter; - QMap< QObject*, QWeakPointer > m_runningQueries; + QMap< QObject*, QPointer > m_runningQueries; }; #endif diff --git a/src/widgets/MetaQueryWidget.cpp b/src/widgets/MetaQueryWidget.cpp --- a/src/widgets/MetaQueryWidget.cpp +++ b/src/widgets/MetaQueryWidget.cpp @@ -37,8 +37,7 @@ #include #include -#include -#include +#include #include using namespace Amarok; @@ -48,12 +47,12 @@ TimeDistanceWidget::TimeDistanceWidget( QWidget *parent ) : QWidget( parent ) { - m_timeEdit = new KIntSpinBox(this); + m_timeEdit = new QSpinBox(this); m_timeEdit->setMinimum( 0 ); m_timeEdit->setMaximum( 600 ); - m_unitSelection = new KComboBox(this); - connect( m_timeEdit, QOverload::of(&KIntSpinBox::valueChanged), + m_unitSelection = new QComboBox(this); + connect( m_timeEdit, QOverload::of(&QSpinBox::valueChanged), this, &TimeDistanceWidget::slotUpdateComboBoxLabels ); for (int i = 0; i < 7; ++i) { m_unitSelection->addItem( QString() ); @@ -299,7 +298,7 @@ emit changed(m_filter); } -static void addIconItem( KComboBox *box, qint64 field ) +static void addIconItem( QComboBox *box, qint64 field ) { QString icon = Meta::iconForField( field ); QString text = Meta::i18nForField( field ); @@ -312,7 +311,7 @@ void MetaQueryWidget::makeFieldSelection() { - m_fieldSelection = new KComboBox( this ); + m_fieldSelection = new QComboBox( this ); if (!m_onlyNumeric) { m_fieldSelection->addItem( i18n( "Simple Search" ), 0 ); @@ -346,7 +345,7 @@ if (!m_onlyNumeric) addIconItem( m_fieldSelection, Meta::valLabel ); addIconItem( m_fieldSelection, Meta::valModified ); - connect( m_fieldSelection, QOverload::of(&KComboBox::currentIndexChanged), + connect( m_fieldSelection, QOverload::of(&QComboBox::currentIndexChanged), this, &MetaQueryWidget::fieldChanged ); } @@ -560,7 +559,7 @@ void MetaQueryWidget::numValueFormatChanged(int index) { - KComboBox* combo = static_cast(sender()); + QComboBox* combo = static_cast(sender()); if( combo ) { m_filter.numValue = combo->itemData( index ).toInt(); @@ -607,7 +606,7 @@ else if( isDate(field) ) { - m_compareSelection = new KComboBox(); + m_compareSelection = new QComboBox(); m_compareSelection->addItem( conditionToString( Equals, field ), (int)Equals ); m_compareSelection->addItem( conditionToString( LessThan, field ), (int)LessThan ); m_compareSelection->addItem( conditionToString( GreaterThan, field ), (int)GreaterThan ); @@ -617,15 +616,15 @@ } else if( isNumeric(field) ) { - m_compareSelection = new KComboBox(); + m_compareSelection = new QComboBox(); m_compareSelection->addItem( conditionToString( Equals, field ), (int)Equals ); m_compareSelection->addItem( conditionToString( LessThan, field ), (int)LessThan ); m_compareSelection->addItem( conditionToString( GreaterThan, field ), (int)GreaterThan ); m_compareSelection->addItem( conditionToString( Between, field ), (int)Between ); } else { - m_compareSelection = new KComboBox(); + m_compareSelection = new QComboBox(); m_compareSelection->addItem( conditionToString( Contains, field ), (int)Contains ); m_compareSelection->addItem( conditionToString( Equals, field ), (int)Equals ); } @@ -640,7 +639,7 @@ } m_compareSelection->setCurrentIndex( index == -1 ? 0 : index ); - connect( m_compareSelection, QOverload::of(&KComboBox::currentIndexChanged), + connect( m_compareSelection, QOverload::of(&QComboBox::currentIndexChanged), this, &MetaQueryWidget::compareChanged ); } @@ -712,7 +711,7 @@ if( populateQuery != 0 ) { - m_runningQueries.insert(populateQuery, QWeakPointer(combo)); + m_runningQueries.insert(populateQuery, QPointer(combo)); connect( populateQuery, &Collections::QueryMaker::newResultReady, this, &MetaQueryWidget::populateComboBox ); connect( populateQuery, &Collections::QueryMaker::queryDone, @@ -727,7 +726,7 @@ combo->completionObject()->setIgnoreCase( true ); combo->setCompletionMode( KCompletion::CompletionPopup ); - combo->setInsertPolicy( QComboBox::InsertAtTop ); + combo->setInsertPolicy( KComboBox::InsertAtTop ); m_valueSelection1 = combo; } @@ -748,7 +747,7 @@ if( !query ) return; - QWeakPointer combo = m_runningQueries.value(query); + QPointer combo = m_runningQueries.value(query); if( combo.isNull() ) return; @@ -760,21 +759,21 @@ const QSet dataSet = results.toSet(); QStringList dataList = dataSet.toList(); dataList.sort(); - combo.data()->addItems( dataList ); + combo->addItems( dataList ); - KCompletion* comp = combo.data()->completionObject(); + KCompletion* comp = combo->completionObject(); comp->setItems( dataList ); // reset the text and re-enable the signal combo.data()->setEditText( m_filter.value ); - connect( combo.data(), &KComboBox::editTextChanged, + connect( combo.data(), &QComboBox::editTextChanged, this, &MetaQueryWidget::valueChanged ); } void MetaQueryWidget::makeFormatComboSelection() { - KComboBox* combo = new KComboBox( this ); + QComboBox* combo = new QComboBox( this ); combo->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Preferred ); QStringList filetypes = Amarok::FileTypeSupport::possibleFileTypes(); for (int listpos=0;listposfindData( (int)m_filter.numValue ); combo->setCurrentIndex( index == -1 ? 0 : index ); - connect( combo, QOverload::of(&KComboBox::currentIndexChanged), + connect( combo, QOverload::of(&QComboBox::currentIndexChanged), this, &MetaQueryWidget::numValueFormatChanged ); m_valueSelection1 = combo; @@ -840,7 +839,7 @@ timeSpin->setDisplayFormat( displayFormat ); timeSpin->setMinimumTime( QTime( 0, 0, 0 ) ); timeSpin->setMaximumTime( QTime( maxHours - 1, 59, 59 ) ); - timeSpin->setTime( QTime().addSecs( m_filter.numValue ) ); + timeSpin->setTime( QTime(0, 0, 0).addSecs( m_filter.numValue ) ); connect( timeSpin, &QTimeEdit::timeChanged, this, QOverload::of(&MetaQueryWidget::numValueChanged) ); @@ -854,7 +853,7 @@ timeSpin2->setDisplayFormat( displayFormat ); timeSpin2->setMinimumTime( QTime( 0, 0, 0 ) ); timeSpin2->setMaximumTime( QTime( maxHours - 1, 59, 59 ) ); - timeSpin2->setTime( QTime().addSecs( m_filter.numValue2 ) ); + timeSpin2->setTime( QTime(0, 0, 0).addSecs( m_filter.numValue2 ) ); connect( timeSpin2, &QTimeEdit::timeChanged, this, QOverload::of(&MetaQueryWidget::numValue2Changed) ); @@ -865,30 +864,30 @@ void MetaQueryWidget::makeGenericNumberSelection( qint64 field, const QString& unit ) { - KIntSpinBox* spin = new KIntSpinBox(); + QSpinBox* spin = new QSpinBox(); spin->setMinimum( Filter::minimumValue( field ) ); spin->setMaximum( Filter::maximumValue( field ) ); if( !unit.isEmpty() ) spin->setSuffix( ' ' + unit ); spin->setValue( m_filter.numValue ); - connect( spin, QOverload::of(&KIntSpinBox::valueChanged), + connect( spin, QOverload::of(&QSpinBox::valueChanged), this, QOverload::of(&MetaQueryWidget::numValueChanged) ); m_valueSelection1 = spin; if( m_filter.condition != Between ) return; // second spin box for the between selection - KIntSpinBox* spin2 = new KIntSpinBox(); + QSpinBox* spin2 = new QSpinBox(); spin2->setMinimum( Filter::minimumValue( field ) ); spin2->setMaximum( Filter::maximumValue( field ) ); if( !unit.isEmpty() ) spin2->setSuffix( ' ' + unit ); spin2->setValue( m_filter.numValue2 ); - connect( spin2, QOverload::of(&KIntSpinBox::valueChanged), + connect( spin2, QOverload::of(&QSpinBox::valueChanged), this, QOverload::of(&MetaQueryWidget::numValue2Changed) ); m_valueSelection2 = spin2; @@ -1065,10 +1064,8 @@ } else { - KLocalizedDate localizedDate1( QDateTime::fromTime_t(numValue).date() ); - strValue1 = localizedDate1.formatDate( KLocale::ShortDate ); - KLocalizedDate localizedDate2( QDateTime::fromTime_t(numValue2).date() ); - strValue2 = localizedDate2.formatDate( KLocale::ShortDate ); + strValue1 = QLocale().toString( QDateTime::fromTime_t(numValue).date(), QLocale::ShortFormat ); + strValue2 = QLocale().toString( QDateTime::fromTime_t(numValue2).date(), QLocale::ShortFormat ); } } else if( isNumeric() ) diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp --- a/src/widgets/Osd.cpp +++ b/src/widgets/Osd.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include diff --git a/src/widgets/PlayPauseButton.cpp b/src/widgets/PlayPauseButton.cpp --- a/src/widgets/PlayPauseButton.cpp +++ b/src/widgets/PlayPauseButton.cpp @@ -18,7 +18,7 @@ #include "SvgHandler.h" -#include +#include #include #include diff --git a/src/widgets/PrettyTreeDelegate.cpp b/src/widgets/PrettyTreeDelegate.cpp --- a/src/widgets/PrettyTreeDelegate.cpp +++ b/src/widgets/PrettyTreeDelegate.cpp @@ -24,7 +24,7 @@ #include "widgets/PrettyTreeView.h" #include -#include +#include #include #include @@ -115,9 +115,9 @@ style->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter ); if ( option.state & QStyle::State_Selected ) - painter->setPen( App::instance()->palette().highlightedText().color() ); + painter->setPen( pApp->palette().highlightedText().color() ); else - painter->setPen( App::instance()->palette().text().color() ); + painter->setPen( pApp->palette().text().color() ); painter->setRenderHint( QPainter::Antialiasing ); @@ -217,7 +217,7 @@ KCapacityBar capacityBar( KCapacityBar::DrawTextInline ); capacityBar.setValue( percentage ); capacityBar.setText( i18nc( "Example: 3.5 GB free (unit is part of %1)", "%1 free", - KGlobal::locale()->formatByteSize( bytesTotal - bytesUsed, 1 ) ) ); + KFormat().formatByteSize( bytesTotal - bytesUsed ) ) ); QRect capacityRect( remainingRect ); capacityRect.setTop( titleRect.bottom() ); diff --git a/src/widgets/PrettyTreeView.cpp b/src/widgets/PrettyTreeView.cpp --- a/src/widgets/PrettyTreeView.cpp +++ b/src/widgets/PrettyTreeView.cpp @@ -21,8 +21,6 @@ #include "widgets/PrettyTreeRoles.h" #include "widgets/PrettyTreeDelegate.h" -#include - #include #include #include @@ -55,7 +53,7 @@ setHorizontalScrollMode( QAbstractItemView::ScrollPerPixel ); #endif - setAnimated( KGlobalSettings::graphicEffectsLevel() != KGlobalSettings::NoEffects ); + setAnimated( true ); } PrettyTreeView::~PrettyTreeView() @@ -186,7 +184,7 @@ state() == QTreeView::NoState && expandCollapsePressedAt && ( *expandCollapsePressedAt - event->pos() ).manhattanLength() < QApplication::startDragDistance() && - KGlobalSettings::singleClick() && + style()->styleHint( QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this ) && model()->hasChildren( index ) ) { setExpanded( index, !isExpanded( index ) ); diff --git a/src/widgets/ProgressWidget.cpp b/src/widgets/ProgressWidget.cpp --- a/src/widgets/ProgressWidget.cpp +++ b/src/widgets/ProgressWidget.cpp @@ -27,7 +27,7 @@ #include "core/meta/support/MetaUtility.h" #include "core-impl/capabilities/timecode/TimecodeLoadCapability.h" -#include +#include #include #include diff --git a/src/widgets/SearchWidget.h b/src/widgets/SearchWidget.h --- a/src/widgets/SearchWidget.h +++ b/src/widgets/SearchWidget.h @@ -25,7 +25,7 @@ #include class QToolBar; -class KPushButton; +class QPushButton; // A Custom Widget that can be used globally to implement // searching a treeview. @@ -36,7 +36,7 @@ /** Creates a search widget. @param advanced If true generates a button that opens a edit filter dialog. */ - explicit SearchWidget( QWidget *parent, bool advanced = true ); + explicit SearchWidget( QWidget *parent = Q_NULLPTR, bool advanced = true ); QString currentText() const { return m_sw->currentText(); } Amarok::ComboBox *comboBox() { return m_sw; } diff --git a/src/widgets/SearchWidget.cpp b/src/widgets/SearchWidget.cpp --- a/src/widgets/SearchWidget.cpp +++ b/src/widgets/SearchWidget.cpp @@ -18,20 +18,19 @@ #include "SearchWidget.h" #include "core/support/Debug.h" #include "dialogs/EditFilterDialog.h" - -#include -#include +#include "widgets/BoxWidget.h" #include +#include +#include +#include +#include #include #include -#include -#include -#include -#include +#include +#include -#include SearchWidget::SearchWidget( QWidget *parent, bool advanced ) : QWidget( parent ) @@ -41,7 +40,7 @@ , m_runningSearches( 0 ) { setContentsMargins( 0, 0, 0, 0 ); - KHBox *searchBox = new KHBox( this ); + BoxWidget *searchBox = new BoxWidget( false ); searchBox->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); m_sw = new Amarok::ComboBox( searchBox ); @@ -181,8 +180,8 @@ void SearchWidget::setClickMessage( const QString &message ) { - KLineEdit *edit = qobject_cast( m_sw->lineEdit() ); - edit->setClickMessage( message ); + QLineEdit *edit = qobject_cast( m_sw->lineEdit() ); + edit->setPlaceholderText( message ); } void @@ -210,7 +209,7 @@ // start the animation if( !m_animationTimer.isActive() ) { - m_sw->setItemIcon( m_sw->currentIndex(), QIcon( KStandardDirs::locate( "data", "amarok/images/loading1.png" ) ) ); + m_sw->setItemIcon( m_sw->currentIndex(), QIcon( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/loading1.png" ) ) ); m_currentFrame = 0; m_animationTimer.start(); } @@ -253,9 +252,9 @@ // switch frames if( m_currentFrame == 0 ) - m_sw->setItemIcon( m_sw->currentIndex(), QIcon( KStandardDirs::locate( "data", "amarok/images/loading2.png" ) ) ); + m_sw->setItemIcon( m_sw->currentIndex(), QIcon( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/loading2.png" ) ) ); else - m_sw->setItemIcon( m_sw->currentIndex(), QIcon( KStandardDirs::locate( "data", "amarok/images/loading1.png" ) ) ); + m_sw->setItemIcon( m_sw->currentIndex(), QIcon( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/loading1.png" ) ) ); restoreLineEditStatus(); m_currentFrame = !m_currentFrame; diff --git a/src/widgets/SliderWidget.cpp b/src/widgets/SliderWidget.cpp --- a/src/widgets/SliderWidget.cpp +++ b/src/widgets/SliderWidget.cpp @@ -32,9 +32,8 @@ #include "ProgressWidget.h" #include -#include -#include -#include +#include +#include #include #include diff --git a/src/widgets/StarManager.cpp b/src/widgets/StarManager.cpp --- a/src/widgets/StarManager.cpp +++ b/src/widgets/StarManager.cpp @@ -22,7 +22,7 @@ #include "MainWindow.h" #include -#include //KGlobal::dirs() +#include //KGlobal::dirs() #include #include @@ -69,13 +69,13 @@ m_margin = margin; int hval = m_height + m_margin * 2 - 4 + ( ( m_height % 2 ) ? 1 : 0 ); - QImage star = QImage( KStandardDirs::locate( "data", "amarok/images/star.png" ) ).scaled( hval, hval, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + QImage star = QImage( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/star.png" ) ).scaled( hval, hval, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); m_star = star.copy(); m_starPix = QPixmap::fromImage( star ); m_greyedStar = star.copy(); KIconEffect::toGray( m_greyedStar, 1.0 ); m_greyedStarPix = QPixmap::fromImage( m_greyedStar ); - QImage half = QImage( KStandardDirs::locate( "data", "amarok/images/smallstar.png" ) ).scaled( hval, hval, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + QImage half = QImage( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/smallstar.png" ) ).scaled( hval, hval, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); m_halfStar = half.copy(); /*if( AmarokConfig::customRatingsColors() ) KIconEffect::colorize( m_halfStar, m_halfStarColor, 1.0 );*/ diff --git a/src/widgets/TimeLabel.cpp b/src/widgets/TimeLabel.cpp --- a/src/widgets/TimeLabel.cpp +++ b/src/widgets/TimeLabel.cpp @@ -21,25 +21,25 @@ #include "amarokconfig.h" #include "EngineController.h" -#include -#include -#include +#include -#include +#include #include +#include +#include #include TimeLabel::TimeLabel(QWidget* parent) : QLabel( " 0:00:00 ", parent ) { - setFont( KGlobalSettings::fixedFont() ); + setFont( QFontDatabase::systemFont( QFontDatabase::FixedFont ) ); setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); } QSize TimeLabel::sizeHint() const { - return fontMetrics().boundingRect( KGlobal::locale()->negativeSign() + KGlobal::locale()->formatTime( QTime( 0, 0, 0 ), true, true ) ).size(); + return fontMetrics().boundingRect( QLocale().negativeSign() + QLocale().toString( QTime( 0, 0, 0 ) ) ).size(); } void diff --git a/src/widgets/TokenDropTarget.cpp b/src/widgets/TokenDropTarget.cpp --- a/src/widgets/TokenDropTarget.cpp +++ b/src/widgets/TokenDropTarget.cpp @@ -21,7 +21,7 @@ #include "TokenPool.h" #include "core/support/Debug.h" -#include +#include #include #include diff --git a/src/widgets/TokenPool.h b/src/widgets/TokenPool.h --- a/src/widgets/TokenPool.h +++ b/src/widgets/TokenPool.h @@ -20,11 +20,11 @@ #include "Token.h" -#include +#include #include //Holds a number of icons representing parts of the filename that will become tokens when dropped on the TokenLayoutWidget. -class TokenPool : public KListWidget +class TokenPool : public QListWidget { Q_OBJECT diff --git a/src/widgets/TokenPool.cpp b/src/widgets/TokenPool.cpp --- a/src/widgets/TokenPool.cpp +++ b/src/widgets/TokenPool.cpp @@ -28,7 +28,7 @@ #include "core/support/Debug.h" TokenPool::TokenPool( QWidget *parent ) - : KListWidget( parent ) + : QListWidget( parent ) { setAcceptDrops( true ); setWrapping( true ); @@ -89,7 +89,7 @@ { if( event->button() == Qt::LeftButton ) m_startPos = event->pos(); //store the start position - KListWidget::mousePressEvent( event ); //feed it to parent's event + QListWidget::mousePressEvent( event ); //feed it to parent's event } //Executed on mouse move, handles start of drag. @@ -102,7 +102,7 @@ if ( distance >= QApplication::startDragDistance() ) performDrag(); } - KListWidget::mouseMoveEvent( event ); + QListWidget::mouseMoveEvent( event ); } void diff --git a/src/widgets/TokenWithLayout.h b/src/widgets/TokenWithLayout.h --- a/src/widgets/TokenWithLayout.h +++ b/src/widgets/TokenWithLayout.h @@ -19,7 +19,7 @@ #include "widgets/Token.h" -#include +#include class LayoutEditDialog; @@ -106,7 +106,7 @@ QString m_prefix, m_suffix; Wrench *m_wrench; int m_wrenchTimer; - static QWeakPointer m_dialog; + static QPointer m_dialog; }; diff --git a/src/widgets/TokenWithLayout.cpp b/src/widgets/TokenWithLayout.cpp --- a/src/widgets/TokenWithLayout.cpp +++ b/src/widgets/TokenWithLayout.cpp @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -91,7 +91,7 @@ return new TokenWithLayout( text, iconName, value, parent ); } -QWeakPointer TokenWithLayout::m_dialog; +QPointer TokenWithLayout::m_dialog; TokenWithLayout::TokenWithLayout( const QString &text, const QString &iconName, qint64 value, QWidget *parent ) : Token( text, iconName, value, parent ) @@ -153,17 +153,17 @@ { if( !m_dialog ) m_dialog = new LayoutEditDialog( window() ); - m_dialog.data()->setToken( this ); - if( !m_dialog.data()->isVisible() ) + m_dialog->setToken( this ); + if( !m_dialog->isVisible() ) { - m_dialog.data()->adjustSize(); + m_dialog->adjustSize(); QPoint pt = mapToGlobal( rect().bottomLeft() ); pt.setY( pt.y() + 9 ); if ( parentWidget() ) - pt.setX( parentWidget()->mapToGlobal( QPoint( 0, 0 ) ).x() + ( parentWidget()->width() - m_dialog.data()->QDialog::width() ) / 2 ); - m_dialog.data()->move( pt ); + pt.setX( parentWidget()->mapToGlobal( QPoint( 0, 0 ) ).x() + ( parentWidget()->width() - m_dialog->QDialog::width() ) / 2 ); + m_dialog->move( pt ); } - m_dialog.data()->show(); // ensures raise in doubt + m_dialog->show(); // ensures raise in doubt QTimerEvent te( m_wrenchTimer ); timerEvent( &te ); // it's not like we'd get a leave event when the child dialog pops in between... } diff --git a/src/widgets/TrackSelectWidget.h b/src/widgets/TrackSelectWidget.h --- a/src/widgets/TrackSelectWidget.h +++ b/src/widgets/TrackSelectWidget.h @@ -18,8 +18,7 @@ #define AMAROK_TRACK_SELECT_WIDGET_H #include "core/meta/forward_declarations.h" - -#include +#include "widgets/BoxWidget.h" #include @@ -29,7 +28,7 @@ class KSqueezedTextLabel; -class TrackSelectWidget: public KVBox +class TrackSelectWidget: public BoxWidget { Q_OBJECT diff --git a/src/widgets/TrackSelectWidget.cpp b/src/widgets/TrackSelectWidget.cpp --- a/src/widgets/TrackSelectWidget.cpp +++ b/src/widgets/TrackSelectWidget.cpp @@ -27,16 +27,17 @@ #include "core/support/Debug.h" #include "widgets/PrettyTreeDelegate.h" -#include +#include #include -#include #include +#include TrackSelectWidget::TrackSelectWidget( QWidget* parent ) - : KVBox( parent ) + : BoxWidget( true, parent ) { DEBUG_BLOCK + m_label = new KSqueezedTextLabel( this ); m_label->hide(); // TODO: decide whether the label should be shown or not m_label->setTextElideMode( Qt::ElideRight ); diff --git a/src/widgets/VolumeDial.cpp b/src/widgets/VolumeDial.cpp --- a/src/widgets/VolumeDial.cpp +++ b/src/widgets/VolumeDial.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include diff --git a/src/widgets/kdatecombo.cpp b/src/widgets/kdatecombo.cpp --- a/src/widgets/kdatecombo.cpp +++ b/src/widgets/kdatecombo.cpp @@ -23,11 +23,11 @@ #include #include -#include -#include + +#include #include #include -#include +#include #include KDateCombo::KDateCombo(QWidget *parent) : QComboBox(parent) @@ -70,12 +70,12 @@ QString KDateCombo::date2String(const QDate & date) { - return(KGlobal::locale()->formatDate(date, KLocale::ShortDate)); + return(QLocale().toString(date, QLocale::ShortFormat)); } QDate & KDateCombo::string2Date(const QString & str, QDate *qd) { - return *qd = KGlobal::locale()->readDate(str); + return *qd = QLocale().toDate(str, QLocale::ShortFormat); } QDate & KDateCombo::getDate(QDate *currentDate) @@ -109,7 +109,6 @@ dateEnteredEvent(QDate()); } - void KDateCombo::mousePressEvent (QMouseEvent * e) { if (e->button() & Qt::LeftButton) diff --git a/utilities/afttagger/AFTTagger.cpp b/utilities/afttagger/AFTTagger.cpp --- a/utilities/afttagger/AFTTagger.cpp +++ b/utilities/afttagger/AFTTagger.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2008-2009 Jeff Mitchell - * Qt4QStringToTString and TStringToQString macros Copyright 2002-2008 by Scott Wheeler, wheeler@kde.org, licensed under LGPL 2.1 + * QStringToTString and TStringToQString macros Copyright 2002-2008 by Scott Wheeler, wheeler@kde.org, licensed under LGPL 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -48,8 +48,8 @@ #include -//QT4-happy versions -#define Qt4QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) +//QT5-happy versions +#define Qt5QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) static int s_currentVersion = 1; @@ -78,7 +78,7 @@ QString terms; if( !m_quiet ) { - m_textStream << qPrintable( tr( "TERMS OF USE:\n\n" + m_textStream << qPrintable( tr( "TERMS OF USE:\n\n" "This program has been extensively tested and errs on the side of safety wherever possible.\n\n" "With that being said, since this program can modify thousands or hundreds of thousands of files\n" "at a time, here is the obligatory warning text:\n\n" @@ -325,7 +325,7 @@ if( m_verbose ) m_textStream << tr( "INFO: Adding new frame and saving file with UID: %1" ).arg( uid ) << endl; file->ID3v2Tag()->addFrame( new TagLib::ID3v2::UniqueFileIdentifierFrame( - Qt4QStringToTString( ourId ), Qt4QStringToTString( uid ).data( TagLib::String::Latin1 ) ) ); + Qt5QStringToTString( ourId ), Qt5QStringToTString( uid ).data( TagLib::String::Latin1 ) ) ); file->save(); return true; } @@ -475,7 +475,7 @@ uid = createCurrentUID( file ); if( m_verbose ) m_textStream << tr( "INFO: Adding new field and saving file with UID: %1" ).arg( uid ) << endl; - comment->addField( Qt4QStringToTString( ourId ), Qt4QStringToTString( uid ) ); + comment->addField( Qt5QStringToTString( ourId ), Qt5QStringToTString( uid ) ); return true; } else if( toRemove.size() ) @@ -581,7 +581,7 @@ uid = createCurrentUID( file ); if( m_verbose ) m_textStream << tr( "INFO: Adding new field and saving file with UID: %1" ).arg( uid ) << endl; - file->APETag()->addValue( Qt4QStringToTString( ourId.toUpper() ), Qt4QStringToTString( uid ) ); + file->APETag()->addValue( Qt5QStringToTString( ourId.toUpper() ), Qt5QStringToTString( uid ) ); file->save(); return true; } @@ -650,7 +650,7 @@ { if( m_verbose ) m_textStream << tr( "INFO: Upgrading AFT identifier from version %1 to version %2" ) - .arg( QString::number( version ), QString::number( s_currentVersion ) ) + .arg( QString::number( version ), QString::number( s_currentVersion ) ) << endl; uid = upgradeUID( version, TStringToQString( itemsMap[ key ].toStringList().toString() ) ); if( m_verbose ) @@ -685,8 +685,8 @@ uid = createCurrentUID( file ); if( m_verbose ) m_textStream << tr( "INFO: Adding new field and saving file with UID: %1" ).arg( uid ) << endl; - itemsMap.insert( Qt4QStringToTString( QString( "----:com.apple.iTunes:" + ourId ) ), - TagLib::StringList( Qt4QStringToTString( uid ) ) ); + itemsMap.insert( Qt5QStringToTString( QString( "----:com.apple.iTunes:" + ourId ) ), + TagLib::StringList( Qt5QStringToTString( uid ) ) ); file->save(); return true; } @@ -713,13 +713,13 @@ QCryptographicHash md5( QCryptographicHash::Md5 ); QByteArray size; md5.addData( size.setNum( (qulonglong)(file->length()) ) ); - md5.addData( QString::number( m_time.elapsed() ).toAscii() ); - md5.addData( QString::number( qrand() ).toAscii() ); - md5.addData( QString::number( qrand() ).toAscii() ); - md5.addData( QString::number( qrand() ).toAscii() ); - md5.addData( QString::number( qrand() ).toAscii() ); - md5.addData( QString::number( qrand() ).toAscii() ); - md5.addData( QString::number( m_time.elapsed() ).toAscii() ); + md5.addData( QString::number( m_time.elapsed() ).toUtf8() ); + md5.addData( QString::number( qrand() ).toUtf8() ); + md5.addData( QString::number( qrand() ).toUtf8() ); + md5.addData( QString::number( qrand() ).toUtf8() ); + md5.addData( QString::number( qrand() ).toUtf8() ); + md5.addData( QString::number( qrand() ).toUtf8() ); + md5.addData( QString::number( m_time.elapsed() ).toUtf8() ); return QString( md5.result().toHex() ); } diff --git a/utilities/afttagger/CMakeLists.txt b/utilities/afttagger/CMakeLists.txt --- a/utilities/afttagger/CMakeLists.txt +++ b/utilities/afttagger/CMakeLists.txt @@ -1,7 +1,7 @@ include_directories( ../ - - ${TAGLIB_INCLUDES} - ) + + ${TAGLIB_INCLUDES} + ) add_definitions(${TAGLIB_CFLAGS}) @@ -29,5 +29,5 @@ # install to app bundle on os x, otherwise amarok fails to load it install(TARGETS amarok_afttagger DESTINATION ${BUNDLE_INSTALL_DIR}/Amarok.app/Contents/MacOS ) else() - install(TARGETS amarok_afttagger RUNTIME DESTINATION ${BIN_INSTALL_DIR} ) + install(TARGETS amarok_afttagger RUNTIME DESTINATION ${KDE_INSTALL_BINDIR} ) endif() diff --git a/utilities/collectionscanner/CMakeLists.txt b/utilities/collectionscanner/CMakeLists.txt --- a/utilities/collectionscanner/CMakeLists.txt +++ b/utilities/collectionscanner/CMakeLists.txt @@ -1,15 +1,13 @@ ########### next target ############### -qt4_automoc( CollectionScanner.cpp ) - set(amarokcollectionscanner_SRCS CollectionScanner.cpp ) add_executable(amarokcollectionscanner ${amarokcollectionscanner_SRCS} ${libchardet_SRCS}) -target_link_libraries(amarokcollectionscanner +target_link_libraries(amarokcollectionscanner Qt5::Core amarokshared ) @@ -19,5 +17,5 @@ # install to app bundle on os x, otherwise amarok fails to load it install(TARGETS amarokcollectionscanner DESTINATION ${BUNDLE_INSTALL_DIR}/amarok.app/Contents/MacOS ) else() - install(TARGETS amarokcollectionscanner RUNTIME DESTINATION ${BIN_INSTALL_DIR} ) + install(TARGETS amarokcollectionscanner RUNTIME DESTINATION ${KDE_INSTALL_BINDIR} ) endif() diff --git a/utilities/updatesigner/CMakeLists.txt b/utilities/updatesigner/CMakeLists.txt --- a/utilities/updatesigner/CMakeLists.txt +++ b/utilities/updatesigner/CMakeLists.txt @@ -9,11 +9,10 @@ # we need the QtCrypto library for the signer if( QCA2_FOUND ) include_directories( - ${CMAKE_CURRENT_BINARY_DIR} ${QCA2_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/shared - ) + ) set(amarok-update-signer_SRCS signer.cpp amarok-update-signer.cpp) qt4_automoc(${amarok-update-signer_SRCS}) @@ -25,6 +24,6 @@ # install to app bundle on os x, otherwise amarok fails to load it install(TARGETS amarok-update-signer DESTINATION ${BUNDLE_INSTALL_DIR}/Amarok.app/Contents/MacOS ) else() - install(TARGETS amarok-update-signer RUNTIME DESTINATION ${BIN_INSTALL_DIR} ) + install(TARGETS amarok-update-signer RUNTIME DESTINATION ${KDE_INSTALL_BINDIR} ) endif() endif()