1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-24 01:39:42 +01: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
void onAvatarReceived( const QString& from, const QPixmap& avatar );
private:
static SipHandler *s_instance;

View File

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

View File

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

View File

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

View File

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

View File

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