mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-11 16:44:05 +02:00
Some minor work on infosystem
This commit is contained in:
@@ -107,15 +107,18 @@ public:
|
|||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void getInfo( const QString &caller, const InfoType type, const QVariant &data, Tomahawk::InfoSystem::InfoCustomDataHash customData ) = 0;
|
virtual void getInfo( const QString &caller, const InfoType type, const QVariant &data, InfoCustomDataHash customData ) = 0;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void info( QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
void info( QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
||||||
void getCachedInfo( QHash< QString, QString > criteria, QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
void getCachedInfo( QHash< QString, QString > criteria, QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
||||||
void finished( QString, Tomahawk::InfoSystem::InfoType );
|
void finished( QString, Tomahawk::InfoSystem::InfoType );
|
||||||
|
|
||||||
//public slots:
|
public slots:
|
||||||
//void notInCacheSlot( QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData ) = 0;
|
//FIXME: Make pure virtual when everything supports it
|
||||||
|
void notInCacheSlot( QHash<QString, QString> criteria, QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
InfoType m_type;
|
InfoType m_type;
|
||||||
@@ -145,7 +148,7 @@ signals:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void infoSlot( QString target, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
void infoSlot( QString target, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
||||||
void finishedSlot( QString target,Tomahawk::InfoSystem::InfoType type);
|
void finishedSlot( QString target, Tomahawk::InfoSystem::InfoType type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QLinkedList< InfoPluginPtr > determineOrderedMatches( const InfoType type ) const;
|
QLinkedList< InfoPluginPtr > determineOrderedMatches( const InfoType type ) const;
|
||||||
@@ -155,7 +158,7 @@ private:
|
|||||||
// For now, statically instantiate plugins; this is just somewhere to keep them
|
// For now, statically instantiate plugins; this is just somewhere to keep them
|
||||||
QLinkedList< InfoPluginPtr > m_plugins;
|
QLinkedList< InfoPluginPtr > m_plugins;
|
||||||
|
|
||||||
QHash< QString, QHash< Tomahawk::InfoSystem::InfoType, int > > m_dataTracker;
|
QHash< QString, QHash< InfoType, int > > m_dataTracker;
|
||||||
|
|
||||||
InfoSystemCache* m_cache;
|
InfoSystemCache* m_cache;
|
||||||
QThread* m_infoSystemCacheThreadController;
|
QThread* m_infoSystemCacheThreadController;
|
||||||
|
@@ -25,7 +25,11 @@
|
|||||||
#include "infoplugins/musixmatchplugin.h"
|
#include "infoplugins/musixmatchplugin.h"
|
||||||
#include "infoplugins/lastfmplugin.h"
|
#include "infoplugins/lastfmplugin.h"
|
||||||
|
|
||||||
using namespace Tomahawk::InfoSystem;
|
namespace Tomahawk
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace InfoSystem
|
||||||
|
{
|
||||||
|
|
||||||
InfoPlugin::InfoPlugin(QObject *parent)
|
InfoPlugin::InfoPlugin(QObject *parent)
|
||||||
:QObject( parent )
|
:QObject( parent )
|
||||||
@@ -33,10 +37,11 @@ InfoPlugin::InfoPlugin(QObject *parent)
|
|||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
InfoSystem *system = qobject_cast< InfoSystem* >( parent );
|
InfoSystem *system = qobject_cast< InfoSystem* >( parent );
|
||||||
if( system )
|
if( system )
|
||||||
QObject::connect( system->getCache(),
|
QObject::connect(
|
||||||
SIGNAL( notInCache( QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) ),
|
system->getCache(),
|
||||||
|
SIGNAL( notInCache( QHash< QString, QString >, QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) ),
|
||||||
this,
|
this,
|
||||||
SLOT( notInCacheSlot( QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) )
|
SLOT( notInCacheSlot( QHash< QString, QString >, QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,7 +54,7 @@ InfoSystem::InfoSystem(QObject *parent)
|
|||||||
qRegisterMetaType<QHash<QString, QVariant > >("Tomahawk::InfoSystem::InfoCustomDataHash");
|
qRegisterMetaType<QHash<QString, QVariant > >("Tomahawk::InfoSystem::InfoCustomDataHash");
|
||||||
|
|
||||||
m_infoSystemCacheThreadController = new QThread( this );
|
m_infoSystemCacheThreadController = new QThread( this );
|
||||||
m_cache = new Tomahawk::InfoSystem::InfoSystemCache();
|
m_cache = new InfoSystemCache();
|
||||||
m_cache->moveToThread( m_infoSystemCacheThreadController );
|
m_cache->moveToThread( m_infoSystemCacheThreadController );
|
||||||
m_infoSystemCacheThreadController->start( QThread::IdlePriority );
|
m_infoSystemCacheThreadController->start( QThread::IdlePriority );
|
||||||
|
|
||||||
@@ -59,6 +64,18 @@ InfoSystem::InfoSystem(QObject *parent)
|
|||||||
m_plugins.append(mmptr);
|
m_plugins.append(mmptr);
|
||||||
InfoPluginPtr lfmptr(new LastFmPlugin(this));
|
InfoPluginPtr lfmptr(new LastFmPlugin(this));
|
||||||
m_plugins.append(lfmptr);
|
m_plugins.append(lfmptr);
|
||||||
|
|
||||||
|
Q_FOREACH( InfoPluginPtr plugin, m_plugins )
|
||||||
|
{
|
||||||
|
connect(plugin.data(), SIGNAL(info(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)),
|
||||||
|
this, SLOT(infoSlot(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)), Qt::UniqueConnection);
|
||||||
|
connect(plugin.data(), SIGNAL(finished(QString, Tomahawk::InfoSystem::InfoType)),
|
||||||
|
this, SLOT(finishedSlot(QString, Tomahawk::InfoSystem::InfoType)), Qt::UniqueConnection);
|
||||||
|
}
|
||||||
|
connect(m_cache, SIGNAL(info(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)),
|
||||||
|
this, SLOT(infoSlot(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)), Qt::UniqueConnection);
|
||||||
|
connect(m_cache, SIGNAL(finished(QString, Tomahawk::InfoSystem::InfoType)),
|
||||||
|
this, SLOT(finishedSlot(QString, Tomahawk::InfoSystem::InfoType)), Qt::UniqueConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoSystem::~InfoSystem()
|
InfoSystem::~InfoSystem()
|
||||||
@@ -114,7 +131,7 @@ void InfoSystem::getInfo(const QString &caller, const InfoType type, const QVari
|
|||||||
QLinkedList< InfoPluginPtr > providers = determineOrderedMatches(type);
|
QLinkedList< InfoPluginPtr > providers = determineOrderedMatches(type);
|
||||||
if (providers.isEmpty())
|
if (providers.isEmpty())
|
||||||
{
|
{
|
||||||
emit info(QString(), Tomahawk::InfoSystem::InfoNoInfo, QVariant(), QVariant(), customData);
|
emit info(QString(), InfoNoInfo, QVariant(), QVariant(), customData);
|
||||||
emit finished(caller);
|
emit finished(caller);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -122,17 +139,13 @@ void InfoSystem::getInfo(const QString &caller, const InfoType type, const QVari
|
|||||||
InfoPluginPtr ptr = providers.first();
|
InfoPluginPtr ptr = providers.first();
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
{
|
{
|
||||||
emit info(QString(), Tomahawk::InfoSystem::InfoNoInfo, QVariant(), QVariant(), customData);
|
emit info(QString(), InfoNoInfo, QVariant(), QVariant(), customData);
|
||||||
emit finished(caller);
|
emit finished(caller);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dataTracker[caller][type] = m_dataTracker[caller][type] + 1;
|
m_dataTracker[caller][type] = m_dataTracker[caller][type] + 1;
|
||||||
qDebug() << "current count in dataTracker for type" << type << "is" << m_dataTracker[caller][type];
|
qDebug() << "current count in dataTracker for type" << type << "is" << m_dataTracker[caller][type];
|
||||||
connect(ptr.data(), SIGNAL(info(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)),
|
|
||||||
this, SLOT(infoSlot(QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash)), Qt::UniqueConnection);
|
|
||||||
connect(ptr.data(), SIGNAL(finished(QString, Tomahawk::InfoSystem::InfoType)),
|
|
||||||
this, SLOT(finishedSlot(QString, Tomahawk::InfoSystem::InfoType)), Qt::UniqueConnection);
|
|
||||||
ptr.data()->getInfo(caller, type, data, customData);
|
ptr.data()->getInfo(caller, type, data, customData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +155,7 @@ void InfoSystem::getInfo(const QString &caller, const InfoMap &input, InfoCustom
|
|||||||
getInfo(caller, type, input[type], customData);
|
getInfo(caller, type, input[type], customData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfoSystem::infoSlot(QString target, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData)
|
void InfoSystem::infoSlot(QString target, InfoType type, QVariant input, QVariant output, InfoCustomDataHash customData)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
qDebug() << "current count in dataTracker is " << m_dataTracker[target][type];
|
qDebug() << "current count in dataTracker is " << m_dataTracker[target][type];
|
||||||
@@ -154,12 +167,12 @@ void InfoSystem::infoSlot(QString target, Tomahawk::InfoSystem::InfoType type, Q
|
|||||||
emit info(target, type, input, output, customData);
|
emit info(target, type, input, output, customData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfoSystem::finishedSlot(QString target, Tomahawk::InfoSystem::InfoType type)
|
void InfoSystem::finishedSlot(QString target, InfoType type)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
m_dataTracker[target][type] = m_dataTracker[target][type] - 1;
|
m_dataTracker[target][type] = m_dataTracker[target][type] - 1;
|
||||||
qDebug() << "current count in dataTracker is " << m_dataTracker[target][type];
|
qDebug() << "current count in dataTracker is " << m_dataTracker[target][type];
|
||||||
Q_FOREACH(Tomahawk::InfoSystem::InfoType testtype, m_dataTracker[target].keys())
|
Q_FOREACH(InfoType testtype, m_dataTracker[target].keys())
|
||||||
{
|
{
|
||||||
if (m_dataTracker[target][testtype] != 0)
|
if (m_dataTracker[target][testtype] != 0)
|
||||||
{
|
{
|
||||||
@@ -170,3 +183,7 @@ void InfoSystem::finishedSlot(QString target, Tomahawk::InfoSystem::InfoType typ
|
|||||||
qDebug() << "emitting finished with target" << target;
|
qDebug() << "emitting finished with target" << target;
|
||||||
emit finished(target);
|
emit finished(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} //namespace InfoSystem
|
||||||
|
|
||||||
|
} //namespace Tomahawk
|
@@ -22,6 +22,8 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
|
#include "tomahawk/infosystem.h"
|
||||||
|
|
||||||
namespace Tomahawk
|
namespace Tomahawk
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -44,6 +46,11 @@ public:
|
|||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void notInCache( QHash< QString, QString > criteria, QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
||||||
|
void info( QString caller, Tomahawk::InfoSystem::InfoType type, QVariant input, QVariant output, Tomahawk::InfoSystem::InfoCustomDataHash customData );
|
||||||
|
void finished( QString, Tomahawk::InfoSystem::InfoType );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} //namespace InfoSystem
|
} //namespace InfoSystem
|
||||||
|
Reference in New Issue
Block a user