1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-12 00:54:20 +02:00

Add capabilities support to ScriptResolver and QtScriptResolver.

This commit is contained in:
Teo Mrnjavac
2013-01-20 15:18:38 +01:00
parent 6138ea1605
commit 43ae736d61
8 changed files with 61 additions and 12 deletions

View File

@@ -79,6 +79,14 @@ Tomahawk.extend = function(object, members) {
};
var TomahawkResolverCapability = {
NullCapability: 0,
Browsable: 1,
PlaylistSync: 2,
AccountFactory: 4
};
// Resolver BaseObject, inherit it to implement your own resolver
var TomahawkResolver = {
init: function()
@@ -125,6 +133,10 @@ var TomahawkResolver = {
search: function( qid, searchString )
{
return this.resolve( qid, "", "", searchString );
},
capabilities: function()
{
return TomahawkResolverCapability.NullCapability;
}
};

View File

@@ -51,6 +51,16 @@ public:
FailedToLoad
};
enum Capability
{
NullCapability = 0x0,
Browsable = 0x1, // can be represented in one or more collection tree views
PlaylistSync = 0x2, // can sync playlists
AccountFactory = 0x4 // can configure multiple accounts at the same time
};
Q_DECLARE_FLAGS( Capabilities, Capability )
Q_FLAGS( Capabilities )
ExternalResolver( const QString& filePath ) { m_filePath = filePath; }
virtual QString filePath() const { return m_filePath; }
@@ -60,6 +70,7 @@ public:
virtual void reload() {} // Reloads from file (especially useful to check if file now exists)
virtual ErrorState error() const;
virtual bool running() const = 0;
virtual Capabilities capabilities() const = 0;
public slots:
virtual void start() = 0;
@@ -67,14 +78,19 @@ public slots:
signals:
void changed(); // if config widget was added/removed, name changed, etc
void collectionAdded( const Tomahawk::collection_ptr& collection );
void collectionRemoved( const Tomahawk::collection_ptr& collection );
protected:
void setFilePath( const QString& path ) { m_filePath = path; }
QList< Tomahawk::collection_ptr > m_collections;
private:
QString m_filePath;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( ExternalResolver::Capabilities )
}; //ns
#endif // EXTERNALESOLVER_H

View File

@@ -334,6 +334,13 @@ QtScriptResolver::init()
m_timeout = m.value( "timeout", 25 ).toUInt() * 1000;
bool compressed = m.value( "compressed", "false" ).toString() == "true";
bool ok = 0;
int intCap = m_engine->mainFrame()->evaluateJavaScript( "resolver.capabilities()" ).toInt( &ok );
if ( !ok )
m_capabilities = NullCapability;
else
m_capabilities = static_cast< Capabilities >( intCap );
QByteArray icoData = m.value( "icon" ).toByteArray();
if( compressed )
icoData = qUncompress( QByteArray::fromBase64( icoData ) );

View File

@@ -129,6 +129,8 @@ public:
virtual ~QtScriptResolver();
static ExternalResolver* factory( const QString& scriptPath );
virtual Capabilities capabilities() const { return m_capabilities; }
virtual QString name() const { return m_name; }
virtual QPixmap icon() const { return m_icon; }
virtual unsigned int weight() const { return m_weight; }
@@ -171,6 +173,7 @@ private:
QString m_name;
QPixmap m_icon;
unsigned int m_weight, m_timeout;
Capabilities m_capabilities;
bool m_ready, m_stopped;
ExternalResolver::ErrorState m_error;

View File

@@ -19,16 +19,20 @@
#include "ScriptCollection.h"
#include "Source.h"
using namespace Tomahawk;
ScriptCollection::ScriptCollection( const source_ptr& source,
const QString& name,
QtScriptResolver* resolver,
QObject* parent )
: Collection( source, name, parent )
: Collection( source, resolver->name(), parent )
{
Q_ASSERT( resolver != 0 );
qDebug() << Q_FUNC_INFO << resolver->name() << source->friendlyName();
m_resolver = resolver;
}

View File

@@ -36,14 +36,12 @@ class DLLEXPORT ScriptCollection : public Collection
public:
explicit ScriptCollection( const source_ptr& source,
const QString& name,
QtScriptResolver* resolver,
QObject* parent = 0 );
virtual ~ScriptCollection();
signals:
public slots:
private:
QtScriptResolver* m_resolver;
};

View File

@@ -380,6 +380,13 @@ ScriptResolver::doSetup( const QVariantMap& m )
m_timeout = m.value( "timeout", 5 ).toUInt() * 1000;
bool compressed = m.value( "compressed", "false" ).toString() == "true";
bool ok = 0;
int intCap = m.value( "capabilities" ).toInt( &ok );
if ( !ok )
m_capabilities = NullCapability;
else
m_capabilities = static_cast< Capabilities >( intCap );
QByteArray icoData = m.value( "icon" ).toByteArray();
if( compressed )
icoData = qUncompress( QByteArray::fromBase64( icoData ) );

View File

@@ -46,6 +46,7 @@ public:
virtual unsigned int weight() const { return m_weight; }
virtual unsigned int preference() const { return m_preference; }
virtual unsigned int timeout() const { return m_timeout; }
virtual Capabilities capabilities() const { return m_capabilities; }
virtual void setIcon( const QPixmap& icon );
@@ -87,6 +88,7 @@ private:
QString m_name;
QPixmap m_icon;
unsigned int m_weight, m_preference, m_timeout, m_num_restarts;
Capabilities m_capabilities;
QPointer< AccountConfigWidget > m_configWidget;
quint32 m_msgsize;