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

Merge branch 'binaryghns' of github.com:lfranchi/tomahawk into binaryghns

This commit is contained in:
Leo Franchi 2012-05-15 18:09:50 -04:00
commit d60b8bda3e
4 changed files with 133 additions and 30 deletions

View File

@ -26,6 +26,7 @@
#include "resolvers/ScriptResolver.h"
#include "utils/TomahawkUtils.h"
#include "ActionCollection.h"
#include "Pipeline.h"
#ifndef ENABLE_HEADLESS
#include "jobview/JobStatusView.h"
@ -51,21 +52,6 @@ SpotifyAccountFactory::createAccount( const QString& accountId )
}
bool
SpotifyAccountFactory::acceptsPath( const QString& path ) const
{
QFileInfo info( path );
return info.baseName().startsWith( "spotify_" );
}
Account*
SpotifyAccountFactory::createFromPath( const QString& path )
{
return new SpotifyAccount( generateId( factoryId() ), path );
}
QPixmap
SpotifyAccountFactory::icon() const
{
@ -77,14 +63,7 @@ SpotifyAccountFactory::icon() const
SpotifyAccount::SpotifyAccount( const QString& accountId )
: ResolverAccount( accountId )
{
init();
}
SpotifyAccount::SpotifyAccount( const QString& accountId, const QString& path )
: ResolverAccount( accountId, path )
: CustomAtticaAccount( accountId )
{
init();
}
@ -101,8 +80,36 @@ SpotifyAccount::init()
{
qRegisterMetaType< Tomahawk::Accounts::SpotifyPlaylistInfo* >( "Tomahawk::Accounts::SpotifyPlaylist*" );
m_spotifyResolver = dynamic_cast< ScriptResolver* >( m_resolver.data() );
AtticaManager::instance()->registerCustomAccount( "spotify", this );
connect( AtticaManager::instance(), SIGNAL( resolverInstalled( QString ) ), this, SLOT( resolverInstalled( QString ) ) );
const Attica::Content res = AtticaManager::instance()->resolverForId( "spotify" );
const AtticaManager::ResolverState state = AtticaManager::instance()->resolverState( res );
if ( state == AtticaManager::Installed )
{
hookupResolver();
}
}
void
SpotifyAccount::hookupResolver()
{
// initialize the resolver itself. this is called if the account actually has an installed spotify resolver,
// as it might not.
// If there is a last.fm resolver from attica installed, create the corresponding ExternalResolver* and hook up to it
const Attica::Content res = AtticaManager::instance()->resolverForId( "spotify" );
const AtticaManager::ResolverState state = AtticaManager::instance()->resolverState( res );
Q_ASSERT( state == AtticaManager::Installed );
Q_UNUSED( state );
const AtticaManager::Resolver data = AtticaManager::instance()->resolverData( res.id() );
m_spotifyResolver = QWeakPointer< ScriptResolver >( qobject_cast< ScriptResolver* >( Pipeline::instance()->addScriptResolver( data.scriptPath, enabled() ) ) );
connect( m_spotifyResolver.data(), SIGNAL( changed() ), this, SLOT( resolverChanged() ) );
connect( m_spotifyResolver.data(), SIGNAL( customMessage( QString,QVariantMap ) ), this, SLOT( resolverMessage( QString, QVariantMap ) ) );
const bool hasMigrated = configuration().value( "hasMigrated" ).toBool();
@ -113,6 +120,94 @@ SpotifyAccount::init()
msg[ "_msgtype" ] = "getCredentials";
m_spotifyResolver.data()->sendMessage( msg );
}
}
void
SpotifyAccount::resolverChanged()
{
setAccountFriendlyName( m_spotifyResolver.data()->name() );
emit connectionStateChanged( connectionState() );
}
Attica::Content
SpotifyAccount::atticaContent() const
{
return AtticaManager::instance()->resolverForId( "spotify" );
}
void
SpotifyAccount::authenticate()
{
if ( !AtticaManager::instance()->resolversLoaded() )
{
// If we're still waiting to load, wait for the attica resolvers to come down the pipe
connect( AtticaManager::instance(), SIGNAL( resolversLoaded( Attica::Content::List ) ), this, SLOT( atticaLoaded( Attica::Content::List ) ), Qt::UniqueConnection );
return;
}
const Attica::Content res = AtticaManager::instance()->resolverForId( "spotify" );
const AtticaManager::ResolverState state = AtticaManager::instance()->resolverState( res );
qDebug() << "Spotify account authenticating...";
if ( m_spotifyResolver.isNull() && state == AtticaManager::Installed )
{
// We don;t have the resolver but it has been installed via attica already, so lets just turn it on
hookupResolver();
}
else if ( m_spotifyResolver.isNull() )
{
qDebug() << "Got null resolver but asked to authenticate, so installing if we have one from attica:" << res.isValid() << res.id();
if ( res.isValid() && !res.id().isEmpty() )
AtticaManager::instance()->installResolver( res, false );
}
else
{
m_spotifyResolver.data()->start();
}
emit connectionStateChanged( connectionState() );
}
void
SpotifyAccount::deauthenticate()
{
if ( !m_spotifyResolver.isNull() && m_spotifyResolver.data()->running() )
m_spotifyResolver.data()->stop();
emit connectionStateChanged( connectionState() );
}
bool
SpotifyAccount::isAuthenticated() const
{
return !m_spotifyResolver.isNull() && m_spotifyResolver.data()->running();
}
Account::ConnectionState
SpotifyAccount::connectionState() const
{
return (!m_spotifyResolver.isNull() && m_spotifyResolver.data()->running()) ? Account::Connected : Account::Disconnected;
}
void
SpotifyAccount::resolverInstalled(const QString& resolverId)
{
}
void
SpotifyAccount::atticaLoaded( Attica::Content::List )
{
}

