From f75d91f6adbe9361808c7628260251863d49c15c Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Tue, 15 Apr 2014 16:47:21 +0100 Subject: [PATCH] Add simple Qt5-based qvariant2qobject variant --- src/libtomahawk/SourceList.cpp | 6 ++-- src/libtomahawk/database/Database.cpp | 2 +- .../DatabaseCommand_SetPlaylistRevision.cpp | 2 +- .../playlist/dynamic/DynamicPlaylist.cpp | 2 +- src/libtomahawk/utils/TomahawkUtils.cpp | 29 +++++++++++++++++++ src/libtomahawk/utils/TomahawkUtils.h | 1 + 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/libtomahawk/SourceList.cpp b/src/libtomahawk/SourceList.cpp index 4c2c8c828..1eecf1895 100644 --- a/src/libtomahawk/SourceList.cpp +++ b/src/libtomahawk/SourceList.cpp @@ -30,8 +30,6 @@ #include "utils/Logger.h" -#include - using namespace Tomahawk; SourceList* SourceList::s_instance = 0; @@ -225,7 +223,7 @@ void SourceList::createPlaylist( const Tomahawk::source_ptr& src, const QVariant& contents ) { Tomahawk::playlist_ptr p = Tomahawk::playlist_ptr( new Tomahawk::Playlist( src ) ); - QJson::QObjectHelper::qvariant2qobject( contents.toMap(), p.data() ); + TomahawkUtils::qvariant2qobject( contents.toMap(), p.data() ); p->reportCreated( p ); } @@ -234,7 +232,7 @@ void SourceList::createDynamicPlaylist( const Tomahawk::source_ptr& src, const QVariant& contents ) { Tomahawk::dynplaylist_ptr p = Tomahawk::dynplaylist_ptr( new Tomahawk::DynamicPlaylist( src, contents.toMap().value( "type", QString() ).toString() ) ); - QJson::QObjectHelper::qvariant2qobject( contents.toMap(), p.data() ); + TomahawkUtils::qvariant2qobject( contents.toMap(), p.data() ); p->reportCreated( p ); } diff --git a/src/libtomahawk/database/Database.cpp b/src/libtomahawk/database/Database.cpp index b7613448c..41b824029 100644 --- a/src/libtomahawk/database/Database.cpp +++ b/src/libtomahawk/database/Database.cpp @@ -345,7 +345,7 @@ Database::createCommandInstance(const QVariant& op, const source_ptr& source) return command; command->setSource( source ); - QJson::QObjectHelper::qvariant2qobject( op.toMap(), command.data() ); + TomahawkUtils::qvariant2qobject( op.toMap(), command.data() ); return command; } diff --git a/src/libtomahawk/database/DatabaseCommand_SetPlaylistRevision.cpp b/src/libtomahawk/database/DatabaseCommand_SetPlaylistRevision.cpp index 2a84af189..9448075ee 100644 --- a/src/libtomahawk/database/DatabaseCommand_SetPlaylistRevision.cpp +++ b/src/libtomahawk/database/DatabaseCommand_SetPlaylistRevision.cpp @@ -284,7 +284,7 @@ DatabaseCommand_SetPlaylistRevision::setAddedentriesV( const QVariantList& vlist foreach( const QVariant& v, vlist ) { PlaylistEntry* pep = new PlaylistEntry; - QJson::QObjectHelper::qvariant2qobject( v.toMap(), pep ); + TomahawkUtils::qvariant2qobject( v.toMap(), pep ); if ( pep->isValid() ) m_addedentries << plentry_ptr( pep ); diff --git a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp index cee65dc58..d40c6c3c5 100644 --- a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp +++ b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp @@ -556,7 +556,7 @@ DynamicPlaylist::variantsToControl( const QList< QVariantMap >& controlsV ) // qDebug() << "Creating control with data:" << controlV; if ( control ) { - QJson::QObjectHelper::qvariant2qobject( controlV, control.data() ); + TomahawkUtils::qvariant2qobject( controlV, control.data() ); realControls << control; } } diff --git a/src/libtomahawk/utils/TomahawkUtils.cpp b/src/libtomahawk/utils/TomahawkUtils.cpp index 11bee026e..fdfbbe956 100644 --- a/src/libtomahawk/utils/TomahawkUtils.cpp +++ b/src/libtomahawk/utils/TomahawkUtils.cpp @@ -60,6 +60,8 @@ #include #else #include + #include + #include #endif #ifdef Q_OS_WIN @@ -846,6 +848,33 @@ compareVersionStrings( const QString& first, const QString& second ) } +void +qvariant2qobject( const QVariantMap& variant, QObject* object ) +{ +#if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) + for ( QVariantMap::const_iterator iter = variant.begin(); iter != variant.end(); ++iter ) + { + QVariant property = object->property( iter.key().toLatin1() ); + QVariant value = iter.value(); + Q_ASSERT( property.isValid() ); + if ( property.isValid() ) + { + if ( value.canConvert( property.type() ) ) + { + value.convert( property.type() ); + object->setProperty( iter.key().toLatin1(), value ); + } else if ( QString( QLatin1String("QVariant") ).compare( QLatin1String( property.typeName() ) ) == 0 ) { + object->setProperty( iter.key().toLatin1(), value ); + } + } + } +#else + QJson::QObjectHelper::qvariant2qobject( variant, objects ); +#endif + +} + + QVariant parseJson( const QByteArray& jsonData, bool* ok ) { diff --git a/src/libtomahawk/utils/TomahawkUtils.h b/src/libtomahawk/utils/TomahawkUtils.h index 9962cdad7..3c807b587 100644 --- a/src/libtomahawk/utils/TomahawkUtils.h +++ b/src/libtomahawk/utils/TomahawkUtils.h @@ -208,6 +208,7 @@ namespace TomahawkUtils */ /* QJson */ + DLLEXPORT void qvariant2qobject( const QVariantMap& variant, QObject* object ); DLLEXPORT QVariant parseJson( const QByteArray& jsonData, bool* ok = 0 ); DLLEXPORT QByteArray toJson( const QVariant &variant, bool* ok = 0 );