1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-18 23:09:42 +01:00

Handle generic JS object serialization in JSPlugin

This commit is contained in:
Dominik Schmidt 2014-12-01 18:27:24 +01:00
parent 67fde57345
commit 6a87492c07
3 changed files with 29 additions and 9 deletions

View File

@ -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<QImage>() )
{
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 );
}

View File

@ -17,6 +17,9 @@
*/
#include "JSResolver.h"
#include "../utils/Json.h"
#include <QWebFrame>
@ -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<QImage>() )
{
localMap.remove( key );
}
}
QByteArray serialized = TomahawkUtils::toJson( localMap );
return QString( "JSON.parse('%1')" ).arg( JSPlugin::escape( QString::fromUtf8( serialized ) ) );
}

View File

@ -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