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

Port ScriptInfoPlugins to ScriptPluginFactory

This commit is contained in:
Dominik Schmidt 2015-01-10 02:39:59 +01:00
parent dfbd7660d0
commit 893a0df845
5 changed files with 101 additions and 11 deletions

@ -84,7 +84,6 @@ set( libGuiSources
resolvers/ExternalResolverGui.cpp
resolvers/ScriptResolver.cpp
resolvers/ScriptInfoPlugin.cpp
resolvers/JSResolver.cpp
resolvers/JSResolverHelper.cpp
resolvers/ScriptEngine.cpp
@ -356,6 +355,9 @@ list(APPEND libSources
# ScriptPlugins
resolvers/ScriptCollection.cpp
resolvers/plugins/ScriptCollectionFactory.cpp
resolvers/ScriptInfoPlugin.cpp
resolvers/plugins/ScriptInfoPluginFactory.cpp
sip/SipPlugin.cpp
sip/SipInfo.cpp

@ -23,6 +23,7 @@
#include "../Typedefs.h"
#include "plugins/ScriptCollectionFactory.h"
#include "plugins/ScriptInfoPluginFactory.h"
// TODO: register factory methods instead of hardcoding all plugin types in here
#include "../utils/LinkGenerator.h"
@ -43,6 +44,7 @@ ScriptAccount::ScriptAccount( const QString& name )
, m_name( name )
, m_stopped( false )
, m_collectionFactory( new ScriptCollectionFactory() )
, m_infoPluginFactory( new ScriptInfoPluginFactory() )
{
}
@ -50,6 +52,7 @@ ScriptAccount::ScriptAccount( const QString& name )
ScriptAccount::~ScriptAccount()
{
delete m_collectionFactory;
delete m_infoPluginFactory;
}
@ -193,6 +196,10 @@ ScriptAccount::unregisterScriptPlugin( const QString& type, const QString& objec
{
m_collectionFactory->unregisterPlugin( object );
}
else if ( type == "infoPlugin" )
{
m_infoPluginFactory->unregisterPlugin( object );
}
else
{
tLog() << "This plugin type is not handled by Tomahawk or simply cannot be removed yet";
@ -226,15 +233,7 @@ ScriptAccount::scriptPluginFactory( const QString& type, const scriptobject_ptr&
}
else if ( type == "infoPlugin" )
{
// create infoplugin instance
ScriptInfoPlugin* scriptInfoPlugin = new ScriptInfoPlugin( object, m_name );
Tomahawk::InfoSystem::InfoPluginPtr infoPlugin( scriptInfoPlugin );
// move it to infosystem thread
infoPlugin->moveToThread( Tomahawk::InfoSystem::InfoSystem::instance()->workerThread().data() );
// add it to infosystem
Tomahawk::InfoSystem::InfoSystem::instance()->addInfoPlugin( infoPlugin );
m_infoPluginFactory->registerPlugin( object, this );
}
else if( type == "collection" )
{

@ -39,6 +39,7 @@ namespace Tomahawk {
class ScriptObject;
class ScriptJob;
class ScriptCollectionFactory;
class ScriptInfoPluginFactory;
class DLLEXPORT ScriptAccount : public QObject
{
@ -89,7 +90,9 @@ private: // TODO: pimple, might be renamed before tho
QHash< QString, ScriptJob* > m_jobs;
QHash< QString, scriptobject_ptr > m_objects;
ScriptCollectionFactory* m_collectionFactory; // port to QScopedPointer when pimple'd
// port to QScopedPointer when pimple'd
ScriptCollectionFactory* m_collectionFactory;
ScriptInfoPluginFactory* m_infoPluginFactory;
};
} // ns: Tomahawk

@ -0,0 +1,46 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright (C) 2015 Dominik Schmidt <domme@tomahawk-player.org>
*
* Tomahawk is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* Tomahawk is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScriptInfoPluginFactory.h"
#include "SourceList.h"
#include "../ScriptAccount.h"
using namespace Tomahawk;
void ScriptInfoPluginFactory::addPlugin( const QSharedPointer< ScriptInfoPlugin >& infoPlugin ) const
{
Tomahawk::InfoSystem::InfoSystem::instance()->addInfoPlugin( infoPlugin.data() );
}
void ScriptInfoPluginFactory::removePlugin( const QSharedPointer< ScriptInfoPlugin >& infoPlugin ) const
{
Tomahawk::InfoSystem::InfoSystem::instance()->removeInfoPlugin( infoPlugin.data() );
}
const QSharedPointer< ScriptInfoPlugin > ScriptInfoPluginFactory::createPlugin( const scriptobject_ptr& object, ScriptAccount* scriptAccount )
{
// create infoplugin instance
ScriptInfoPlugin* scriptInfoPlugin = new ScriptInfoPlugin( object, scriptAccount->name() );
Tomahawk::InfoSystem::InfoPluginPtr infoPlugin( scriptInfoPlugin );
// move it to infosystem thread
infoPlugin->moveToThread( Tomahawk::InfoSystem::InfoSystem::instance()->workerThread().data() );
return QSharedPointer< ScriptInfoPlugin >( scriptInfoPlugin );
}

@ -0,0 +1,40 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright (C) 2015 Dominik Schmidt <domme@tomahawk-player.org>
*
* Tomahawk is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* Tomahawk is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef TOMAHAWK_SCRIPTINFOPLUGINFACTORY_H
#define TOMAHAWK_SCRIPTINFOPLUGINFACTORY_H
#include "Typedefs.h"
#include "../ScriptPluginFactory.h"
#include "../ScriptInfoPlugin.h"
namespace Tomahawk
{
class ScriptAccount;
class DLLEXPORT ScriptInfoPluginFactory : public ScriptPluginFactory< ScriptInfoPlugin >
{
const QSharedPointer< ScriptInfoPlugin > createPlugin( const scriptobject_ptr&, ScriptAccount* ) override;
void addPlugin( const QSharedPointer< ScriptInfoPlugin >& scriptPlugin ) const override;
void removePlugin( const QSharedPointer< ScriptInfoPlugin >& scriptPlugin ) const override;
};
} // ns: Tomahawk
#endif // TOMAHAWK_SCRIPTINFOPLUGINFACTORY_H