diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,7 @@ ############### Taglib set(TAGLIB_MIN_VERSION "1.7") find_package(Taglib REQUIRED) +set_package_properties( Taglib PROPERTIES DESCRIPTION "Support for Audio metadata." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE REQUIRED PURPOSE "Required for tag reading" ) # Check if TagLib is built with ASF and MP4 support include(CheckCXXSourceCompiles) @@ -143,8 +144,6 @@ add_subdirectory( shared ) if( WITH_PLAYER ) - set_package_properties( QTOPENGL PROPERTIES DESCRIPTION "Required for the spectrum analyzer" URL "http://qt-project.org" TYPE OPTIONAL ) - find_package(X11) find_package(MySQLAmarok REQUIRED) @@ -168,17 +167,15 @@ # upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-( # will be fixed in liblastfm-1.0.4 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( 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 ) if( LIBOFA_FOUND ) - set_package_properties(LIBOFA PROPERTIES DESCRIPTION "Enable MusicDNS service" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL) + set_package_properties(LibOFA PROPERTIES DESCRIPTION "Enable MusicDNS service" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL) endif() ## gpodder Service - ## Currently disabled as it can crash Amarok on startup, during dynamic linking phase, before main() is reached. - # find_package( Mygpo-qt 1.0.7 QUIET ) - # set_package_properties( LIBMYGPO_QT PROPERTIES DESCRIPTION "Enable gpodder.net service" URL "http://wiki.gpodder.org/wiki/Libmygpo-qt" TYPE OPTIONAL ) - # macro_bool_to_01( LIBMYGPO_QT_FOUND HAVE_LIBMYGPOQT ) + find_package( Mygpo-qt5 ) + set_package_properties( Mygpo-qt5 PROPERTIES DESCRIPTION "Enable gpodder.net service" URL "http://wiki.gpodder.org/wiki/Libmygpo-qt" TYPE OPTIONAL ) if( WITH_IPOD ) find_package(Ipod) @@ -188,42 +185,43 @@ set( IPOD_FOUND TRUE ) endif() endif() - set_package_properties( IPOD PROPERTIES DESCRIPTION "Support Apple iPod/iPad/iPhone audio devices" URL "http://sourceforge.net/projects/gtkpod/" TYPE OPTIONAL ) + set_package_properties( Ipod PROPERTIES DESCRIPTION "Support Apple iPod/iPad/iPhone audio devices" URL "http://sourceforge.net/projects/gtkpod/" TYPE OPTIONAL ) find_package(GDKPixBuf) - set_package_properties( GDKPIXBUF PROPERTIES DESCRIPTION "Support for artwork on iPod audio devices via GDK-PixBuf" URL "http://developer.gnome.org/arch/imaging/gdkpixbuf.html" TYPE OPTIONAL ) + set_package_properties( GDKPixBuf PROPERTIES DESCRIPTION "Support for artwork on iPod audio devices via GDK-PixBuf" URL "http://developer.gnome.org/arch/imaging/gdkpixbuf.html" TYPE OPTIONAL ) endif() find_package(Mtp) - set_package_properties(MTP PROPERTIES DESCRIPTION "Enable Support for portable media devices that use the media transfer protocol" URL "http://libmtp.sourceforge.net/" TYPE OPTIONAL ) + set_package_properties( Mtp PROPERTIES DESCRIPTION "Enable Support for portable media devices that use the media transfer protocol" URL "http://libmtp.sourceforge.net/" TYPE OPTIONAL ) if( WITH_MP3Tunes ) find_package(CURL) - set_package_properties( MTP PROPERTIES DESCRIPTION "Enable Support for portable media devices that use the media transfer protocol" URL "http://libmtp.sourceforge.net/" TYPE OPTIONAL ) + set_package_properties( CURL PROPERTIES DESCRIPTION "Used to transfer data with URLs" URL "https://curl.haxx.se/" TYPE OPTIONAL ) find_package(LibXml2) - set_package_properties( LIBXML2 PROPERTIES DESCRIPTION "LibXML2 is an XML parser required by mp3tunes." URL "http://www.xmlsoft.org" TYPE OPTIONAL ) + set_package_properties( LibXml2 PROPERTIES DESCRIPTION "LibXML2 is an XML parser required by mp3tunes." URL "http://www.xmlsoft.org" TYPE OPTIONAL ) find_package(OpenSSL) find_package(Libgcrypt) if ( OPENSSL_FOUND OR LIBGCRYPT_FOUND ) set (_mp3tunes_crypto TRUE ) else () message( SEND_ERROR "Building with mp3tunes support REQUIRES either OpenSSL or GNU Libgcrypt" ) endif () - set_package_properties( OPENSSL_OR_LIBGCRYPT PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL ) + set_package_properties( OpenSSL PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL ) + set_package_properties( Libgcrypt PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL ) find_package(Loudmouth) - set_package_properties( LOUDMOUTH PROPERTIES DESCRIPTION "Loudmouth is the communication backend needed by mp3tunes for syncing." URL "http://www.loudmouth-project.org" TYPE OPTIONAL ) + set_package_properties( Loudmouth PROPERTIES DESCRIPTION "Loudmouth is the communication backend needed by mp3tunes for syncing." URL "http://www.loudmouth-project.org" TYPE OPTIONAL ) include(CheckQtGlib) set_package_properties( QT5_GLIB PROPERTIES DESCRIPTION "Qt5 must be compiled with glib support for mp3tunes" URL "http://www.trolltech.com" TYPE OPTIONAL ) endif() if( WITH_IPOD OR WITH_MP3Tunes ) - 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 ) - 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 ) + 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 ) + 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() find_program( CLAMZ_FOUND clamz PATH ) @@ -239,12 +237,6 @@ add_subdirectory( src ) - # Also display taglib in the feature log - set_package_properties( TAGLIB PROPERTIES DESCRIPTION "Support for Audio metadata." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE REQUIRED PURPOSE "Required for tag reading" ) - # following line is here (and not near TAGLIB_MOD_FOUND) because there may be no MacroLogFeature without kdelibs - set_package_properties( TAGLIB_MOD PROPERTIES DESCRIPTION "Additional support for Audio metadata of mod, s3m, it and xm files." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE OPTIONAL ) - set_package_properties( TAGLIB_OPUS PROPERTIES DESCRIPTION "Additional support for Audio metadata of opus files." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE OPTIONAL ) - feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) #Do not remove or modify these. The release script substitutes in for these diff --git a/cmake/modules/FindLibmygpo-qt.cmake b/cmake/modules/FindLibmygpo-qt.cmake deleted file mode 100644 --- a/cmake/modules/FindLibmygpo-qt.cmake +++ /dev/null @@ -1,48 +0,0 @@ - -# - Find libmygpo-qt -# Find the libmygpo-qt includes and the libmygpo-qt libraries -# This module defines -# LIBMYGPO_QT_INCLUDE_DIR, root mygpo-qt include dir -# LIBMYGPO_QT_LIBRARY, the path to libmygpo-qt -# LIBMYGPO_QT_FOUND, whether libmygpo-qt was found - - -find_path(LIBMYGPO_QT_INCLUDE_DIR NAMES ApiRequest.h - HINTS - ~/usr/include - /opt/local/include - /usr/include - /usr/local/include - /opt/kde4/include - ~/kde/include - PATH_SUFFIXES mygpo-qt -) - -find_library( LIBMYGPO_QT_LIBRARY NAMES mygpo-qt5 - PATHS - ~/usr/lib - ~/usr/lib64 - /opt/local/lib - /opt/local/lib64 - /usr/lib - /usr/lib64 - /usr/local/lib - /usr/local/lib64 - /opt/kde4/lib - /opt/kde4/lib64 - ~/kde/lib - ~/kde/lib64 -) - - -if(LIBMYGPO_QT_INCLUDE_DIR AND LIBMYGPO_QT_LIBRARY) - set(LIBMYGPO_QT_FOUND TRUE) - message(STATUS "Found libmygpo-qt: ${LIBMYGPO_QT_INCLUDE_DIR}, ${LIBMYGPO_QT_LIBRARY}") -else() - set(LIBMYGPO_QT_FOUND FALSE) - if (LIBMYGPO_QT_FIND_REQUIRED) - message(FATAL_ERROR "Could NOT find required package libmygpo-qt") - endif() -endif() - -mark_as_advanced(LIBMYGPO_QT_INCLUDE_DIR LIBMYGPO_QT_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,7 +29,7 @@ add_subdirectory( core-impl/collections ) add_subdirectory( core-impl/storage/sql ) 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( services ) add_subdirectory( scripting/scripts ) add_subdirectory( aboutdialog/libattica-ocsclient ) add_subdirectory( transcoding ) diff --git a/src/core/podcasts/PodcastImageFetcher.cpp b/src/core/podcasts/PodcastImageFetcher.cpp --- a/src/core/podcasts/PodcastImageFetcher.cpp +++ b/src/core/podcasts/PodcastImageFetcher.cpp @@ -49,6 +49,18 @@ return; } + if( m_channels.contains( channel ) ) + { + debug() << "Channel already queued:" << channel->title(); + return; + } + + if( m_jobChannelMap.values().contains( channel ) ) + { + debug() << "Copy job already running for channel:" << channel->title(); + return; + } + debug() << "Adding " << channel->title() << " to fetch queue"; m_channels.append( channel ); } diff --git a/src/services/CMakeLists.txt b/src/services/CMakeLists.txt --- a/src/services/CMakeLists.txt +++ b/src/services/CMakeLists.txt @@ -1,17 +1,23 @@ -include_directories( - ${Amarok_SOURCE_DIR}/src - ) +include_directories( ${Amarok_SOURCE_DIR}/src ) add_subdirectory( magnatune ) -add_subdirectory( jamendo ) -add_subdirectory( mp3tunes ) -if (QCA2_FOUND) - add_subdirectory( ampache ) -endif () -if (LIBMYGPO_QT_FOUND ) + +# add_subdirectory( jamendo ) // Needs complete rewrite because of API change + +if(OPENSSL_FOUND OR LIBGCRYPT_FOUND) + if(LIBXML2_FOUND AND CURL_FOUND AND LOUDMOUTH_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND QT5_GLIB_SUPPORT) +# add_subdirectory( mp3tunes ) // Needs more work + endif() +endif() + +add_subdirectory( ampache ) + +if ( Mygpo-qt5_FOUND ) add_subdirectory( gpodder ) endif() + if( LIBLASTFM_FOUND ) - add_subdirectory( lastfm ) +# add_subdirectory( lastfm ) // Needs more work endif() + add_subdirectory( opmldirectory ) diff --git a/src/services/ampache/AddServerDialog.h b/src/services/ampache/AddServerDialog.h --- a/src/services/ampache/AddServerDialog.h +++ b/src/services/ampache/AddServerDialog.h @@ -19,7 +19,7 @@ #ifndef ADDSERVERDIALOG_H #define ADDSERVERDIALOG_H -#include +#include #include namespace Ui @@ -29,16 +29,16 @@ class AmpacheAccountLogin; -class AddServerDialog : public KDialog +class AddServerDialog : public QDialog { Q_OBJECT public: AddServerDialog(); ~AddServerDialog(); QString name(); QString password(); QString username(); - QString url(); + QUrl url(); private Q_SLOTS: void anyTextEdited(); void verifyData(); diff --git a/src/services/ampache/AddServerDialog.cpp b/src/services/ampache/AddServerDialog.cpp --- a/src/services/ampache/AddServerDialog.cpp +++ b/src/services/ampache/AddServerDialog.cpp @@ -21,24 +21,34 @@ #include "AmpacheAccountLogin.h" #include "ui_NewServerWidget.h" +#include +#include + AddServerDialog::AddServerDialog() - : KDialog() + : QDialog() , m_widgets( new Ui::NewServerWidget ) { QWidget* widget = new QWidget(); m_widgets->setupUi(widget); - setMainWidget(widget); + + setLayout(new QVBoxLayout); + layout()->addWidget(widget); + + auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + layout()->addWidget(buttonBox); m_widgets->verifyButton->setEnabled(false); - setCaption(i18n("Add new Ampache server")); - enableButtonOk(false); + setWindowTitle(i18n("Add new Ampache server")); - connect( m_widgets->verifyButton, SIGNAL(released()), this, SLOT(verifyData())); - QList inputs; + connect( m_widgets->verifyButton, &QPushButton::released, this, &AddServerDialog::verifyData); + QList inputs; inputs << m_widgets->nameLineEdit << m_widgets->serverAddressLineEdit << m_widgets->userNameLineEdit << m_widgets-> passwordLineEdit; - foreach(QObject* line, inputs) - connect( line, SIGNAL(textEdited(QString)), this, SLOT(anyTextEdited())); + foreach(QLineEdit* line, inputs) + connect( line, &QLineEdit::textEdited, this, &AddServerDialog::anyTextEdited); } AddServerDialog::~AddServerDialog() @@ -52,16 +62,16 @@ bool minimumData = (!(name().isEmpty() || url().isEmpty() || password().isEmpty() || username().isEmpty() )); - enableButtonOk(minimumData); + findChild()->button(QDialogButtonBox::Ok)->setEnabled(minimumData); m_widgets->verifyButton->setEnabled(minimumData); } void AddServerDialog::verifyData() { m_widgets->verifyButton->setEnabled(false); delete m_login; //should always be null at this point. m_login = new AmpacheAccountLogin( url(), username(), password(), this ); - connect(m_login, SIGNAL(finished()), this, SLOT(loginResult())); + connect(m_login, &AmpacheAccountLogin::finished, this, &AddServerDialog::loginResult); } void AddServerDialog::loginResult() @@ -89,10 +99,10 @@ return m_widgets->nameLineEdit->text(); } -QString +QUrl AddServerDialog::url() { - return m_widgets->serverAddressLineEdit->text(); + return QUrl::fromUserInput( m_widgets->serverAddressLineEdit->text() ); } QString diff --git a/src/services/ampache/AmpacheAccountLogin.h b/src/services/ampache/AmpacheAccountLogin.h --- a/src/services/ampache/AmpacheAccountLogin.h +++ b/src/services/ampache/AmpacheAccountLogin.h @@ -24,26 +24,25 @@ #include "NetworkAccessManagerProxy.h" +#include +#include #include -#include -#include -#include class QNetworkReply; #ifdef MAKE_AMPACHE_ACCOUNT_LOGIN_LIB -#define AMPACHE_ACCOUNT_EXPORT KDE_EXPORT +#define AMPACHE_ACCOUNT_EXPORT Q_DECL_EXPORT #else -#define AMPACHE_ACCOUNT_EXPORT KDE_IMPORT +#define AMPACHE_ACCOUNT_EXPORT Q_DECL_IMPORT #endif class AMPACHE_ACCOUNT_EXPORT AmpacheAccountLogin : public QObject { Q_OBJECT public: - AmpacheAccountLogin ( const QString& url, const QString& username, const QString& password, QWidget* parent = 0 ); + AmpacheAccountLogin ( const QUrl& url, const QString& username, const QString& password, QWidget* parent = 0 ); ~AmpacheAccountLogin(); - QString server() const { return m_server; } + QUrl server() const { return m_server; } QString sessionId() const { return m_sessionId; } bool authenticated() const { return m_authenticated; } void reauthenticate(); @@ -63,19 +62,20 @@ Emits finished if something is fishy. @returns true if the check was successful. */ - bool generalVerify( const QDomDocument& doc, NetworkAccessManagerProxy::Error e ); + bool generalVerify( QNetworkReply *reply, const QDomDocument& doc, NetworkAccessManagerProxy::Error e ); /** Returns the base url. You would need to add query items to use it. */ QUrl getRequestUrl( const QString &action = QString() ) const; bool m_authenticated; - QString m_server; + QUrl m_server; QString m_username; QString m_password; QString m_sessionId; - QNetworkReply* m_lastRequest; + QNetworkReply *m_authRequest; + QNetworkReply *m_pingRequest; }; #endif // AMPACHEACCOUNTLOGIN_H diff --git a/src/services/ampache/AmpacheAccountLogin.cpp b/src/services/ampache/AmpacheAccountLogin.cpp --- a/src/services/ampache/AmpacheAccountLogin.cpp +++ b/src/services/ampache/AmpacheAccountLogin.cpp @@ -25,32 +25,31 @@ #include "core/support/Components.h" #include "core/support/Debug.h" +#include #include #include -#include +#include -#include +#include #include #include -AmpacheAccountLogin::AmpacheAccountLogin( const QString& url, const QString& username, const QString& password, QWidget* parent ) +AmpacheAccountLogin::AmpacheAccountLogin( const QUrl& url, const QString& username, const QString& password, QWidget* parent ) : QObject(parent) , m_authenticated( false ) , m_server( url ) , m_username( username ) , m_password( password ) - , m_sessionId( QString() ) - , m_lastRequest( 0 ) + , m_authRequest( Q_NULLPTR ) + , m_pingRequest( Q_NULLPTR ) { reauthenticate(); - } AmpacheAccountLogin::~AmpacheAccountLogin() { - } void @@ -63,94 +62,92 @@ debug() << "Verifying Ampache Version Using: " << url.url(); - m_lastRequest = The::networkAccessManager()->getData( url, this, + m_pingRequest = The::networkAccessManager()->getData( url, this, SLOT(authenticate(QUrl,QByteArray,NetworkAccessManagerProxy::Error)) ); - if( !m_lastRequest ) + if( !m_pingRequest ) emit finished(); } void AmpacheAccountLogin::authenticate( const QUrl &requestUrl, QByteArray data, NetworkAccessManagerProxy::Error e ) { - if( !m_lastRequest ) + if( !m_pingRequest ) return; - QCA::Initializer init; - DEBUG_BLOCK Q_UNUSED( requestUrl ); QDomDocument doc; doc.setContent( data ); - if( !generalVerify( doc, e ) ) + if( !generalVerify( m_pingRequest, doc, e ) ) return; // so lets figure out what we got here: debug() << "Version reply: " << data; int version = getVersion( doc ); QUrl url = getRequestUrl( "handshake" ); - QString timestamp = QString::number( QDateTime::currentDateTime().toTime_t() ); + QUrlQuery query( url ); + QString timestamp = QString::number( QDateTime::currentDateTime().toMSecsSinceEpoch() / 1000 ); QString passPhrase; // We need to use different authentication strings depending on the version of ampache if( version > 350000 ) { - - - debug() << "New Password Scheme " << version; - url.addQueryItem( "version", "350001" ); + query.addQueryItem( "version", "350001" ); - QCA::Hash sha256Hash( "sha256" ); - sha256Hash.update( m_password.toUtf8() ); - QString hashedPassword = QCA::arrayToHex( sha256Hash.final().toByteArray() ); + QCryptographicHash sha256Hash( QCryptographicHash::Sha256 ); + sha256Hash.addData( m_password.toUtf8() ); + QString hashedPassword = sha256Hash.result().toHex(); QString rawHandshake = timestamp + hashedPassword; - sha256Hash.clear(); - sha256Hash.update( rawHandshake.toUtf8() ); + sha256Hash.reset(); + sha256Hash.addData( rawHandshake.toUtf8() ); - passPhrase = QCA::arrayToHex( sha256Hash.final().toByteArray() ); + passPhrase = sha256Hash.result().toHex(); } else { debug() << "Version Older than 35001 Generated MD5 Auth " << version; QString rawHandshake = timestamp + m_password; - QCA::Hash md5Hash( "md5" ); + QCryptographicHash md5Hash( QCryptographicHash::Md5 ); - md5Hash.update( rawHandshake.toUtf8() ); - passPhrase = QCA::arrayToHex( md5Hash.final().toByteArray() ); + md5Hash.addData( rawHandshake.toUtf8() ); + passPhrase = md5Hash.result().toHex(); } - url.addQueryItem( "timestamp", timestamp ); - url.addQueryItem( "auth", passPhrase ); + query.addQueryItem( "timestamp", timestamp ); + query.addQueryItem( "auth", passPhrase ); + url.setQuery( query ); debug() << "Authenticating with string: " << url.url() << passPhrase; // TODO: Amarok::Components::logger()->newProgressOperation( m_xmlDownloadJob, i18n( "Authenticating with Ampache" ) ); - m_lastRequest = The::networkAccessManager()->getData( url, this, + m_authRequest = The::networkAccessManager()->getData( url, this, SLOT(authenticationComplete(QUrl,QByteArray,NetworkAccessManagerProxy::Error)) ); - if( !m_lastRequest ) + if( !m_authRequest ) emit finished(); } void AmpacheAccountLogin::authenticationComplete( const QUrl &requestUrl, QByteArray data, NetworkAccessManagerProxy::Error e ) { - if( !m_lastRequest ) + Q_UNUSED( requestUrl ); + + if( !m_authRequest ) return; DEBUG_BLOCK - Q_UNUSED( requestUrl ); QDomDocument doc; doc.setContent( data ); - if( !generalVerify( doc, e ) ) + if( !generalVerify( m_authRequest, doc, e ) ) return; // so lets figure out what we got here: @@ -208,16 +205,16 @@ } bool -AmpacheAccountLogin::generalVerify( const QDomDocument& doc, NetworkAccessManagerProxy::Error e ) +AmpacheAccountLogin::generalVerify( QNetworkReply *reply, const QDomDocument& doc, NetworkAccessManagerProxy::Error e ) { - Q_ASSERT( m_lastRequest ); + Q_ASSERT( reply ); - if( m_lastRequest->attribute( QNetworkRequest::HttpStatusCodeAttribute ).toInt() != 200 ) + if( reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).toInt() != 200 ) { debug() << "server response code:" << - m_lastRequest->attribute( QNetworkRequest::HttpStatusCodeAttribute ).toInt() << - m_lastRequest->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); - // KMessageBox::error( qobject_cast(parent()), domError.text(), i18n( "Authentication Error" ) ); + reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).toInt() << + reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); + emit finished(); return false; } @@ -261,18 +258,25 @@ } */ - QString path = m_server + "/server/xml.server.php"; + QUrl url = m_server; + url.setPath( m_server.path() + "/server/xml.server.php" ); + QString scheme = m_server.scheme(); - if( !path.startsWith("http://") && !path.startsWith("https://") ) - path = "http://" + path; + if( scheme != "http" && scheme != "https" ) + url.setScheme( "http" ); - QUrl url( path ); + QUrlQuery query( m_server ); if( !action.isEmpty() ) - url.addQueryItem( "action", action ); + query.addQueryItem( "action", action ); + + if( !m_username.isEmpty() && action != "ping" ) + query.addQueryItem( "user", m_username ); + + if( !m_sessionId.isEmpty() && action == "ping" ) + query.addQueryItem( "auth", m_sessionId ); - if( !m_username.isEmpty() ) - url.addQueryItem( "user", m_username ); + url.setQuery( query ); return url; } diff --git a/src/services/ampache/AmpacheConfig.h b/src/services/ampache/AmpacheConfig.h --- a/src/services/ampache/AmpacheConfig.h +++ b/src/services/ampache/AmpacheConfig.h @@ -19,12 +19,13 @@ #include #include +#include class AmpacheServerEntry { public: QString name; - QString url; + QUrl url; QString username; QString password; bool addToCollection; diff --git a/src/services/ampache/AmpacheConfig.cpp b/src/services/ampache/AmpacheConfig.cpp --- a/src/services/ampache/AmpacheConfig.cpp +++ b/src/services/ampache/AmpacheConfig.cpp @@ -16,10 +16,8 @@ #include "AmpacheConfig.h" -#include -#include -#include -#include +#include "core/support/Amarok.h" + AmpacheConfig::AmpacheConfig() { @@ -29,7 +27,7 @@ void AmpacheConfig::load() { - KConfigGroup config = KGlobal::config()->group( "Service_Ampache" ); + KConfigGroup config = Amarok::config( "Service_Ampache" ); int serverIndex = 0; QString serverEntry = "server" + QString::number( serverIndex ); @@ -42,7 +40,7 @@ AmpacheServerEntry entry; entry.name = list.takeFirst(); - entry.url = list.takeFirst(); + entry.url = QUrl( list.takeFirst() ); entry.username = list.takeFirst(); entry.password = list.takeFirst(); entry.addToCollection = false; //FIXME @@ -58,16 +56,14 @@ AmpacheConfig::save() { //delete all entries to make sure the indexes are correct - KConfigGroup config = KGlobal::config()->group( "Service_Ampache" ); - - kDebug( 14310 ) << "saving to config file " << KGlobal::config()->name() ; + KConfigGroup config = Amarok::config( "Service_Ampache" ); int serverIndex = 0; QString serverEntry = "server" + QString::number( serverIndex ); while ( config.hasKey ( serverEntry ) ) { - kDebug( 14310 ) << "deleting " << serverEntry; +// kDebug( 14310 ) << "deleting " << serverEntry; config.deleteEntry( serverEntry ); serverIndex++; serverEntry = "server" + QString::number( serverIndex ); @@ -79,12 +75,12 @@ QStringList list; list << entry.name; - list << entry.url; + list << entry.url.url(); list << entry.username; list << entry.password; serverEntry = "server" + QString::number( i ); - kDebug( 14310 ) << "adding " << serverEntry; +// kDebug( 14310 ) << "adding " << serverEntry; config.writeEntry( serverEntry, list ); } } diff --git a/src/services/ampache/AmpacheMeta.h b/src/services/ampache/AmpacheMeta.h --- a/src/services/ampache/AmpacheMeta.h +++ b/src/services/ampache/AmpacheMeta.h @@ -23,11 +23,10 @@ #include "ServiceMetaBase.h" #include "ServiceAlbumCoverDownloader.h" -#include - #include #include #include +#include #include #include @@ -49,8 +48,8 @@ virtual QString sourceName() { return "Ampache"; } virtual QString sourceDescription() { return "The Ampache music server project: http://Ampache.org"; } - virtual QPixmap emblem() { return QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-ampache.png" ) ); } - virtual QString scalableEmblem() { return KStandardDirs::locate( "data", "amarok/images/emblem-ampache-scalable.svgz" ); } + virtual QPixmap emblem() { return QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-ampache.png" ) ); } + virtual QString scalableEmblem() { return QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-ampache-scalable.svgz" ); } virtual QString notPlayableReason() const; virtual int discNumber() const { return m_discNumber; } diff --git a/src/services/ampache/AmpacheService.h b/src/services/ampache/AmpacheService.h --- a/src/services/ampache/AmpacheService.h +++ b/src/services/ampache/AmpacheService.h @@ -54,7 +54,7 @@ public: explicit AmpacheService( AmpacheServiceFactory* parent, const QString &name, - const QString &url = QString(), const QString &username = QString(), + const QUrl &url = QUrl(), const QString &username = QString(), const QString &password = QString() ); ~AmpacheService(); diff --git a/src/services/ampache/AmpacheService.cpp b/src/services/ampache/AmpacheService.cpp --- a/src/services/ampache/AmpacheService.cpp +++ b/src/services/ampache/AmpacheService.cpp @@ -33,7 +33,7 @@ #include "LastfmInfoParser.h" #endif -#include +#include AmpacheServiceFactory::AmpacheServiceFactory() @@ -73,15 +73,14 @@ AmpacheConfig config; foreach( const AmpacheServerEntry &server, config.servers() ) { - if ( url.url().contains( server.url, Qt::CaseInsensitive ) ) + if ( server.url.isParentOf( url ) ) return true; } return false; } - -AmpacheService::AmpacheService( AmpacheServiceFactory* parent, const QString & name, const QString &url, const QString &username, const QString &password ) +AmpacheService::AmpacheService( AmpacheServiceFactory* parent, const QString & name, const QUrl &url, const QString &username, const QString &password ) : ServiceBase( name, parent ) , m_infoParser( 0 ) , m_collection( 0 ) @@ -92,7 +91,7 @@ setShortDescription( i18n( "Amarok frontend for your Ampache server" ) ); setIcon( QIcon::fromTheme( "view-services-ampache-amarok" ) ); setLongDescription( i18n( "Use Amarok as a seamless frontend to your Ampache server. This lets you browse and play all the Ampache contents from within Amarok." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_ampache.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_ampache.png" ) ); #ifdef HAVE_LIBLASTFM m_infoParser = new LastfmInfoParser(); #endif @@ -123,7 +122,6 @@ // information from a server might get outdated. } - void AmpacheService::onLoginSuccessful() { diff --git a/src/services/ampache/AmpacheServiceCollection.h b/src/services/ampache/AmpacheServiceCollection.h --- a/src/services/ampache/AmpacheServiceCollection.h +++ b/src/services/ampache/AmpacheServiceCollection.h @@ -26,10 +26,10 @@ Q_OBJECT public: AmpacheTrackForUrlWorker( const QUrl &url, MetaProxy::TrackPtr track, - const QString &server, const QString &sessionId, + const QUrl &server, const QString &sessionId, ServiceBase *service); ~AmpacheTrackForUrlWorker(); - virtual void run(); + virtual void run(ThreadWeaver::JobPointer self = QSharedPointer(), ThreadWeaver::Thread *thread = 0); void parseTrack( const QString &xml ); Q_SIGNALS: void authenticationNeeded(); @@ -43,7 +43,7 @@ Meta::AmpacheAlbum *m_urlAlbum; Meta::ServiceArtist *m_urlArtist; - QString m_server; + QUrl m_server; QString m_sessionId; ServiceBase *m_service; @@ -61,7 +61,7 @@ Q_OBJECT public: - AmpacheServiceCollection( ServiceBase *service, const QString &server, + AmpacheServiceCollection( ServiceBase *service, const QUrl &server, const QString &sessionId ); virtual ~AmpacheServiceCollection(); @@ -82,7 +82,7 @@ void slotLookupComplete( const Meta::TrackPtr & ); private: - QString m_server; + QUrl m_server; QString m_sessionId; AmpacheTrackForUrlWorker *m_trackForUrlWorker; diff --git a/src/services/ampache/AmpacheServiceCollection.cpp b/src/services/ampache/AmpacheServiceCollection.cpp --- a/src/services/ampache/AmpacheServiceCollection.cpp +++ b/src/services/ampache/AmpacheServiceCollection.cpp @@ -19,17 +19,18 @@ #include "AmpacheServiceQueryMaker.h" #include "NetworkAccessManagerProxy.h" -#include +#include #include #include #include #include +#include using namespace Collections; AmpacheServiceCollection::AmpacheServiceCollection( ServiceBase *service, - const QString &server, + const QUrl &server, const QString &sessionId ) : ServiceCollection( service, "AmpacheCollection", "AmpacheCollection" ) , m_server( server ) @@ -51,19 +52,19 @@ QString AmpacheServiceCollection::collectionId() const { - return "Ampache: " + m_server; + return "Ampache: " + m_server.url(); } QString AmpacheServiceCollection::prettyName() const { - return i18n( "Ampache Server %1", m_server ); + return i18n( "Ampache Server %1", m_server.url() ); } bool AmpacheServiceCollection::possiblyContainsTrack( const QUrl &url ) const { - return url.url().contains( m_server ); + return m_server.isParentOf( url ); } void @@ -75,10 +76,11 @@ Meta::TrackPtr AmpacheServiceCollection::trackForUrl( const QUrl &url ) { - MetaProxy::TrackPtr trackptr( new MetaProxy::Track( url.url(), MetaProxy::Track::ManualLookup ) ); + MetaProxy::TrackPtr trackptr( new MetaProxy::Track( url, MetaProxy::Track::ManualLookup ) ); AmpacheTrackForUrlWorker *worker = new AmpacheTrackForUrlWorker( url, trackptr, m_server, m_sessionId, service() ); - connect( worker, SIGNAL(authenticationNeeded()), SLOT(slotAuthenticationNeeded()) ); + connect( worker, &AmpacheTrackForUrlWorker::authenticationNeeded, + this, &AmpacheServiceCollection::slotAuthenticationNeeded ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(worker) ); return Meta::TrackPtr::staticCast( trackptr ); @@ -138,7 +140,7 @@ AmpacheTrackForUrlWorker::AmpacheTrackForUrlWorker( const QUrl &url, MetaProxy::TrackPtr track, - const QString &server, + const QUrl &server, const QString &sessionId, ServiceBase *service ) : Amarok::TrackForUrlWorker( url ) @@ -153,8 +155,11 @@ {} void -AmpacheTrackForUrlWorker::run() +AmpacheTrackForUrlWorker::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread) { + Q_UNUSED( self ) + Q_UNUSED( thread ) + m_urlTrack = 0; m_urlAlbum = 0; m_urlArtist = 0; @@ -165,9 +170,13 @@ //send url_to_song to Ampache - QString requestUrl = - QString( "%1/server/xml.server.php?action=url_to_song&auth=%2&url=%3" ) - .arg( m_server, m_sessionId, QUrl::toPercentEncoding( m_url.url() ) ); + QUrl requestUrl = m_server; + requestUrl.setPath( m_server.path() + "/server/xml.server.php" ); + QUrlQuery query; + query.addQueryItem( "action", "url_to_song" ); + query.addQueryItem( "auth", m_sessionId ); + query.addQueryItem( "url", m_url.toEncoded() ); + requestUrl.setQuery( query ); QNetworkRequest req( requestUrl ); QNetworkReply *reply = The::networkAccessManager()->get( req ); diff --git a/src/services/ampache/AmpacheServiceQueryMaker.h b/src/services/ampache/AmpacheServiceQueryMaker.h --- a/src/services/ampache/AmpacheServiceQueryMaker.h +++ b/src/services/ampache/AmpacheServiceQueryMaker.h @@ -39,7 +39,7 @@ Q_OBJECT public: - AmpacheServiceQueryMaker( AmpacheServiceCollection * collection, const QString &server, const QString &sessionId ); + AmpacheServiceQueryMaker( AmpacheServiceCollection * collection, const QUrl &server, const QString &sessionId ); ~AmpacheServiceQueryMaker(); virtual void run(); diff --git a/src/services/ampache/AmpacheServiceQueryMaker.cpp b/src/services/ampache/AmpacheServiceQueryMaker.cpp --- a/src/services/ampache/AmpacheServiceQueryMaker.cpp +++ b/src/services/ampache/AmpacheServiceQueryMaker.cpp @@ -28,9 +28,10 @@ #include "core/meta/support/MetaConstants.h" #include "core-impl/collections/support/MemoryMatcher.h" -#include #include #include +#include +#include using namespace Collections; @@ -43,7 +44,7 @@ QAtomicInt expectedReplies; - QString server; + QUrl server; QString sessionId; QList parentTrackIds; QList parentAlbumIds; @@ -62,7 +63,7 @@ Meta::TrackList trackResults; }; -AmpacheServiceQueryMaker::AmpacheServiceQueryMaker( AmpacheServiceCollection * collection, const QString &server, const QString &sessionId ) +AmpacheServiceQueryMaker::AmpacheServiceQueryMaker( AmpacheServiceCollection * collection, const QUrl &server, const QString &sessionId ) : DynamicServiceQueryMaker() , d( new Private ) { @@ -213,15 +214,19 @@ if( !artists.isEmpty() ) { debug() << "got" << artists.count() << "artists from the memory collection"; - emit newResultReady( artists ); + emit newArtistsReady( artists ); emit queryDone(); return; } QUrl request = getRequestUrl( "artists" ); + QUrlQuery query( request ); if ( !d->artistFilter.isEmpty() ) - request.addQueryItem( "filter", d->artistFilter ); + { + query.addQueryItem( "filter", d->artistFilter ); + request.setQuery( query ); + } d->expectedReplies.ref(); The::networkAccessManager()->getData( request, this, @@ -244,7 +249,7 @@ if( !albums.isEmpty() ) { debug() << "got" << albums.count() << "albums from the memory collection"; - emit newResultReady( albums ); + emit newAlbumsReady( albums ); emit queryDone(); return; } @@ -254,7 +259,9 @@ foreach( int id, d->parentArtistIds ) { QUrl request = getRequestUrl( "artist_albums" ); - request.addQueryItem( "filter", QString::number( id ) ); + QUrlQuery query( request ); + query.addQueryItem( "filter", QString::number( id ) ); + request.setQuery( query ); d->expectedReplies.ref(); The::networkAccessManager()->getData( request, this, @@ -264,9 +271,13 @@ else { QUrl request = getRequestUrl( "albums" ); + QUrlQuery query( request ); if ( !d->albumFilter.isEmpty() ) - request.addQueryItem( "filter", d->albumFilter ); + { + query.addQueryItem( "filter", d->albumFilter ); + request.setQuery( query ); + } d->expectedReplies.ref(); The::networkAccessManager()->getData( request, this, @@ -314,7 +325,7 @@ if( !tracks.isEmpty() ) { debug() << "got" << tracks.count() << "tracks from the memory collection"; - emit newResultReady( tracks ); + emit newTracksReady( tracks ); emit queryDone(); return; } @@ -327,7 +338,9 @@ foreach( int id, d->parentAlbumIds ) { QUrl request = getRequestUrl( "album_songs" ); - request.addQueryItem( "filter", QString::number( id ) ); + QUrlQuery query( request ); + query.addQueryItem( "filter", QString::number( id ) ); + request.setQuery( query ); d->expectedReplies.ref(); The::networkAccessManager()->getData( request, this, @@ -339,7 +352,9 @@ foreach( int id, d->parentArtistIds ) { QUrl request = getRequestUrl( "artist_songs" ); - request.addQueryItem( "filter", QString::number( id ) ); + QUrlQuery query( request ); + query.addQueryItem( "filter", QString::number( id ) ); + request.setQuery( query ); d->expectedReplies.ref(); The::networkAccessManager()->getData( request, this, @@ -381,7 +396,7 @@ if ( !domError.isNull() ) { - warning() << "Error getting Artist List" << domError.text(); + warning() << "Error getting Artist List" << domError.text() << "Code:" << domError.attribute("code"); AmpacheService *parentService = dynamic_cast< AmpacheService * >( d->collection->service() ); if( !parentService ) return; @@ -420,7 +435,7 @@ if( !d->expectedReplies.deref() ) { - emit newResultReady( d->artistResults ); + emit newArtistsReady( d->artistResults ); emit queryDone(); d->artistResults.clear(); } @@ -451,7 +466,7 @@ if( !domError.isNull() ) { - warning() << "Error getting Album List" << domError.text(); + warning() << "Error getting Album List" << domError.text() << "Code:" << domError.attribute("code"); AmpacheService *parentService = dynamic_cast< AmpacheService * >(d->collection->service()); if( parentService == 0 ) return; @@ -538,7 +553,7 @@ if( !d->expectedReplies.deref() ) { - emit newResultReady( d->albumResults ); + emit newAlbumsReady( d->albumResults ); emit queryDone(); d->albumResults.clear(); } @@ -569,7 +584,7 @@ if( !domError.isNull() ) { - warning() << "Error getting Track Download " << domError.text(); + warning() << "Error getting Track Download " << domError.text() << "Code:" << domError.attribute("code"); AmpacheService *parentService = dynamic_cast< AmpacheService * >( d->collection->service() ); if( parentService == 0 ) return; @@ -649,7 +664,7 @@ if( !d->expectedReplies.deref() ) { - emit newResultReady( d->trackResults ); + emit newTracksReady( d->trackResults ); emit queryDone(); d->trackResults.clear(); } @@ -711,27 +726,30 @@ QUrl AmpacheServiceQueryMaker::getRequestUrl( const QString &action ) const { - QString path = d->server; + QUrl url = d->server; + QString scheme = url.scheme(); + + if( scheme != "http" && scheme != "https" ) + url.setScheme( "http" ); - if( !path.startsWith("http://") && !path.startsWith("https://") ) - path = "http://" + path; + QUrlQuery query( url ); - QUrl url( path ); + url = url.adjusted( QUrl::StripTrailingSlash ); + url.setPath( url.path() + "/server/xml.server.php" ); - url = url.adjusted(QUrl::StripTrailingSlash); - url.setPath(url.path() + '/' + ( "/server/xml.server.php" )); - url.addQueryItem( "auth", d->sessionId ); + query.addQueryItem( "auth", d->sessionId ); if( !action.isEmpty() ) - url.addQueryItem( "action", action ); + query.addQueryItem( "action", action ); if( d->dateFilter > 0 ) { QDateTime from; from.setTime_t( d->dateFilter ); - url.addQueryItem( "add", from.toString( Qt::ISODate ) ); + query.addQueryItem( "add", from.toString( Qt::ISODate ) ); } - url.addQueryItem( "limit", QString::number( d->maxsize ) ); + query.addQueryItem( "limit", QString::number( d->maxsize ) ); + url.setQuery( query ); return url; } diff --git a/src/services/ampache/AmpacheSettings.h b/src/services/ampache/AmpacheSettings.h --- a/src/services/ampache/AmpacheSettings.h +++ b/src/services/ampache/AmpacheSettings.h @@ -19,7 +19,7 @@ #include "AmpacheConfig.h" -#include +#include namespace Ui { class AmpacheConfigWidget; } @@ -32,13 +32,13 @@ { Q_OBJECT public: - explicit AmpacheSettings( QWidget *parent = 0, const QVariantList &args = QVariantList() ); + explicit AmpacheSettings( QWidget *parent, const QVariantList &args ); - ~AmpacheSettings(); + virtual ~AmpacheSettings(); - virtual void save(); - virtual void load(); - virtual void defaults(); + virtual void save() Q_DECL_OVERRIDE; + virtual void load() Q_DECL_OVERRIDE; + virtual void defaults() Q_DECL_OVERRIDE; private: diff --git a/src/services/ampache/AmpacheSettings.cpp b/src/services/ampache/AmpacheSettings.cpp --- a/src/services/ampache/AmpacheSettings.cpp +++ b/src/services/ampache/AmpacheSettings.cpp @@ -21,26 +21,27 @@ #include #include +#include #include K_PLUGIN_FACTORY_WITH_JSON( ampachesettings, "amarok_service_ampache_config.json", registerPlugin(); ) -AmpacheSettings::AmpacheSettings(QWidget * parent, const QVariantList & args) - : KCModule( AmpacheSettingsFactory::componentData(), parent, args ) +AmpacheSettings::AmpacheSettings( QWidget *parent, const QVariantList &args ) + : KCModule( parent, args ) + , m_configDialog(new Ui::AmpacheConfigWidget) , m_lastRowEdited(-1) , m_lastColumnEdited(-1) { - m_configDialog = new Ui::AmpacheConfigWidget; m_configDialog->setupUi( this ); m_configDialog->serverList->setMinimumWidth(700); m_configDialog->serverList->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); m_configDialog->serverList->verticalHeader()->hide(); - connect ( m_configDialog->serverList, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(onCellDoubleClicked(int,int))); - connect ( m_configDialog->serverList, SIGNAL(cellChanged(int,int)), this, SLOT(saveCellEdit(int,int))); - connect ( m_configDialog->addButton, SIGNAL(clicked()), this, SLOT(add()) ); - connect ( m_configDialog->removeButton, SIGNAL(clicked()), this, SLOT(remove()) ); + connect ( m_configDialog->serverList, &QTableWidget::cellDoubleClicked, this, &AmpacheSettings::onCellDoubleClicked ); + connect ( m_configDialog->serverList, &QTableWidget::cellChanged, this, &AmpacheSettings::saveCellEdit ); + connect ( m_configDialog->addButton, &QPushButton::clicked, this, &AmpacheSettings::add ); + connect ( m_configDialog->removeButton, &QPushButton::clicked, this, &AmpacheSettings::remove ); } AmpacheSettings::~AmpacheSettings() @@ -78,7 +79,7 @@ AmpacheServerEntry entry = m_config.servers().at( i ); serverList->setItem(i, 0, new QTableWidgetItem(entry.name)); - serverList->setItem(i, 1, new QTableWidgetItem(entry.url)); + serverList->setItem(i, 1, new QTableWidgetItem(entry.url.url())); serverList->setItem(i, 2, new QTableWidgetItem(entry.username)); QString starPassword = entry.password; starPassword.fill('*'); @@ -107,7 +108,8 @@ server.name = dialog.name(); server.url = dialog.url(); server.username = dialog.username(); - server.password =dialog.password(); + server.password = dialog.password(); + server.addToCollection = false; if( server.name.isEmpty()) return; m_config.addServer( server ); @@ -140,16 +142,16 @@ { if(m_lastRowEdited != row || m_lastColumnEdited != column) //only worry about user edits return; - kDebug( 14310 ) << Q_FUNC_INFO << row << column; +// kDebug( 14310 ) << Q_FUNC_INFO << row << column; QString newValue = m_configDialog->serverList->item(row, column)->text(); AmpacheServerEntry server = m_config.servers().at(row); switch(column) { case 0: server.name = newValue; break; case 1: - server.url = newValue; + server.url = QUrl( newValue ); break; case 2: server.username = newValue; @@ -167,5 +169,6 @@ } +#include "moc_AmpacheSettings.cpp" #include "AmpacheSettings.moc" diff --git a/src/services/ampache/CMakeLists.txt b/src/services/ampache/CMakeLists.txt --- a/src/services/ampache/CMakeLists.txt +++ b/src/services/ampache/CMakeLists.txt @@ -1,14 +1,11 @@ - include_directories( - ../ - ${Amarok_SOURCE_DIR}/src/ - ${Amarok_SOURCE_DIR}/src/core-impl/collections - ${Amarok_SOURCE_DIR}/src/network - ${Amarok_SOURCE_DIR}/src/statusbar - ${CMAKE_CURRENT_BINARY_DIR}/../../.. - - ${QCA2_INCLUDE_DIR} - - ) +include_directories( + ../ + ${Amarok_SOURCE_DIR}/src/ + ${Amarok_SOURCE_DIR}/src/core-impl/collections + ${Amarok_SOURCE_DIR}/src/network + ${Amarok_SOURCE_DIR}/src/statusbar + ${CMAKE_CURRENT_BINARY_DIR}/../../.. +) if( LIBLASTFM_FOUND ) include_directories( @@ -22,73 +19,71 @@ set(libampache_account_login_SRCS AmpacheAccountLogin.cpp) + add_library(ampache_account_login SHARED ${libampache_account_login_SRCS}) + target_link_libraries(ampache_account_login amaroklib amarokcore - KF5::KDELibs4Support KF5::KIOCore - ${QCA2_LIBRARIES} ) install(TARGETS ampache_account_login DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### next target ############### - set(amarok_service_ampache_PART_SRCS - AmpacheService.cpp - AmpacheServiceCollection.cpp - AmpacheServiceQueryMaker.cpp - AmpacheMeta.cpp - AmpacheConfig.cpp - ) - if( LIBLASTFM_FOUND ) - set(amarok_service_ampache_PART_SRCS - ${amarok_service_ampache_PART_SRCS} - LastfmInfoParser.cpp ) - endif() - - - - add_library(amarok_service_ampache MODULE ${amarok_service_ampache_PART_SRCS}) - target_link_libraries(amarok_service_ampache - ampache_account_login - amarokcore - amaroklib - KF5::KDELibs4Support - - KF5::KIOCore - KF5::ThreadWeaver - Qt5::Xml - - ) - if( LIBLASTFM_FOUND ) - target_link_libraries(amarok_service_ampache - ${LIBLASTFM_LIBRARY} - ) - endif() - - - install(TARGETS amarok_service_ampache DESTINATION ${PLUGIN_INSTALL_DIR} ) + +set(amarok_service_ampache_PART_SRCS + AmpacheService.cpp + AmpacheServiceCollection.cpp + AmpacheServiceQueryMaker.cpp + AmpacheMeta.cpp + AmpacheConfig.cpp +) +if( LIBLASTFM_FOUND ) + set(amarok_service_ampache_PART_SRCS + ${amarok_service_ampache_PART_SRCS} + LastfmInfoParser.cpp ) +endif() -########### next target ############### +add_library(amarok_service_ampache MODULE ${amarok_service_ampache_PART_SRCS}) +target_link_libraries(amarok_service_ampache + ampache_account_login + amarokcore + amaroklib - set(kcm_amarok_service_ampache_PART_SRCSS AddServerDialog.cpp AmpacheSettings.cpp AmpacheConfig.cpp ) + KF5::KIOCore + KF5::ThreadWeaver + Qt5::Xml +) +if( LIBLASTFM_FOUND ) + target_link_libraries(amarok_service_ampache + ${LIBLASTFM_LIBRARY} + ) +endif() - ki18n_wrap_ui( kcm_amarok_service_ampache_PART_SRCSS AmpacheConfigWidget.ui NewServerWidget.ui ) +install(TARGETS amarok_service_ampache DESTINATION ${PLUGIN_INSTALL_DIR} ) +install(FILES amarok_service_ampache.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) - add_library(kcm_amarok_service_ampache MODULE ${kcm_amarok_service_ampache_PART_SRCSS} ) +kcoreaddons_desktop_to_json(amarok_service_ampache amarok_service_ampache.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) - target_link_libraries( kcm_amarok_service_ampache - ampache_account_login Qt5::Core - Qt5::Gui ) +########### next target ############### + +set(kcm_amarok_service_ampache_PART_SRCSS AddServerDialog.cpp AmpacheSettings.cpp AmpacheConfig.cpp ) + +ki18n_wrap_ui( kcm_amarok_service_ampache_PART_SRCSS AmpacheConfigWidget.ui NewServerWidget.ui ) - install(TARGETS kcm_amarok_service_ampache DESTINATION ${PLUGIN_INSTALL_DIR}) +add_library(kcm_amarok_service_ampache MODULE ${kcm_amarok_service_ampache_PART_SRCSS} ) + +target_link_libraries( kcm_amarok_service_ampache + ampache_account_login + KF5::ConfigWidgets +) -########### install files ############### +install(TARGETS kcm_amarok_service_ampache DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES amarok_service_ampache_config.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) - install( FILES amarok_service_ampache.desktop DESTINATION ${SERVICES_INSTALL_DIR}) - install( FILES amarok_service_ampache_config.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +kcoreaddons_desktop_to_json(kcm_amarok_service_ampache amarok_service_ampache_config.desktop SERVICE_TYPES kcmodule.desktop) diff --git a/src/services/ampache/LastfmInfoParser.cpp b/src/services/ampache/LastfmInfoParser.cpp --- a/src/services/ampache/LastfmInfoParser.cpp +++ b/src/services/ampache/LastfmInfoParser.cpp @@ -21,7 +21,7 @@ #include "core/support/Amarok.h" #include "core/support/Debug.h" -#include +#include #include @@ -39,7 +39,7 @@ m_jobs[ "getTrackInfo" ] = lastfm::ws::post( query ); - connect( m_jobs[ "getTrackInfo" ], SIGNAL(finished()), SLOT(onGetTrackInfo()) ); + connect( m_jobs[ "getTrackInfo" ], &QNetworkReply::finished, this, &LastfmInfoParser::onGetTrackInfo ); } void LastfmInfoParser::onGetTrackInfo() @@ -87,7 +87,7 @@ m_jobs[ "getAlbumInfo" ] = lastfm::ws::post( query ); - connect( m_jobs[ "getAlbumInfo" ], SIGNAL(finished()), SLOT(onGetAlbumInfo()) ); + connect( m_jobs[ "getAlbumInfo" ], &QNetworkReply::finished, this, &LastfmInfoParser::onGetAlbumInfo ); } @@ -139,7 +139,7 @@ m_jobs[ "getArtistInfo" ] = lastfm::ws::post( query ); - connect( m_jobs[ "getArtistInfo" ], SIGNAL(finished()), SLOT(onGetArtistInfo()) ); + connect( m_jobs[ "getArtistInfo" ], &QNetworkReply::finished, this, &LastfmInfoParser::onGetArtistInfo ); } diff --git a/src/services/ampache/NewServerWidget.ui b/src/services/ampache/NewServerWidget.ui --- a/src/services/ampache/NewServerWidget.ui +++ b/src/services/ampache/NewServerWidget.ui @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ - + 0 @@ -52,7 +52,7 @@ - + @@ -62,14 +62,14 @@ - + QLineEdit::Password - + Check Connection @@ -92,14 +92,14 @@ - KPushButton + QPushButton QPushButton -
kpushbutton.h
+
qpushbutton.h
- KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
diff --git a/src/services/ampache/amarok_service_ampache.desktop b/src/services/ampache/amarok_service_ampache.desktop --- a/src/services/ampache/amarok_service_ampache.desktop +++ b/src/services/ampache/amarok_service_ampache.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-ampache-amarok Name=Ampache Name[bg]=Ampache diff --git a/src/services/gpodder/CMakeLists.txt b/src/services/gpodder/CMakeLists.txt --- a/src/services/gpodder/CMakeLists.txt +++ b/src/services/gpodder/CMakeLists.txt @@ -1,72 +1,88 @@ include_directories( - ../ - ../../ - ../../core-impl/collections - ../../statusbar - ../../widgets - ../../context - ../../network - ../../dynamic # for CustomBias.h - ../../browsers/playlistbrowser - ${CMAKE_CURRENT_BINARY_DIR}/../.. #for amarokconfig.h - - - ${LIBMYGPO_QT_INCLUDE_DIRS} - ${LIBMYGPO_QT_INCLUDE_DIRS}/../ - ) - - add_subdirectory( images ) - - set(amarok_service_gpodder_PART_SRCS - GpodderService.cpp - GpodderServiceConfig.cpp - GpodderServiceModel.cpp - GpodderServiceView.cpp - GpodderProvider.cpp - GpodderPodcastMeta.cpp - GpodderTreeItem.cpp - GpodderPodcastTreeItem.cpp - GpodderTagTreeItem.cpp - GpodderPodcastRequestHandler.cpp - GpodderSortFilterProxyModel.cpp - ) - - add_library(amarok_service_gpodder MODULE ${amarok_service_gpodder_PART_SRCS}) - - target_link_libraries(amarok_service_gpodder - amarokcore - amaroklib - amarokpud - ${LIBMYGPO_QT_LIBRARIES} - KF5::KDELibs4Support - - KF5::KIOCore - ${KDE4_SOLID_LIBRARY} - KF5::ThreadWeaver - Qt5::Network - ) - - install( TARGETS amarok_service_gpodder DESTINATION ${PLUGIN_INSTALL_DIR} ) - - set(kcm_amarok_service_gpodder_PART_SRCS - GpodderServiceSettings.cpp - GpodderServiceConfig.cpp - ) - - ki18n_wrap_ui( kcm_amarok_service_gpodder_PART_SRCS GpodderConfigWidget.ui ) - - add_library(kcm_amarok_service_gpodder MODULE ${kcm_amarok_service_gpodder_PART_SRCS} ) - - target_link_libraries( kcm_amarok_service_gpodder - amarokcore - amaroklib - ${LIBMYGPO_QT_LIBRARIES} - - - KF5::KIOCore - Qt5::Network ) - - install(TARGETS kcm_amarok_service_gpodder DESTINATION ${PLUGIN_INSTALL_DIR}) - - install( FILES amarok_service_gpodder.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) - install( FILES amarok_service_gpodder_config.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) + ../ + ../../ + ../../core-impl/collections + ../../statusbar + ../../widgets + ../../context + ../../network + ../../dynamic # for CustomBias.h + ../../browsers/playlistbrowser + ${CMAKE_CURRENT_BINARY_DIR}/../.. #for amarokconfig.h + + + ${LIBMYGPO_QT5_INCLUDE_DIRS} + ${LIBMYGPO_QT5_INCLUDE_DIRS}/../ +) + +add_subdirectory( images ) + +find_package( KF5 COMPONENTS Wallet REQUIRED ) + +set(libgpodder_service_config_SRCS + GpodderServiceConfig.cpp +) + +add_library(gpodder_service_config SHARED ${libgpodder_service_config_SRCS}) + +target_link_libraries(gpodder_service_config + amaroklib + amarokcore + KF5::Wallet +) + +install(TARGETS gpodder_service_config DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}) + +set(amarok_service_gpodder_PART_SRCS + GpodderService.cpp + GpodderServiceModel.cpp + GpodderServiceView.cpp + GpodderProvider.cpp + GpodderPodcastMeta.cpp + GpodderTreeItem.cpp + GpodderPodcastTreeItem.cpp + GpodderTagTreeItem.cpp + GpodderPodcastRequestHandler.cpp + GpodderSortFilterProxyModel.cpp +) + +add_library(amarok_service_gpodder MODULE ${amarok_service_gpodder_PART_SRCS}) + +target_link_libraries(amarok_service_gpodder + amarokcore + amaroklib + amarokpud + gpodder_service_config + ${LIBMYGPO_QT_LIBRARIES} + KF5::KIOCore + KF5::ThreadWeaver + Qt5::Network +) + +install( TARGETS amarok_service_gpodder DESTINATION ${PLUGIN_INSTALL_DIR} ) + +kcoreaddons_desktop_to_json(amarok_service_gpodder amarok_service_gpodder.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) + + +set(kcm_amarok_service_gpodder_PART_SRCS + GpodderServiceSettings.cpp +) + +ki18n_wrap_ui( kcm_amarok_service_gpodder_PART_SRCS GpodderConfigWidget.ui ) + +add_library(kcm_amarok_service_gpodder MODULE ${kcm_amarok_service_gpodder_PART_SRCS} ) + +target_link_libraries( kcm_amarok_service_gpodder + amarokcore + amaroklib + gpodder_service_config + ${LIBMYGPO_QT_LIBRARIES} + KF5::ConfigWidgets + KF5::KIOCore + Qt5::Network +) + +install(TARGETS kcm_amarok_service_gpodder DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES amarok_service_gpodder_config.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) + +kcoreaddons_desktop_to_json(kcm_amarok_service_gpodder amarok_service_gpodder_config.desktop SERVICE_TYPES kcmodule.desktop) diff --git a/src/services/gpodder/GpodderConfigWidget.ui b/src/services/gpodder/GpodderConfigWidget.ui --- a/src/services/gpodder/GpodderConfigWidget.ui +++ b/src/services/gpodder/GpodderConfigWidget.ui @@ -53,14 +53,14 @@
- + QLineEdit::Password - + @@ -107,18 +107,18 @@ - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
kcfg_GpodderUsername kcfg_GpodderPassword testLogin - klineedit.h + qlineedit.h diff --git a/src/services/gpodder/GpodderPodcastMeta.h b/src/services/gpodder/GpodderPodcastMeta.h --- a/src/services/gpodder/GpodderPodcastMeta.h +++ b/src/services/gpodder/GpodderPodcastMeta.h @@ -22,14 +22,14 @@ #include "core/playlists/PlaylistProvider.h" #include "core/podcasts/PodcastMeta.h" -#include +#include namespace Podcasts { class GpodderPodcastChannel; class GpodderProvider; -typedef KSharedPtr GpodderPodcastChannelPtr; +typedef AmarokSharedPointer GpodderPodcastChannelPtr; typedef QList GpodderPodcastChannelList; class GpodderPodcastChannel : public PodcastChannel diff --git a/src/services/gpodder/GpodderPodcastMeta.cpp b/src/services/gpodder/GpodderPodcastMeta.cpp --- a/src/services/gpodder/GpodderPodcastMeta.cpp +++ b/src/services/gpodder/GpodderPodcastMeta.cpp @@ -60,5 +60,7 @@ QUrl Podcasts::GpodderPodcastChannel::uidUrl() const { - return QString( "amarok-gpodder://%1" ).arg( url().url() ); + QUrl u = url(); + u.setScheme( QStringLiteral( "amarok-gpodder" ) ); + return u; } diff --git a/src/services/gpodder/GpodderPodcastRequestHandler.h b/src/services/gpodder/GpodderPodcastRequestHandler.h --- a/src/services/gpodder/GpodderPodcastRequestHandler.h +++ b/src/services/gpodder/GpodderPodcastRequestHandler.h @@ -20,7 +20,7 @@ #define GPODDERPODCASTREQUESTHANDLER_H_ #include "GpodderServiceModel.h" -#include +#include #include diff --git a/src/services/gpodder/GpodderPodcastRequestHandler.cpp b/src/services/gpodder/GpodderPodcastRequestHandler.cpp --- a/src/services/gpodder/GpodderPodcastRequestHandler.cpp +++ b/src/services/gpodder/GpodderPodcastRequestHandler.cpp @@ -43,6 +43,7 @@ { debug() << "Error in Podcast request: " << error; } + void GpodderPodcastRequestHandler::parseError() { debug() << "Error while parsing gpodder.net Podcasts"; diff --git a/src/services/gpodder/GpodderPodcastTreeItem.h b/src/services/gpodder/GpodderPodcastTreeItem.h --- a/src/services/gpodder/GpodderPodcastTreeItem.h +++ b/src/services/gpodder/GpodderPodcastTreeItem.h @@ -20,7 +20,7 @@ #define GPODDERPODCASTTREEITEM_H_ #include "GpodderTreeItem.h" -#include +#include class GpodderPodcastTreeItem: public GpodderTreeItem { diff --git a/src/services/gpodder/GpodderProvider.h b/src/services/gpodder/GpodderProvider.h --- a/src/services/gpodder/GpodderProvider.h +++ b/src/services/gpodder/GpodderProvider.h @@ -23,13 +23,13 @@ #include "core/podcasts/PodcastProvider.h" #include "core/podcasts/PodcastReader.h" #include "GpodderPodcastMeta.h" -#include -#include +#include +#include #include "playlistmanager/file/KConfigSyncRelStore.h" #include "playlistmanager/PlaylistManager.h" -#include -#include +#include +#include #include #include diff --git a/src/services/gpodder/GpodderProvider.cpp b/src/services/gpodder/GpodderProvider.cpp --- a/src/services/gpodder/GpodderProvider.cpp +++ b/src/services/gpodder/GpodderProvider.cpp @@ -32,15 +32,14 @@ #include "NetworkAccessManagerProxy.h" #include "PodcastModel.h" -#include -#include -#include -#include - #include #include +#include #include +#include + + using namespace Podcasts; GpodderProvider::GpodderProvider( const QString& username, @@ -73,48 +72,42 @@ //Connect default podcasts signals to make possible to ask the user if he wants //to upload a new local podcast to gpodder.net - connect( The::playlistManager()->defaultPodcasts(), - SIGNAL(playlistAdded(Playlists::PlaylistPtr)), - SLOT(slotSyncPlaylistAdded(Playlists::PlaylistPtr)) ); - connect( The::playlistManager()->defaultPodcasts(), - SIGNAL(playlistRemoved(Playlists::PlaylistPtr)), - SLOT(slotSyncPlaylistRemoved(Playlists::PlaylistPtr)) ); + connect( The::playlistManager()->defaultPodcasts(), &PodcastProvider::playlistAdded, + this, &GpodderProvider::slotSyncPlaylistAdded ); + connect( The::playlistManager()->defaultPodcasts(), &PodcastProvider::playlistRemoved, + this, &GpodderProvider::slotSyncPlaylistRemoved ); Podcasts::SqlPodcastProvider *sqlPodcastProvider; - sqlPodcastProvider = - dynamic_cast - ( The::playlistManager()->defaultPodcasts() ); + sqlPodcastProvider = dynamic_cast + ( The::playlistManager()->defaultPodcasts() ); - connect( The::podcastModel(), - SIGNAL(episodeMarkedAsNew(Podcasts::PodcastEpisodePtr)), - SLOT(slotEpisodeMarkedAsNew(Podcasts::PodcastEpisodePtr)) ); + connect( The::podcastModel(), &PlaylistBrowserNS::PodcastModel::episodeMarkedAsNew, + this, &GpodderProvider::slotEpisodeMarkedAsNew ); if( sqlPodcastProvider ) { - connect( sqlPodcastProvider, - SIGNAL(episodeDeleted(Podcasts::PodcastEpisodePtr)), - SLOT(slotEpisodeDeleted(Podcasts::PodcastEpisodePtr)) ); - connect( sqlPodcastProvider, - SIGNAL(episodeDownloaded(Podcasts::PodcastEpisodePtr)), - SLOT(slotEpisodeDownloaded(Podcasts::PodcastEpisodePtr)) ); + connect( sqlPodcastProvider, &SqlPodcastProvider::episodeDeleted, + this, &GpodderProvider::slotEpisodeDeleted ); + connect( sqlPodcastProvider,&SqlPodcastProvider::episodeDownloaded, + this, &GpodderProvider::slotEpisodeDownloaded ); } //Connect engine controller signals to make possible to synchronize podcast status - connect( The::engineController(), SIGNAL(trackChanged(Meta::TrackPtr)), - SLOT(slotTrackChanged(Meta::TrackPtr)) ); - connect( The::engineController(), SIGNAL(trackPositionChanged(qint64,bool)), - SLOT(slotTrackPositionChanged(qint64,bool)) ); - connect( The::engineController(), SIGNAL(paused()), - SLOT(slotPaused()) ); + connect( The::engineController(), &EngineController::trackChanged, + this, &GpodderProvider::slotTrackChanged ); + connect( The::engineController(), &EngineController::trackPositionChanged, + this, &GpodderProvider::slotTrackPositionChanged ); + connect( The::engineController(), &EngineController::paused, + this, &GpodderProvider::slotPaused ); //These timers will periodically synchronize data between local podcasts and gpodder.net - connect( m_timerSynchronizeStatus, SIGNAL(timeout()), - SLOT(timerSynchronizeStatus()) ); - connect( m_timerSynchronizeSubscriptions, SIGNAL(timeout()), - SLOT(timerSynchronizeSubscriptions()) ); - connect( m_timerGeneratePlayAction, SIGNAL(timeout()), - SLOT(timerGenerateEpisodeAction()) ); + connect( m_timerSynchronizeStatus, &QTimer::timeout, + this, &GpodderProvider::timerSynchronizeStatus ); + connect( m_timerSynchronizeSubscriptions, &QTimer::timeout, + this, &GpodderProvider::timerSynchronizeSubscriptions ); + connect( m_timerGeneratePlayAction, &QTimer::timeout, + this, &GpodderProvider::timerGenerateEpisodeAction ); m_timerGeneratePlayAction->stop(); m_timerSynchronizeStatus->stop(); @@ -393,7 +386,7 @@ foreach( PodcastChannelPtr channel, channels ) { - removeChannel( channel->url().url() ); + removeChannel( channel->url() ); //The service will try to unsubscribe this podcast from gpodder.net //in the next synchronization @@ -424,7 +417,7 @@ foreach( PodcastChannelPtr tempChannel, m_channels ) if( channel->url() == tempChannel->url() ) { - removeChannel( tempChannel->url().url() ); + removeChannel( tempChannel->url() ); //The service will try to unsubscribe this podcast from gpodder.net //in the next synchronization @@ -437,14 +430,14 @@ qulonglong GpodderProvider::subscriptionTimestamp() { - KConfigGroup config = KGlobal::config()->group( GpodderServiceConfig::configSectionName() ); + KConfigGroup config = Amarok::config( GpodderServiceConfig::configSectionName() ); return config.readEntry( "subscriptionTimestamp", 0 ); } void GpodderProvider::setSubscriptionTimestamp( qulonglong newTimestamp ) { - KConfigGroup config = KGlobal::config()->group( GpodderServiceConfig::configSectionName() ); + KConfigGroup config = Amarok::config( GpodderServiceConfig::configSectionName() ); config.writeEntry( "subscriptionTimestamp", newTimestamp ); } @@ -454,7 +447,7 @@ debug() << "new episodes status: " << m_uploadEpisodeStatusMap.size(); - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) return; if( !m_uploadEpisodeStatusMap.isEmpty() ) @@ -520,7 +513,7 @@ debug() << "add: " << m_addList.size(); debug() << "remove: " << m_removeList.size(); - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) return; if( !m_removeList.isEmpty() || !m_addList.isEmpty() ) @@ -565,10 +558,7 @@ if( track != Meta::TrackPtr( 0 ) ) { //If the episode is from one of the gpodder subscribed podcasts, then we must keep looking it - if( ( this->possiblyContainsTrack( track->uidUrl() ) ) || - ( this->possiblyContainsTrack( track->uidUrl() ) && - The::playlistManager()->defaultPodcasts()->possiblyContainsTrack( track->uidUrl() ) - ) ) + if( ( this->possiblyContainsTrack( QUrl( track->uidUrl() ) ) ) ) { m_trackToSyncStatus = track; @@ -653,7 +643,7 @@ ) ); //Any previous episodeAction, from the same podcast, will be replaced - m_uploadEpisodeStatusMap.insert( tempEpisode->uidUrl(), tempEpisodeAction ); + m_uploadEpisodeStatusMap.insert( QUrl( tempEpisode->uidUrl() ), tempEpisodeAction ); } //Starts to generate EpisodeActions @@ -688,9 +678,9 @@ ) ); //Any previous episodeAction, from the same podcast, will be replaced - m_uploadEpisodeStatusMap.insert( tempEpisode->uidUrl(), tempEpisodeAction ); + m_uploadEpisodeStatusMap.insert( QUrl( tempEpisode->uidUrl() ), tempEpisodeAction ); //Make local podcasts aware of new episodeActions - m_episodeStatusMap.insert( tempEpisode->uidUrl(), tempEpisodeAction ); + m_episodeStatusMap.insert( QUrl( tempEpisode->uidUrl() ), tempEpisodeAction ); } } } @@ -700,7 +690,7 @@ { DEBUG_BLOCK - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) { QTimer::singleShot( 10000, this, SLOT(requestDeviceUpdates()) ); return; @@ -803,7 +793,7 @@ { DEBUG_BLOCK - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) { QTimer::singleShot( 10000, this, SLOT(requestEpisodeActionsInCascade()) ); return; @@ -975,7 +965,7 @@ if( track ) { - EpisodeActionPtr tempEpisodeAction = m_episodeStatusMap.value( track->uidUrl() ); + EpisodeActionPtr tempEpisodeAction = m_episodeStatusMap.value( QUrl( track->uidUrl() ) ); //Create an AutoTimecode at the last position position, so the user always know where he stopped to listen if( tempEpisodeAction && ( tempEpisodeAction->action() == EpisodeAction::Play ) ) @@ -999,11 +989,11 @@ m_resolveUrlJob = KIO::get( channel->url(), KIO::Reload, KIO::HideProgressInfo ); - connect( m_resolveUrlJob, SIGNAL(result(KJob*)), - SLOT(urlResolveFinished(KJob*)) ); + connect( m_resolveUrlJob, &KJob::result, + this, &GpodderProvider::urlResolveFinished ); connect( m_resolveUrlJob, - SIGNAL(permanentRedirection(KIO::Job*,QUrl,QUrl)), - SLOT(urlResolvePermanentRedirection(KIO::Job*,QUrl,QUrl)) ); + &KIO::TransferJob::permanentRedirection, + this, &GpodderProvider::urlResolvePermanentRedirection ); m_resolvedPodcasts.insert( m_resolveUrlJob, channel ); } @@ -1062,7 +1052,7 @@ ) ); //Any previous episodeAction, from the same podcast, will be replaced - m_uploadEpisodeStatusMap.insert( episode->uidUrl(), tempEpisodeAction ); + m_uploadEpisodeStatusMap.insert( QUrl( episode->uidUrl() ), tempEpisodeAction ); m_timerSynchronizeStatus->start( 60000 ); } @@ -1085,7 +1075,7 @@ ) ); //Any previous episodeAction, from the same podcast, will be replaced - m_uploadEpisodeStatusMap.insert( episode->uidUrl(), tempEpisodeAction ); + m_uploadEpisodeStatusMap.insert( QUrl( episode->uidUrl() ), tempEpisodeAction ); m_timerSynchronizeStatus->start( 60000 ); } @@ -1108,7 +1098,7 @@ ) ); //Any previous episodeAction, from the same podcast, will be replaced - m_uploadEpisodeStatusMap.insert( episode->uidUrl(), tempEpisodeAction ); + m_uploadEpisodeStatusMap.insert( QUrl( episode->uidUrl() ), tempEpisodeAction ); m_timerSynchronizeStatus->start( 60000 ); } diff --git a/src/services/gpodder/GpodderService.h b/src/services/gpodder/GpodderService.h --- a/src/services/gpodder/GpodderService.h +++ b/src/services/gpodder/GpodderService.h @@ -37,12 +37,11 @@ Q_OBJECT public: - GpodderServiceFactory( QObject *parent, const QVariantList &args ); - virtual ~GpodderServiceFactory() {} + GpodderServiceFactory(); + virtual ~GpodderServiceFactory(); virtual void init(); virtual QString name(); - virtual KPluginInfo info(); virtual KConfigGroup config(); private Q_SLOTS: diff --git a/src/services/gpodder/GpodderService.cpp b/src/services/gpodder/GpodderService.cpp --- a/src/services/gpodder/GpodderService.cpp +++ b/src/services/gpodder/GpodderService.cpp @@ -27,25 +27,22 @@ #include "GpodderServiceModel.h" #include "GpodderServiceView.h" #include "GpodderSortFilterProxyModel.h" -#include -#include +#include +#include #include "playlistmanager/PlaylistManager.h" #include "widgets/SearchWidget.h" -#include -#include -#include -#include #include +#include +#include -GpodderServiceFactory::GpodderServiceFactory( QObject *parent, const QVariantList &args ) - : ServiceFactory( parent, args ) -{ - KPluginInfo pluginInfo( "amarok_service_gpodder.desktop" ); - pluginInfo.setConfig( config() ); - m_info = pluginInfo; -} +GpodderServiceFactory::GpodderServiceFactory() + : ServiceFactory() +{} + +GpodderServiceFactory::~GpodderServiceFactory() +{} void GpodderServiceFactory::init() @@ -64,14 +61,6 @@ return "gpodder.net"; } -KPluginInfo -GpodderServiceFactory::info() -{ - KPluginInfo pluginInfo( "amarok_service_gpodder.desktop", "services" ); - pluginInfo.setConfig( config() ); - return pluginInfo; -} - KConfigGroup GpodderServiceFactory::config() { @@ -125,7 +114,7 @@ setIcon( QIcon::fromTheme( "view-services-gpodder-amarok" ) ); setLongDescription( i18n( "gpodder.net is an online Podcast Directory & Synchonisation Service." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/mygpo.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/mygpo.png" ) ); init(); } @@ -236,10 +225,10 @@ m_subscribeButton->setEnabled( true ); - connect( m_subscribeButton, SIGNAL(clicked()), this, SLOT(subscribe()) ); + connect( m_subscribeButton, &QPushButton::clicked, this, &GpodderService::subscribe ); - connect( m_searchWidget, SIGNAL(filterChanged(QString)), - m_proxyModel, SLOT(setFilterWildcard(QString)) ); + connect( m_searchWidget, &SearchWidget::filterChanged, + m_proxyModel, &QSortFilterProxyModel::setFilterWildcard ); m_polished = true; } diff --git a/src/services/gpodder/GpodderServiceConfig.h b/src/services/gpodder/GpodderServiceConfig.h --- a/src/services/gpodder/GpodderServiceConfig.h +++ b/src/services/gpodder/GpodderServiceConfig.h @@ -26,9 +26,15 @@ namespace KWallet { class Wallet; } -class KDialog; +class QMessageBox; -class GpodderServiceConfig : public QObject +#ifdef MAKE_GPODDER_SERVICE_CONFIG_LIB +#define GPODDER_CONFIG_EXPORT Q_DECL_EXPORT +#else +#define GPODDER_CONFIG_EXPORT Q_DECL_IMPORT +#endif + +class GPODDER_CONFIG_EXPORT GpodderServiceConfig : public QObject { Q_OBJECT @@ -70,7 +76,7 @@ bool m_ignoreWallet; bool m_isDataLoaded; - KDialog *m_askDiag; + QMessageBox *m_askDiag; KWallet::Wallet *m_wallet; }; diff --git a/src/services/gpodder/GpodderServiceConfig.cpp b/src/services/gpodder/GpodderServiceConfig.cpp --- a/src/services/gpodder/GpodderServiceConfig.cpp +++ b/src/services/gpodder/GpodderServiceConfig.cpp @@ -23,12 +23,16 @@ #include "GpodderServiceConfig.h" #include "App.h" +#include "core/support/Amarok.h" #include "core/support/Debug.h" -#include -#include - #include +#include + +#include +#include +#include + GpodderServiceConfig::GpodderServiceConfig() : m_username( "" ) @@ -61,7 +65,7 @@ DEBUG_BLOCK debug() << "Load config"; - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); m_enableProvider = config.readEntry( "enableProvider", false ); m_ignoreWallet = config.readEntry( "ignoreWallet", false ); @@ -108,7 +112,7 @@ debug() << "Save config"; - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); config.writeEntry( "enableProvider", m_enableProvider ); config.writeEntry( "ignoreWallet", m_ignoreWallet ); @@ -150,15 +154,15 @@ { if ( !m_askDiag ) { - m_askDiag = new KDialog( 0 ); + m_askDiag = new QMessageBox( Q_NULLPTR ); - m_askDiag->setCaption( i18n( "gpodder.net credentials" ) ); - m_askDiag->setMainWidget( new QLabel( i18n( "No running KWallet found. Would you like Amarok to save your gpodder.net credentials in plaintext?" ), m_askDiag ) ); - m_askDiag->setButtons( KDialog::Yes | KDialog::No ); + m_askDiag->setWindowTitle( i18n( "gpodder.net credentials" ) ); + m_askDiag->setText( i18n( "No running KWallet found. Would you like Amarok to save your gpodder.net credentials in plaintext?" ) ); + m_askDiag->setStandardButtons( QMessageBox::Yes | QMessageBox::No ); m_askDiag->setModal( true ); - connect( m_askDiag, SIGNAL(yesClicked()), this, SLOT(textDialogYes()) ); - connect( m_askDiag, SIGNAL(noClicked()), this, SLOT(textDialogNo()) ); + connect( m_askDiag, &QMessageBox::accepted, this, &GpodderServiceConfig::textDialogYes ); + connect( m_askDiag, &QMessageBox::rejected, this, &GpodderServiceConfig::textDialogNo ); } m_askDiag->exec(); @@ -177,7 +181,7 @@ //Open wallet unless explicitly told not to m_wallet = KWallet::Wallet::openWallet( KWallet::Wallet::NetworkWallet(), - 0, KWallet::Wallet::Synchronous ); + 0 ); } else { @@ -204,7 +208,7 @@ if ( !m_ignoreWallet ) { - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); m_ignoreWallet = true; config.writeEntry( "ignoreWallet", m_ignoreWallet ); @@ -222,7 +226,7 @@ if ( m_ignoreWallet ) { - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); m_ignoreWallet = false; config.writeEntry( "ignoreWallet", m_ignoreWallet ); diff --git a/src/services/gpodder/GpodderServiceModel.h b/src/services/gpodder/GpodderServiceModel.h --- a/src/services/gpodder/GpodderServiceModel.h +++ b/src/services/gpodder/GpodderServiceModel.h @@ -20,8 +20,8 @@ #define GPODDERSERVICEMODEL_H_ #include "GpodderTreeItem.h" -#include -#include +#include +#include #include "NetworkAccessManagerProxy.h" #include diff --git a/src/services/gpodder/GpodderServiceModel.cpp b/src/services/gpodder/GpodderServiceModel.cpp --- a/src/services/gpodder/GpodderServiceModel.cpp +++ b/src/services/gpodder/GpodderServiceModel.cpp @@ -24,10 +24,9 @@ #include "GpodderServiceSettings.h" #include "GpodderTagTreeItem.h" -#include - #include #include +#include #include static const int s_numberItemsToLoad = 100; @@ -175,7 +174,7 @@ debug() << "Error in TopTags request: " << error; - QTimer::singleShot( 20000, this, SLOT(requestTopTags()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestTopTags ); } void @@ -185,7 +184,7 @@ debug() << "Error while parsing TopTags"; - QTimer::singleShot( 20000, this, SLOT(requestTopTags()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestTopTags ); } void @@ -195,7 +194,7 @@ debug() << "Error in TopPodcasts request: " << error; - QTimer::singleShot( 20000, this, SLOT(requestTopPodcasts()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestTopPodcasts ); } void @@ -205,7 +204,7 @@ debug() << "Error while parsing TopPodcasts"; - QTimer::singleShot( 20000, this, SLOT(requestTopPodcasts()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestTopPodcasts ); } void @@ -215,7 +214,7 @@ debug() << "Error in suggestedPodcasts request: " << error; - QTimer::singleShot( 20000, this, SLOT(requestSuggestedPodcasts()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestSuggestedPodcasts ); } void @@ -225,7 +224,7 @@ debug() << "Error while parsing suggestedPodcasts"; - QTimer::singleShot( 20000, this, SLOT(requestSuggestedPodcasts()) ); + QTimer::singleShot( 20000, this, &GpodderServiceModel::requestSuggestedPodcasts ); } void @@ -291,7 +290,7 @@ if( qobject_cast( treeItem ) ) { - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) return false; return true; @@ -334,7 +333,7 @@ void GpodderServiceModel::requestTopTags() { - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) { QTimer::singleShot( 10000, this, SLOT(requestTopTags()) ); return; @@ -352,7 +351,7 @@ void GpodderServiceModel::requestTopPodcasts() { - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) { QTimer::singleShot( 10000, this, SLOT(requestTopPodcasts()) ); return; @@ -374,7 +373,7 @@ void GpodderServiceModel::requestSuggestedPodcasts() { - if( Solid::Networking::status() == Solid::Networking::Unconnected ) + if( !QNetworkConfigurationManager().isOnline() ) { QTimer::singleShot( 10000, this, SLOT(requestSuggestedPodcasts()) ); return; diff --git a/src/services/gpodder/GpodderServiceSettings.h b/src/services/gpodder/GpodderServiceSettings.h --- a/src/services/gpodder/GpodderServiceSettings.h +++ b/src/services/gpodder/GpodderServiceSettings.h @@ -20,31 +20,27 @@ #ifndef GPODDERSERVICESETTINGS_H #define GPODDERSERVICESETTINGS_H -#include "core/podcasts/PodcastMeta.h" #include "GpodderServiceConfig.h" -#include +#include -#include +#include #include namespace Ui { class GpodderConfigWidget; } -class QListWidgetItem; - class GpodderServiceSettings : public KCModule { Q_OBJECT public: - explicit GpodderServiceSettings( QWidget *parent = 0, - const QVariantList &args = QVariantList() ); + GpodderServiceSettings( QWidget *parent, const QVariantList &args ); virtual ~GpodderServiceSettings(); - virtual void save(); - virtual void load(); - virtual void defaults(); + void save() Q_DECL_OVERRIDE; + void load() Q_DECL_OVERRIDE; + void defaults() Q_DECL_OVERRIDE; private Q_SLOTS: void testLogin(); diff --git a/src/services/gpodder/GpodderServiceSettings.cpp b/src/services/gpodder/GpodderServiceSettings.cpp --- a/src/services/gpodder/GpodderServiceSettings.cpp +++ b/src/services/gpodder/GpodderServiceSettings.cpp @@ -28,37 +28,33 @@ #include "playlistmanager/PlaylistManager.h" #include "ui_GpodderConfigWidget.h" -#include #include #include #include #include #include #include -#include -K_PLUGIN_FACTORY( GpodderServiceSettingsFactory, registerPlugin(); ) -K_EXPORT_PLUGIN( GpodderServiceSettingsFactory( "kcm_amarok_gpodder" ) ) + +K_PLUGIN_FACTORY_WITH_JSON( GpodderServiceSettingsFactory, "amarok_service_gpodder_config.json", registerPlugin(); ) GpodderServiceSettings::GpodderServiceSettings( QWidget *parent, const QVariantList &args ) - : KCModule( GpodderServiceSettingsFactory::componentData(), parent, args ) + : KCModule( parent, args ) , m_enableProvider( false ) , m_createDevice( 0 ) { debug() << "Creating gpodder.net config object"; m_configDialog = new Ui::GpodderConfigWidget; m_configDialog->setupUi( this ); - connect( m_configDialog->kcfg_GpodderUsername, - SIGNAL(textChanged(QString)), this, - SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_GpodderPassword, - SIGNAL(textChanged(QString)), this, - SLOT(settingsChanged()) ); - connect( m_configDialog->testLogin, SIGNAL(clicked()), this, - SLOT(testLogin()) ); + connect( m_configDialog->kcfg_GpodderUsername, &QLineEdit::textChanged, + this, &GpodderServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_GpodderPassword, &QLineEdit::textChanged, + this, &GpodderServiceSettings::settingsChanged ); + connect( m_configDialog->testLogin, &QPushButton::clicked, + this, &GpodderServiceSettings::testLogin ); load(); } @@ -103,11 +99,12 @@ The::networkAccessManager() ); m_devices = api.listDevices( m_configDialog->kcfg_GpodderUsername->text() ); - connect( m_devices.data(), SIGNAL(finished()), SLOT(finished()) ); - connect( m_devices.data(), - SIGNAL(requestError(QNetworkReply::NetworkError)), - SLOT(onError(QNetworkReply::NetworkError)) ); - connect( m_devices.data(), SIGNAL(parseError()), SLOT(onParseError()) ); + connect( m_devices.data(), &mygpo::DeviceList::finished, + this, &GpodderServiceSettings::finished ); + connect( m_devices.data(), &mygpo::DeviceList::requestError, + this, &GpodderServiceSettings::onError ); + connect( m_devices.data(), &mygpo::DeviceList::parseError, + this, &GpodderServiceSettings::onParseError ); } else { @@ -155,10 +152,10 @@ QLatin1String( "Amarok on " ) % hostname, mygpo::Device::OTHER ); - connect( m_createDevice, SIGNAL(finished()), - SLOT(deviceCreationFinished()) ); - connect( m_createDevice, SIGNAL(error(QNetworkReply::NetworkError)), - SLOT(deviceCreationError(QNetworkReply::NetworkError)) ); + connect( m_createDevice, &QNetworkReply::finished, + this, &GpodderServiceSettings::deviceCreationFinished ); + connect( m_createDevice, QOverload::of(&QNetworkReply::error), + this, &GpodderServiceSettings::deviceCreationError ); } else { @@ -255,3 +252,5 @@ m_enableProvider = true; emit changed( true ); } + +#include "GpodderServiceSettings.moc" diff --git a/src/services/gpodder/GpodderTagTreeItem.h b/src/services/gpodder/GpodderTagTreeItem.h --- a/src/services/gpodder/GpodderTagTreeItem.h +++ b/src/services/gpodder/GpodderTagTreeItem.h @@ -20,7 +20,7 @@ #define GPODDERTAGTREEITEM_H_ #include "GpodderTreeItem.h" -#include +#include #include diff --git a/src/services/gpodder/GpodderTreeItem.h b/src/services/gpodder/GpodderTreeItem.h --- a/src/services/gpodder/GpodderTreeItem.h +++ b/src/services/gpodder/GpodderTreeItem.h @@ -19,8 +19,8 @@ #ifndef GPODDERTREEITEM_H_ #define GPODDERTREEITEM_H_ -#include -#include +#include +#include #include #include diff --git a/src/services/gpodder/GpodderTreeItem.cpp b/src/services/gpodder/GpodderTreeItem.cpp --- a/src/services/gpodder/GpodderTreeItem.cpp +++ b/src/services/gpodder/GpodderTreeItem.cpp @@ -86,7 +86,7 @@ void GpodderTreeItem::appendTags( mygpo::TagListPtr tags ) { - foreach( mygpo::TagPtr tag, tags->list() ) + for( const auto &tag : tags->list() ) { GpodderTagTreeItem *treeItem = new GpodderTagTreeItem( tag, this ); appendChild( treeItem ); @@ -96,7 +96,7 @@ void GpodderTreeItem::appendPodcasts( mygpo::PodcastListPtr podcasts ) { - foreach( mygpo::PodcastPtr podcast, podcasts->list() ) + for( const auto &podcast : podcasts->list() ) { appendChild( new GpodderPodcastTreeItem( podcast, this ) ); } diff --git a/src/services/gpodder/amarok_service_gpodder.desktop b/src/services/gpodder/amarok_service_gpodder.desktop --- a/src/services/gpodder/amarok_service_gpodder.desktop +++ b/src/services/gpodder/amarok_service_gpodder.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-gpodder-amarok Name=gpodder.net Name[bg]=gpodder.net diff --git a/src/services/jamendo/CMakeLists.txt b/src/services/jamendo/CMakeLists.txt --- a/src/services/jamendo/CMakeLists.txt +++ b/src/services/jamendo/CMakeLists.txt @@ -24,16 +24,11 @@ amarokcore amaroklib amarokpud - KF5::KDELibs4Support - KF5::KIOCore KF5::ThreadWeaver ) install(TARGETS amarok_service_jamendo DESTINATION ${PLUGIN_INSTALL_DIR} ) - -########### install files ############### - - install( FILES amarok_service_jamendo.desktop DESTINATION ${SERVICES_INSTALL_DIR}) + kcoreaddons_desktop_to_json(amarok_service_jamendo amarok_service_jamendo.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/services/jamendo/JamendoDatabaseHandler.cpp b/src/services/jamendo/JamendoDatabaseHandler.cpp --- a/src/services/jamendo/JamendoDatabaseHandler.cpp +++ b/src/services/jamendo/JamendoDatabaseHandler.cpp @@ -41,7 +41,7 @@ // create table containing tracks QString queryString = "CREATE TABLE jamendo_tracks (" - "id INTEGER PRIMARY KEY " + autoIncrement + ',' + + "id INTEGER PRIMARY KEY " + autoIncrement + ',' + "name " + db->textColumnType() + ',' + "track_number INTEGER," "length INTEGER," diff --git a/src/services/jamendo/JamendoInfoParser.cpp b/src/services/jamendo/JamendoInfoParser.cpp --- a/src/services/jamendo/JamendoInfoParser.cpp +++ b/src/services/jamendo/JamendoInfoParser.cpp @@ -19,7 +19,7 @@ #include "core/support/Debug.h" #include "JamendoMeta.h" -#include +#include using namespace Meta; diff --git a/src/services/jamendo/JamendoMeta.cpp b/src/services/jamendo/JamendoMeta.cpp --- a/src/services/jamendo/JamendoMeta.cpp +++ b/src/services/jamendo/JamendoMeta.cpp @@ -20,7 +20,7 @@ #include "SvgHandler.h" #include "core/support/Debug.h" -#include +#include #include @@ -135,13 +135,13 @@ QPixmap Meta::JamendoTrack::emblem() { - return QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-jamendo.png" ) ); + return QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-jamendo.png" ) ); } QString JamendoTrack::scalableEmblem() { - return KStandardDirs::locate( "data", "amarok/images/emblem-jamendo-scalable.svgz" ); + return QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-jamendo-scalable.svgz" ); } void diff --git a/src/services/jamendo/JamendoService.cpp b/src/services/jamendo/JamendoService.cpp --- a/src/services/jamendo/JamendoService.cpp +++ b/src/services/jamendo/JamendoService.cpp @@ -29,18 +29,15 @@ #include "widgets/SearchWidget.h" #include -#include -#include -#include -#include -#include -#include -#include - #include +#include +#include +#include +#include #include #include +#include #include #include @@ -50,9 +47,6 @@ JamendoServiceFactory::JamendoServiceFactory() : ServiceFactory() { - KPluginInfo pluginInfo( "amarok_service_jamendo.desktop" ); - pluginInfo.setConfig( config() ); - m_info = pluginInfo; } void JamendoServiceFactory::init() @@ -79,12 +73,12 @@ , m_currentAlbum( 0 ) , m_xmlParser( 0 ) { - setShortDescription( i18n( "A archive of free, Creative Commons licensed music" ) ); + setShortDescription( i18n( "An archive of free, Creative Commons licensed music" ) ); setIcon( QIcon::fromTheme( "view-services-jamendo-amarok" ) ); setLongDescription( i18n( "Jamendo.com puts artists and music lovers in touch with each other. The site allows artists to upload their own albums to share them with the world and users to download all of them for free. Listen to and download all Jamendo.com contents from within Amarok." ) ); -setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_jamendo.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_jamendo.png" ) ); ServiceMetaFactory * metaFactory = new JamendoMetaFactory( "jamendo", this ); ServiceSqlRegistry * registry = new ServiceSqlRegistry( metaFactory ); @@ -119,8 +113,7 @@ if ( m_polished ) return; - KHBox * bottomPanelLayout = new KHBox; - bottomPanelLayout->setParent( m_bottomPanel ); + BoxWidget *bottomPanelLayout = new BoxWidget( false, m_bottomPanel ); m_updateListButton = new QPushButton; m_updateListButton->setParent( bottomPanelLayout ); @@ -135,17 +128,18 @@ m_downloadButton->setIcon( QIcon::fromTheme( "download-amarok" ) ); m_downloadButton->setEnabled( false ); - connect( m_updateListButton, SIGNAL(clicked()), this, SLOT(updateButtonClicked()) ); - connect( m_downloadButton, SIGNAL(clicked()), this, SLOT(download()) ); + connect( m_updateListButton, &QPushButton::clicked, this, &JamendoService::updateButtonClicked ); + connect( m_downloadButton, &QPushButton::clicked, this, &JamendoService::download ); setInfoParser( new JamendoInfoParser() ); QList levels; levels << CategoryId::Genre << CategoryId::Artist << CategoryId::Album; setModel( new SingleCollectionTreeItemModel( m_collection, levels ) ); - connect( m_contentView, SIGNAL(itemSelected(CollectionTreeItem*)), this, SLOT(itemSelected(CollectionTreeItem*)) ); + connect( static_cast( m_contentView ), &ServiceCollectionTreeView::itemSelected, + this, &JamendoService::itemSelected ); QMenu *filterMenu = new QMenu( 0 ); @@ -159,10 +153,10 @@ // connect( action, SIGNAL(triggered(bool)), SLOT(sortByAlbum()) ); QAction *action = filterMenu->addAction( i18n( "Genre / Artist" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByGenreArtist()) ); + connect( action, &QAction::triggered, this, &JamendoService::sortByGenreArtist ); action = filterMenu->addAction( i18n( "Genre / Artist / Album" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByGenreArtistAlbum()) ); + connect( action, &QAction::triggered, this, &JamendoService::sortByGenreArtistAlbum ); QAction *filterMenuAction = new QAction( QIcon::fromTheme( "preferences-other" ), i18n( "Sort Options" ), this ); filterMenuAction->setMenu( filterMenu ); @@ -186,20 +180,20 @@ debug() << "JamendoService: start downloading xml file"; - KTemporaryFile tempFile; - tempFile.setSuffix( ".gz" ); + QTemporaryFile tempFile; +// tempFile.setSuffix( ".gz" ); tempFile.setAutoRemove( false ); //file will be removed in JamendoXmlParser if( !tempFile.open() ) return; //error m_tempFileName = tempFile.fileName(); m_listDownloadJob = KIO::file_copy( /* Deprecated */ QUrl("http://imgjam.com/data/dbdump_artistalbumtrack.xml.gz"), - QUrl( m_tempFileName ), 0700 , KIO::HideProgressInfo | KIO::Overwrite ); + QUrl::fromLocalFile( m_tempFileName ), 0700 , KIO::HideProgressInfo | KIO::Overwrite ); Amarok::Components::logger()->newProgressOperation( m_listDownloadJob, i18n( "Downloading Jamendo.com database..." ), this, SLOT(listDownloadCancelled()) ); - connect( m_listDownloadJob, SIGNAL(result(KJob*)), - this, SLOT(listDownloadComplete(KJob*)) ); + connect( m_listDownloadJob, &KJob::result, + this, &JamendoService::listDownloadComplete ); } void @@ -223,7 +217,7 @@ if( m_xmlParser == 0 ) m_xmlParser = new JamendoXmlParser( m_tempFileName ); - connect( m_xmlParser, SIGNAL(doneParsing()), SLOT(doneParsing()) ); + connect( m_xmlParser, &JamendoXmlParser::doneParsing, this, &JamendoService::doneParsing ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(m_xmlParser) ); downloadJob->deleteLater(); diff --git a/src/services/jamendo/JamendoXmlParser.h b/src/services/jamendo/JamendoXmlParser.h --- a/src/services/jamendo/JamendoXmlParser.h +++ b/src/services/jamendo/JamendoXmlParser.h @@ -41,20 +41,17 @@ /** * Constructor * @param fileName The file to parse - * @return Pointer to new object */ JamendoXmlParser( const QString &fileName ); /** * The function that starts the actual work. Inherited from ThreadWeaver::Job * Note the work is performed in a separate thread - * @return Returns true on success and false on failure */ void run(ThreadWeaver::JobPointer self = QSharedPointer(), ThreadWeaver::Thread *thread = 0) Q_DECL_OVERRIDE; /** * Destructor - * @return none */ ~JamendoXmlParser(); diff --git a/src/services/jamendo/JamendoXmlParser.cpp b/src/services/jamendo/JamendoXmlParser.cpp --- a/src/services/jamendo/JamendoXmlParser.cpp +++ b/src/services/jamendo/JamendoXmlParser.cpp @@ -24,15 +24,16 @@ #include #include -#include +#include using namespace Meta; static const QString COVERURL_BASE = "http://api.jamendo.com/get2/image/album/redirect/?id=%1&imagesize=100"; JamendoXmlParser::JamendoXmlParser( const QString &filename ) : QObject() , ThreadWeaver::Job() + , m_sFileName( filename ) , n_numberOfTransactions ( 0 ) , n_maxNumberOfTransactions ( 5000 ) , m_aborted( false ) @@ -121,10 +122,9 @@ m_id3GenreHash.insert( 78, "Rock & Roll" ); m_id3GenreHash.insert( 79, "Hard Rock" ); - m_sFileName = filename; albumTags.clear(); m_dbHandler = new JamendoDatabaseHandler(); - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &JamendoXmlParser::done, this, &JamendoXmlParser::completeJob ); } JamendoXmlParser::~JamendoXmlParser() @@ -196,9 +196,9 @@ return; } - QIODevice *file = KFilterDev::deviceForFile( filename, "application/x-gzip", true ); + KFilterDev *file = new KFilterDev( filename ); - if( !file || !file->open( QIODevice::ReadOnly ) ) + if( !file->open( QIODevice::ReadOnly ) ) { debug() << "JamendoXmlParser::readConfigFile error reading file"; return; diff --git a/src/services/jamendo/amarok_service_jamendo.desktop b/src/services/jamendo/amarok_service_jamendo.desktop --- a/src/services/jamendo/amarok_service_jamendo.desktop +++ b/src/services/jamendo/amarok_service_jamendo.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-jamendo-amarok Name=Jamendo Name[bg]=Jamendo diff --git a/src/services/lastfm/AvatarDownloader.h b/src/services/lastfm/AvatarDownloader.h --- a/src/services/lastfm/AvatarDownloader.h +++ b/src/services/lastfm/AvatarDownloader.h @@ -21,6 +21,7 @@ #include #include +#include class AvatarDownloader : public QObject { @@ -56,4 +57,5 @@ private: QHash m_userAvatarUrls; }; + #endif diff --git a/src/services/lastfm/CMakeLists.txt b/src/services/lastfm/CMakeLists.txt --- a/src/services/lastfm/CMakeLists.txt +++ b/src/services/lastfm/CMakeLists.txt @@ -6,16 +6,20 @@ ########### next target ############### -set( amarok_service_lastfm_shared_SRCS +find_package( KF5 COMPONENTS Wallet REQUIRED ) + +set( amarok_service_lastfm_config_SRCS LastFmServiceConfig.cpp ) -add_library( amarok_service_lastfm_shared SHARED ${amarok_service_lastfm_shared_SRCS} ) -target_link_libraries( amarok_service_lastfm_shared + +add_library( amarok_service_lastfm_config SHARED ${amarok_service_lastfm_config_SRCS} ) + +target_link_libraries( amarok_service_lastfm_config amarokcore - KF5::KDELibs4Support - + KF5::Wallet ) -install( TARGETS amarok_service_lastfm_shared ${INSTALL_TARGETS_DEFAULT_ARGS} ) + +install( TARGETS amarok_service_lastfm_config ${INSTALL_TARGETS_DEFAULT_ARGS} ) ########### next target ############### @@ -39,42 +43,51 @@ SimilarArtistsAction.cpp LoveTrackAction.cpp ) + add_library(amarok_service_lastfm MODULE ${amarok_service_lastfm_PART_SRCS} ) + target_link_libraries( amarok_service_lastfm - amarok_service_lastfm_shared + amarok_service_lastfm_config amarokcore amaroklib amarokpud ${LIBLASTFM_LIBRARY} - KF5::KDELibs4Support - KF5::KIOCore - ${KDE4_SOLID_LIBRARY} KF5::ThreadWeaver + KF5::Wallet Qt5::Network ) + install( TARGETS amarok_service_lastfm DESTINATION ${PLUGIN_INSTALL_DIR} ) +kcoreaddons_desktop_to_json( amarok_service_lastfm amarok_service_lastfm.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop ) + ########### next target ############### set(kcm_amarok_service_lastfm_PART_SRCS LastFmServiceSettings.cpp ) + ki18n_wrap_ui( kcm_amarok_service_lastfm_PART_SRCS LastFmConfigWidget.ui ) + add_library(kcm_amarok_service_lastfm MODULE ${kcm_amarok_service_lastfm_PART_SRCS} ) + target_link_libraries( kcm_amarok_service_lastfm - amarok_service_lastfm_shared + amarok_service_lastfm_config amarokcore amaroklib ${LIBLASTFM_LIBRARY} - KF5::KIOCore - Qt5::Network ) + Qt5::Network +) + install( TARGETS kcm_amarok_service_lastfm DESTINATION ${PLUGIN_INSTALL_DIR} ) +kcoreaddons_desktop_to_json( kcm_amarok_service_lastfm amarok_service_lastfm_config.desktop SERVICE_TYPES kcmodule.desktop ) + ########### install files ############### -install( FILES amarok_service_lastfm.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) -install( FILES amarok_service_lastfm_config.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) -install( FILES amaroklastfm.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) +install( FILES amarok_service_lastfm.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) +install( FILES amarok_service_lastfm_config.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) +install( FILES amaroklastfm.protocol DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) diff --git a/src/services/lastfm/LastFmConfigWidget.ui b/src/services/lastfm/LastFmConfigWidget.ui --- a/src/services/lastfm/LastFmConfigWidget.ui +++ b/src/services/lastfm/LastFmConfigWidget.ui @@ -53,14 +53,14 @@
- + QLineEdit::Password - + @@ -212,9 +212,9 @@ - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
@@ -225,7 +225,7 @@ kcfg_RetrieveSimilarArtists - klineedit.h + qlineedit.h diff --git a/src/services/lastfm/LastFmService.h b/src/services/lastfm/LastFmService.h --- a/src/services/lastfm/LastFmService.h +++ b/src/services/lastfm/LastFmService.h @@ -22,18 +22,20 @@ #include "services/lastfm/LastFmServiceConfig.h" #include "statsyncing/Provider.h" +#include namespace Collections { class LastFmServiceCollection; } namespace Dynamic { class AbstractBiasFactory; } class ScrobblerAdapter; -class KLineEdit; +class QLineEdit; class QComboBox; class QLabel; class QNetworkReply; +class QPixmap; class LastFmServiceFactory : public ServiceFactory { @@ -66,7 +68,7 @@ void love( Meta::TrackPtr track ); private Q_SLOTS: - void love(); + void loveCurrentTrack(); void playCustomStation(); void updateEditHint( int index ); @@ -92,7 +94,7 @@ QLabel *m_profile; QLabel *m_userinfo; QComboBox *m_globalComboBox; - KLineEdit *m_customStationEdit; + QLineEdit *m_customStationEdit; QPushButton *m_customStationButton; QComboBox *m_customStationCombo; diff --git a/src/services/lastfm/LastFmService.cpp b/src/services/lastfm/LastFmService.cpp --- a/src/services/lastfm/LastFmService.cpp +++ b/src/services/lastfm/LastFmService.cpp @@ -40,14 +40,15 @@ #include "statsyncing/Controller.h" #include "widgets/SearchWidget.h" -#include -#include +#include +#include #include #include #include #include -#include //Qt::escape +#include +#include #include #include @@ -105,7 +106,7 @@ setShortDescription( i18n( "Last.fm: The social music revolution" ) ); setIcon( QIcon::fromTheme( "view-services-lastfm-amarok" ) ); setLongDescription( i18n( "Last.fm is a popular online service that provides personal radio stations and music recommendations. A personal listening station is tailored based on your listening habits and provides you with recommendations for new music. It is also possible to play stations with music that is similar to a particular artist as well as listen to streams from people you have added as friends or that Last.fm considers your musical \"neighbors\"" ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_lastfm.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_lastfm.png" ) ); //We have no use for searching currently.. m_searchWidget->setVisible( false ); @@ -129,12 +130,12 @@ The::globalCollectionActions()->addTrackAction( new LoveTrackAction( this ) ); QAction *loveAction = new QAction( QIcon::fromTheme( "love-amarok" ), i18n( "Last.fm: Love" ), this ); - connect( loveAction, SIGNAL(triggered()), this, SLOT(love()) ); + connect( loveAction, &QAction::triggered, this, &LastFmService::loveCurrentTrack ); loveAction->setShortcut( i18n( "Ctrl+L" ) ); The::globalCurrentTrackActions()->addAction( loveAction ); - connect( m_config.data(), SIGNAL(updated()), this, SLOT(slotReconfigure()) ); - QTimer::singleShot(0, this, SLOT(slotReconfigure())); // call reconfigure but only after constructor is finished (because it might call virtual methods) + connect( m_config.data(), &LastFmServiceConfig::updated, this, &LastFmService::slotReconfigure ); + QTimer::singleShot(0, this, &LastFmService::slotReconfigure); // call reconfigure but only after constructor is finished (because it might call virtual methods) } LastFmService::~LastFmService() @@ -200,7 +201,7 @@ // discard any possible ongoing auth connections if( m_authenticateReply ) { - disconnect( m_authenticateReply, SIGNAL(finished()), this, SLOT(onAuthenticated()) ); + disconnect( m_authenticateReply, &QNetworkReply::finished, this, &LastFmService::onAuthenticated ); m_authenticateReply->abort(); m_authenticateReply->deleteLater(); m_authenticateReply = 0; @@ -213,7 +214,7 @@ query[ "username" ] = m_config->username(); query[ "authToken" ] = authToken; m_authenticateReply = lastfm::ws::post( query ); - connect( m_authenticateReply, SIGNAL(finished()), this, SLOT(onAuthenticated()) ); // calls continueReconfiguring() + connect( m_authenticateReply, &QNetworkReply::finished, this, &LastFmService::onAuthenticated ); // calls continueReconfiguring() } else { @@ -260,7 +261,7 @@ // update possibly changed user info QNetworkReply *reply = lastfm::User::getInfo(); - connect( reply, SIGNAL(finished()), SLOT(onGetUserInfo()) ); + connect( reply, &QNetworkReply::finished, this, &LastFmService::onGetUserInfo ); } void @@ -273,7 +274,7 @@ /* temporarily disconnect form config updates to prevent calling * slotReconfigure() for the second time. */ - disconnect( m_config.data(), SIGNAL(updated()), this, SLOT(slotReconfigure()) ); + disconnect( m_config.data(), &LastFmServiceConfig::updated, this, &LastFmService::slotReconfigure ); switch( m_authenticateReply ? m_authenticateReply->error() : QNetworkReply::UnknownNetworkError ) { @@ -305,7 +306,7 @@ m_authenticateReply = 0; // connect back to config updates - connect( m_config.data(), SIGNAL(updated()), this, SLOT(slotReconfigure()) ); + connect( m_config.data(), &LastFmServiceConfig::updated, this, &LastFmService::slotReconfigure ); continueReconfiguring(); } @@ -337,8 +338,8 @@ AvatarDownloader* downloader = new AvatarDownloader(); QUrl url( lfm["user"][ "image" ].text() ); downloader->downloadAvatar( m_config->username(), url); - connect( downloader, SIGNAL(avatarDownloaded(QString,QPixmap)), - SLOT(onAvatarDownloaded(QString,QPixmap)) ); + connect( downloader, &AvatarDownloader::avatarDownloaded, + this, &LastFmService::onAvatarDownloaded ); } updateProfileInfo(); } @@ -395,15 +396,15 @@ default: return; } - m_customStationEdit->setClickMessage( hint ); + m_customStationEdit->setPlaceholderText( hint ); } void LastFmService::updateProfileInfo() { if( m_userinfo ) { - m_userinfo->setText( i18n( "Username: %1", Qt::escape( m_config->username() ) ) ); + m_userinfo->setText( i18n( "Username: %1", m_config->username().toHtmlEscaped() ) ); } if( m_profile && !m_playcount.isEmpty() ) @@ -428,9 +429,8 @@ m_bottomPanel->hide(); m_topPanel->setMaximumHeight( 300 ); - KHBox * outerProfilebox = new KHBox( m_topPanel ); - outerProfilebox->setSpacing(1); - outerProfilebox->setMargin(0); + BoxWidget * outerProfilebox = new BoxWidget( false, m_topPanel ); + outerProfilebox->layout()->setSpacing(1); m_avatarLabel = new QLabel(outerProfilebox); if( !m_avatar ) @@ -446,8 +446,7 @@ m_avatarLabel->setMargin( 5 ); } - KVBox * innerProfilebox = new KVBox( outerProfilebox ); - innerProfilebox->setSpacing(0); + BoxWidget * innerProfilebox = new BoxWidget( true, outerProfilebox ); innerProfilebox->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); m_userinfo = new QLabel(innerProfilebox); m_userinfo->setText( m_config->username() ); @@ -461,8 +460,8 @@ QStringList choices; choices << i18n( "Artist" ) << i18n( "Tag" ) << i18n( "User" ); m_customStationCombo->insertItems(0, choices); - m_customStationEdit = new KLineEdit; - m_customStationEdit->setClearButtonShown( true ); + m_customStationEdit = new QLineEdit; + m_customStationEdit->setClearButtonEnabled( true ); updateEditHint( m_customStationCombo->currentIndex() ); m_customStationButton = new QPushButton; m_customStationButton->setObjectName( "customButton" ); @@ -473,18 +472,19 @@ hbox->addWidget(m_customStationButton); customStation->setLayout(hbox); - connect( m_customStationEdit, SIGNAL(returnPressed()), this, SLOT(playCustomStation()) ); - connect( m_customStationButton, SIGNAL(clicked()), this, SLOT(playCustomStation()) ); - connect( m_customStationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateEditHint(int))); + connect( m_customStationEdit, &QLineEdit::returnPressed, this, &LastFmService::playCustomStation ); + connect( m_customStationButton, &QPushButton::clicked, this, &LastFmService::playCustomStation ); + connect( m_customStationCombo, QOverload::of(&QComboBox::currentIndexChanged), + this, &LastFmService::updateEditHint); QList levels; levels << CategoryId::Genre << CategoryId::Album; m_polished = true; } } void -LastFmService::love() +LastFmService::loveCurrentTrack() { love( The::engineController()->currentTrack() ); } @@ -517,7 +517,7 @@ } if ( !station.isEmpty() ) { - playLastFmStation( station ); + playLastFmStation( QUrl( station ) ); } } diff --git a/src/services/lastfm/LastFmServiceCollection.cpp b/src/services/lastfm/LastFmServiceCollection.cpp --- a/src/services/lastfm/LastFmServiceCollection.cpp +++ b/src/services/lastfm/LastFmServiceCollection.cpp @@ -85,15 +85,15 @@ params[ "user" ] = userName; m_jobs[ "user.getNeighbours" ] = lastfm::ws::post( params ); - connect( m_jobs[ "user.getNeighbours" ], SIGNAL(finished()), this, SLOT(slotAddNeighboursLoved()) ); - //connect( m_jobs[ "user.getNeighbours" ], SIGNAL(finished()), this, SLOT(slotAddNeighboursPersonal()) ); + connect( m_jobs[ "user.getNeighbours" ], &QNetworkReply::finished, this, &LastFmServiceCollection::slotAddNeighboursLoved ); + //connect( m_jobs[ "user.getNeighbours" ], &QNetworkReply::finished, this, &LastFmServiceCollection::slotAddNeighboursPersonal ); // TODO TMP HACK why do i get exceptions there...!? params[ "method" ] = "user.getFriends"; m_jobs[ "user.getFriends" ] = lastfm::ws::post( params ); - connect( m_jobs[ "user.getFriends" ], SIGNAL(finished()), this, SLOT(slotAddFriendsLoved()) ); - //connect( m_jobs[ "user.getFriends" ], SIGNAL(finished()), this, SLOT(slotAddFriendsPersonal()) ); + connect( m_jobs[ "user.getFriends" ], &QNetworkReply::finished, this, &LastFmServiceCollection::slotAddFriendsLoved ); + //connect( m_jobs[ "user.getFriends" ], &QNetworkReply::finished, this, &LastFmServiceCollection::slotAddFriendsPersonal ); //TODO Automatically add simmilar artist streams for the users favorite artists. } diff --git a/src/services/lastfm/LastFmServiceConfig.h b/src/services/lastfm/LastFmServiceConfig.h --- a/src/services/lastfm/LastFmServiceConfig.h +++ b/src/services/lastfm/LastFmServiceConfig.h @@ -27,7 +27,7 @@ namespace KWallet { class Wallet; } -class KDialog; +class QMessageBox; class LastFmServiceConfig; typedef QSharedPointer LastFmServiceConfigPtr; @@ -134,7 +134,7 @@ QString m_filteredLabel; KWalletUsage m_kWalletUsage; - KDialog* m_askDiag; + QMessageBox* m_askDiag; KWallet::Wallet* m_wallet; static QWeakPointer s_instance; diff --git a/src/services/lastfm/LastFmServiceConfig.cpp b/src/services/lastfm/LastFmServiceConfig.cpp --- a/src/services/lastfm/LastFmServiceConfig.cpp +++ b/src/services/lastfm/LastFmServiceConfig.cpp @@ -20,13 +20,15 @@ #include "LastFmServiceConfig.h" #include "App.h" +#include "core/interfaces/Logger.h" +#include "core/support/Amarok.h" #include "core/support/Components.h" #include "core/support/Debug.h" -#include #include -#include +#include +#include #include #include @@ -52,7 +54,7 @@ { DEBUG_BLOCK - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); m_sessionKey = config.readEntry( "sessionKey", QString() ); m_scrobble = config.readEntry( "scrobble", defaultScrobble() ); m_fetchSimilar = config.readEntry( "fetchSimilar", defaultFetchSimilar() ); @@ -102,7 +104,7 @@ void LastFmServiceConfig::save() { - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); // if username and password is empty, reset to NoPasswordEnteredYet; this enables // going from PasswordInAscii to PasswodInKWallet @@ -165,7 +167,7 @@ return; } } - connect( m_wallet, SIGNAL(walletOpened(bool)), SLOT(slotWalletOpenedToRead(bool)) ); + connect( m_wallet, &KWallet::Wallet::walletOpened, this, &LastFmServiceConfig::slotWalletOpenedToRead ); } void @@ -188,7 +190,7 @@ return; } } - connect( m_wallet, SIGNAL(walletOpened(bool)), SLOT(slotWalletOpenedToWrite(bool)) ); + connect( m_wallet, &KWallet::Wallet::walletOpened, this, &LastFmServiceConfig::slotWalletOpenedToWrite ); } void @@ -255,7 +257,7 @@ warning() << "Failed to save last.fm username to kwallet"; m_kWalletUsage = PasswodInKWallet; - KConfigGroup config = KGlobal::config()->group( configSectionName() ); + KConfigGroup config = Amarok::config( configSectionName() ); config.writeEntry( "kWalletUsage", int( m_kWalletUsage ) ); config.sync(); } @@ -265,12 +267,12 @@ { if ( !m_askDiag ) { - m_askDiag = new KDialog( 0 ); - m_askDiag->setCaption( i18n( "Last.fm credentials" ) ); - m_askDiag->setMainWidget( new QLabel( i18n( "No running KWallet found. Would you like Amarok to save your Last.fm credentials in plaintext?" ) ) ); - m_askDiag->setButtons( KDialog::Yes | KDialog::No ); + m_askDiag = new QMessageBox; + m_askDiag->setText( i18n( "No running KWallet found." ) ); + m_askDiag->setInformativeText( i18n( "Would you like Amarok to save your Last.fm credentials in plaintext?" ) ); + m_askDiag->setStandardButtons( QMessageBox::Yes | QMessageBox::No ); - connect( m_askDiag, SIGNAL(yesClicked()), this, SLOT(slotStoreCredentialsInAscii()) ); + connect( m_askDiag, &QDialog::accepted, this, &LastFmServiceConfig::slotStoreCredentialsInAscii ); // maybe connect SIGNAL(noClicked()) to a message informing the user the password will // be forgotten on Amarok restart } diff --git a/src/services/lastfm/LastFmServiceSettings.cpp b/src/services/lastfm/LastFmServiceSettings.cpp --- a/src/services/lastfm/LastFmServiceSettings.cpp +++ b/src/services/lastfm/LastFmServiceSettings.cpp @@ -35,8 +35,7 @@ #include -K_PLUGIN_FACTORY( LastFmServiceSettingsFactory, registerPlugin(); ) -K_EXPORT_PLUGIN( LastFmServiceSettingsFactory( "kcm_amarok_lastfm" ) ) +K_PLUGIN_FACTORY_WITH_JSON( LastFmServiceSettingsFactory, "amarok_service_lastfm_config.json", registerPlugin(); ) QString md5( const QByteArray& src ) { @@ -46,30 +45,30 @@ LastFmServiceSettings::LastFmServiceSettings( QWidget *parent, const QVariantList &args ) - : KCModule( LastFmServiceSettingsFactory::componentData(), parent, args ) + : KCModule( parent, args ) , m_config( LastFmServiceConfig::instance() ) { m_configDialog = new Ui::LastFmConfigWidget; m_configDialog->setupUi( this ); - connect( m_config.data(), SIGNAL(updated()), SLOT(onConfigUpdated()) ); + connect( m_config.data(), &LastFmServiceConfig::updated, this, &LastFmServiceSettings::onConfigUpdated ); - connect( m_configDialog->kcfg_ScrobblerUsername, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_ScrobblerPassword, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_SubmitPlayedSongs, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_RetrieveSimilarArtists, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_ScrobbleComposer, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged())); - connect( m_configDialog->kcfg_UseFancyRatingTags, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged())); - connect( m_configDialog->kcfg_AnnounceCorrections, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_FilterByLabel, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->kcfg_FilteredLabel, SIGNAL(currentIndexChanged(QString)), this, SLOT(settingsChanged()) ); - connect( m_configDialog->testLogin, SIGNAL(clicked()), this, SLOT(testLogin()) ); + connect( m_configDialog->kcfg_ScrobblerUsername, &QLineEdit::textChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_ScrobblerPassword, &QLineEdit::textChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_SubmitPlayedSongs, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_RetrieveSimilarArtists, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_ScrobbleComposer, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_UseFancyRatingTags, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_AnnounceCorrections, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_FilterByLabel, &QCheckBox::stateChanged, this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->kcfg_FilteredLabel, QOverload::of( &QComboBox::currentIndexChanged ), this, &LastFmServiceSettings::settingsChanged ); + connect( m_configDialog->testLogin, &QPushButton::clicked, this, &LastFmServiceSettings::testLogin ); using namespace Collections; QueryMaker *query = CollectionManager::instance()->queryMaker(); query->setQueryType( QueryMaker::Label ); - connect( query, SIGNAL(newResultReady(Meta::LabelList)), this, SLOT(addNewLabels(Meta::LabelList)) ); + connect( query, &QueryMaker::newLabelsReady, this, &LastFmServiceSettings::addNewLabels ); query->setAutoDelete( true ); query->run(); } @@ -127,8 +126,9 @@ query[ "authToken" ] = authToken; m_authQuery = lastfm::ws::post( query ); - connect( m_authQuery, SIGNAL(finished()), SLOT(onAuthenticated()) ); - connect( m_authQuery, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(onError(QNetworkReply::NetworkError)) ); + connect( m_authQuery, &QNetworkReply::finished, this, &LastFmServiceSettings::onAuthenticated ); + connect( m_authQuery, QOverload::of( &QNetworkReply::error ), + this, &LastFmServiceSettings::onError ); } void @@ -256,3 +256,5 @@ else return index; } + +#include "LastFmServiceSettings.moc" diff --git a/src/services/lastfm/LastFmTreeModel.cpp b/src/services/lastfm/LastFmTreeModel.cpp --- a/src/services/lastfm/LastFmTreeModel.cpp +++ b/src/services/lastfm/LastFmTreeModel.cpp @@ -42,16 +42,16 @@ QNetworkReply *reply; reply = m_user.getNeighbours(); - connect(reply, SIGNAL(finished()), this, SLOT(slotAddNeighbors()) ); + connect(reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddNeighbors ); reply = m_user.getFriends(); - connect( reply, SIGNAL(finished()), this, SLOT(slotAddFriends()) ); + connect( reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddFriends ); reply = m_user.getTopTags(); - connect( reply, SIGNAL(finished()), this, SLOT(slotAddTags()) ); + connect( reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddTags ); reply = m_user.getTopArtists(); - connect( reply, SIGNAL(finished()), this, SLOT(slotAddTopArtists()) ); + connect( reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddTopArtists ); } LastFmTreeModel::~LastFmTreeModel() @@ -325,8 +325,8 @@ const_cast( this )->m_avatars.insert( username, defaultIcon ); AvatarDownloader* downloader = new AvatarDownloader(); downloader->downloadAvatar( username, avatarUrl ); - connect( downloader, SIGNAL(avatarDownloaded(QString,QPixmap)), - SLOT(onAvatarDownloaded(QString,QPixmap)) ); + connect( downloader, &AvatarDownloader::avatarDownloaded, + this, &LastFmTreeModel::onAvatarDownloaded ); return defaultIcon; } @@ -390,6 +390,7 @@ } if( role == Qt::DecorationRole ) + { switch( i->type() ) { case MyRecommendations: @@ -434,25 +435,27 @@ default: break; } + } if( role == LastFm::TrackRole ) + { switch( i->type() ) { - case LastFm::MyRecommendations: - case LastFm::PersonalRadio: - case LastFm::MixRadio: - case LastFm::NeighborhoodRadio: - case LastFm::FriendsChild: - case LastFm::NeighborsChild: - case LastFm::MyTagsChild: - case LastFm::ArtistsChild: - case LastFm::UserChildPersonal: - case LastFm::UserChildNeighborhood: - return QVariant::fromValue( i->track() ); - default: - break; + case LastFm::MyRecommendations: + case LastFm::PersonalRadio: + case LastFm::MixRadio: + case LastFm::NeighborhoodRadio: + case LastFm::FriendsChild: + case LastFm::NeighborsChild: + case LastFm::MyTagsChild: + case LastFm::ArtistsChild: + case LastFm::UserChildPersonal: + case LastFm::UserChildNeighborhood: + return QVariant::fromValue( i->track() ); + default: + break; } - + } if( role == LastFm::TypeRole ) return i->type(); diff --git a/src/services/lastfm/LastFmTreeView.h b/src/services/lastfm/LastFmTreeView.h --- a/src/services/lastfm/LastFmTreeView.h +++ b/src/services/lastfm/LastFmTreeView.h @@ -24,7 +24,7 @@ #include #include -#include +#include class LastFmTreeModel; diff --git a/src/services/lastfm/LastFmTreeView.cpp b/src/services/lastfm/LastFmTreeView.cpp --- a/src/services/lastfm/LastFmTreeView.cpp +++ b/src/services/lastfm/LastFmTreeView.cpp @@ -20,15 +20,16 @@ #include "PopupDropperFactory.h" #include "context/ContextView.h" -#include "context/popupdropper/libpud/PopupDropper.h" -#include "context/popupdropper/libpud/PopupDropperItem.h" #include "core/meta/Meta.h" #include "core/support/Debug.h" #include "services/lastfm/LastFmTreeModel.h" // FIXME just for enums +#include +#include #include -#include +#include + LastFmTreeView::LastFmTreeView ( QWidget* parent ) : Amarok::PrettyTreeView ( parent ) @@ -96,16 +97,16 @@ { m_appendAction = new QAction ( QIcon::fromTheme( "media-track-add-amarok" ), i18n ( "&Add to Playlist" ), this ); m_appendAction->setProperty( "popupdropper_svg_id", "append" ); - connect ( m_appendAction, SIGNAL (triggered()), this, SLOT (slotAppendChildTracks()) ); + connect ( m_appendAction, &QAction::triggered, this, &LastFmTreeView::slotAppendChildTracks ); } actions.append ( m_appendAction ); if ( m_loadAction == 0 ) { m_loadAction = new QAction ( QIcon::fromTheme( "folder-open" ), i18nc ( "Replace the currently loaded tracks with these", "&Replace Playlist" ), this ); m_appendAction->setProperty( "popupdropper_svg_id", "load" ); - connect ( m_loadAction, SIGNAL (triggered()), this, SLOT (slotReplacePlaylistByChildTracks()) ); + connect ( m_loadAction, &QAction::triggered, this, &LastFmTreeView::slotReplacePlaylistByChildTracks ); } actions.append ( m_loadAction ); } @@ -143,10 +144,8 @@ m_ongoingDrag = true; m_dragMutex.unlock(); -/* FIXME: disabled temporarily for KF5 porting if( !m_pd ) m_pd = The::popupDropperFactory()->createPopupDropper( Context::ContextView::self() ); -*/ if( m_pd && m_pd->isHidden() ) { @@ -199,7 +198,7 @@ if( m_pd ) { debug() << "clearing PUD"; - connect( m_pd, SIGNAL(fadeHideFinished()), m_pd, SLOT(clear()) ); + connect( m_pd, &PopupDropper::fadeHideFinished, m_pd, &PopupDropper::clear ); m_pd->hide(); } diff --git a/src/services/lastfm/LoveTrackAction.cpp b/src/services/lastfm/LoveTrackAction.cpp --- a/src/services/lastfm/LoveTrackAction.cpp +++ b/src/services/lastfm/LoveTrackAction.cpp @@ -27,7 +27,7 @@ setIcon( QIcon::fromTheme( "love-amarok") ); setProperty( "popupdropper_svg_id", "lastfm" ); - connect( this, SIGNAL(triggered(bool)), SLOT(slotTriggered()) ); + connect( this, &LoveTrackAction::triggered, this, &LoveTrackAction::slotTriggered ); } void LoveTrackAction::slotTriggered() diff --git a/src/services/lastfm/ScrobblerAdapter.cpp b/src/services/lastfm/ScrobblerAdapter.cpp --- a/src/services/lastfm/ScrobblerAdapter.cpp +++ b/src/services/lastfm/ScrobblerAdapter.cpp @@ -52,15 +52,15 @@ } } - connect( The::mainWindow(), SIGNAL(loveTrack(Meta::TrackPtr)), - SLOT(loveTrack(Meta::TrackPtr)) ); - connect( The::mainWindow(), SIGNAL(banTrack(Meta::TrackPtr)), - SLOT(banTrack(Meta::TrackPtr)) ); + connect( The::mainWindow(), &MainWindow::loveTrack, + this, &ScrobblerAdapter::loveTrack ); + connect( The::mainWindow(), &MainWindow::banTrack, + this, &ScrobblerAdapter::banTrack ); - connect( &m_scrobbler, SIGNAL(scrobblesSubmitted(QList)), - SLOT(slotScrobblesSubmitted(QList)) ); - connect( &m_scrobbler, SIGNAL(nowPlayingError(int,QString)), - SLOT(slotNowPlayingError(int,QString))); + connect( &m_scrobbler, &lastfm::Audioscrobbler::scrobblesSubmitted, + this, &ScrobblerAdapter::slotScrobblesSubmitted ); + connect( &m_scrobbler, &lastfm::Audioscrobbler::nowPlayingError, + this, &ScrobblerAdapter::slotNowPlayingError ); } ScrobblerAdapter::~ScrobblerAdapter() @@ -142,7 +142,7 @@ { debug() << "removeNowPlaying"; QNetworkReply *reply = lfmTrack.removeNowPlaying(); // works even with empty lfmTrack - connect( reply, SIGNAL(finished()), reply, SLOT(deleteLater()) ); // don't leak + connect( reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater ); // don't leak } } diff --git a/src/services/lastfm/SimilarArtistsAction.cpp b/src/services/lastfm/SimilarArtistsAction.cpp --- a/src/services/lastfm/SimilarArtistsAction.cpp +++ b/src/services/lastfm/SimilarArtistsAction.cpp @@ -20,13 +20,13 @@ #include "core-impl/collections/support/CollectionManager.h" #include "playlist/PlaylistController.h" -#include +#include #include SimilarArtistsAction::SimilarArtistsAction( QObject *parent ) : GlobalCollectionArtistAction( i18n( "Play Similar Artists from Last.fm" ), parent ) { - connect( this, SIGNAL(triggered(bool)), SLOT(slotTriggered()) ); + connect( this, &SimilarArtistsAction::triggered, this, &SimilarArtistsAction::slotTriggered ); setIcon( QIcon::fromTheme("view-services-lastfm-amarok") ); setProperty( "popupdropper_svg_id", "lastfm" ); diff --git a/src/services/lastfm/SynchronizationAdapter.cpp b/src/services/lastfm/SynchronizationAdapter.cpp --- a/src/services/lastfm/SynchronizationAdapter.cpp +++ b/src/services/lastfm/SynchronizationAdapter.cpp @@ -33,11 +33,9 @@ SynchronizationAdapter::SynchronizationAdapter( const LastFmServiceConfigPtr &config ) : m_config( config ) { - connect( this, SIGNAL(startArtistSearch(int)), SLOT(slotStartArtistSearch(int)) ); - connect( this, SIGNAL(startTrackSearch(QString,int)), - SLOT(slotStartTrackSearch(QString,int)) ); - connect( this, SIGNAL(startTagSearch(QString,QString)), - SLOT(slotStartTagSearch(QString,QString)) ); + connect( this, &SynchronizationAdapter::startArtistSearch, this, &SynchronizationAdapter::slotStartArtistSearch ); + connect( this, &SynchronizationAdapter::startTrackSearch, this, &SynchronizationAdapter::slotStartTrackSearch ); + connect( this, &SynchronizationAdapter::startTagSearch, this, &SynchronizationAdapter::slotStartTagSearch ); } SynchronizationAdapter::~SynchronizationAdapter() @@ -136,16 +134,16 @@ { QString user = m_config->username(); QNetworkReply *reply = lastfm::Library::getArtists( user, s_entriesPerQuery, page ); - connect( reply, SIGNAL(finished()), SLOT(slotArtistsReceived()) ); + connect( reply, &QNetworkReply::finished, this, &SynchronizationAdapter::slotArtistsReceived ); } void SynchronizationAdapter::slotStartTrackSearch( QString artistName, int page ) { lastfm::Artist artist( artistName ); QString user = m_config->username(); QNetworkReply *reply = lastfm::Library::getTracks( user, artist, s_entriesPerQuery, page ); - connect( reply, SIGNAL(finished()), SLOT(slotTracksReceived()) ); + connect( reply, &QNetworkReply::finished, this, &SynchronizationAdapter::slotTracksReceived ); } void @@ -155,7 +153,7 @@ track.setArtist( artistName ); track.setTitle( trackName ); QNetworkReply *reply = track.getTags(); - connect( reply, SIGNAL(finished()), SLOT(slotTagsReceived()) ); + connect( reply, &QNetworkReply::finished, this, &SynchronizationAdapter::slotTagsReceived ); } void diff --git a/src/services/lastfm/SynchronizationTrack.cpp b/src/services/lastfm/SynchronizationTrack.cpp --- a/src/services/lastfm/SynchronizationTrack.cpp +++ b/src/services/lastfm/SynchronizationTrack.cpp @@ -38,10 +38,10 @@ // ensure this object is created in a main thread Q_ASSERT( thread() == QCoreApplication::instance()->thread() ); - connect( this, SIGNAL(startTagAddition(QStringList)), - SLOT(slotStartTagAddition(QStringList)) ); - connect( this, SIGNAL(startTagRemoval()), - SLOT(slotStartTagRemoval()) ); + connect( this, &SynchronizationTrack::startTagAddition, + this, &SynchronizationTrack::slotStartTagAddition ); + connect( this, &SynchronizationTrack::startTagRemoval, + this, &SynchronizationTrack::slotStartTagRemoval ); } QString @@ -191,7 +191,7 @@ if( tags.count() > 10 ) tags = tags.mid( 0, 10 ); // Last.fm says 10 tags is max QNetworkReply *reply = track.addTags( tags ); - connect( reply, SIGNAL(finished()), SLOT(slotTagsAdded()) ); + connect( reply, &QNetworkReply::finished, this, &SynchronizationTrack::slotTagsAdded ); } void @@ -204,7 +204,7 @@ track.setTitle( m_name ); QNetworkReply *reply = track.removeTag( m_tagsToRemove.takeFirst() ); - connect( reply, SIGNAL(finished()), SLOT(slotTagRemoved()) ); + connect( reply, &QNetworkReply::finished, this, &SynchronizationTrack::slotTagRemoved ); } void diff --git a/src/services/lastfm/amarok_lastfm_shared_export.h b/src/services/lastfm/amarok_lastfm_shared_export.h --- a/src/services/lastfm/amarok_lastfm_shared_export.h +++ b/src/services/lastfm/amarok_lastfm_shared_export.h @@ -18,17 +18,17 @@ #ifndef AMAROK_LASTFM_SHARED_EXPORT_H #define AMAROK_LASTFM_SHARED_EXPORT_H -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include +/* needed for Q_DECL_EXPORT and Q_DECL_IMPORT macros */ +#include #ifndef AMAROK_LASTFM_SHARED_EXPORT # ifdef MAKE_AMAROK_SERVICE_LASTFM_SHARED_LIB /* We are building this library */ -# define AMAROK_LASTFM_SHARED_EXPORT KDE_EXPORT +# define AMAROK_LASTFM_SHARED_EXPORT Q_DECL_EXPORT # else /* We are using this library */ -# define AMAROK_LASTFM_SHARED_EXPORT KDE_IMPORT +# define AMAROK_LASTFM_SHARED_EXPORT Q_DECL_IMPORT # endif // MAKE_AMAROK_SERVICE_LASTFM_SHARED_LIB #endif // AMAROK_LASTFM_SHARED_EXPORT diff --git a/src/services/lastfm/amarok_service_lastfm.desktop b/src/services/lastfm/amarok_service_lastfm.desktop --- a/src/services/lastfm/amarok_service_lastfm.desktop +++ b/src/services/lastfm/amarok_service_lastfm.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-lastfm-amarok Name=Last.fm Name[bg]=Last.fm diff --git a/src/services/lastfm/biases/LastFmBias.cpp b/src/services/lastfm/biases/LastFmBias.cpp --- a/src/services/lastfm/biases/LastFmBias.cpp +++ b/src/services/lastfm/biases/LastFmBias.cpp @@ -23,8 +23,8 @@ #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" -#include -#include +#include +#include #include #include @@ -139,17 +139,17 @@ QVBoxLayout *layout = new QVBoxLayout( widget ); QLabel *imageLabel = new QLabel(); - imageLabel->setPixmap( QPixmap( KStandardDirs::locate( "data", "amarok/images/lastfm.png" ) ) ); + imageLabel->setPixmap( QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/lastfm.png" ) ) ); QLabel *label = new QLabel( i18n( "Last.fm thinks the track is similar to" ) ); QRadioButton *rb1 = new QRadioButton( i18n( "the previous track's artist" ) ); QRadioButton *rb2 = new QRadioButton( i18n( "the previous track" ) ); rb1->setChecked( m_match == SimilarArtist ); rb2->setChecked( m_match == SimilarTrack ); - connect( rb1, SIGNAL(toggled(bool)), - this, SLOT(setMatchTypeArtist(bool)) ); + connect( rb1, &QRadioButton::toggled, + this, &LastFmBias::setMatchTypeArtist ); layout->addWidget( imageLabel ); layout->addWidget( label ); @@ -200,7 +200,7 @@ m_tracks = Dynamic::TrackSet( universe, false ); QTimer::singleShot(0, const_cast(this), - SLOT(newQuery())); // create the new query from my parent thread + &LastFmBias::newQuery); // create the new query from my parent thread return Dynamic::TrackSet(); } @@ -337,13 +337,13 @@ m_qm->setQueryType( Collections::QueryMaker::Custom ); m_qm->addReturnValue( Meta::valUniqueId ); - connect( m_qm.data(), SIGNAL(newResultReady(QStringList)), - this, SLOT(updateReady(QStringList)) ); - connect( m_qm.data(), SIGNAL(queryDone()), - this, SLOT(updateFinished()) ); + connect( m_qm.data(), &Collections::QueryMaker::newResultReady, + this, &LastFmBias::updateReady ); + connect( m_qm.data(), &Collections::QueryMaker::queryDone, + this, &LastFmBias::updateFinished ); // - run the query - m_qm.data()->run(); + m_qm->run(); } @@ -358,8 +358,8 @@ params[ "method" ] = "artist.getSimilar"; params[ "artist" ] = m_currentArtist; QNetworkReply* request = lastfm::ws::get( params ); - connect( request, SIGNAL(finished()), - this, SLOT(similarArtistQueryDone()) ); + connect( request, &QNetworkReply::finished, + this, &LastFmBias::similarArtistQueryDone ); } else if( m_match == SimilarTrack ) { @@ -369,8 +369,8 @@ params[ "artist" ] = m_currentArtist; params[ "track" ] = m_currentTrack; QNetworkReply* request = lastfm::ws::get( params ); - connect( request, SIGNAL(finished()), - this, SLOT(similarTrackQueryDone()) ); + connect( request, &QNetworkReply::finished, + this, &LastFmBias::similarTrackQueryDone ); } } diff --git a/src/services/lastfm/biases/WeeklyTopBias.cpp b/src/services/lastfm/biases/WeeklyTopBias.cpp --- a/src/services/lastfm/biases/WeeklyTopBias.cpp +++ b/src/services/lastfm/biases/WeeklyTopBias.cpp @@ -22,7 +22,7 @@ #include "core/support/Debug.h" #include "core-impl/collections/support/CollectionManager.h" -#include +#include #include #include @@ -137,8 +137,7 @@ if( m_range.from.isValid() ) fromEdit->setDateTime( m_range.from ); - connect( fromEdit, SIGNAL(dateTimeChanged(QDateTime)), - this, SLOT(fromDateChanged(QDateTime)) ); + connect( fromEdit, &QDateTimeEdit::dateTimeChanged, this, &WeeklyTopBias::fromDateChanged ); label->setBuddy( fromEdit ); layout->addWidget( label ); layout->addWidget( fromEdit ); @@ -151,8 +150,7 @@ if( m_range.to.isValid() ) toEdit->setDateTime( m_range.to ); - connect( toEdit, SIGNAL(dateTimeChanged(QDateTime)), - this, SLOT(toDateChanged(QDateTime)) ); + connect( toEdit, &QDateTimeEdit::dateTimeChanged, this, &WeeklyTopBias::toDateChanged ); label->setBuddy( toEdit ); layout->addWidget( label ); layout->addWidget( toEdit ); @@ -265,13 +263,13 @@ m_qm->setQueryType( Collections::QueryMaker::Custom ); m_qm->addReturnValue( Meta::valUniqueId ); - connect( m_qm.data(), SIGNAL(newResultReady(QStringList)), - this, SLOT(updateReady(QStringList)) ); - connect( m_qm.data(), SIGNAL(queryDone()), - this, SLOT(updateFinished()) ); + connect( m_qm.data(), &Collections::QueryMaker::newResultReady, + this, &WeeklyTopBias::updateReady ); + connect( m_qm.data(), &Collections::QueryMaker::queryDone, + this, &WeeklyTopBias::updateFinished ); // - run the query - m_qm.data()->run(); + m_qm->run(); } void @@ -285,8 +283,8 @@ m_weeklyTimesJob = lastfm::ws::get( params ); - connect( m_weeklyTimesJob, SIGNAL(finished()), - this, SLOT(weeklyTimesQueryFinished()) ); + connect( m_weeklyTimesJob, &QNetworkReply::finished, + this, &WeeklyTopBias::weeklyTimesQueryFinished ); } @@ -331,8 +329,8 @@ params[ "to" ] = QString::number( m_weeklyToTimes[m_weeklyFromTimes.indexOf(lastWeekTime)] ); QNetworkReply* reply = lastfm::ws::get( params ); - connect( reply, SIGNAL(finished()), - this, SLOT(weeklyArtistQueryFinished()) ); + connect( reply, &QNetworkReply::finished, + this, &WeeklyTopBias::weeklyArtistQueryFinished ); m_weeklyArtistJobs.insert( lastWeekTime, reply ); diff --git a/src/services/lastfm/meta/LastFmMeta.h b/src/services/lastfm/meta/LastFmMeta.h --- a/src/services/lastfm/meta/LastFmMeta.h +++ b/src/services/lastfm/meta/LastFmMeta.h @@ -116,7 +116,7 @@ ~LastFmProviderCapability(); }; - typedef KSharedPtr TrackPtr; + typedef AmarokSharedPointer TrackPtr; } #endif diff --git a/src/services/lastfm/meta/LastFmMeta.cpp b/src/services/lastfm/meta/LastFmMeta.cpp --- a/src/services/lastfm/meta/LastFmMeta.cpp +++ b/src/services/lastfm/meta/LastFmMeta.cpp @@ -56,7 +56,7 @@ d->trackFetch = lastfm::ws::post( params ); - connect( d->trackFetch, SIGNAL(finished()), SLOT(slotResultReady()) ); + connect( d->trackFetch, &QNetworkReply::finished, this, &Track::slotResultReady ); } @@ -80,13 +80,13 @@ QAction *banAction = new QAction( QIcon::fromTheme( "remove-amarok" ), i18n( "Last.fm: &Ban" ), this ); banAction->setShortcut( i18n( "Ctrl+B" ) ); banAction->setStatusTip( i18n( "Ban this track" ) ); - connect( banAction, SIGNAL(triggered()), this, SLOT(ban()) ); + connect( banAction, &QAction::triggered, this, &Track::ban ); m_trackActions.append( banAction ); QAction *skipAction = new QAction( QIcon::fromTheme( "media-seek-forward-amarok" ), i18n( "Last.fm: &Skip" ), this ); skipAction->setShortcut( i18n( "Ctrl+S" ) ); skipAction->setStatusTip( i18n( "Skip this track" ) ); - connect( skipAction, SIGNAL(triggered()), this, SIGNAL(skipTrack()) ); + connect( skipAction, &QAction::triggered, this, &Track::skipTrack ); m_trackActions.append( skipAction ); QThread *mainThread = QCoreApplication::instance()->thread(); @@ -121,7 +121,7 @@ QUrl Track::playableUrl() const { - return d->lastFmUri.toString(); + return d->lastFmUri; } QUrl @@ -339,9 +339,10 @@ Track::ban() { DEBUG_BLOCK + d->wsReply = lastfm::MutableTrack( d->lastFmTrack ).ban(); - connect( d->wsReply, SIGNAL(finished()), this, SLOT(slotWsReply()) ); - if( The::engineController()->currentTrack() == this ) + connect( d->wsReply, &QNetworkReply::finished, this, &Track::slotWsReply ); + if( The::engineController()->currentTrack().data() == this ) emit skipTrack(); } @@ -432,15 +433,15 @@ QPixmap LastFm::Track::emblem() { if ( !d->track.isEmpty() ) - return QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-lastfm.png" ) ); + return QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-lastfm.png" ) ); else return QPixmap(); } QString LastFm::Track::scalableEmblem() { if ( !d->track.isEmpty() ) - return KStandardDirs::locate( "data", "amarok/images/emblem-lastfm-scalable.svg" ); + return QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-lastfm-scalable.svg" ); else return QString(); } diff --git a/src/services/lastfm/meta/LastFmMeta_p.h b/src/services/lastfm/meta/LastFmMeta_p.h --- a/src/services/lastfm/meta/LastFmMeta_p.h +++ b/src/services/lastfm/meta/LastFmMeta_p.h @@ -25,14 +25,13 @@ #include "core/support/Amarok.h" #include "core-impl/support/TagStatisticsStore.h" -#include -#include -#include +#include #include #include #include #include +#include #include #include @@ -263,7 +262,7 @@ image = QImage( cacheCoverDir.filePath( sizeKey + "lastfm-default-cover.png" ) ); else { - QImage orgImage = QImage( KStandardDirs::locate( "data", "amarok/images/lastfm-default-cover.png" ) ); //optimize this! + QImage orgImage = QImage( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/lastfm-default-cover.png" ) ); //optimize this! //scaled() does not change the original image but returns a scaled copy image = orgImage.scaled( size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation ); image.save( cacheCoverDir.filePath( sizeKey + "lastfm-default-cover.png" ), "PNG" ); diff --git a/src/services/lastfm/meta/LastFmMultiPlayableCapability.h b/src/services/lastfm/meta/LastFmMultiPlayableCapability.h --- a/src/services/lastfm/meta/LastFmMultiPlayableCapability.h +++ b/src/services/lastfm/meta/LastFmMultiPlayableCapability.h @@ -25,7 +25,7 @@ #include "core/meta/forward_declarations.h" #include "core/capabilities/MultiPlayableCapability.h" -#include +#include #include #include diff --git a/src/services/lastfm/meta/LastFmMultiPlayableCapability.cpp b/src/services/lastfm/meta/LastFmMultiPlayableCapability.cpp --- a/src/services/lastfm/meta/LastFmMultiPlayableCapability.cpp +++ b/src/services/lastfm/meta/LastFmMultiPlayableCapability.cpp @@ -24,16 +24,16 @@ , m_url( track->internalUrl() ) , m_track( track ) { - connect( track, SIGNAL(skipTrack()), this, SLOT(skip()) ); + connect( track, &LastFm::Track::skipTrack, this, &LastFmMultiPlayableCapability::skip ); Q_ASSERT( The::mainWindow() ); - connect( The::mainWindow(), SIGNAL(skipTrack()), SLOT(skip()) ); + connect( The::mainWindow(), &MainWindow::skipTrack, this, &LastFmMultiPlayableCapability::skip ); // we only update underlying Last.fm metadata once it starts playing, prevent wrong // metadata Last.fm submissions etc. Q_ASSERT( EngineController::instance() ); - connect( EngineController::instance(), SIGNAL(trackPlaying(Meta::TrackPtr)), - SLOT(slotTrackPlaying(Meta::TrackPtr)) ); + connect( EngineController::instance(), &EngineController::trackPlaying, + this, &LastFmMultiPlayableCapability::slotTrackPlaying ); } LastFmMultiPlayableCapability::~LastFmMultiPlayableCapability() @@ -47,9 +47,8 @@ m_tuner = new lastfm::RadioTuner( lastfm::RadioStation( m_track->uidUrl() ) ); m_tuner->setParent( this ); // memory management - connect( m_tuner, SIGNAL(trackAvailable()), SLOT(slotNewTrackAvailable()) ); - connect( m_tuner, SIGNAL(error(lastfm::ws::Error,QString)), - SLOT(error(lastfm::ws::Error)) ); + connect( m_tuner, &lastfm::RadioTuner::trackAvailable, this, &LastFmMultiPlayableCapability::slotNewTrackAvailable ); + connect( m_tuner, &lastfm::RadioTuner::error, this, &LastFmMultiPlayableCapability::error ); } void diff --git a/src/services/magnatune/CMakeLists.txt b/src/services/magnatune/CMakeLists.txt --- a/src/services/magnatune/CMakeLists.txt +++ b/src/services/magnatune/CMakeLists.txt @@ -4,8 +4,7 @@ ../../core-impl/collections ../../statusbar ${CMAKE_CURRENT_BINARY_DIR}/../../.. - - ) +) add_subdirectory( images ) @@ -41,20 +40,21 @@ ) add_library(amarok_service_magnatunestore MODULE ${amarok_service_magnatune_PART_SRCS}) + target_link_libraries(amarok_service_magnatunestore amarokcore amaroklib - KF5::KDELibs4Support KF5::ConfigWidgets KF5::KIOCore KF5::ThreadWeaver Qt5::Core Qt5::Widgets ) - install(TARGETS amarok_service_magnatunestore DESTINATION ${PLUGIN_INSTALL_DIR} ) +kcoreaddons_desktop_to_json(amarok_service_magnatunestore amarok_service_magnatunestore.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) + ########### next target ############### set(kcm_amarok_service_magnatune_PART_SRCSS @@ -69,17 +69,19 @@ target_link_libraries( kcm_amarok_service_magnatunestore - KF5::KDELibs4Support + amarokcore KF5::ConfigWidgets KF5::ThreadWeaver Qt5::Core Qt5::Gui ) -install(TARGETS kcm_amarok_service_magnatunestore DESTINATION ${PLUGIN_INSTALL_DIR}) +install(TARGETS kcm_amarok_service_magnatunestore DESTINATION ${PLUGIN_INSTALL_DIR}) + +kcoreaddons_desktop_to_json(kcm_amarok_service_magnatunestore amarok_service_magnatunestore_config.desktop SERVICE_TYPES kcmodule.desktop) ########### install files ############### -install( FILES amarok_service_magnatunestore.desktop DESTINATION ${SERVICES_INSTALL_DIR}) -install( FILES amarok_service_magnatunestore_config.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +install( FILES amarok_service_magnatunestore.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) +install( FILES amarok_service_magnatunestore_config.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) diff --git a/src/services/magnatune/MagnatuneActions.cpp b/src/services/magnatune/MagnatuneActions.cpp --- a/src/services/magnatune/MagnatuneActions.cpp +++ b/src/services/magnatune/MagnatuneActions.cpp @@ -24,7 +24,7 @@ , m_album( album ) { setProperty( "popupdropper_svg_id", "append" ); - connect( this, SIGNAL(triggered(bool)), SLOT(slotTriggered()) ); + connect( this, &QAction::triggered, this, &MagnatuneDownloadAction::slotTriggered ); } @@ -44,7 +44,7 @@ , m_album( album ) { setProperty( "popupdropper_svg_id", "append" ); - connect( this, SIGNAL(triggered(bool)), SLOT(slotTriggered()) ); + connect( this, &QAction::triggered, this, &MagnatuneAddToFavoritesAction::slotTriggered ); } diff --git a/src/services/magnatune/MagnatuneAlbumDownloader.h b/src/services/magnatune/MagnatuneAlbumDownloader.h --- a/src/services/magnatune/MagnatuneAlbumDownloader.h +++ b/src/services/magnatune/MagnatuneAlbumDownloader.h @@ -20,18 +20,18 @@ #include "MagnatuneDownloadInfo.h" #include "MagnatuneMeta.h" -#include -#include +#include +#include #include +#include -#include /** This class encapsulates the downloading of an album once all required information has been retrieved @author Nikolaj Hald Nielsen */ -class MagnatuneAlbumDownloader: public QObject +class MagnatuneAlbumDownloader : public QObject { Q_OBJECT public: @@ -50,26 +50,28 @@ public Q_SLOTS: /** * Initiates the download of an album - * @param url A MagnatuneDownloadInfo object containing all needed information + * @param info A MagnatuneDownloadInfo object containing all needed information */ void downloadAlbum( MagnatuneDownloadInfo info ); protected: - KIO::FileCopyJob * m_albumDownloadJob; + KIO::FileCopyJob *m_albumDownloadJob; + KIO::FileCopyJob *m_coverDownloadJob; QString m_currentAlbumUnpackLocation; QString m_currentAlbumFileName; MagnatuneDownloadInfo m_currentAlbumInfo; - KTempDir * m_tempDir; + QTemporaryDir * m_tempDir; protected Q_SLOTS: /** * Unzip the downloaded album - * @param downLoadJob + * @param downloadJob */ void albumDownloadComplete( KJob* downloadJob ); void albumDownloadAborted(); - + void coverDownloadComplete( KJob* downloadJob ); + void coverAddAborted(); }; diff --git a/src/services/magnatune/MagnatuneAlbumDownloader.cpp b/src/services/magnatune/MagnatuneAlbumDownloader.cpp --- a/src/services/magnatune/MagnatuneAlbumDownloader.cpp +++ b/src/services/magnatune/MagnatuneAlbumDownloader.cpp @@ -22,22 +22,23 @@ #include "core/interfaces/Logger.h" #include "MagnatuneMeta.h" +#include -#include +#include #include MagnatuneAlbumDownloader::MagnatuneAlbumDownloader() : QObject() - , m_albumDownloadJob( ) + , m_albumDownloadJob( Q_NULLPTR ) + , m_coverDownloadJob( Q_NULLPTR ) , m_currentAlbumFileName() { - m_tempDir = new KTempDir(); + m_tempDir = new QTemporaryDir(); } MagnatuneAlbumDownloader::~MagnatuneAlbumDownloader() { delete m_tempDir; - m_tempDir = 0; } void @@ -54,11 +55,11 @@ m_currentAlbumFileName = info.albumCode() + ".zip"; - debug() << "Using temporary location: " << m_tempDir->name() + m_currentAlbumFileName; + debug() << "Using temporary location: " << m_tempDir->path() + '/' + m_currentAlbumFileName; - m_albumDownloadJob = KIO::file_copy( downloadUrl, QUrl( m_tempDir->name() + m_currentAlbumFileName ), -1, KIO::Overwrite | KIO::HideProgressInfo ); + m_albumDownloadJob = KIO::file_copy( downloadUrl, QUrl::fromLocalFile( m_tempDir->path() + '/' + m_currentAlbumFileName ), -1, KIO::Overwrite | KIO::HideProgressInfo ); - connect( m_albumDownloadJob, SIGNAL(result(KJob*)), SLOT(albumDownloadComplete(KJob*)) ); + connect( m_albumDownloadJob, &KJob::result, this, &MagnatuneAlbumDownloader::albumDownloadComplete ); QString msgText; if( !info.albumName().isEmpty() && !info.artistName().isEmpty() ) @@ -73,17 +74,14 @@ Amarok::Components::logger()->newProgressOperation( m_albumDownloadJob, msgText, this, SLOT(albumDownloadAborted()) ); } - - - void MagnatuneAlbumDownloader::albumDownloadComplete( KJob * downloadJob ) { DEBUG_BLOCK debug() << "album download complete"; - if ( !downloadJob->error() == 0 ) + if ( downloadJob->error() ) { //TODO: error handling here return ; @@ -95,16 +93,16 @@ //ok, now we have the .zip file downloaded. All we need is to unpack it to the desired location and add it to the collection. - KZip kzip( m_tempDir->name() + m_currentAlbumFileName ); + KZip kzip( m_tempDir->path() + '/' + m_currentAlbumFileName ); if ( !kzip.open( QIODevice::ReadOnly ) ) { Amarok::Components::logger()->shortMessage( i18n( "Magnatune download seems to have failed. Cannot read zip file" ) ); emit( downloadComplete( false ) ); return; } - debug() << m_tempDir->name() + m_currentAlbumFileName << " opened for decompression"; + debug() << m_tempDir->path() + '/' + m_currentAlbumFileName << " opened for decompression"; const KArchiveDirectory * directory = kzip.directory(); @@ -128,27 +126,54 @@ debug() << "Adding cover " << downloadUrl.url() << " to collection at " << finalAlbumPath; - m_albumDownloadJob = KIO::file_copy( downloadUrl, QUrl( finalAlbumPath + "/cover.jpg" ), -1, KIO::Overwrite | KIO::HideProgressInfo ); + m_coverDownloadJob = KIO::file_copy( downloadUrl, QUrl::fromLocalFile( finalAlbumPath + "/cover.jpg" ), -1, KIO::Overwrite | KIO::HideProgressInfo ); - connect( m_albumDownloadJob, SIGNAL(result(KJob*)), SLOT(coverAddComplete(KJob*)) ); + connect( m_coverDownloadJob, &KJob::result, this, &MagnatuneAlbumDownloader::coverDownloadComplete ); - Amarok::Components::logger()->newProgressOperation( m_albumDownloadJob, i18n( "Adding album cover to collection" ), this, SLOT(coverAddAborted()) ); + Amarok::Components::logger()->newProgressOperation( m_coverDownloadJob, i18n( "Adding album cover to collection" ), this, SLOT(coverAddAborted()) ); emit( downloadComplete( true ) ); +} +void +MagnatuneAlbumDownloader::coverDownloadComplete(KJob* downloadJob) +{ + DEBUG_BLOCK + + debug() << "cover download complete"; + if ( downloadJob->error() ) + { + //TODO: error handling here + return ; + } + if ( downloadJob != m_coverDownloadJob ) + return ; //not the right job, so let's ignore it + + //TODO: storing of cover here } void MagnatuneAlbumDownloader::albumDownloadAborted( ) { DEBUG_BLOCK m_albumDownloadJob->kill(); - m_albumDownloadJob = 0; + m_albumDownloadJob = Q_NULLPTR; debug() << "Aborted album download"; emit( downloadComplete( false ) ); +} + +void +MagnatuneAlbumDownloader::coverAddAborted() +{ + DEBUG_BLOCK + m_coverDownloadJob->kill(); + m_coverDownloadJob = Q_NULLPTR; + debug() << "Aborted cover download"; + + emit( downloadComplete( false ) ); } diff --git a/src/services/magnatune/MagnatuneCollectionLocation.cpp b/src/services/magnatune/MagnatuneCollectionLocation.cpp --- a/src/services/magnatune/MagnatuneCollectionLocation.cpp +++ b/src/services/magnatune/MagnatuneCollectionLocation.cpp @@ -17,9 +17,11 @@ #include "MagnatuneCollectionLocation.h" #include -#include - +#include #include +#include + +#include #include using namespace Collections; @@ -46,8 +48,8 @@ QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); okButton->setDefault(true); okButton->setShortcut(Qt::CTRL | Qt::Key_Return); - dialog.connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - dialog.connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); + connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); QLabel *label = new QLabel( i18n( "The tracks you are about to copy are Magnatune.com preview streams. For better quality and advert free streams, consider buying an album download. Remember that when buying from Magnatune the artist gets 50%. Also if you buy using Amarok, you support the Amarok project with 10%." ) ); diff --git a/src/services/magnatune/MagnatuneConfig.cpp b/src/services/magnatune/MagnatuneConfig.cpp --- a/src/services/magnatune/MagnatuneConfig.cpp +++ b/src/services/magnatune/MagnatuneConfig.cpp @@ -18,11 +18,9 @@ #include "MagnatuneConfig.h" #include "MagnatuneMeta.h" +#include "core/support/Amarok.h" -#include -#include #include -#include MagnatuneConfig::MagnatuneConfig() { @@ -39,8 +37,9 @@ { m_hasChanged = false; - kDebug() << "load"; - KConfigGroup config = KGlobal::config()->group( "Service_Magnatune" ); +// qDebug() << "load"; + + KConfigGroup config = Amarok::config( "Service_Magnatune" ); m_isMember = config.readEntry( "isMember", false ); @@ -85,9 +84,9 @@ void MagnatuneConfig::save() { - kDebug() << "save"; + qDebug() << "save"; if ( m_hasChanged ) { - KConfigGroup config = KGlobal::config()->group( "Service_Magnatune" ); + KConfigGroup config = Amarok::config( "Service_Magnatune" ); config.writeEntry( "isMember", m_isMember ); config.writeEntry( "autoUpdateDatabase", m_autoUpdate ); diff --git a/src/services/magnatune/MagnatuneConfigWidget.ui b/src/services/magnatune/MagnatuneConfigWidget.ui --- a/src/services/magnatune/MagnatuneConfigWidget.ui +++ b/src/services/magnatune/MagnatuneConfigWidget.ui @@ -61,7 +61,7 @@
- + true @@ -131,7 +131,7 @@ - + false @@ -145,7 +145,7 @@ - + false @@ -216,9 +216,9 @@ - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
diff --git a/src/services/magnatune/MagnatuneDatabaseHandler.cpp b/src/services/magnatune/MagnatuneDatabaseHandler.cpp --- a/src/services/magnatune/MagnatuneDatabaseHandler.cpp +++ b/src/services/magnatune/MagnatuneDatabaseHandler.cpp @@ -205,9 +205,9 @@ queryString = "INSERT INTO magnatune_artists ( name, artist_page, description, " "photo_url ) VALUES ( '" + sqlDb->escape( mArtist->name() ) + "', '" - + sqlDb->escape( mArtist->magnatuneUrl()) + "', '" + + sqlDb->escape( mArtist->magnatuneUrl().url() ) + "', '" + sqlDb->escape( mArtist->description() ) + "', '" - + sqlDb->escape( mArtist->photoUrl() ) + "' );"; + + sqlDb->escape( mArtist->photoUrl().url() ) + "' );"; //debug() << "Adding Magnatune artist " << queryString; diff --git a/src/services/magnatune/MagnatuneDatabaseWorker.cpp b/src/services/magnatune/MagnatuneDatabaseWorker.cpp --- a/src/services/magnatune/MagnatuneDatabaseWorker.cpp +++ b/src/services/magnatune/MagnatuneDatabaseWorker.cpp @@ -24,7 +24,7 @@ , ThreadWeaver::Job() , m_registry( 0 ) { - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &MagnatuneDatabaseWorker::done, this, &MagnatuneDatabaseWorker::completeJob ); } diff --git a/src/services/magnatune/MagnatuneDownloadDialog.h b/src/services/magnatune/MagnatuneDownloadDialog.h --- a/src/services/magnatune/MagnatuneDownloadDialog.h +++ b/src/services/magnatune/MagnatuneDownloadDialog.h @@ -36,11 +36,9 @@ /** * Overridden constructor. * @param parent Pointer to the parent QWidget. - * @param name Name of this widget. - * @param modal Sets modal state. * @param fl Additional dialog flags. */ - explicit MagnatuneDownloadDialog( QWidget* parent = 0, Qt::WFlags fl = 0 ); + explicit MagnatuneDownloadDialog( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); /** * Destructor @@ -50,7 +48,7 @@ /** * Sets the current download info - * @param the MagnatuneDownloadInfo class containing the information abut the + * @param info The MagnatuneDownloadInfo class containing the information abut the * download to display */ void setDownloadInfo( MagnatuneDownloadInfo info ); diff --git a/src/services/magnatune/MagnatuneDownloadDialog.cpp b/src/services/magnatune/MagnatuneDownloadDialog.cpp --- a/src/services/magnatune/MagnatuneDownloadDialog.cpp +++ b/src/services/magnatune/MagnatuneDownloadDialog.cpp @@ -19,17 +19,15 @@ #include "core/support/Amarok.h" #include "core/support/Debug.h" -#include -#include +#include +#include - - -MagnatuneDownloadDialog::MagnatuneDownloadDialog( QWidget *parent, Qt::WFlags fl ) +MagnatuneDownloadDialog::MagnatuneDownloadDialog( QWidget *parent, Qt::WindowFlags fl ) : QDialog( parent, fl ) { setupUi(this); - downloadTargetURLRequester->fileDialog()->setMode( KFile::Directory ); + downloadTargetURLRequester->setMode( KFile::Directory ); } @@ -54,8 +52,7 @@ m_currentDownloadInfo.setFormatSelection( format ); QUrl unpackLocation = downloadTargetURLRequester->url(); - unpackLocation.adjustPath( QUrl::AddTrailingSlash ); - m_currentDownloadInfo.setUnpackUrl( unpackLocation.directory( QUrl::ObeyTrailingSlash ) ); + m_currentDownloadInfo.setUnpackUrl( unpackLocation.path() ); emit( downloadAlbum( m_currentDownloadInfo ) ); @@ -91,7 +88,7 @@ } if ( !path.isEmpty() ) { - downloadTargetURLRequester->setUrl( QUrl(path) ); + downloadTargetURLRequester->setUrl( QUrl::fromLocalFile(path) ); } } diff --git a/src/services/magnatune/MagnatuneDownloadHandler.cpp b/src/services/magnatune/MagnatuneDownloadHandler.cpp --- a/src/services/magnatune/MagnatuneDownloadHandler.cpp +++ b/src/services/magnatune/MagnatuneDownloadHandler.cpp @@ -24,10 +24,10 @@ #include "MagnatuneConfig.h" #include -#include #include #include +#include #include using namespace Meta; @@ -74,22 +74,22 @@ else type = "download"; - QString purchaseURL = "http://" + username + ":" + password + "@" + type + ".magnatune.com/buy/membership_free_dl_xml?sku=" + m_currentAlbum->albumCode() + "&id=amarok"; + QUrl purchaseURL = QUrl::fromUserInput( "http://" + username + ":" + password + "@" + type + ".magnatune.com/buy/membership_free_dl_xml?sku=" + m_currentAlbum->albumCode() + "&id=amarok" ); m_membershipDownload = true; - m_resultDownloadJob = KIO::storedGet( QUrl( purchaseURL ), KIO::NoReload, KIO::HideProgressInfo ); + m_resultDownloadJob = KIO::storedGet( purchaseURL, KIO::NoReload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_resultDownloadJob, i18n( "Processing download" ) ); - connect( m_resultDownloadJob, SIGNAL(result(KJob*)), SLOT(xmlDownloadComplete(KJob*)) ); + connect( m_resultDownloadJob, &KJob::result, this, &MagnatuneDownloadHandler::xmlDownloadComplete ); } void MagnatuneDownloadHandler::xmlDownloadComplete( KJob * downloadJob ) { debug() << "xml download complete"; - if ( !downloadJob->error() == 0 ) + if ( downloadJob->error() ) { //TODO: error handling here debug() << "Job error... " << downloadJob->error(); @@ -109,14 +109,14 @@ if ( m_albumDownloader == 0 ) { m_albumDownloader = new MagnatuneAlbumDownloader(); - connect( m_albumDownloader, SIGNAL(downloadComplete(bool)), this, SLOT(albumDownloadComplete(bool)) ); + connect( m_albumDownloader, &MagnatuneAlbumDownloader::downloadComplete, this, &MagnatuneDownloadHandler::albumDownloadComplete ); } if ( m_downloadDialog == 0 ) { m_downloadDialog = new MagnatuneDownloadDialog( m_parent ); m_downloadDialog->setModal( true ); - connect( m_downloadDialog, SIGNAL(downloadAlbum(MagnatuneDownloadInfo)), m_albumDownloader, SLOT(downloadAlbum(MagnatuneDownloadInfo)) ); + connect( m_downloadDialog, &MagnatuneDownloadDialog::downloadAlbum, m_albumDownloader, &MagnatuneAlbumDownloader::downloadAlbum ); //connect( m_downloadDialog, SIGNAL(rejected()), this, SLOT(albumPurchaseCancelled()) ); } diff --git a/src/services/magnatune/MagnatuneDownloadInfo.cpp b/src/services/magnatune/MagnatuneDownloadInfo.cpp --- a/src/services/magnatune/MagnatuneDownloadInfo.cpp +++ b/src/services/magnatune/MagnatuneDownloadInfo.cpp @@ -18,7 +18,7 @@ #include "core/support/Debug.h" -#include +#include #include #include diff --git a/src/services/magnatune/MagnatuneInfoParser.cpp b/src/services/magnatune/MagnatuneInfoParser.cpp --- a/src/services/magnatune/MagnatuneInfoParser.cpp +++ b/src/services/magnatune/MagnatuneInfoParser.cpp @@ -20,7 +20,7 @@ #include "core/interfaces/Logger.h" #include "MagnatuneConfig.h" -#include +#include using namespace Meta; @@ -39,7 +39,7 @@ m_infoDownloadJob = KIO::storedGet( magnatuneArtist->magnatuneUrl(), KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_infoDownloadJob, i18n( "Fetching %1 Artist Info", magnatuneArtist->prettyName() ) ); - connect( m_infoDownloadJob, SIGNAL(result(KJob*)), SLOT(artistInfoDownloadComplete(KJob*)) ); + connect( m_infoDownloadJob, &KJob::result, this, &MagnatuneInfoParser::artistInfoDownloadComplete ); } @@ -97,7 +97,7 @@ MagnatuneInfoParser::artistInfoDownloadComplete( KJob *downLoadJob ) { - if ( !downLoadJob->error() == 0 ) + if ( downLoadJob->error() != 0 ) { //TODO: error handling here return ; @@ -164,7 +164,7 @@ m_pageDownloadJob = KIO::storedGet( QUrl("http://magnatune.com/amarok_frontpage.html"), KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_pageDownloadJob, i18n( "Fetching Magnatune.com front page" ) ); - connect( m_pageDownloadJob, SIGNAL(result(KJob*)), SLOT(frontpageDownloadComplete(KJob*)) ); + connect( m_pageDownloadJob, &KJob::result, this, &MagnatuneInfoParser::frontpageDownloadComplete ); } void MagnatuneInfoParser::getFavoritesPage() @@ -185,11 +185,11 @@ QString user = config.username(); QString password = config.password(); - QString url = "http://" + user + ":" + password + "@" + type.toLower() + ".magnatune.com/member/amarok_favorites.php"; + QUrl url = QUrl::fromUserInput( "http://" + user + ":" + password + "@" + type.toLower() + ".magnatune.com/member/amarok_favorites.php" ); - m_pageDownloadJob = KIO::storedGet( QUrl( url ), KIO::Reload, KIO::HideProgressInfo ); + m_pageDownloadJob = KIO::storedGet( url, KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_pageDownloadJob, i18n( "Loading your Magnatune.com favorites page..." ) ); - connect( m_pageDownloadJob, SIGNAL(result(KJob*)), SLOT(userPageDownloadComplete(KJob*)) ); + connect( m_pageDownloadJob, &KJob::result, this, &MagnatuneInfoParser::userPageDownloadComplete ); } void MagnatuneInfoParser::getRecommendationsPage() @@ -210,16 +210,16 @@ QString user = config.username(); QString password = config.password(); - QString url = "http://" + user + ":" + password + "@" + type.toLower() + ".magnatune.com/member/amarok_recommendations.php"; + QUrl url = QUrl::fromUserInput( "http://" + user + ":" + password + "@" + type.toLower() + ".magnatune.com/member/amarok_recommendations.php" ); - m_pageDownloadJob = KIO::storedGet( QUrl( url ), KIO::Reload, KIO::HideProgressInfo ); + m_pageDownloadJob = KIO::storedGet( url, KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_pageDownloadJob, i18n( "Loading your personal Magnatune.com recommendations page..." ) ); - connect( m_pageDownloadJob, SIGNAL(result(KJob*)), SLOT(userPageDownloadComplete(KJob*)) ); + connect( m_pageDownloadJob, &KJob::result, this, &MagnatuneInfoParser::userPageDownloadComplete ); } void MagnatuneInfoParser::frontpageDownloadComplete( KJob * downLoadJob ) { - if ( !downLoadJob->error() == 0 ) + if ( downLoadJob->error() != 0 ) { //TODO: error handling here return ; diff --git a/src/services/magnatune/MagnatuneMeta.h b/src/services/magnatune/MagnatuneMeta.h --- a/src/services/magnatune/MagnatuneMeta.h +++ b/src/services/magnatune/MagnatuneMeta.h @@ -75,18 +75,18 @@ { private: - QString m_photoUrl; - QString m_magnatuneUrl; + QUrl m_photoUrl; + QUrl m_magnatuneUrl; public: MagnatuneArtist( const QString &name ); MagnatuneArtist( const QStringList &resultRow ); - void setPhotoUrl( const QString &photoUrl ); - QString photoUrl() const; + void setPhotoUrl( const QUrl &photoUrl ); + QUrl photoUrl() const; - void setMagnatuneUrl( const QString &url ); - QString magnatuneUrl() const; + void setMagnatuneUrl( const QUrl &url ); + QUrl magnatuneUrl() const; virtual bool isBookmarkable() const { return true; } virtual QString collectionName() const { return "Magnatune.com"; } diff --git a/src/services/magnatune/MagnatuneMeta.cpp b/src/services/magnatune/MagnatuneMeta.cpp --- a/src/services/magnatune/MagnatuneMeta.cpp +++ b/src/services/magnatune/MagnatuneMeta.cpp @@ -24,10 +24,10 @@ #include "MagnatuneConfig.h" #include "SvgHandler.h" -#include -#include - #include +#include + +#include using namespace Meta; @@ -217,7 +217,7 @@ QPixmap Meta::MagnatuneTrack::emblem() { - return QPixmap( KStandardDirs::locate( "data", "amarok/images/emblem-magnatune.png" ) ); + return QPixmap( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-magnatune.png" ) ); } @@ -236,7 +236,7 @@ DEBUG_BLOCK MagnatuneAlbum * mAlbum = dynamic_cast ( album().data() ); if ( mAlbum ) - mAlbum->store()->download( this ); + mAlbum->store()->downloadTrack( this ); } void Meta::MagnatuneTrack::setAlbumPtr( Meta::AlbumPtr album ) @@ -264,26 +264,31 @@ MagnatuneArtist::MagnatuneArtist(const QStringList & resultRow) : ServiceArtist( resultRow ) { - m_photoUrl = resultRow[3]; - m_magnatuneUrl = resultRow[4]; + auto list = QUrl::fromStringList( resultRow ); + + if( list.size() < 5 ) + return; + + m_photoUrl = list.at(3); + m_magnatuneUrl = list.at(4); } -void MagnatuneArtist::setPhotoUrl( const QString &photoUrl ) +void MagnatuneArtist::setPhotoUrl( const QUrl &photoUrl ) { m_photoUrl = photoUrl; } -QString MagnatuneArtist::photoUrl( ) const +QUrl MagnatuneArtist::photoUrl( ) const { return m_photoUrl; } -void MagnatuneArtist::setMagnatuneUrl( const QString & magnatuneUrl ) +void MagnatuneArtist::setMagnatuneUrl( const QUrl & magnatuneUrl ) { m_magnatuneUrl = magnatuneUrl; } -QString MagnatuneArtist::magnatuneUrl() const +QUrl MagnatuneArtist::magnatuneUrl() const { return m_magnatuneUrl; } @@ -369,7 +374,7 @@ { DEBUG_BLOCK if ( store() ) - store()->download( this ); + store()->downloadAlbum( this ); } void Meta::MagnatuneAlbum::addToFavorites() diff --git a/src/services/magnatune/MagnatuneNeedUpdateWidget.cpp b/src/services/magnatune/MagnatuneNeedUpdateWidget.cpp --- a/src/services/magnatune/MagnatuneNeedUpdateWidget.cpp +++ b/src/services/magnatune/MagnatuneNeedUpdateWidget.cpp @@ -26,8 +26,8 @@ { ui->setupUi(this); - connect(ui->update, SIGNAL(clicked()), SLOT(startUpdate())); - connect(ui->autoUpdate, SIGNAL(stateChanged(int)), SLOT(saveSettings())); + connect(ui->update, &QPushButton::clicked, this, &MagnatuneNeedUpdateWidget::startUpdate ); + connect(ui->autoUpdate, &QCheckBox::stateChanged, this, &MagnatuneNeedUpdateWidget::saveSettings ); ui->autoUpdate->setCheckState( MagnatuneConfig().autoUpdateDatabase()? Qt::Checked : Qt::Unchecked ); diff --git a/src/services/magnatune/MagnatuneRedownloadDialog.h b/src/services/magnatune/MagnatuneRedownloadDialog.h --- a/src/services/magnatune/MagnatuneRedownloadDialog.h +++ b/src/services/magnatune/MagnatuneRedownloadDialog.h @@ -28,16 +28,16 @@ Q_OBJECT public: - explicit MagnatuneRedownloadDialog( QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WFlags fl = 0 ); + explicit MagnatuneRedownloadDialog( QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WindowFlags fl = 0 ); ~MagnatuneRedownloadDialog(); /*$PUBLIC_FUNCTIONS$*/ void setRedownloadItems( const QStringList &items ); void setRedownloadItems( QList previousPurchases ); Q_SIGNALS: - void redownload( const QString &downloadInfoFileName ); +// void redownload( const QString &downloadInfoFileName ); void redownload( MagnatuneDownloadInfo info ); void cancelled(); @@ -49,7 +49,7 @@ protected Q_SLOTS: /*$PROTECTED_SLOTS$*/ - void redownload(); + void slotRedownload(); void selectionChanged(); void reject(); diff --git a/src/services/magnatune/MagnatuneRedownloadDialog.cpp b/src/services/magnatune/MagnatuneRedownloadDialog.cpp --- a/src/services/magnatune/MagnatuneRedownloadDialog.cpp +++ b/src/services/magnatune/MagnatuneRedownloadDialog.cpp @@ -20,17 +20,17 @@ #include -MagnatuneRedownloadDialog::MagnatuneRedownloadDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: QDialog(parent, fl) +MagnatuneRedownloadDialog::MagnatuneRedownloadDialog(QWidget* parent, const char* name, bool modal, Qt::WindowFlags fl) + : QDialog(parent, fl) { setObjectName( name ); setModal( modal ); setupUi(this); redownloadButton->setEnabled ( false ); redownloadListView->header()->setStretchLastSection( true ); redownloadListView->setRootIsDecorated( false ); - connect( redownloadListView, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()) ); + connect( redownloadListView, &QTreeWidget::itemSelectionChanged, this, &MagnatuneRedownloadDialog::selectionChanged ); } MagnatuneRedownloadDialog::~MagnatuneRedownloadDialog() @@ -67,9 +67,8 @@ } -void MagnatuneRedownloadDialog::redownload( ) +void MagnatuneRedownloadDialog::slotRedownload( ) { - QTreeWidgetItem * current = redownloadListView->currentItem(); if ( m_infoMap.keys().contains( current ) ) { diff --git a/src/services/magnatune/MagnatuneRedownloadHandler.h b/src/services/magnatune/MagnatuneRedownloadHandler.h --- a/src/services/magnatune/MagnatuneRedownloadHandler.h +++ b/src/services/magnatune/MagnatuneRedownloadHandler.h @@ -30,7 +30,8 @@ @author Nikolaj Hald Nielsen */ -class MagnatuneRedownloadHandler : public QObject { +class MagnatuneRedownloadHandler : public QObject +{ Q_OBJECT public: MagnatuneRedownloadHandler(QWidget * parent); @@ -70,9 +71,6 @@ void selectionDialogCancelled(); void albumDownloadComplete( bool success ); void redownloadApiResult( KJob* job ); - - - }; #endif diff --git a/src/services/magnatune/MagnatuneRedownloadHandler.cpp b/src/services/magnatune/MagnatuneRedownloadHandler.cpp --- a/src/services/magnatune/MagnatuneRedownloadHandler.cpp +++ b/src/services/magnatune/MagnatuneRedownloadHandler.cpp @@ -22,7 +22,7 @@ #include "core/support/Components.h" #include "core/interfaces/Logger.h" -#include +#include #include #include "QDir" @@ -84,13 +84,14 @@ if ( m_albumDownloader == 0 ) { m_albumDownloader = new MagnatuneAlbumDownloader(); - connect( m_albumDownloader, SIGNAL(downloadComplete(bool)), this, SLOT(albumDownloadComplete(bool)) ); + connect( m_albumDownloader, &MagnatuneAlbumDownloader::downloadComplete, this, &MagnatuneRedownloadHandler::albumDownloadComplete ); } - if (m_downloadDialog == 0) { + if ( m_downloadDialog == 0 ) + { m_downloadDialog = new MagnatuneDownloadDialog(m_parent); - connect( m_downloadDialog, SIGNAL(downloadAlbum(MagnatuneDownloadInfo)), m_albumDownloader, SLOT(downloadAlbum(MagnatuneDownloadInfo)) ); + connect( m_downloadDialog, &MagnatuneDownloadDialog::downloadAlbum, m_albumDownloader, &MagnatuneAlbumDownloader::downloadAlbum ); } debug() << "Showing download dialog"; @@ -142,20 +143,20 @@ return; } - QString redownloadApiUrl = "http://magnatune.com/buy/redownload_xml?email=" + email; + QUrl redownloadApiUrl = QUrl::fromUserInput( "http://magnatune.com/buy/redownload_xml?email=" + email ); - m_redownloadApiJob = KIO::storedGet( QUrl( redownloadApiUrl ), KIO::NoReload, KIO::HideProgressInfo ); + m_redownloadApiJob = KIO::storedGet( redownloadApiUrl, KIO::NoReload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_redownloadApiJob, i18n( "Getting list of previous Magnatune.com purchases" ) ); - connect( m_redownloadApiJob, SIGNAL(result(KJob*)), SLOT(redownloadApiResult(KJob*)) ); + connect( m_redownloadApiJob, &KIO::TransferJob::result, this, &MagnatuneRedownloadHandler::redownloadApiResult ); } void MagnatuneRedownloadHandler::redownloadApiResult( KJob* job ) { -DEBUG_BLOCK + DEBUG_BLOCK - if ( !job->error() == 0 ) + if ( job->error() != 0 ) { //TODO: error handling here debug() << "Job error... " << job->error(); @@ -187,11 +188,11 @@ } - if (m_redownloadDialog == 0) { + if (m_redownloadDialog == 0) + { m_redownloadDialog = new MagnatuneRedownloadDialog( m_parent ); - //connect( m_redownloadDialog, SIGNAL(redownload(QString)), this, SLOT(redownload(QString)) ); - connect( m_redownloadDialog, SIGNAL(redownload(MagnatuneDownloadInfo)), this, SLOT(redownload(MagnatuneDownloadInfo)) ); - connect( m_redownloadDialog, SIGNAL(cancelled()), this, SLOT(selectionDialogCancelled()) ); + connect( m_redownloadDialog, &MagnatuneRedownloadDialog::redownload, this, &MagnatuneRedownloadHandler::redownload ); + connect( m_redownloadDialog, &MagnatuneRedownloadDialog::cancelled, this, &MagnatuneRedownloadHandler::selectionDialogCancelled ); } m_redownloadDialog->setRedownloadItems( previousPurchasesInfoList ); diff --git a/src/services/magnatune/MagnatuneSettingsModule.cpp b/src/services/magnatune/MagnatuneSettingsModule.cpp --- a/src/services/magnatune/MagnatuneSettingsModule.cpp +++ b/src/services/magnatune/MagnatuneSettingsModule.cpp @@ -20,7 +20,7 @@ #include "MagnatuneMeta.h" #include "ui_MagnatuneConfigWidget.h" -#include +#include K_PLUGIN_FACTORY_WITH_JSON( MagnatuneSettingsModuleFactory, "amarok_service_magnatunestore_config.json", registerPlugin(); ) @@ -32,16 +32,15 @@ m_configDialog->setupUi( this ); m_configDialog->passwordEdit->setEchoMode( QLineEdit::Password ); - connect ( m_configDialog->usernameEdit, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->emailEdit, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->typeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->isMemberCheckbox, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->streamTypeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->autoUpdateDatabase, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); + connect ( m_configDialog->usernameEdit, &QLineEdit::textChanged, this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->passwordEdit, &QLineEdit::textChanged, this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->emailEdit, &QLineEdit::textChanged, this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->typeComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->isMemberCheckbox, &QCheckBox::stateChanged, this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->streamTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MagnatuneSettingsModule::settingsChanged ); + connect ( m_configDialog->autoUpdateDatabase, &QCheckBox::stateChanged, this, &MagnatuneSettingsModule::settingsChanged ); load(); - } @@ -72,7 +71,6 @@ m_config.save(); KCModule::save(); - } void MagnatuneSettingsModule::load() @@ -108,4 +106,4 @@ emit changed( true ); } - +#include diff --git a/src/services/magnatune/MagnatuneStore.h b/src/services/magnatune/MagnatuneStore.h --- a/src/services/magnatune/MagnatuneStore.h +++ b/src/services/magnatune/MagnatuneStore.h @@ -27,14 +27,11 @@ #include "../ServiceBase.h" -#include -#include +#include #include #include -#include #include -#include class MagnatuneInfoParser; @@ -102,9 +99,9 @@ */ void listDownloadCancelled(); - void download( Meta::MagnatuneTrack * track ); + void downloadTrack( Meta::MagnatuneTrack * track ); - void download( Meta::MagnatuneAlbum * album ); + void downloadAlbum( Meta::MagnatuneAlbum * album ); void showFavoritesPage(); void showHomePage(); @@ -119,7 +116,7 @@ */ void download(); - void download( const QString &sku ); + void downloadSku( const QString &sku ); /** * Slot for recieving notification that the update button has been clicked. @@ -162,8 +159,7 @@ /** * Checks if download button should be enabled - * @param selection the new selection - * @param deseleted items that were previously selected but have been deselected + * @param selectedItem the new selected item */ void itemSelected( CollectionTreeItem * selectedItem ); @@ -213,7 +209,7 @@ QAction * m_updateAction; - bool m_downloadInProgress; + bool m_downloadInProgress; Meta::MagnatuneAlbum * m_currentAlbum; diff --git a/src/services/magnatune/MagnatuneStore.cpp b/src/services/magnatune/MagnatuneStore.cpp --- a/src/services/magnatune/MagnatuneStore.cpp +++ b/src/services/magnatune/MagnatuneStore.cpp @@ -21,6 +21,7 @@ #include "core/interfaces/Logger.h" #include "amarokurls/AmarokUrlHandler.h" #include "browsers/CollectionTreeItem.h" +#include "browsers/CollectionTreeView.h" #include "browsers/SingleCollectionTreeItemModel.h" #include "EngineController.h" #include "MagnatuneConfig.h" @@ -39,19 +40,17 @@ #include "widgets/SearchWidget.h" #include -#include -#include //locate() -#include -#include -#include -#include - #include #include +#include +#include #include #include +#include -#include +#include +#include +#include //////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -97,16 +96,16 @@ , m_registry( 0 ) , m_signupInfoWidget( 0 ) { - setObjectName(name); DEBUG_BLOCK + setObjectName(name); //initTopPanel( ); setShortDescription( i18n( "\"Fair trade\" online music store" ) ); setIcon( QIcon::fromTheme( "view-services-magnatune-amarok" ) ); // xgettext: no-c-format setLongDescription( i18n( "Magnatune.com is a different kind of record company with the motto \"We are not evil!\" 50% of every purchase goes directly to the artist and if you purchase an album through Amarok, the Amarok project receives a 10% commission. Magnatune.com also offers \"all you can eat\" memberships that lets you download as much of their music as you like." ) ); - setImagePath( KStandardDirs::locate( "data", "amarok/images/hover_info_magnatune.png" ) ); + setImagePath( QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/hover_info_magnatune.png" ) ); //initBottomPanel(); @@ -168,24 +167,24 @@ { m_downloadHandler = new MagnatuneDownloadHandler(); m_downloadHandler->setParent( this ); - connect( m_downloadHandler, SIGNAL(downloadCompleted(bool)), this, SLOT(downloadCompleted(bool)) ); + connect( m_downloadHandler, &MagnatuneDownloadHandler::downloadCompleted, + this, &MagnatuneStore::downloadCompleted ); } if ( m_currentAlbum != 0 ) m_downloadHandler->downloadAlbum( m_currentAlbum ); } -void MagnatuneStore::download( Meta::MagnatuneTrack * track ) +void MagnatuneStore::downloadTrack( Meta::MagnatuneTrack * track ) { Meta::MagnatuneAlbum * album = dynamic_cast( track->album().data() ); if ( album ) - download( album ); + downloadAlbum( album ); } -void MagnatuneStore::download( Meta::MagnatuneAlbum * album ) +void MagnatuneStore::downloadAlbum( Meta::MagnatuneAlbum * album ) { - DEBUG_BLOCK if ( m_downloadInProgress ) return; @@ -200,32 +199,32 @@ { m_downloadHandler = new MagnatuneDownloadHandler(); m_downloadHandler->setParent( this ); - connect( m_downloadHandler, SIGNAL(downloadCompleted(bool)), this, SLOT(downloadCompleted(bool)) ); + connect( m_downloadHandler, &MagnatuneDownloadHandler::downloadCompleted, + this, &MagnatuneStore::downloadCompleted ); } m_downloadHandler->downloadAlbum( album ); } void MagnatuneStore::initTopPanel( ) { - QMenu *filterMenu = new QMenu( 0 ); QAction *action = filterMenu->addAction( i18n("Artist") ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByArtist()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::sortByArtist ); action = filterMenu->addAction( i18n( "Artist / Album" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByArtistAlbum()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::sortByArtistAlbum ); action = filterMenu->addAction( i18n( "Album" ) ) ; - connect( action, SIGNAL(triggered(bool)), SLOT(sortByAlbum()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::sortByAlbum ); action = filterMenu->addAction( i18n( "Genre / Artist" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByGenreArtist()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::sortByGenreArtist ); action = filterMenu->addAction( i18n( "Genre / Artist / Album" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(sortByGenreArtistAlbum()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::sortByGenreArtistAlbum ); QAction *filterMenuAction = new QAction( QIcon::fromTheme( "preferences-other" ), i18n( "Sort Options" ), this ); filterMenuAction->setMenu( filterMenu ); @@ -240,10 +239,10 @@ QMenu * actionsMenu = new QMenu( 0 ); action = actionsMenu->addAction( i18n( "Re-download" ) ); - connect( action, SIGNAL(triggered(bool)), SLOT(processRedownload()) ); + connect( action, &QAction::triggered, this, &MagnatuneStore::processRedownload ); m_updateAction = actionsMenu->addAction( i18n( "Update Database" ) ); - connect( m_updateAction, SIGNAL(triggered(bool)), SLOT(updateButtonClicked()) ); + connect( m_updateAction, &QAction::triggered, this, &MagnatuneStore::updateButtonClicked ); QAction *actionsMenuAction = new QAction( QIcon::fromTheme( "list-add" ), i18n( "Tools" ), this ); actionsMenuAction->setMenu( actionsMenu ); @@ -280,13 +279,14 @@ m_downloadAlbumButton->setObjectName( "downloadButton" ); m_downloadAlbumButton->setIcon( QIcon::fromTheme( "download-amarok" ) ); - connect( m_downloadAlbumButton, SIGNAL(clicked()) , this, SLOT(download()) ); + connect( m_downloadAlbumButton, &QPushButton::clicked, this, &MagnatuneStore::download ); if ( !config.lastUpdateTimestamp() ) { m_needUpdateWidget = new MagnatuneNeedUpdateWidget(m_bottomPanel); - connect( m_needUpdateWidget, SIGNAL(wantUpdate()), SLOT(updateButtonClicked()) ); + connect( m_needUpdateWidget, &MagnatuneNeedUpdateWidget::wantUpdate, + this, &MagnatuneStore::updateButtonClicked ); m_downloadAlbumButton->setParent(0); } @@ -312,22 +312,21 @@ debug() << "MagnatuneStore: start downloading xml file"; - KTemporaryFile tempFile; - tempFile.setSuffix( ".bz2" ); + QTemporaryFile tempFile; +// tempFile.setSuffix( ".bz2" ); tempFile.setAutoRemove( false ); // file will be removed in MagnatuneXmlParser if( !tempFile.open() ) { return false; //error } m_tempFileName = tempFile.fileName(); - m_listDownloadJob = KIO::file_copy( QUrl("http://magnatune.com/info/album_info_xml.bz2"), QUrl( m_tempFileName ), 0700 , KIO::HideProgressInfo | KIO::Overwrite ); + m_listDownloadJob = KIO::file_copy( QUrl("http://magnatune.com/info/album_info_xml.bz2"), QUrl::fromLocalFile( m_tempFileName ), 0700 , KIO::HideProgressInfo | KIO::Overwrite ); Amarok::Components::logger()->newProgressOperation( m_listDownloadJob, i18n( "Downloading Magnatune.com database..." ), this, SLOT(listDownloadCancelled()) ); - connect( m_listDownloadJob, SIGNAL(result(KJob*)), - this, SLOT(listDownloadComplete(KJob*)) ); - + connect( m_listDownloadJob, &KJob::result, + this, &MagnatuneStore::listDownloadComplete ); return true; } @@ -356,7 +355,7 @@ Amarok::Components::logger()->shortMessage( i18n( "Updating the local Magnatune database." ) ); MagnatuneXmlParser * parser = new MagnatuneXmlParser( m_tempFileName ); parser->setDbHandler( new MagnatuneDatabaseHandler() ); - connect( parser, SIGNAL(doneParsing()), SLOT(doneParsing()) ); + connect( parser, &MagnatuneXmlParser::doneParsing, this, &MagnatuneStore::doneParsing ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(parser) ); } @@ -465,9 +464,9 @@ void MagnatuneStore::addMoodyTracksToPlaylist( const QString &mood, int count ) { - MagnatuneDatabaseWorker * databaseWorker = new MagnatuneDatabaseWorker(); + MagnatuneDatabaseWorker *databaseWorker = new MagnatuneDatabaseWorker(); databaseWorker->fetchTrackswithMood( mood, count, m_registry ); - connect( databaseWorker, SIGNAL(gotMoodyTracks(Meta::TrackList)), this, SLOT(moodyTracksReady(Meta::TrackList)) ); + connect( databaseWorker, &MagnatuneDatabaseWorker::gotMoodyTracks, this, &MagnatuneStore::moodyTracksReady ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(databaseWorker) ); } @@ -491,23 +490,23 @@ setInfoParser( m_magnatuneInfoParser ); setModel( new SingleCollectionTreeItemModel( m_collection, levels ) ); - connect( m_contentView, SIGNAL(itemSelected(CollectionTreeItem*)), this, SLOT(itemSelected(CollectionTreeItem*)) ); + connect( qobject_cast(m_contentView), &CollectionTreeView::itemSelected, + this, &MagnatuneStore::itemSelected ); //add a custom url runner + MagnatuneUrlRunner *runner = new MagnatuneUrlRunner(); - MagnatuneUrlRunner * runner = new MagnatuneUrlRunner(); - - connect( runner, SIGNAL(showFavorites()), this, SLOT(showFavoritesPage()) ); - connect( runner, SIGNAL(showHome()), this, SLOT(showHomePage()) ); - connect( runner, SIGNAL(showRecommendations()), this, SLOT(showRecommendationsPage()) ); - connect( runner, SIGNAL(buyOrDownload(QString)), this, SLOT(download(QString)) ); - connect( runner, SIGNAL(removeFromFavorites(QString)), this, SLOT(removeFromFavorites(QString)) ); + connect( runner, &MagnatuneUrlRunner::showFavorites, this, &MagnatuneStore::showFavoritesPage ); + connect( runner, &MagnatuneUrlRunner::showHome, this, &MagnatuneStore::showHomePage ); + connect( runner, &MagnatuneUrlRunner::showRecommendations, this, &MagnatuneStore::showRecommendationsPage ); + connect( runner, &MagnatuneUrlRunner::buyOrDownload, this, &MagnatuneStore::downloadSku ); + connect( runner, &MagnatuneUrlRunner::removeFromFavorites, this, &MagnatuneStore::removeFromFavorites ); The::amarokUrlHandler()->registerRunner( runner, runner->command() ); } - const QUrl url( KStandardDirs::locate( "data", "amarok/data/" ) ); - QString imagePath = url.url(); + QString imagePath = QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/" ); + const QUrl url = QUrl::fromLocalFile( imagePath ); MagnatuneInfoParser * parser = dynamic_cast ( infoParser() ); if ( parser ) @@ -517,7 +516,7 @@ MagnatuneDatabaseWorker * databaseWorker = new MagnatuneDatabaseWorker(); databaseWorker->fetchMoodMap(); - connect( databaseWorker, SIGNAL(gotMoodMap(QMap)), this, SLOT(moodMapReady(QMap)) ); + connect( databaseWorker, &MagnatuneDatabaseWorker::gotMoodMap, this, &MagnatuneStore::moodMapReady ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(databaseWorker) ); if ( MagnatuneConfig().autoUpdateDatabase() ) @@ -576,7 +575,7 @@ void MagnatuneStore::checkForUpdates() { m_updateTimestampDownloadJob = KIO::storedGet( QUrl("http://magnatune.com/info/last_update_timestamp"), KIO::Reload, KIO::HideProgressInfo ); - connect( m_updateTimestampDownloadJob, SIGNAL(result(KJob*)), SLOT(timestampDownloadComplete(KJob*)) ); + connect( m_updateTimestampDownloadJob, &KJob::result, this, &MagnatuneStore::timestampDownloadComplete ); } @@ -674,13 +673,13 @@ m_magnatuneInfoParser->getRecommendationsPage(); } -void MagnatuneStore::download( const QString &sku ) +void MagnatuneStore::downloadSku( const QString &sku ) { DEBUG_BLOCK debug() << "sku: " << sku; MagnatuneDatabaseWorker * databaseWorker = new MagnatuneDatabaseWorker(); databaseWorker->fetchAlbumBySku( sku, m_registry ); - connect( databaseWorker, SIGNAL(gotAlbumBySku(Meta::MagnatuneAlbum*)), this, SLOT(download(Meta::MagnatuneAlbum*)) ); + connect( databaseWorker, &MagnatuneDatabaseWorker::gotAlbumBySku, this, &MagnatuneStore::downloadAlbum ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(databaseWorker) ); } @@ -699,7 +698,7 @@ debug() << "favorites url: " << url; m_favoritesJob = KIO::storedGet( QUrl( url ), KIO::Reload, KIO::HideProgressInfo ); - connect( m_favoritesJob, SIGNAL(result(KJob*)), SLOT(favoritesResult(KJob*)) ); + connect( m_favoritesJob, &KJob::result, this, &MagnatuneStore::favoritesResult ); } void MagnatuneStore::removeFromFavorites( const QString &sku ) @@ -716,7 +715,7 @@ debug() << "favorites url: " << url; m_favoritesJob = KIO::storedGet( QUrl( url ), KIO::Reload, KIO::HideProgressInfo ); - connect( m_favoritesJob, SIGNAL(result(KJob*)), SLOT(favoritesResult(KJob*)) ); + connect( m_favoritesJob, &KJob::result, this, &MagnatuneStore::favoritesResult ); } void MagnatuneStore::favoritesResult( KJob* addToFavoritesJob ) diff --git a/src/services/magnatune/MagnatuneUrlRunner.cpp b/src/services/magnatune/MagnatuneUrlRunner.cpp --- a/src/services/magnatune/MagnatuneUrlRunner.cpp +++ b/src/services/magnatune/MagnatuneUrlRunner.cpp @@ -16,7 +16,7 @@ #include "MagnatuneUrlRunner.h" -#include +#include MagnatuneUrlRunner::MagnatuneUrlRunner() : QObject() diff --git a/src/services/magnatune/MagnatuneXmlParser.cpp b/src/services/magnatune/MagnatuneXmlParser.cpp --- a/src/services/magnatune/MagnatuneXmlParser.cpp +++ b/src/services/magnatune/MagnatuneXmlParser.cpp @@ -22,7 +22,7 @@ #include "core/interfaces/Logger.h" #include -#include +#include #include #include @@ -34,7 +34,7 @@ , ThreadWeaver::Job() { m_sFileName = filename; - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &MagnatuneXmlParser::done, this, &MagnatuneXmlParser::completeJob ); } @@ -173,9 +173,9 @@ QString description; QString artistName; QString artistDescription; - QString artistPhotoUrl; + QUrl artistPhotoUrl; QString mp3Genre; - QString artistPageUrl; + QUrl artistPageUrl; QDomNode n = e.firstChild(); @@ -191,7 +191,7 @@ if ( sElementName == "albumname" ) - //printf(("|--+" + childElement.text() + "\n").toAscii()); + //printf(("|--+" + childElement.text() + "\n").toLatin1()); //m_currentAlbumItem = new MagnatuneListViewAlbumItem( m_currentArtistItem); name = childElement.text(); @@ -219,13 +219,13 @@ artistDescription = childElement.text(); else if ( sElementName == "artistphoto" ) - artistPhotoUrl = childElement.text() ; + artistPhotoUrl = QUrl( childElement.text() ); else if ( sElementName == "mp3genre" ) mp3Genre = childElement.text(); else if ( sElementName == "home" ) - artistPageUrl = childElement.text(); + artistPageUrl = QUrl( childElement.text() ); else if ( sElementName == "Track" ) parseTrack( childElement ); diff --git a/src/services/magnatune/amarok_service_magnatunestore.desktop b/src/services/magnatune/amarok_service_magnatunestore.desktop --- a/src/services/magnatune/amarok_service_magnatunestore.desktop +++ b/src/services/magnatune/amarok_service_magnatunestore.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-magnatune-amarok Name=Magnatune Store Name[bg]=Магазин Magnatune @@ -113,7 +112,6 @@ ServiceTypes=Amarok/Plugin -X-KDE-Library=amarok_service_magnatunestore X-KDE-Amarok-authors=Nikolaj Hald Nielsen X-KDE-Amarok-email=nhnFreespirit@gmail.com diff --git a/src/services/mp3tunes/CMakeLists.txt b/src/services/mp3tunes/CMakeLists.txt --- a/src/services/mp3tunes/CMakeLists.txt +++ b/src/services/mp3tunes/CMakeLists.txt @@ -1,142 +1,139 @@ -if(OPENSSL_FOUND OR LIBGCRYPT_FOUND) -if(LIBXML2_FOUND AND CURL_FOUND) - if(LOUDMOUTH_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND QT5_GLIB_SUPPORT) - include_directories( - ../ - ../../ - ../../core-impl/collections - ../../statusbar - ./libmp3tunes - ./harmonydaemon - ${LIBXML2_INCLUDE_DIR} - ${CURL_INCLUDE_DIRS} - ${CMAKE_CURRENT_BINARY_DIR}/../../.. - - - ) - ########### next target ############### - - include_directories( - ./harmonydaemon - ${GLIB2_INCLUDE_DIR} - ${GOBJECT_INCLUDE_DIR} - ${LOUDMOUTH_INCLUDE_DIRS} - ) - if(LIBGCRYPT_FOUND) - add_definitions(-DHAVE_LIBGCRYPT) - else() - include_directories(${OPENSSL_INCLUDE_DIR}) - add_definitions(-DHAVE_OPENSSL) - endif() - - set(amarok_service_mp3tunes_harmony_PART_SRCS - harmonydaemon/Mp3tunesHarmonyDownload.cpp - harmonydaemon/Mp3tunesHarmonyDaemon.cpp - harmonydaemon/Mp3tunesHarmonyClient.cpp - harmonydaemon/AmarokClient.cpp - harmonydaemon/main.cpp - libmp3tunes/md5.c - libmp3tunes/locker.c - libmp3tunes/harmony.c - ) - qt5_add_dbus_adaptor(amarok_service_mp3tunes_harmony_PART_SRCS - harmonydaemon/org.kde.amarok.Mp3tunesHarmonyDaemon.xml - harmonydaemon/Mp3tunesHarmonyDaemon.h - Mp3tunesHarmonyDaemon - ) - - add_executable(amarokmp3tunesharmonydaemon - ${amarok_service_mp3tunes_harmony_PART_SRCS} - ) - ecm_mark_nongui_executable(amarokmp3tunesharmonydaemon) - - target_link_libraries(amarokmp3tunesharmonydaemon - amarokcore - amaroklib - KF5::KDELibs4Support - ${GLIB2_LIBRARIES} - ${GOBJECT_LIBRARIES} - ${LOUDMOUTH_LIBRARIES} - ${LIBXML2_LIBRARIES} - ${CURL_LIBRARIES} - ) - - if(LIBGCRYPT_FOUND) - target_link_libraries(amarokmp3tunesharmonydaemon ${LIBGCRYPT_LIBS}) - else() - target_link_libraries(amarokmp3tunesharmonydaemon crypto ${OPENSSL_LIBRARIES}) - endif() - - install(TARGETS amarokmp3tunesharmonydaemon ${INSTALL_TARGETS_DEFAULT_ARGS} ) - ########### next target ############### - - set(amarok_service_mp3tunes_PART_SRCS - Mp3tunesService.cpp - Mp3tunesServiceCollection.cpp - Mp3tunesServiceCollectionLocation.cpp - Mp3tunesServiceQueryMaker.cpp - Mp3tunesMeta.cpp - Mp3tunesConfig.cpp - Mp3tunesLockerMeta.cpp - Mp3tunesLocker.cpp - Mp3tunesWorkers.cpp - Mp3tunesHarmonyHandler.cpp - - libmp3tunes/locker.c - libmp3tunes/md5.c - ) - - qt5_add_dbus_adaptor(amarok_service_mp3tunes_PART_SRCS - org.kde.amarok.Mp3tunesHarmonyHandler.xml - Mp3tunesHarmonyHandler.h - Mp3tunesHarmonyHandler - ) - - add_library(amarok_service_mp3tunes MODULE ${amarok_service_mp3tunes_PART_SRCS}) - target_link_libraries(amarok_service_mp3tunes - amarokcore - amaroklib - KF5::KDELibs4Support - - KF5::ThreadWeaver - ${LIBXML2_LIBRARIES} - ${CURL_LIBRARIES} - Qt5::Network - ) - - if(LIBGCRYPT_FOUND) - target_link_libraries(amarok_service_mp3tunes ${LIBGCRYPT_LIBS}) - else() - #${OPENSSL_LIBRARIES} returns -lssl, not -lcrypto. we only need -lcrypto. - target_link_libraries(amarok_service_mp3tunes crypto ${OPENSSL_LIBRARIES}) - endif() - - - install(TARGETS amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR} ) - - ########### next target ############### - - set(kcm_amarok_service_mp3tunes_PART_SRCSS - Mp3tunesSettingsModule.cpp - Mp3tunesConfig.cpp - ) - - ki18n_wrap_ui( kcm_amarok_service_mp3tunes_PART_SRCSS Mp3tunesConfigWidget.ui ) - - - add_library(kcm_amarok_service_mp3tunes MODULE ${kcm_amarok_service_mp3tunes_PART_SRCSS} ) - - - target_link_libraries( kcm_amarok_service_mp3tunes Qt5::Network ) - - install(TARGETS kcm_amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR}) - - - ########### install files ############### - - install( FILES amarok_service_mp3tunes.desktop DESTINATION ${SERVICES_INSTALL_DIR}) - install( FILES amarok_service_mp3tunes_config.desktop DESTINATION ${SERVICES_INSTALL_DIR}) - endif() +include_directories( + ../ + ../../ + ../../core-impl/collections + ../../statusbar + ./libmp3tunes + ./harmonydaemon + ${LIBXML2_INCLUDE_DIR} + ${CURL_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR}/../../.. + + +) +########### next target ############### + +include_directories( + ./harmonydaemon + ${GLIB2_INCLUDE_DIR} + ${GOBJECT_INCLUDE_DIR} + ${LOUDMOUTH_INCLUDE_DIRS} +) + +if(LIBGCRYPT_FOUND) + add_definitions(-DHAVE_LIBGCRYPT) +else() + include_directories(${OPENSSL_INCLUDE_DIR}) + add_definitions(-DHAVE_OPENSSL) endif() + +set(amarok_service_mp3tunes_harmony_PART_SRCS + harmonydaemon/Mp3tunesHarmonyDownload.cpp + harmonydaemon/Mp3tunesHarmonyDaemon.cpp + harmonydaemon/Mp3tunesHarmonyClient.cpp + harmonydaemon/AmarokClient.cpp + harmonydaemon/main.cpp + libmp3tunes/md5.c + libmp3tunes/locker.c + libmp3tunes/harmony.c +) + +qt5_add_dbus_adaptor(amarok_service_mp3tunes_harmony_PART_SRCS + harmonydaemon/org.kde.amarok.Mp3tunesHarmonyDaemon.xml + harmonydaemon/Mp3tunesHarmonyDaemon.h + Mp3tunesHarmonyDaemon +) + +add_executable(amarokmp3tunesharmonydaemon + ${amarok_service_mp3tunes_harmony_PART_SRCS} +) + +ecm_mark_nongui_executable(amarokmp3tunesharmonydaemon) + +target_link_libraries(amarokmp3tunesharmonydaemon + amarokcore + amaroklib + ${GLIB2_LIBRARIES} + ${GOBJECT_LIBRARIES} + ${LOUDMOUTH_LIBRARIES} + ${LIBXML2_LIBRARIES} + ${CURL_LIBRARIES} +) + +if(LIBGCRYPT_FOUND) + target_link_libraries(amarokmp3tunesharmonydaemon ${LIBGCRYPT_LIBS}) +else() + target_link_libraries(amarokmp3tunesharmonydaemon crypto ${OPENSSL_LIBRARIES}) +endif() + +install(TARGETS amarokmp3tunesharmonydaemon ${INSTALL_TARGETS_DEFAULT_ARGS} ) + +########### next target ############### + +set(amarok_service_mp3tunes_PART_SRCS + Mp3tunesService.cpp + Mp3tunesServiceCollection.cpp + Mp3tunesServiceCollectionLocation.cpp + Mp3tunesServiceQueryMaker.cpp + Mp3tunesMeta.cpp + Mp3tunesConfig.cpp + Mp3tunesLockerMeta.cpp + Mp3tunesLocker.cpp + Mp3tunesWorkers.cpp + Mp3tunesHarmonyHandler.cpp + + libmp3tunes/locker.c + libmp3tunes/md5.c +) + +qt5_add_dbus_adaptor(amarok_service_mp3tunes_PART_SRCS + org.kde.amarok.Mp3tunesHarmonyHandler.xml + Mp3tunesHarmonyHandler.h + Mp3tunesHarmonyHandler +) + +add_library(amarok_service_mp3tunes MODULE ${amarok_service_mp3tunes_PART_SRCS}) + +target_link_libraries(amarok_service_mp3tunes + amarokcore + amaroklib + KF5::ConfigCore + KF5::ThreadWeaver + ${LIBXML2_LIBRARIES} + ${CURL_LIBRARIES} + Qt5::Network +) + +if(LIBGCRYPT_FOUND) + target_link_libraries(amarok_service_mp3tunes ${LIBGCRYPT_LIBS}) +else() + #${OPENSSL_LIBRARIES} returns -lssl, not -lcrypto. we only need -lcrypto. + target_link_libraries(amarok_service_mp3tunes crypto ${OPENSSL_LIBRARIES}) endif() + +install(TARGETS amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR} ) + +kcoreaddons_desktop_to_json(amarok_service_mp3tunes amarok_service_mp3tunes.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) + +########### next target ############### + +set(kcm_amarok_service_mp3tunes_PART_SRCSS + Mp3tunesSettingsModule.cpp + Mp3tunesConfig.cpp +) + +ki18n_wrap_ui( kcm_amarok_service_mp3tunes_PART_SRCSS Mp3tunesConfigWidget.ui ) + +add_library(kcm_amarok_service_mp3tunes MODULE ${kcm_amarok_service_mp3tunes_PART_SRCSS} ) + +target_link_libraries( kcm_amarok_service_mp3tunes + amarokcore + Qt5::Network + KF5::ConfigWidgets +) + +install(TARGETS kcm_amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR}) +install( FILES amarok_service_mp3tunes_config.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) + +kcoreaddons_desktop_to_json(kcm_amarok_service_mp3tunes amarok_service_mp3tunes_config.desktop SERVICE_TYPES kcmodule.desktop) diff --git a/src/services/mp3tunes/Mp3tunesConfig.cpp b/src/services/mp3tunes/Mp3tunesConfig.cpp --- a/src/services/mp3tunes/Mp3tunesConfig.cpp +++ b/src/services/mp3tunes/Mp3tunesConfig.cpp @@ -17,10 +17,9 @@ #include "Mp3tunesConfig.h" -#include -#include +#include "core/support/Amarok.h" + #include -#include #include @@ -37,8 +36,8 @@ void Mp3tunesConfig::load() { - kDebug( 14310 ) << "load"; - KConfigGroup config = KGlobal::config()->group( "Service_Mp3tunes" ); +// kDebug( 14310 ) << "load"; + KConfigGroup config = Amarok::config( "Service_Mp3tunes" ); m_email = config.readEntry( "email", QString() ); m_password = config.readEntry( "password", QString() ); m_identifier = config.readEntry( "identifier", QString() ); @@ -54,7 +53,7 @@ QString addr = iface.hardwareAddress(); if( addr != "00:00:00:00:00:00" ) { addr.remove( ':' ); - kDebug( 14310 ) << "Using iface \"" << iface.name() << " addr: " << addr; +// kDebug( 14310 ) << "Using iface \"" << iface.name() << " addr: " << addr; setIdentifier( addr + m_partnerToken ); save(); break; @@ -65,9 +64,9 @@ void Mp3tunesConfig::save() { - kDebug( 14310 ) << "save"; +// kDebug( 14310 ) << "save"; if ( m_hasChanged ) { - KConfigGroup config = KGlobal::config()->group( "Service_Mp3tunes" ); + KConfigGroup config = Amarok::config( "Service_Mp3tunes" ); config.writeEntry( "email", m_email ); config.writeEntry( "password", m_password ); config.writeEntry( "identifier", m_identifier ); @@ -115,61 +114,61 @@ void Mp3tunesConfig::setHarmonyEnabled( bool enabled ) { - kDebug( 14310 ) << "set harmony"; +// kDebug( 14310 ) << "set harmony"; if ( enabled != m_harmonyEnabled ) { m_harmonyEnabled = enabled; m_hasChanged = true; } } void Mp3tunesConfig::setIdentifier( const QString &ident ) { - kDebug( 14310 ) << "set hwaddress"; +// kDebug( 14310 ) << "set hwaddress"; if ( ident != m_identifier ) { m_identifier = ident; m_hasChanged = true; } } void Mp3tunesConfig::setEmail( const QString &email ) { - kDebug( 14310 ) << "set email"; +// kDebug( 14310 ) << "set email"; if ( email != m_email ) { m_email = email; m_hasChanged = true; } } void Mp3tunesConfig::setPassword( const QString &password ) { - kDebug( 14310 ) << "set Password"; +// kDebug( 14310 ) << "set Password"; if( password != m_password ) { m_password = password; m_hasChanged = true; } } void Mp3tunesConfig::setPartnerToken( const QString &token ) { - kDebug( 14310 ) << "set token"; +// kDebug( 14310 ) << "set token"; if( token != m_partnerToken ) { m_partnerToken = token; m_hasChanged = true; } } void Mp3tunesConfig::setPin( const QString &pin ) { - kDebug( 14310 ) << "set pin"; +// kDebug( 14310 ) << "set pin"; if( pin != m_pin ) { m_pin = pin; m_hasChanged = true; } } void Mp3tunesConfig::setHarmonyEmail( const QString &harmonyEmail ) { - kDebug( 14310 ) << "set harmonyEmail"; +// kDebug( 14310 ) << "set harmonyEmail"; if( harmonyEmail != m_harmonyEmail ) { m_harmonyEmail = harmonyEmail; m_hasChanged = true; diff --git a/src/services/mp3tunes/Mp3tunesHarmonyHandler.cpp b/src/services/mp3tunes/Mp3tunesHarmonyHandler.cpp --- a/src/services/mp3tunes/Mp3tunesHarmonyHandler.cpp +++ b/src/services/mp3tunes/Mp3tunesHarmonyHandler.cpp @@ -53,8 +53,8 @@ else if( !m_email.isEmpty() && !m_pin.isEmpty() ) *m_daemon << "amarokmp3tunesharmonydaemon" << m_identifier << m_email << m_pin; m_daemon->setOutputChannelMode( KProcess::OnlyStdoutChannel ); - connect( m_daemon, SIGNAL(finished(int)), SLOT(slotFinished()) ); - connect( m_daemon, SIGNAL(error(QProcess::ProcessError)), SLOT(slotError(QProcess::ProcessError)) ); + connect( m_daemon, QOverload::of( &QProcess::finished ), this, &Mp3tunesHarmonyHandler::slotFinished ); + connect( m_daemon, QOverload::of( &AmarokProcess::error ), this, &Mp3tunesHarmonyHandler::slotError ); m_daemon->start(); sleep(3); // sleep for 3 seconds to allow the process to start and register. return m_daemon->waitForStarted( -1 ); diff --git a/src/services/mp3tunes/Mp3tunesMeta.h b/src/services/mp3tunes/Mp3tunesMeta.h --- a/src/services/mp3tunes/Mp3tunesMeta.h +++ b/src/services/mp3tunes/Mp3tunesMeta.h @@ -21,12 +21,10 @@ #include "../ServiceMetaBase.h" #include "../ServiceAlbumCoverDownloader.h" -#include - #include +#include #include #include -#include namespace Meta diff --git a/src/services/mp3tunes/Mp3tunesMeta.cpp b/src/services/mp3tunes/Mp3tunesMeta.cpp --- a/src/services/mp3tunes/Mp3tunesMeta.cpp +++ b/src/services/mp3tunes/Mp3tunesMeta.cpp @@ -19,10 +19,13 @@ #include "core/support/Amarok.h" +#include #include -#include +#include + +#include + -#include using namespace Meta; Mp3TunesTrack::Mp3TunesTrack( const QString& title ) @@ -43,7 +46,7 @@ QString Mp3TunesTrack::sourceName() { return "MP3tunes.com"; } QString Mp3TunesTrack::sourceDescription() { return i18n( "Online music locker where you can safely store and access your music: http://mp3tunes.com" ); } -QPixmap Mp3TunesTrack::emblem() { return KStandardDirs::locate( "data", "amarok/images/emblem-mp3tunes.png" ); } +QPixmap Mp3TunesTrack::emblem() { return QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/images/emblem-mp3tunes.png" ); } //// Mp3TunesAlbum //// diff --git a/src/services/mp3tunes/Mp3tunesService.cpp b/src/services/mp3tunes/Mp3tunesService.cpp --- a/src/services/mp3tunes/Mp3tunesService.cpp +++ b/src/services/mp3tunes/Mp3tunesService.cpp @@ -26,7 +26,9 @@ #include "core/support/Debug.h" #include "Mp3tunesConfig.h" -#include +#include +#include + #include #include #include @@ -179,20 +181,20 @@ config.pin() ); // qRegisterMetaType("Mp3tunesHarmonyDownload"); - connect( m_harmony, SIGNAL(disconnected()), - this, SLOT(harmonyDisconnected())); - connect( m_harmony, SIGNAL(waitingForEmail(QString)), - this, SLOT(harmonyWaitingForEmail(QString)) ); - connect( m_harmony, SIGNAL(waitingForPin()), - this, SLOT(harmonyWaitingForPin()) ); - connect( m_harmony, SIGNAL(connected()), - this, SLOT(harmonyConnected()) ); - connect( m_harmony, SIGNAL(signalError(QString)), - this, SLOT(harmonyError(QString)) ); - connect( m_harmony, SIGNAL(downloadReady(QVariantMap)), - this, SLOT(harmonyDownloadReady(QVariantMap)) ); - connect( m_harmony, SIGNAL(downloadPending(QVariantMap)), - this, SLOT(harmonyDownloadPending(QVariantMap)) ); + connect( m_harmony, &Mp3tunesHarmonyHandler::disconnected, + this, &Mp3tunesService::harmonyDisconnected ); + connect( m_harmony, &Mp3tunesHarmonyHandler::waitingForEmail, + this, &Mp3tunesService::harmonyWaitingForEmail ); + connect( m_harmony, &Mp3tunesHarmonyHandler::waitingForPin, + this, &Mp3tunesService::harmonyWaitingForPin ); + connect( m_harmony, &Mp3tunesHarmonyHandler::connected, + this, &Mp3tunesService::harmonyConnected ); + connect( m_harmony, &Mp3tunesHarmonyHandler::signalError, + this, &Mp3tunesService::harmonyError ); + connect( m_harmony, &Mp3tunesHarmonyHandler::downloadReady, + this, &Mp3tunesService::harmonyDownloadReady ); + connect( m_harmony, &Mp3tunesHarmonyHandler::downloadPending, + this, &Mp3tunesService::harmonyDownloadPending ); debug() << "starting harmony"; m_harmony->startDaemon(); @@ -243,8 +245,8 @@ m_loginWorker = new Mp3tunesLoginWorker( m_locker, uname, passwd); //debug() << "Connecting finishedLogin -> authentication complete."; - connect( m_loginWorker, SIGNAL(finishedLogin(QString)), this, - SLOT(authenticationComplete(QString)) ); + connect( m_loginWorker, &Mp3tunesLoginWorker::finishedLogin, + this, &Mp3tunesService::authenticationComplete ); //debug() << "Connection complete. Enqueueing.."; ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(m_loginWorker) ); //debug() << "LoginWorker queue"; @@ -343,19 +345,20 @@ void Mp3tunesService::harmonyDownloadReady( const QVariantMap &download ) { DEBUG_BLOCK - debug() << "Got message about ready: " << download["trackTitle"].toString() << " by " << download["artistName"].toString() << " on " << download["albumTitle"].toString(); - foreach( Collections::Collection *coll, CollectionManager::instance()->collections().keys() ) { + debug() << "Got message about ready: " << download["trackTitle"] << " by " << download["artistName"] << " on " << download["albumTitle"]; + foreach( Collections::Collection *coll, CollectionManager::instance()->collections().keys() ) + { if( coll && coll->isWritable() && m_collection ) { debug() << "got collection" << coll->prettyName(); if ( coll->collectionId() == "localCollection") { //TODO Allow user to choose which collection to sync down to. debug() << "got local collection"; Collections::CollectionLocation *dest = coll->location(); Collections::CollectionLocation *source = m_collection->location(); - if( !m_collection->possiblyContainsTrack( download["url"].toString() ) ) + if( !m_collection->possiblyContainsTrack( download["url"].toUrl() ) ) return; //TODO some sort of error handling - Meta::TrackPtr track( m_collection->trackForUrl( download["url"].toString() ) ); + Meta::TrackPtr track( m_collection->trackForUrl( download["url"].toUrl() ) ); source->prepareCopy( track, dest ); break; } @@ -368,5 +371,5 @@ void Mp3tunesService::harmonyDownloadPending( const QVariantMap &download ) { DEBUG_BLOCK - debug() << "Got message about ready: " << download["trackTitle"].toString() << " by " << download["artistName"].toString() << " on " << download["albumTitle"].toString(); + debug() << "Got message about ready: " << download["trackTitle"] << " by " << download["artistName"] << " on " << download["albumTitle"]; } diff --git a/src/services/mp3tunes/Mp3tunesServiceCollection.cpp b/src/services/mp3tunes/Mp3tunesServiceCollection.cpp --- a/src/services/mp3tunes/Mp3tunesServiceCollection.cpp +++ b/src/services/mp3tunes/Mp3tunesServiceCollection.cpp @@ -92,7 +92,7 @@ Mp3tunesTrackFromFileKeyFetcher* trackFetcher = new Mp3tunesTrackFromFileKeyFetcher( m_locker, filekey ); m_tracksFetching[filekey] = serviceTrack; - connect( trackFetcher, SIGNAL(trackFetched(Mp3tunesLockerTrack&)), this, SLOT(trackForUrlComplete(Mp3tunesLockerTrack&)) ); + connect( trackFetcher, &Mp3tunesTrackFromFileKeyFetcher::trackFetched, this, &Mp3tunesServiceCollection::trackForUrlComplete ); //debug() << "Connection complete. Enqueueing.."; ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(trackFetcher) ); //debug() << "m_trackFetcher queue"; diff --git a/src/services/mp3tunes/Mp3tunesServiceCollectionLocation.cpp b/src/services/mp3tunes/Mp3tunesServiceCollectionLocation.cpp --- a/src/services/mp3tunes/Mp3tunesServiceCollectionLocation.cpp +++ b/src/services/mp3tunes/Mp3tunesServiceCollectionLocation.cpp @@ -82,6 +82,6 @@ if( !error.isEmpty() ) Amarok::Components::logger()->longMessage( error ); Mp3tunesSimpleUploader * uploadWorker = new Mp3tunesSimpleUploader( m_collection->locker(), urls ); - connect( uploadWorker, SIGNAL(uploadComplete()), this, SLOT(slotCopyOperationFinished()) ); + connect( uploadWorker, &Mp3tunesSimpleUploader::uploadComplete, this, &Mp3tunesServiceCollectionLocation::slotCopyOperationFinished ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(uploadWorker) ); } diff --git a/src/services/mp3tunes/Mp3tunesServiceQueryMaker.cpp b/src/services/mp3tunes/Mp3tunesServiceQueryMaker.cpp --- a/src/services/mp3tunes/Mp3tunesServiceQueryMaker.cpp +++ b/src/services/mp3tunes/Mp3tunesServiceQueryMaker.cpp @@ -172,31 +172,31 @@ DEBUG_BLOCK if ( d->maxsize >= 0 && artists.count() > d->maxsize ) { - emit newResultReady( artists.mid( 0, d->maxsize ) ); + emit newArtistsReady( artists.mid( 0, d->maxsize ) ); } else { - emit newResultReady( artists ); + emit newArtistsReady( artists ); } } void Mp3tunesServiceQueryMaker::handleResult( const Meta::AlbumList &albums ) { DEBUG_BLOCK if ( d->maxsize >= 0 && albums.count() > d->maxsize ) { - emit newResultReady( albums.mid( 0, d->maxsize ) ); + emit newAlbumsReady( albums.mid( 0, d->maxsize ) ); } else { - emit newResultReady( albums ); + emit newAlbumsReady( albums ); } } void Mp3tunesServiceQueryMaker::handleResult(const Meta::TrackList & tracks) { DEBUG_BLOCK if ( d->maxsize >= 0 && tracks.count() > d->maxsize ) { - emit newResultReady( tracks.mid( 0, d->maxsize ) ); + emit newTracksReady( tracks.mid( 0, d->maxsize ) ); } else { - emit newResultReady( tracks ); + emit newTracksReady( tracks ); } } @@ -208,13 +208,13 @@ { debug() << "Artist Filtering"; Mp3tunesSearchMonkey * searchMonkey = new Mp3tunesSearchMonkey( m_locker, m_artistFilter, Mp3tunesSearchResult::ArtistQuery ); - connect( searchMonkey, SIGNAL(searchComplete(QList)), this, SLOT(artistDownloadComplete(QList)) ); + connect( searchMonkey, &Mp3tunesSearchMonkey::searchArtistComplete, this, &Mp3tunesServiceQueryMaker::artistDownloadComplete ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(searchMonkey) ); //Go! } else if( m_locker->sessionValid() ) { debug() << "Artist Fetching"; Mp3tunesArtistFetcher * artistFetcher = new Mp3tunesArtistFetcher( m_locker ); - connect( artistFetcher, SIGNAL(artistsFetched(QList)), this, SLOT(artistDownloadComplete(QList)) ); + connect( artistFetcher, &Mp3tunesArtistFetcher::artistsFetched, this, &Mp3tunesServiceQueryMaker::artistDownloadComplete ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(artistFetcher) ); } } @@ -238,7 +238,7 @@ handleResult( albums ); } else if ( m_locker->sessionValid() ) { Mp3tunesAlbumWithArtistIdFetcher * albumFetcher = new Mp3tunesAlbumWithArtistIdFetcher( m_locker, m_parentArtistId.toInt() ); - connect( albumFetcher, SIGNAL(albumsFetched(QList)), this, SLOT(albumDownloadComplete(QList)) ); + connect( albumFetcher, &Mp3tunesAlbumWithArtistIdFetcher::albumsFetched, this, &Mp3tunesServiceQueryMaker::albumDownloadComplete ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(albumFetcher) ); } else { @@ -275,12 +275,12 @@ if( !m_parentArtistId.isEmpty() ) { debug() << "Creating track w/ artist id Fetch Worker"; Mp3tunesTrackWithArtistIdFetcher * trackFetcher = new Mp3tunesTrackWithArtistIdFetcher( m_locker, m_parentArtistId.toInt() ); - connect( trackFetcher, SIGNAL(tracksFetched(QList)), this, SLOT(trackDownloadComplete(QList)) ); + connect( trackFetcher, &Mp3tunesTrackWithArtistIdFetcher::tracksFetched, this, &Mp3tunesServiceQueryMaker::trackDownloadComplete ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(trackFetcher) ); //Go! } else if ( !m_parentAlbumId.isEmpty() ) { debug() << "Creating track w/ album id Fetch Worker"; Mp3tunesTrackWithAlbumIdFetcher * trackFetcher = new Mp3tunesTrackWithAlbumIdFetcher( m_locker, m_parentAlbumId.toInt() ); - connect( trackFetcher, SIGNAL(tracksFetched(QList)), this, SLOT(trackDownloadComplete(QList)) ); + connect( trackFetcher, &Mp3tunesTrackWithAlbumIdFetcher::tracksFetched, this, &Mp3tunesServiceQueryMaker::trackDownloadComplete ); ThreadWeaver::Queue::instance()->enqueue( QSharedPointer(trackFetcher) ); //Go! } } else { diff --git a/src/services/mp3tunes/Mp3tunesSettingsModule.cpp b/src/services/mp3tunes/Mp3tunesSettingsModule.cpp --- a/src/services/mp3tunes/Mp3tunesSettingsModule.cpp +++ b/src/services/mp3tunes/Mp3tunesSettingsModule.cpp @@ -19,22 +19,20 @@ #include "ui_Mp3tunesConfigWidget.h" -#include +#include -K_PLUGIN_FACTORY( Mp3tunesSettingsFactory, registerPlugin(); ) -K_EXPORT_PLUGIN( Mp3tunesSettingsFactory( "kcm_amarok_mp3tunes" ) ) +K_PLUGIN_FACTORY_WITH_JSON( Mp3tunesSettingsFactory, "amarok_service_mp3tunes_config.json", registerPlugin(); ) Mp3tunesSettingsModule::Mp3tunesSettingsModule( QWidget *parent, const QVariantList &args ) - : KCModule( Mp3tunesSettingsFactory::componentData(), parent, args ) + : KCModule( parent, args ) { m_configDialog = new Ui::Mp3tunesConfigWidget; m_configDialog->setupUi( this ); //m_configDialog->pinEdit->setReadOnly( true ); m_configDialog->passwordEdit->setEchoMode( QLineEdit::Password ); - connect ( m_configDialog->emailEdit, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - connect ( m_configDialog->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(settingsChanged()) ); - //connect ( m_configDialog->enableHarmony, SIGNAL(stateChanged(int)), this, SLOT(settingsChanged()) ); + connect ( m_configDialog->emailEdit, &QLineEdit::textChanged, this, &Mp3tunesSettingsModule::settingsChanged ); + connect ( m_configDialog->passwordEdit, &QLineEdit::textChanged, this, &Mp3tunesSettingsModule::settingsChanged ); load(); } diff --git a/src/services/mp3tunes/Mp3tunesWorkers.h b/src/services/mp3tunes/Mp3tunesWorkers.h --- a/src/services/mp3tunes/Mp3tunesWorkers.h +++ b/src/services/mp3tunes/Mp3tunesWorkers.h @@ -220,9 +220,9 @@ * This signal is emitted when success() returns false after the job is executed. */ void failed(ThreadWeaver::JobPointer); - void searchComplete( QList ); - void searchComplete( QList ); - void searchComplete( QList ); + void searchArtistComplete( QList ); + void searchAlbumComplete( QList ); + void searchTrackComplete( QList ); private Q_SLOTS: void completeJob(); diff --git a/src/services/mp3tunes/Mp3tunesWorkers.cpp b/src/services/mp3tunes/Mp3tunesWorkers.cpp --- a/src/services/mp3tunes/Mp3tunesWorkers.cpp +++ b/src/services/mp3tunes/Mp3tunesWorkers.cpp @@ -21,7 +21,7 @@ #include "core/support/Debug.h" #include "Mp3tunesMeta.h" -#include +#include #include Mp3tunesLoginWorker::Mp3tunesLoginWorker( Mp3tunesLocker* locker, @@ -34,7 +34,7 @@ , m_username( username ) , m_password( password ) { - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesLoginWorker::done, this, &Mp3tunesLoginWorker::completeJob ); } Mp3tunesLoginWorker::~Mp3tunesLoginWorker() @@ -79,7 +79,7 @@ /* ARTIST FETCHER */ Mp3tunesArtistFetcher::Mp3tunesArtistFetcher( Mp3tunesLocker * locker ) { - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesArtistFetcher::done, this, &Mp3tunesArtistFetcher::completeJob ); m_locker = locker; } @@ -126,7 +126,7 @@ /* ALBUM w/ Artist Id FETCHER */ Mp3tunesAlbumWithArtistIdFetcher::Mp3tunesAlbumWithArtistIdFetcher( Mp3tunesLocker * locker, int artistId ) { - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesAlbumWithArtistIdFetcher::done, this, &Mp3tunesAlbumWithArtistIdFetcher::completeJob ); m_locker = locker; m_artistId = artistId; } @@ -176,7 +176,7 @@ Mp3tunesTrackWithAlbumIdFetcher::Mp3tunesTrackWithAlbumIdFetcher( Mp3tunesLocker * locker, int albumId ) { DEBUG_BLOCK - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesTrackWithAlbumIdFetcher::done, this, &Mp3tunesTrackWithAlbumIdFetcher::completeJob ); m_locker = locker; debug() << "Constructor albumId: " << albumId; m_albumId = albumId; @@ -228,7 +228,7 @@ Mp3tunesTrackWithArtistIdFetcher::Mp3tunesTrackWithArtistIdFetcher( Mp3tunesLocker * locker, int artistId ) { DEBUG_BLOCK - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesTrackWithArtistIdFetcher::done, this, &Mp3tunesTrackWithArtistIdFetcher::completeJob ); m_locker = locker; debug() << "Constructor artistId: " << artistId; m_artistId = artistId; @@ -279,7 +279,7 @@ Mp3tunesSearchMonkey::Mp3tunesSearchMonkey( Mp3tunesLocker * locker, QString query, int searchFor ) { DEBUG_BLOCK - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesSearchMonkey::done, this, &Mp3tunesSearchMonkey::completeJob ); m_locker = locker; m_searchFor = searchFor; m_query = query; @@ -311,9 +311,9 @@ void Mp3tunesSearchMonkey::completeJob() { DEBUG_BLOCK - emit( searchComplete( m_result.artistList ) ); - emit( searchComplete( m_result.albumList ) ); - emit( searchComplete( m_result.trackList ) ); + emit( searchArtistComplete( m_result.artistList ) ); + emit( searchAlbumComplete( m_result.albumList ) ); + emit( searchTrackComplete( m_result.trackList ) ); deleteLater(); } void Mp3tunesSearchMonkey::defaultBegin(const ThreadWeaver::JobPointer& self, ThreadWeaver::Thread *thread) @@ -336,7 +336,7 @@ Mp3tunesSimpleUploader:: Mp3tunesSimpleUploader( Mp3tunesLocker * locker, QStringList tracklist ) { DEBUG_BLOCK - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesSimpleUploader::done, this, &Mp3tunesSimpleUploader::completeJob ); m_locker = locker; m_tracklist = tracklist; @@ -421,7 +421,7 @@ Mp3tunesTrackFromFileKeyFetcher::Mp3tunesTrackFromFileKeyFetcher( Mp3tunesLocker * locker, QString filekey ) { DEBUG_BLOCK - connect( this, SIGNAL(done(ThreadWeaver::JobPointer)), SLOT(completeJob()) ); + connect( this, &Mp3tunesTrackFromFileKeyFetcher::done, this, &Mp3tunesTrackFromFileKeyFetcher::completeJob ); m_locker = locker; debug() << "Constructor filekey: " << filekey; m_filekey = filekey; diff --git a/src/services/mp3tunes/amarok_service_mp3tunes.desktop b/src/services/mp3tunes/amarok_service_mp3tunes.desktop --- a/src/services/mp3tunes/amarok_service_mp3tunes.desktop +++ b/src/services/mp3tunes/amarok_service_mp3tunes.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-mp3tunes-amarok Name=MP3tunes Name[bg]=MP3tunes diff --git a/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.h b/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.h --- a/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.h +++ b/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.h @@ -19,8 +19,8 @@ #include "Mp3tunesHarmonyDownload.h" #include "Mp3tunesHarmonyClient.h" -#include +#include #include #include @@ -56,11 +56,11 @@ /** * For the first time run, before we have an email and pin to authenticate */ - Mp3tunesHarmonyDaemon( QString identifier ); + Mp3tunesHarmonyDaemon( QString identifier, int argc, char *argv[] ); /** * For subsequent logins */ - Mp3tunesHarmonyDaemon( QString identifier, QString email, QString pin ); + Mp3tunesHarmonyDaemon( QString identifier, QString email, QString pin, int argc, char *argv[] ); ~Mp3tunesHarmonyDaemon(); /** diff --git a/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.cpp b/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.cpp --- a/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.cpp +++ b/src/services/mp3tunes/harmonydaemon/Mp3tunesHarmonyDaemon.cpp @@ -21,11 +21,12 @@ #define statfs statvfs #endif -#include -#include +#include +#include +#include -Mp3tunesHarmonyDaemon::Mp3tunesHarmonyDaemon( QString identifier ) - : QCoreApplication( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() ) +Mp3tunesHarmonyDaemon::Mp3tunesHarmonyDaemon( QString identifier, int argc, char *argv[] ) + : QCoreApplication( argc, argv ) , m_identifier( identifier ) , m_email( QString() ) , m_pin( QString() ) @@ -39,8 +40,8 @@ init(); } -Mp3tunesHarmonyDaemon::Mp3tunesHarmonyDaemon( QString identifier, QString email, QString pin ) - : QCoreApplication( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() ) +Mp3tunesHarmonyDaemon::Mp3tunesHarmonyDaemon( QString identifier, QString email, QString pin, int argc, char *argv[] ) + : QCoreApplication( argc, argv ) , m_identifier( identifier ) , m_email( email ) , m_pin( pin ) @@ -66,18 +67,18 @@ Mp3tunesHarmonyDaemon::setClient( Mp3tunesHarmonyClient *client ) { m_client = client; - connect( this, SIGNAL(disconnected()), - m_client, SLOT(harmonyDisconnected())); - connect( this, SIGNAL(waitingForEmail(QString)), - m_client, SLOT(harmonyWaitingForEmail(QString)) ); - connect( this, SIGNAL(connected()), - m_client, SLOT(harmonyConnected()) ); - connect( this, SIGNAL(errorSignal(QString)), - m_client, SLOT(harmonyError(QString)) ); - connect( this, SIGNAL(downloadReady(Mp3tunesHarmonyDownload)), - m_client, SLOT(harmonyDownloadReady(Mp3tunesHarmonyDownload)) ); - connect( this, SIGNAL(downloadPending(Mp3tunesHarmonyDownload)), - m_client, SLOT(harmonyDownloadPending(Mp3tunesHarmonyDownload)) ); + connect( this, &Mp3tunesHarmonyDaemon::disconnected, + m_client, &Mp3tunesHarmonyClient::harmonyDisconnected ); + connect( this, &Mp3tunesHarmonyDaemon::waitingForEmail, + m_client, &Mp3tunesHarmonyClient::harmonyWaitingForEmail ); + connect( this, &Mp3tunesHarmonyDaemon::connected, + m_client, &Mp3tunesHarmonyClient::harmonyConnected ); + connect( this, &Mp3tunesHarmonyDaemon::errorSignal, + m_client, &Mp3tunesHarmonyClient::harmonyError ); + connect( this, &Mp3tunesHarmonyDaemon::downloadReady, + m_client, &Mp3tunesHarmonyClient::harmonyDownloadReady ); + connect( this, &Mp3tunesHarmonyDaemon::downloadPending, + m_client, &Mp3tunesHarmonyClient::harmonyDownloadPending ); } bool @@ -403,7 +404,7 @@ char * Mp3tunesHarmonyDaemon::convertToChar ( const QString &source ) const { - QByteArray b = source.toAscii(); + QByteArray b = source.toLatin1(); const char *c_tok = b.constData(); char * ret = ( char * ) malloc ( strlen ( c_tok ) + 1 ); strcpy ( ret, c_tok ); diff --git a/src/services/mp3tunes/harmonydaemon/main.cpp b/src/services/mp3tunes/harmonydaemon/main.cpp --- a/src/services/mp3tunes/harmonydaemon/main.cpp +++ b/src/services/mp3tunes/harmonydaemon/main.cpp @@ -19,54 +19,53 @@ #endif #include "Mp3tunesHarmonyDaemon.h" #include "AmarokClient.h" -#include -#include -#include + #include -#include +#include +#include + +#include +#include int main( int argc, char *argv[] ) { - const K4AboutData about( "amarokmp3tunesharmonydaemon", "amarok", - ki18n( "Amarok's MP3tunes Harmony Daemon" ), "0.1", - ki18n( "Handles AutoSync for the MP3tunes service in Amarok." ), K4AboutData::License_GPL, - ki18n( "(C) 2008, Casey Link" ), - ki18n( "IRC:\nserver: irc.freenode.net / channels: #amarok, #amarok.de, #amarok.es, #amarok.fr\n\nFeedback:\namarok@kde.org" ), - I18N_NOOP( "http://amarok.kde.org" ) ); - - KCmdLineArgs::reset(); - KCmdLineArgs::init( argc, argv, &about ); //calls KCmdLineArgs::addStdCmdLineOptions() + QCoreApplication app( argc, argv ); + const KAboutData about( "amarokmp3tunesharmonydaemon", + "amarok", + "0.1", + i18n( "Amarok's MP3tunes Harmony Daemon" ), + KAboutLicense::GPL, + i18n( "(C) 2008, Casey Link" ), + i18n( "Handles AutoSync for the MP3tunes service in Amarok." ), + i18n( "IRC:\nserver: irc.freenode.net / channels: #amarok, #amarok.de, #amarok.es, #amarok.fr\n\nFeedback:\namarok@kde.org" ), + I18N_NOOP( "http://amarok.kde.org" ) ); + KAboutData::setApplicationData( about ); - KCmdLineOptions options; - options.add("+identifier", ki18n( "The identifier the daemon should use." )); - options.add("+[email]", ki18n( "The email to be used for authentication." )); - options.add("+[pin]", ki18n( "The pin to be used for authentication." )); - KCmdLineArgs::addCmdLineOptions( options ); //add our own options + QCommandLineParser parser; + parser.setApplicationDescription( about.shortDescription() ); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addOption( { "identifier", i18n( "The identifier the daemon should use." ) } ); + parser.addOption( { "email", i18n( "The email to be used for authentication." ) } ); + parser.addOption( { "pin", i18n( "The pin to be used for authentication." ) } ); + parser.process( app ); - const KCmdLineArgs* const args = KCmdLineArgs::parsedArgs(); + QString ident = parser.value( "identifier" ); + QString email = parser.value( "email" ); + QString pin = parser.value( "pin" ); - QString ident; - QString email; - QString pin; - if ( args->count() < 1 || args->count() > 3 ) + if( ident.isEmpty() ) return -1; - if( args->count() > 0 ) - ident = args->arg( 0 ); - if( args->count() == 3 ) - { - email = args->arg( 1 ); - pin = args->arg( 2 ); - } if( email.isEmpty() && pin.isEmpty() ) - theDaemon = new Mp3tunesHarmonyDaemon( ident ); + theDaemon = new Mp3tunesHarmonyDaemon( ident, argc, argv ); else - theDaemon = new Mp3tunesHarmonyDaemon( ident, email, pin ); + theDaemon = new Mp3tunesHarmonyDaemon( ident, email, pin, argc, argv ); Mp3tunesAmarokClient *client = new Mp3tunesAmarokClient(); theDaemon->setClient( client ); qDebug() << "Starting main event loop"; - QCoreApplication::exec(); + return QCoreApplication::exec(); } diff --git a/src/services/opmldirectory/AddOpmlWidget.ui b/src/services/opmldirectory/AddOpmlWidget.ui --- a/src/services/opmldirectory/AddOpmlWidget.ui +++ b/src/services/opmldirectory/AddOpmlWidget.ui @@ -83,8 +83,8 @@
- - + + If left blank the title from the OPML will be used. @@ -99,9 +99,9 @@ 1 - KLineEdit + QLineEdit QLineEdit -
klineedit.h
+
qlineedit.h
diff --git a/src/services/opmldirectory/CMakeLists.txt b/src/services/opmldirectory/CMakeLists.txt --- a/src/services/opmldirectory/CMakeLists.txt +++ b/src/services/opmldirectory/CMakeLists.txt @@ -23,16 +23,15 @@ target_link_libraries(amarok_service_opmldirectory amarokcore amaroklib - KF5::KDELibs4Support - + KF5::IconThemes KF5::KIOCore KF5::ThreadWeaver ) install(TARGETS amarok_service_opmldirectory DESTINATION ${PLUGIN_INSTALL_DIR} ) + kcoreaddons_desktop_to_json(amarok_service_opmldirectory amarok_service_opmldirectory.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) ########### install files ############### - install( FILES amarok_service_opmldirectory.desktop DESTINATION ${SERVICES_INSTALL_DIR}) install( FILES podcast_directory.opml DESTINATION ${DATA_INSTALL_DIR}/amarok/data) diff --git a/src/services/opmldirectory/OpmlDirectoryInfoParser.h b/src/services/opmldirectory/OpmlDirectoryInfoParser.h --- a/src/services/opmldirectory/OpmlDirectoryInfoParser.h +++ b/src/services/opmldirectory/OpmlDirectoryInfoParser.h @@ -20,7 +20,6 @@ #include #include -#include /** diff --git a/src/services/opmldirectory/OpmlDirectoryInfoParser.cpp b/src/services/opmldirectory/OpmlDirectoryInfoParser.cpp --- a/src/services/opmldirectory/OpmlDirectoryInfoParser.cpp +++ b/src/services/opmldirectory/OpmlDirectoryInfoParser.cpp @@ -21,15 +21,15 @@ #include "core/interfaces/Logger.h" #include "OpmlDirectoryMeta.h" -#include - #include +#include + using namespace Meta; OpmlDirectoryInfoParser::OpmlDirectoryInfoParser() : InfoParserBase() - , m_rssDownloadJob( ) + , m_rssDownloadJob( Q_NULLPTR ) { } @@ -61,10 +61,10 @@ debug() << "OpmlDirectoryInfoParser: getInfo about feed: " << feed->uidUrl(); - m_rssDownloadJob = KIO::storedGet( feed->uidUrl(), KIO::Reload, KIO::HideProgressInfo ); + m_rssDownloadJob = KIO::storedGet( QUrl( feed->uidUrl() ), KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_rssDownloadJob, i18n( "Fetching Podcast Info" ) ); - connect( m_rssDownloadJob, SIGNAL(result(KJob*)), SLOT(rssDownloadComplete(KJob*)) ); + connect( m_rssDownloadJob, &KJob::result, this, &OpmlDirectoryInfoParser::rssDownloadComplete ); } void OpmlDirectoryInfoParser::rssDownloadComplete(KJob * downLoadJob) diff --git a/src/services/opmldirectory/OpmlDirectoryMeta.h b/src/services/opmldirectory/OpmlDirectoryMeta.h --- a/src/services/opmldirectory/OpmlDirectoryMeta.h +++ b/src/services/opmldirectory/OpmlDirectoryMeta.h @@ -43,8 +43,8 @@ class OpmlDirectoryFeed; class OpmlDirectoryCategory; -typedef KSharedPtr OpmlDirectoryFeedPtr; -typedef KSharedPtr OpmlDirectoryCategoryPtr; +typedef AmarokSharedPointer OpmlDirectoryFeedPtr; +typedef AmarokSharedPointer OpmlDirectoryCategoryPtr; class OpmlDirectoryFeed : public ServiceTrack { diff --git a/src/services/opmldirectory/OpmlDirectoryModel.h b/src/services/opmldirectory/OpmlDirectoryModel.h --- a/src/services/opmldirectory/OpmlDirectoryModel.h +++ b/src/services/opmldirectory/OpmlDirectoryModel.h @@ -90,8 +90,5 @@ QAction *m_addFolderAction; }; -Q_DECLARE_METATYPE(QActionList) -//we store these in a QVariant for the addFolder and addOpml actions -Q_DECLARE_METATYPE( QModelIndex ) #endif // OPMLDIRECTORYMODEL_H diff --git a/src/services/opmldirectory/OpmlDirectoryModel.cpp b/src/services/opmldirectory/OpmlDirectoryModel.cpp --- a/src/services/opmldirectory/OpmlDirectoryModel.cpp +++ b/src/services/opmldirectory/OpmlDirectoryModel.cpp @@ -27,20 +27,20 @@ #include "ui_AddOpmlWidget.h" -#include - #include +#include +#include OpmlDirectoryModel::OpmlDirectoryModel( QUrl outlineUrl, QObject *parent ) : QAbstractItemModel( parent ) , m_rootOpmlUrl( outlineUrl ) { //fetchMore will be called by the view m_addOpmlAction = new QAction( QIcon::fromTheme( "list-add" ), i18n( "Add OPML" ), this ); - connect( m_addOpmlAction, SIGNAL(triggered()), SLOT(slotAddOpmlAction()) ); + connect( m_addOpmlAction, &QAction::triggered, this, &OpmlDirectoryModel::slotAddOpmlAction ); m_addFolderAction = new QAction( QIcon::fromTheme( "folder-add" ), i18n( "Add Folder"), this ); - connect( m_addFolderAction, SIGNAL(triggered()), SLOT(slotAddFolderAction()) ); + connect( m_addFolderAction, &QAction::triggered, this, &OpmlDirectoryModel::slotAddFolderAction ); } OpmlDirectoryModel::~OpmlDirectoryModel() @@ -87,7 +87,7 @@ { if( !idx.isValid() ) return QModelIndex(); - debug() << idx; +// debug() << idx; OpmlOutline *outline = static_cast( idx.internalPointer() ); if( outline->isRootItem() ) return QModelIndex(); @@ -172,6 +172,7 @@ m_addFolderAction->setData( QVariant::fromValue( idx ) ); return QVariant::fromValue( QActionList() << m_addOpmlAction << m_addFolderAction ); } + debug() << outline->opmlNodeType(); return QVariant(); default: return QVariant(); @@ -255,7 +256,7 @@ //TODO: set header data such as date OpmlWriter *opmlWriter = new OpmlWriter( m_rootOutlines, headerData, opmlFile ); - connect( opmlWriter, SIGNAL(result(int)), SLOT(slotOpmlWriterDone(int)) ); + connect( opmlWriter, &OpmlWriter::result, this, &OpmlDirectoryModel::slotOpmlWriterDone ); opmlWriter->run(); } @@ -287,14 +288,18 @@ parentIdx = action->data().value(); } - KDialog *dialog = new KDialog( The::mainWindow() ); - dialog->setCaption( i18nc( "Heading of Add OPML dialog", "Add OPML" ) ); - dialog->setButtons( KDialog::Ok | KDialog::Cancel ); + QDialog *dialog = new QDialog( The::mainWindow() ); + dialog->setLayout( new QVBoxLayout ); + dialog->setWindowTitle( i18nc( "Heading of Add OPML dialog", "Add OPML" ) ); QWidget *opmlAddWidget = new QWidget( dialog ); + dialog->layout()->addWidget( opmlAddWidget ); Ui::AddOpmlWidget widget; widget.setupUi( opmlAddWidget ); widget.urlEdit->setMode( KFile::File ); - dialog->setMainWidget( opmlAddWidget ); + auto buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, dialog ); + dialog->layout()->addWidget( buttonBox ); + connect( buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject ); if( dialog->exec() != QDialog::Accepted ) return; @@ -309,7 +314,7 @@ outline->addAttribute( "text", title ); //Folder icon with down-arrow emblem - m_imageMap.insert( outline, QIcon::fromTheme( "folder", 0, QStringList( "go-down" ) ).pixmap( 24, 24 ) ); + m_imageMap.insert( outline, QIcon::fromTheme( "folder-download", QIcon::fromTheme( "go-down" ) ).pixmap( 24, 24 ) ); QModelIndex newIdx = addOutlineToModel( parentIdx, outline ); //TODO: force the view to expand the folder (parentIdx) so the new node is shown @@ -386,10 +391,9 @@ return; OpmlParser *parser = new OpmlParser( urlToFetch ); - connect( parser, SIGNAL(headerDone()), SLOT(slotOpmlHeaderDone()) ); - connect( parser, SIGNAL(outlineParsed(OpmlOutline*)), - SLOT(slotOpmlOutlineParsed(OpmlOutline*)) ); - connect( parser, SIGNAL(doneParsing()), SLOT(slotOpmlParsingDone()) ); + connect( parser, &OpmlParser::headerDone, this, &OpmlDirectoryModel::slotOpmlHeaderDone ); + connect( parser, &OpmlParser::outlineParsed, this, &OpmlDirectoryModel::slotOpmlOutlineParsed ); + connect( parser, &OpmlParser::doneParsing, this, &OpmlDirectoryModel::slotOpmlParsingDone ); m_currentFetchingMap.insert( parser, parent ); @@ -439,7 +443,7 @@ case IncludeNode: { m_imageMap.insert( outline, - QIcon::fromTheme( "folder", 0, QStringList( "go-down" ) ).pixmap( 24, 24 ) + QIcon::fromTheme( "folder-download", QIcon::fromTheme( "go-down" ) ).pixmap( 24, 24 ) ); break; } diff --git a/src/services/opmldirectory/OpmlDirectoryService.h b/src/services/opmldirectory/OpmlDirectoryService.h --- a/src/services/opmldirectory/OpmlDirectoryService.h +++ b/src/services/opmldirectory/OpmlDirectoryService.h @@ -24,8 +24,7 @@ #include "ServiceSqlCollection.h" #include "core/support/Amarok.h" -#include -#include +#include class OpmlOutline; diff --git a/src/services/opmldirectory/OpmlDirectoryService.cpp b/src/services/opmldirectory/OpmlDirectoryService.cpp --- a/src/services/opmldirectory/OpmlDirectoryService.cpp +++ b/src/services/opmldirectory/OpmlDirectoryService.cpp @@ -30,10 +30,10 @@ #include "ServiceSqlRegistry.h" #include "widgets/SearchWidget.h" -#include -#include +#include + +#include -#include using namespace Meta; @@ -106,47 +106,42 @@ opmlView->setDragDropMode ( QAbstractItemView::DragOnly ); opmlView->setEditTriggers( QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed ); setView( opmlView ); - QUrl opmlLocation( Amarok::saveLocation() ); - opmlLocation = opmlLocation.adjusted(QUrl::StripTrailingSlash); - opmlLocation.setPath(opmlLocation.path() + '/' + ( "podcast_directory.opml" )); + QString opmlLocation = Amarok::saveLocation() + "podcast_directory.opml"; - if( !QFile::exists( opmlLocation.toLocalFile() ) ) + if( !QFile::exists( opmlLocation ) ) { //copy from the standard data dir - QUrl schippedOpmlLocation( KStandardDirs::locate( "data", "amarok/data/" ) ); - schippedOpmlLocation = schippedOpmlLocation.adjusted(QUrl::StripTrailingSlash); - schippedOpmlLocation.setPath(schippedOpmlLocation.path() + '/' + ( "podcast_directory.opml" )); - if( !QFile::copy( schippedOpmlLocation.toLocalFile(), opmlLocation.toLocalFile() ) ) + QString schippedOpmlLocation = QStandardPaths::locate( QStandardPaths::GenericDataLocation, "amarok/data/podcast_directory.opml" ); + if( !QFile::copy( schippedOpmlLocation, opmlLocation ) ) { debug() << QString( "Failed to copy from %1 to %2" ) - .arg( schippedOpmlLocation.toLocalFile(), opmlLocation.toLocalFile() ); + .arg( schippedOpmlLocation, opmlLocation ); //TODO: error box drawn in the view's area. return; } } - setModel( new OpmlDirectoryModel( opmlLocation, this ) ); + setModel( new OpmlDirectoryModel( QUrl::fromLocalFile( opmlLocation ), this ) ); m_subscribeButton = new QPushButton( m_bottomPanel ); m_subscribeButton->setText( i18n( "Subscribe" ) ); m_subscribeButton->setObjectName( "subscribeButton" ); m_subscribeButton->setIcon( QIcon::fromTheme( "get-hot-new-stuff-amarok" ) ); m_subscribeButton->setEnabled( false ); - connect( m_subscribeButton, SIGNAL(clicked()), this, SLOT(subscribe()) ); + connect( m_subscribeButton, &QPushButton::clicked, this, &OpmlDirectoryService::subscribe ); m_addOpmlButton = new QPushButton( m_bottomPanel ); m_addOpmlButton->setText( i18n( "Add OPML" ) ); m_addOpmlButton->setObjectName( "addOpmlButton" ); m_addOpmlButton->setIcon( QIcon::fromTheme( "list-add-amarok" ) ); - connect( m_addOpmlButton, SIGNAL(clicked()), model(), SLOT(slotAddOpmlAction()) ); + connect( m_addOpmlButton, &QPushButton::clicked, + dynamic_cast( model() ), &OpmlDirectoryModel::slotAddOpmlAction ); - connect( view()->selectionModel(), - SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - SLOT(slotSelectionChanged(QItemSelection,QItemSelection)) - ); + connect( view()->selectionModel(), &QItemSelectionModel::selectionChanged, + this, &OpmlDirectoryService::slotSelectionChanged ); setInfoParser( new OpmlDirectoryInfoParser() ); diff --git a/src/services/opmldirectory/OpmlDirectoryView.cpp b/src/services/opmldirectory/OpmlDirectoryView.cpp --- a/src/services/opmldirectory/OpmlDirectoryView.cpp +++ b/src/services/opmldirectory/OpmlDirectoryView.cpp @@ -32,6 +32,8 @@ void OpmlDirectoryView::contextMenuEvent( QContextMenuEvent *event ) { + DEBUG_BLOCK + QModelIndex idx = indexAt( event->pos() ); debug() << idx; @@ -43,6 +45,7 @@ if( actions.isEmpty() ) { + warning() << "no actions for index:" << idx; return; } diff --git a/src/services/opmldirectory/amarok_service_opmldirectory.desktop b/src/services/opmldirectory/amarok_service_opmldirectory.desktop --- a/src/services/opmldirectory/amarok_service_opmldirectory.desktop +++ b/src/services/opmldirectory/amarok_service_opmldirectory.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Service -ServiceTypes=KPluginInfo Icon=view-services-opml-amarok Name=Podcast Directory Name[bg]=Подкастове