View File

@ -22,6 +22,7 @@
#include "accounts/ResolverAccount.h"
#include "SourceList.h"
#include "AtticaManager.h"
#include "Playlist.h"
#include "utils/TomahawkUtils.h"
#include "utils/SmartPointerList.h"
@ -61,9 +62,6 @@ public:
virtual QString factoryId() const { return "spotifyaccount"; }
virtual QString prettyName() const { return "Spotify"; }
virtual bool acceptsPath( const QString& path ) const;
virtual Account* createFromPath( const QString& path );
virtual AccountTypes types() const { return AccountTypes( ResolverType ); }
virtual bool allowUserCreation() const { return false; }
virtual QPixmap icon() const;
@ -71,7 +69,7 @@ public:
};
class SpotifyAccount : public ResolverAccount
class SpotifyAccount : public CustomAtticaAccount
{
Q_OBJECT
public:
@ -83,6 +81,11 @@ public:
virtual QWidget* configurationWidget();
virtual QWidget* aboutWidget();
virtual void saveConfig();
virtual Attica::Content atticaContent() const;
virtual void authenticate();
virtual ConnectionState connectionState() const;
virtual bool isAuthenticated() const;
virtual void deauthenticate();
virtual QWidget* aclWidget() { return 0; }
virtual Tomahawk::InfoSystem::InfoPluginPtr infoPlugin() { return Tomahawk::InfoSystem::InfoPluginPtr(); }
@ -98,8 +101,12 @@ public:
public slots:
void aboutToShow( QAction* action, const Tomahawk::playlist_ptr& playlist );
void syncActionTriggered( bool );
void atticaLoaded(Attica::Content::List);
private slots:
void resolverChanged();
void resolverInstalled( const QString& resolverId );
void resolverMessage( const QString& msgType, const QVariantMap& msg );
void login( const QString& username, const QString& password );
@ -110,6 +117,7 @@ private slots:
private:
void init();
void hookupResolver();
void loadPlaylists();
void clearUser( bool permanentlyDelete = false );

View File

@ -98,7 +98,7 @@ AtticaManager::AtticaManager( QObject* parent )
// resolvers
// m_manager.addProviderFile( QUrl( "http://bakery.tomahawk-player.org/resolvers/providers.xml" ) );
m_manager.addProviderFile( QUrl( "http://localhost/resolvers/providers.xml" ) );
m_manager.addProviderFile( QUrl( "http://lycophron/resolvers/providers.xml" ) );
qRegisterMetaType< Attica::Content >( "Attica::Content" );
}

View File

@ -99,7 +99,7 @@ protected:
* Extends ResolverAccount with what attica additionally provides---e.g. icon
* Assumes certain file layout on disk.
*/
class AtticaResolverAccount : public ResolverAccount
class DLLEXPORT AtticaResolverAccount : public ResolverAccount
{
Q_OBJECT
public: