1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-07 06:36:55 +02:00

* Fixed init procedure: don't setup Servent before database and sources are loaded.

This commit is contained in:
Christian Muehlhaeuser
2011-07-17 01:02:13 +02:00
parent 4238327ebc
commit 63aa26f607
6 changed files with 54 additions and 40 deletions

View File

@@ -104,7 +104,6 @@ private slots:
// set data for other sources // set data for other sources
void onAvatarReceived( const QString& from, const QPixmap& avatar ); void onAvatarReceived( const QString& from, const QPixmap& avatar );
private: private:
static SipHandler *s_instance; static SipHandler *s_instance;

View File

@@ -168,6 +168,7 @@ Source::removeCollection( const collection_ptr& c )
void void
Source::setOffline() Source::setOffline()
{ {
qDebug() << Q_FUNC_INFO << friendlyName();
if ( !m_online ) if ( !m_online )
return; return;
@@ -183,17 +184,18 @@ Source::setOffline()
void void
Source::setOnline() Source::setOnline()
{ {
qDebug() << Q_FUNC_INFO << friendlyName();
if ( m_online ) if ( m_online )
return; return;
m_online = true; m_online = true;
emit online();
// ensure username is in the database // ensure username is in the database
DatabaseCommand_addSource* cmd = new DatabaseCommand_addSource( m_username, m_friendlyname ); DatabaseCommand_addSource* cmd = new DatabaseCommand_addSource( m_username, m_friendlyname );
connect( cmd, SIGNAL( done( unsigned int, QString ) ), connect( cmd, SIGNAL( done( unsigned int, QString ) ),
SLOT( dbLoaded( unsigned int, const QString& ) ) ); SLOT( dbLoaded( unsigned int, const QString& ) ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd) );
emit online();
} }

View File

@@ -44,6 +44,7 @@ SourceList::instance()
SourceList::SourceList( QObject* parent ) SourceList::SourceList( QObject* parent )
: QObject( parent ) : QObject( parent )
, m_isReady( false )
{ {
} }
@@ -85,6 +86,7 @@ SourceList::setSources( const QList<Tomahawk::source_ptr>& sources )
{ {
QMutexLocker lock( &m_mut ); QMutexLocker lock( &m_mut );
m_isReady = true;
foreach( const source_ptr& src, sources ) foreach( const source_ptr& src, sources )
{ {
add( src ); add( src );
@@ -116,6 +118,8 @@ SourceList::setLocal( const Tomahawk::source_ptr& localSrc )
void void
SourceList::add( const source_ptr& source ) SourceList::add( const source_ptr& source )
{ {
Q_ASSERT( m_isReady );
qDebug() << "Adding to sources:" << source->userName() << source->id(); qDebug() << "Adding to sources:" << source->userName() << source->id();
m_sources.insert( source->userName(), source ); m_sources.insert( source->userName(), source );
@@ -125,7 +129,6 @@ SourceList::add( const source_ptr& source )
collection_ptr coll( new RemoteCollection( source ) ); collection_ptr coll( new RemoteCollection( source ) );
source->addCollection( coll ); source->addCollection( coll );
// source->collection()->tracks();
emit sourceAdded( source ); emit sourceAdded( source );
} }
@@ -134,8 +137,11 @@ SourceList::add( const source_ptr& source )
void void
SourceList::removeAllRemote() SourceList::removeAllRemote()
{ {
Q_ASSERT( m_isReady );
foreach( const source_ptr& s, m_sources ) foreach( const source_ptr& s, m_sources )
{ {
qDebug() << "Disconnecting" << s->friendlyName() << s->isLocal() << s->controlConnection() << s->isOnline();
if ( !s->isLocal() && s->controlConnection() ) if ( !s->isLocal() && s->controlConnection() )
{ {
s->controlConnection()->shutdown( true ); s->controlConnection()->shutdown( true );

View File

@@ -37,6 +37,8 @@ public:
explicit SourceList( QObject* parent = 0 ); explicit SourceList( QObject* parent = 0 );
bool isReady() const { return m_isReady; }
const Tomahawk::source_ptr& getLocal(); const Tomahawk::source_ptr& getLocal();
void setLocal( const Tomahawk::source_ptr& localSrc ); void setLocal( const Tomahawk::source_ptr& localSrc );
@@ -68,6 +70,7 @@ private:
QMap< QString, Tomahawk::source_ptr > m_sources; QMap< QString, Tomahawk::source_ptr > m_sources;
QMap< int, QString > m_sources_id2name; QMap< int, QString > m_sources_id2name;
bool m_isReady;
Tomahawk::source_ptr m_local; Tomahawk::source_ptr m_local;
Tomahawk::source_ptr m_dummy; Tomahawk::source_ptr m_dummy;
mutable QMutex m_mut; // mutable so const methods can use a lock mutable QMutex m_mut; // mutable so const methods can use a lock

View File

@@ -214,8 +214,7 @@ TomahawkApp::init()
TomahawkUtils::NetworkProxyFactory* proxyFactory = new TomahawkUtils::NetworkProxyFactory(); TomahawkUtils::NetworkProxyFactory* proxyFactory = new TomahawkUtils::NetworkProxyFactory();
if( s->proxyType() != QNetworkProxy::NoProxy && if ( s->proxyType() != QNetworkProxy::NoProxy && !s->proxyHost().isEmpty() )
!s->proxyHost().isEmpty() )
{ {
qDebug() << "Setting proxy to saved values"; qDebug() << "Setting proxy to saved values";
QNetworkProxy proxy( static_cast<QNetworkProxy::ProxyType>( s->proxyType() ), s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ); QNetworkProxy proxy( static_cast<QNetworkProxy::ProxyType>( s->proxyType() ), s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() );
@@ -236,10 +235,10 @@ TomahawkApp::init()
new Pipeline( this ); new Pipeline( this );
m_servent = QWeakPointer<Servent>( new Servent( this ) ); m_servent = QWeakPointer<Servent>( new Servent( this ) );
connect( m_servent.data(), SIGNAL( ready() ), SLOT( setupSIP() ) ); connect( m_servent.data(), SIGNAL( ready() ), SLOT( initSIP() ) );
qDebug() << "Init Database."; qDebug() << "Init Database.";
setupDatabase(); initDatabase();
qDebug() << "Init Echonest Factory."; qDebug() << "Init Echonest Factory.";
GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); GeneratorFactory::registerFactory( "echonest", new EchonestFactory );
@@ -272,8 +271,6 @@ TomahawkApp::init()
Echonest::Config::instance()->setAPIKey( "JRIHWEP6GPOER2QQ6" ); Echonest::Config::instance()->setAPIKey( "JRIHWEP6GPOER2QQ6" );
Echonest::Config::instance()->setNetworkAccessManager( TomahawkUtils::nam() ); Echonest::Config::instance()->setNetworkAccessManager( TomahawkUtils::nam() );
qDebug() << "Init SIP system.";
#ifndef TOMAHAWK_HEADLESS #ifndef TOMAHAWK_HEADLESS
if ( !m_headless ) if ( !m_headless )
{ {
@@ -287,14 +284,12 @@ TomahawkApp::init()
qDebug() << "Init Local Collection."; qDebug() << "Init Local Collection.";
initLocalCollection(); initLocalCollection();
qDebug() << "Init Pipeline."; qDebug() << "Init Pipeline.";
setupPipeline(); initPipeline();
qDebug() << "Init Servent.";
startServent();
if( arguments().contains( "--http" ) || TomahawkSettings::instance()->value( "network/http", true ).toBool() ) if ( arguments().contains( "--http" ) || TomahawkSettings::instance()->value( "network/http", true ).toBool() )
{ {
qDebug() << "Init HTTP Server."; qDebug() << "Init HTTP Server.";
startHTTP(); initHTTP();
} }
#ifndef TOMAHAWK_HEADLESS #ifndef TOMAHAWK_HEADLESS
@@ -322,26 +317,28 @@ TomahawkApp::~TomahawkApp()
} }
m_scriptResolvers.clear(); m_scriptResolvers.clear();
if( !m_servent.isNull() ) if ( !m_servent.isNull() )
delete m_servent.data(); delete m_servent.data();
if( !m_scanManager.isNull() ) if ( !m_scanManager.isNull() )
delete m_scanManager.data(); delete m_scanManager.data();
#ifndef TOMAHAWK_HEADLESS #ifndef TOMAHAWK_HEADLESS
delete m_mainwindow; delete m_mainwindow;
#endif #endif
if( !m_audioEngine.isNull() )
if ( !m_audioEngine.isNull() )
delete m_audioEngine.data(); delete m_audioEngine.data();
if( !m_infoSystem.isNull() ) if ( !m_infoSystem.isNull() )
delete m_infoSystem.data(); delete m_infoSystem.data();
//FIXME: delete GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); ? //FIXME: delete GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); ?
delete SipHandler::instance(); delete SipHandler::instance();
if( !m_scanManager.isNull() ) if ( !m_scanManager.isNull() )
delete m_scanManager.data(); delete m_scanManager.data();
if( !m_database.isNull() ) if ( !m_database.isNull() )
delete m_database.data(); delete m_database.data();
Pipeline::instance()->stop(); Pipeline::instance()->stop();
@@ -428,10 +425,10 @@ TomahawkApp::registerMetaTypes()
void void
TomahawkApp::setupDatabase() TomahawkApp::initDatabase()
{ {
QString dbpath; QString dbpath;
if( arguments().contains( "--testdb" ) ) if ( arguments().contains( "--testdb" ) )
{ {
dbpath = QDir::currentPath() + "/test.db"; dbpath = QDir::currentPath() + "/test.db";
} }
@@ -447,7 +444,7 @@ TomahawkApp::setupDatabase()
void void
TomahawkApp::startHTTP() TomahawkApp::initHTTP()
{ {
m_session.setPort( 60210 ); //TODO config m_session.setPort( 60210 ); //TODO config
m_session.setListenInterface( QHostAddress::LocalHost ); m_session.setListenInterface( QHostAddress::LocalHost );
@@ -463,7 +460,7 @@ TomahawkApp::startHTTP()
void void
TomahawkApp::setupPipeline() TomahawkApp::initPipeline()
{ {
// setup resolvers for local content, and (cached) remote collection content // setup resolvers for local content, and (cached) remote collection content
Pipeline::instance()->addResolver( new DatabaseResolver( 100 ) ); Pipeline::instance()->addResolver( new DatabaseResolver( 100 ) );
@@ -488,7 +485,7 @@ TomahawkApp::enableScriptResolver( const QString& path )
void void
TomahawkApp::disableScriptResolver( const QString& path ) TomahawkApp::disableScriptResolver( const QString& path )
{ {
if( m_scriptResolvers.contains( path ) ) if ( m_scriptResolvers.contains( path ) )
{ {
Tomahawk::ExternalResolver* r = m_scriptResolvers.take( path ); Tomahawk::ExternalResolver* r = m_scriptResolvers.take( path );
@@ -509,6 +506,8 @@ TomahawkApp::resolverForPath( const QString& scriptPath )
void void
TomahawkApp::initLocalCollection() TomahawkApp::initLocalCollection()
{ {
connect( SourceList::instance(), SIGNAL( ready() ), SLOT( initServent() ) );
source_ptr src( new Source( 0, "My Collection" ) ); source_ptr src( new Source( 0, "My Collection" ) );
collection_ptr coll( new LocalCollection( src ) ); collection_ptr coll( new LocalCollection( src ) );
@@ -534,8 +533,10 @@ TomahawkApp::initLocalCollection()
void void
TomahawkApp::startServent() TomahawkApp::initServent()
{ {
qDebug() << "Init Servent.";
bool upnp = !arguments().contains( "--noupnp" ) && TomahawkSettings::instance()->value( "network/upnp", true ).toBool() && !TomahawkSettings::instance()->preferStaticHostPort(); bool upnp = !arguments().contains( "--noupnp" ) && TomahawkSettings::instance()->value( "network/upnp", true ).toBool() && !TomahawkSettings::instance()->preferStaticHostPort();
int port = TomahawkSettings::instance()->externalPort(); int port = TomahawkSettings::instance()->externalPort();
if ( !Servent::instance()->startListening( QHostAddress( QHostAddress::Any ), upnp, port ) ) if ( !Servent::instance()->startListening( QHostAddress( QHostAddress::Any ), upnp, port ) )
@@ -547,12 +548,12 @@ TomahawkApp::startServent()
void void
TomahawkApp::setupSIP() TomahawkApp::initSIP()
{ {
qDebug() << Q_FUNC_INFO; qDebug() << Q_FUNC_INFO;
//FIXME: jabber autoconnect is really more, now that there is sip -- should be renamed and/or split out of jabber-specific settings //FIXME: jabber autoconnect is really more, now that there is sip -- should be renamed and/or split out of jabber-specific settings
if( !arguments().contains( "--nosip" ) ) if ( !arguments().contains( "--nosip" ) )
{ {
#ifdef GLOOX_FOUND #ifdef GLOOX_FOUND
m_xmppBot = QWeakPointer<XMPPBot>( new XMPPBot( this ) ); m_xmppBot = QWeakPointer<XMPPBot>( new XMPPBot( this ) );
@@ -577,13 +578,13 @@ TomahawkApp::activate()
bool bool
TomahawkApp::loadUrl( const QString& url ) TomahawkApp::loadUrl( const QString& url )
{ {
if( url.startsWith( "tomahawk://" ) ) if ( url.startsWith( "tomahawk://" ) )
return GlobalActionManager::instance()->parseTomahawkLink( url ); return GlobalActionManager::instance()->parseTomahawkLink( url );
else else
{ {
QFile f( url ); QFile f( url );
QFileInfo info( f ); QFileInfo info( f );
if( f.exists() && info.suffix() == "xspf" ) { if ( f.exists() && info.suffix() == "xspf" ) {
XSPFLoader* l = new XSPFLoader( true, this ); XSPFLoader* l = new XSPFLoader( true, this );
qDebug() << "Loading spiff:" << url; qDebug() << "Loading spiff:" << url;
l->load( QUrl::fromUserInput( url ) ); l->load( QUrl::fromUserInput( url ) );
@@ -601,7 +602,7 @@ TomahawkApp::instanceStarted( KDSingleApplicationGuard::Instance instance )
{ {
qDebug() << "INSTANCE STARTED!" << instance.pid << instance.arguments; qDebug() << "INSTANCE STARTED!" << instance.pid << instance.arguments;
if( instance.arguments.size() < 2 ) if ( instance.arguments.size() < 2 )
{ {
return; return;
} }

View File

@@ -102,17 +102,20 @@ public slots:
void instanceStarted( KDSingleApplicationGuard::Instance ); void instanceStarted( KDSingleApplicationGuard::Instance );
private slots: private slots:
void setupSIP(); void initServent();
void initSIP();
private: private:
void registerMetaTypes(); void registerMetaTypes();
// Start-up order: database, collection, pipeline, servent, http
void initDatabase();
void initLocalCollection(); void initLocalCollection();
void initPipeline();
void initHTTP();
void loadPlugins(); void loadPlugins();
void startServent();
void setupDatabase();
void setupPipeline();
void startHTTP();
QList<Tomahawk::collection_ptr> m_collections; QList<Tomahawk::collection_ptr> m_collections;
QHash<QString, Tomahawk::ExternalResolver*> m_scriptResolvers; QHash<QString, Tomahawk::ExternalResolver*> m_scriptResolvers;