diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,10 +155,6 @@ find_package(ZLIB REQUIRED) set_package_properties( ZLIB PROPERTIES DESCRIPTION "zlib" TYPE REQUIRED ) - # QJson is required for the PlaydarCollection - find_package(QJSON) - set_package_properties( QJSON PROPERTIES DESCRIPTION "Qt JSON Parser used for the Playdar Collection" URL "http://qjson.sourceforge.net/" TYPE OPTIONAL ) - # We tell users that we need 1.0.3, but we really check just >= 1.0.0. This is because # upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-( # will be fixed in liblastfm-1.0.4 diff --git a/cmake/modules/FindQJSON.cmake b/cmake/modules/FindQJSON.cmake deleted file mode 100644 --- a/cmake/modules/FindQJSON.cmake +++ /dev/null @@ -1,42 +0,0 @@ -# Find QJSON - JSON handling library for Qt -# -# This module defines -# QJSON_FOUND - whether the qsjon library was found -# QJSON_LIBRARIES - the qjson library -# QJSON_INCLUDE_DIR - the include path of the qjson library -# - -if (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES) - - # Already in cache - set (QJSON_FOUND TRUE) - -else () - - if (NOT WIN32) - # use pkg-config to get the values of QJSON_INCLUDE_DIRS - # and QJSON_LIBRARY_DIRS to add as hints to the find commands. - include (FindPkgConfig) - pkg_check_modules (PC_QJSON QJson>=0.5) - endif () - - find_library (QJSON_LIBRARIES - NAMES - qjson - PATHS - ${PC_QJSON_LIBRARY_DIRS} - ${LIB_INSTALL_DIR} - ) - - find_path (QJSON_INCLUDE_DIR - NAMES - qjson/parser.h - PATHS - ${PC_QJSON_INCLUDE_DIRS} - ${INCLUDE_INSTALL_DIR} - ) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(QJSON DEFAULT_MSG QJSON_LIBRARIES QJSON_INCLUDE_DIR) - -endif () diff --git a/src/core-impl/collections/CMakeLists.txt b/src/core-impl/collections/CMakeLists.txt --- a/src/core-impl/collections/CMakeLists.txt +++ b/src/core-impl/collections/CMakeLists.txt @@ -14,10 +14,6 @@ add_subdirectory( mtpcollection ) add_subdirectory( umscollection ) add_subdirectory( db ) - -# only build playdarcollection if QJson was found -if( QJSON_FOUND ) - add_subdirectory( playdarcollection ) -endif() +add_subdirectory( playdarcollection ) add_subdirectory( upnpcollection ) #add_subdirectory( nepomukcollection ) diff --git a/src/core-impl/collections/playdarcollection/CMakeLists.txt b/src/core-impl/collections/playdarcollection/CMakeLists.txt --- a/src/core-impl/collections/playdarcollection/CMakeLists.txt +++ b/src/core-impl/collections/playdarcollection/CMakeLists.txt @@ -1,5 +1,3 @@ -include_directories( ${QJSON_INCLUDE_DIR} ) - set( amarok_collection-playdarcollection_PART_SRCS PlaydarMeta.cpp PlaydarCollection.cpp @@ -14,7 +12,6 @@ target_link_libraries( amarok_collection-playdarcollection amarokcore amaroklib - ${QJSON_LIBRARIES} KF5::ThreadWeaver KF5::KIOCore ) diff --git a/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp b/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp --- a/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp +++ b/src/core-impl/collections/playdarcollection/PlaydarCollection.cpp @@ -49,7 +49,6 @@ PlaydarCollectionFactory::~PlaydarCollectionFactory() { DEBUG_BLOCK - CollectionManager::instance()->removeTrackProvider( m_collection.data() ); delete m_collection.data(); delete m_controller; } diff --git a/src/core-impl/collections/playdarcollection/amarok_collection-playdarcollection.desktop b/src/core-impl/collections/playdarcollection/amarok_collection-playdarcollection.desktop --- a/src/core-impl/collections/playdarcollection/amarok_collection-playdarcollection.desktop +++ b/src/core-impl/collections/playdarcollection/amarok_collection-playdarcollection.desktop @@ -90,7 +90,7 @@ Comment[zh_CN]=Playdar 可找到的音乐 Comment[zh_TW]=Playdar 可以找到的音樂 -ServiceTypes=Amarok/Plugin-disabled +ServiceTypes=Amarok/Plugin X-KDE-Amarok-authors=Andrew Coder X-KDE-Amarok-email=andrew.coder@gmail.com diff --git a/src/core-impl/collections/playdarcollection/support/Controller.cpp b/src/core-impl/collections/playdarcollection/support/Controller.cpp --- a/src/core-impl/collections/playdarcollection/support/Controller.cpp +++ b/src/core-impl/collections/playdarcollection/support/Controller.cpp @@ -21,17 +21,19 @@ #include "Query.h" #include "core/support/Debug.h" -#include - -#include - +#include +#include +#include #include #include #include #include #include #include +#include + + namespace Playdar { Controller::Controller( bool queriesShouldWaitForSolutions ) @@ -139,24 +141,27 @@ debug() << "Processing received JSON data..."; KIO::StoredTransferJob* storedStatusJob = static_cast( statusJob ); - QVariant parsedStatusVariant; - - QJson::Parser parser; - bool ok; - parsedStatusVariant = parser.parse( storedStatusJob->data(),&ok ); - if ( !ok ) + QJsonParseError err; + auto doc = QJsonDocument::fromJson( storedStatusJob->data(), &err ); + + if ( err.error != QJsonParseError::NoError ) + debug() << "Error parsing JSON Data:" << err.errorString(); + + if( !doc.isObject() ) { - debug() << "Error parsing JSON Data"; + debug() << "Parsed Json data is not an object"; + return; } - QVariantMap parsedStatus = parsedStatusVariant.toMap(); + + auto object = doc.object(); - if( !parsedStatus.contains("name") ) + if( !object.contains("name") ) { debug() << "Expected a service name from Playdar, received none"; emit playdarError( Playdar::Controller::ErrorState( MissingServiceName ) ); return; } - if( parsedStatus.value("name") != QString( "playdar" ) ) + if( object.value("name").toString() != QStringLiteral( "playdar" ) ) { debug() << "Expected Playdar, got response from some other service"; emit playdarError( Playdar::Controller::ErrorState( WrongServiceName ) ); @@ -183,24 +188,28 @@ KIO::StoredTransferJob* storedQueryJob = static_cast( queryJob ); - QVariant parsedQueryVariant; - QJson::Parser parser; - bool ok; - parsedQueryVariant = parser.parse( storedQueryJob->data(),&ok ); - if ( !ok ) + QJsonParseError err; + auto doc = QJsonDocument::fromJson( storedQueryJob->data(), &err ); + + if ( err.error != QJsonParseError::NoError ) + debug() << "Error parsing JSON Data:" << err.errorString(); + + if( !doc.isObject() ) { - debug() << "Error parsing JSON Data"; + debug() << "Parsed Json data is not an object"; + return; } - - QVariantMap parsedQuery = parsedQueryVariant.toMap(); - if( !parsedQuery.contains( "qid" ) ) + + auto object = doc.object(); + + if( !object.contains( "qid" ) ) { debug() << "Expected qid in Playdar's response, but didn't get it"; emit playdarError( Playdar::Controller::ErrorState( MissingQid ) ); return; } - Query* query = new Query( parsedQuery.value( "qid" ).toString(), this, m_queriesShouldWaitForSolutions ); + Query* query = new Query( object.value( "qid" ).toString(), this, m_queriesShouldWaitForSolutions ); debug() << "All good! Emitting queryReady( Playdar::Query* )..."; emit queryReady( query ); diff --git a/src/core-impl/collections/playdarcollection/support/Query.cpp b/src/core-impl/collections/playdarcollection/support/Query.cpp --- a/src/core-impl/collections/playdarcollection/support/Query.cpp +++ b/src/core-impl/collections/playdarcollection/support/Query.cpp @@ -20,16 +20,19 @@ #include "../PlaydarMeta.h" #include "core/support/Debug.h" -#include - -#include -#include - +#include +#include +#include +#include +#include #include +#include #include -#include #include +#include + + namespace Playdar { Query::Query( const QString &qid, @@ -124,42 +127,46 @@ debug() << "Processing received JSON data..."; KIO::StoredTransferJob* storedResultsJob = static_cast( resultsJob ); - QJson::Parser parser; - bool ok; - QVariant parsedResultsVariant; - parsedResultsVariant = parser.parse( storedResultsJob->data(),&ok ); - if ( !ok ) + QJsonParseError err; + auto doc = QJsonDocument::fromJson( storedResultsJob->data(), &err ); + + if ( err.error != QJsonParseError::NoError ) + debug() << "Error parsing JSON Data:" << err.errorString(); + + if( !doc.isObject() ) { - debug() << "Error parsing JSON Data"; + debug() << "Parsed Json data is not an object"; + return; } - - QVariantMap parsedResults = parsedResultsVariant.toMap(); - if( !parsedResults.contains( "results" ) ) + + auto object = doc.object(); + + if( !object.contains( "results" ) ) { debug() << "Expecting results in Playdar's response, received none"; emit playdarError( Playdar::Controller::ErrorState( 6 ) ); return; } - if( !parsedResults.contains( "qid" ) ) + if( !object.contains( "qid" ) ) { debug() << "Expected qid in Playdar's response, received none"; emit playdarError( Playdar::Controller::ErrorState( 4 ) ); return; } - if( parsedResults.value( "qid" ) != m_qid ) + if( object.value( "qid" ) != m_qid ) { debug() << "A query received the wrong results from Playdar..."; emit playdarError( Playdar::Controller::ErrorState( 5 ) ); return; } - m_artist = parsedResults.value( "artist" ).toString(); - m_album = parsedResults.value( "album" ).toString(); - m_title = parsedResults.value( "track" ).toString(); + m_artist = object.value( "artist" ).toString(); + m_album = object.value( "album" ).toString(); + m_title = object.value( "track" ).toString(); - foreach( const QVariant &resultVariant, parsedResults.value( "results" ).toList() ) + for( const auto &resultVariant : object.value( "results" ).toArray() ) { - QVariantMap result = resultVariant.toMap(); + auto result = resultVariant.toObject(); Meta::PlaydarTrackPtr aTrack; QUrl resultUrl( m_controller->urlForSid( result.value( "sid" ).toString() ) );