From 6a87492c0731b9592d2b554bd13c67a6e8922531 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Mon, 1 Dec 2014 18:27:24 +0100 Subject: [PATCH] Handle generic JS object serialization in JSPlugin --- src/libtomahawk/resolvers/JSInfoPlugin.cpp | 10 +-------- src/libtomahawk/resolvers/JSPlugin.cpp | 25 ++++++++++++++++++++++ src/libtomahawk/resolvers/JSResolver.h | 3 +++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/libtomahawk/resolvers/JSInfoPlugin.cpp b/src/libtomahawk/resolvers/JSInfoPlugin.cpp index f18ae105d..857033d33 100644 --- a/src/libtomahawk/resolvers/JSInfoPlugin.cpp +++ b/src/libtomahawk/resolvers/JSInfoPlugin.cpp @@ -221,12 +221,6 @@ JSInfoPlugin::serializeQVariantMap( const QVariantMap& map ) { QVariant currentVariant = localMap[ key ]; - // strip unserializable types - at least QJson needs this, check with QtJson - if( currentVariant.canConvert() ) - { - localMap.remove( key ); - } - // convert InfoStringHash to QVariantMap if( currentVariant.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -235,9 +229,7 @@ JSInfoPlugin::serializeQVariantMap( const QVariantMap& map ) } } - QByteArray serialized = TomahawkUtils::toJson( localMap ); - - return QString( "JSON.parse('%1')" ).arg( JSPlugin::escape( QString::fromUtf8( serialized ) ) ); + return JSPlugin::serializeQVariantMap( localMap ); } diff --git a/src/libtomahawk/resolvers/JSPlugin.cpp b/src/libtomahawk/resolvers/JSPlugin.cpp index 1c03fe939..2bcd5ce4b 100644 --- a/src/libtomahawk/resolvers/JSPlugin.cpp +++ b/src/libtomahawk/resolvers/JSPlugin.cpp @@ -17,6 +17,9 @@ */ #include "JSResolver.h" + +#include "../utils/Json.h" + #include @@ -27,3 +30,25 @@ JSPlugin::addToJavaScriptWindowObject( const QString& name, QObject* object ) { m_engine->mainFrame()->addToJavaScriptWindowObject( name, object ); } + + +QString +JSPlugin::serializeQVariantMap( const QVariantMap& map ) +{ + QVariantMap localMap = map; + + foreach( const QString& key, localMap.keys() ) + { + QVariant currentVariant = localMap[ key ]; + + // strip unserializable types - at least QJson needs this, check with QtJson + if( currentVariant.canConvert() ) + { + localMap.remove( key ); + } + } + + QByteArray serialized = TomahawkUtils::toJson( localMap ); + + return QString( "JSON.parse('%1')" ).arg( JSPlugin::escape( QString::fromUtf8( serialized ) ) ); +} diff --git a/src/libtomahawk/resolvers/JSResolver.h b/src/libtomahawk/resolvers/JSResolver.h index b90c5215d..e668ad859 100644 --- a/src/libtomahawk/resolvers/JSResolver.h +++ b/src/libtomahawk/resolvers/JSResolver.h @@ -77,6 +77,9 @@ public: void loadScript( const QString& path ); void loadScripts( const QStringList& paths ); void addToJavaScriptWindowObject( const QString& name, QObject* object ); + + static QString serializeQVariantMap(const QVariantMap& map); + private: /** * Wrap the pure evaluateJavaScript call in here, while the threadings guards are in public methods