void TomahawkApp::init() { qDebug() << "TomahawkApp thread:" << thread(); Logger::setupLogfile(); qsrand( QTime( 0, 0, 0 ).secsTo( QTime::currentTime() ) ); tLog() << "Starting Tomahawk..."; #ifdef ENABLE_HEADLESS m_headless = true; #else m_headless = arguments().contains( "--headless" ); setWindowIcon( QIcon( RESPATH "icons/tomahawk-icon-128x128.png" ) ); setQuitOnLastWindowClosed( false ); QFont f = font(); #ifdef Q_OS_MAC f.setPointSize( f.pointSize() - 2 ); setFont( f ); #endif tDebug() << "Default font:" << f.pixelSize() << f.pointSize() << f.pointSizeF() << f.family(); tDebug() << "Font height:" << QFontMetrics( f ).height(); TomahawkUtils::setDefaultFontSize( f.pointSize() ); #endif TomahawkUtils::setHeadless( m_headless ); TomahawkSettings* s = TomahawkSettings::instance(); new ACLRegistryImpl( this ); tDebug( LOGINFO ) << "Setting NAM."; // Cause the creation of the nam, but don't need to address it directly, so prevent warning Q_UNUSED( TomahawkUtils::nam() ); m_audioEngine = QPointer<AudioEngine>( new AudioEngine ); // init pipeline and resolver factories new Pipeline(); m_servent = QPointer<Servent>( new Servent( this ) ); connect( m_servent.data(), SIGNAL( ready() ), SLOT( initSIP() ) ); tDebug() << "Init Database."; initDatabase(); m_scanManager = QPointer<ScanManager>( new ScanManager( this ) ); #ifndef ENABLE_HEADLESS Pipeline::instance()->addExternalResolverFactory( boost::bind( &QtScriptResolver::factory, _1 ) ); Pipeline::instance()->addExternalResolverFactory( boost::bind( &ScriptResolver::factory, _1 ) ); new ActionCollection( this ); connect( ActionCollection::instance()->getAction( "quit" ), SIGNAL( triggered() ), SLOT( quit() ), Qt::UniqueConnection ); #endif QByteArray magic = QByteArray::fromBase64( enApiSecret ); QByteArray wand = QByteArray::fromBase64( QCoreApplication::applicationName().toLatin1() ); int length = magic.length(), n2 = wand.length(); for ( int i=0; i<length; i++ ) magic[i] = magic[i] ^ wand[i%n2]; Echonest::Config::instance()->setAPIKey( magic ); #ifndef ENABLE_HEADLESS tDebug() << "Init Echonest Factory."; GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); #endif tDebug() << "Init Database Factory."; GeneratorFactory::registerFactory( "database", new DatabaseFactory ); // Register shortcut handler for this platform #ifdef Q_WS_MAC m_shortcutHandler = QPointer<Tomahawk::ShortcutHandler>( new MacShortcutHandler( this ) ); Tomahawk::setShortcutHandler( static_cast<MacShortcutHandler*>( m_shortcutHandler.data() ) ); Tomahawk::setApplicationHandler( this ); increaseMaxFileDescriptors(); #endif // Connect up shortcuts if ( !m_shortcutHandler.isNull() ) { connect( m_shortcutHandler.data(), SIGNAL( playPause() ), m_audioEngine.data(), SLOT( playPause() ) ); connect( m_shortcutHandler.data(), SIGNAL( pause() ), m_audioEngine.data(), SLOT( pause() ) ); connect( m_shortcutHandler.data(), SIGNAL( stop() ), m_audioEngine.data(), SLOT( stop() ) ); connect( m_shortcutHandler.data(), SIGNAL( previous() ), m_audioEngine.data(), SLOT( previous() ) ); connect( m_shortcutHandler.data(), SIGNAL( next() ), m_audioEngine.data(), SLOT( next() ) ); connect( m_shortcutHandler.data(), SIGNAL( volumeUp() ), m_audioEngine.data(), SLOT( raiseVolume() ) ); connect( m_shortcutHandler.data(), SIGNAL( volumeDown() ), m_audioEngine.data(), SLOT( lowerVolume() ) ); connect( m_shortcutHandler.data(), SIGNAL( mute() ), m_audioEngine.data(), SLOT( mute() ) ); } tDebug() << "Init InfoSystem."; m_infoSystem = QPointer<Tomahawk::InfoSystem::InfoSystem>( Tomahawk::InfoSystem::InfoSystem::instance() ); tDebug() << "Init AccountManager."; m_accountManager = QPointer< Tomahawk::Accounts::AccountManager >( new Tomahawk::Accounts::AccountManager( this ) ); connect( m_accountManager.data(), SIGNAL( ready() ), SLOT( accountManagerReady() ) ); Echonest::Config::instance()->setNetworkAccessManager( TomahawkUtils::nam() ); #ifndef ENABLE_HEADLESS EchonestGenerator::setupCatalogs(); if ( !m_headless ) { tDebug() << "Init MainWindow."; m_mainwindow = new TomahawkWindow(); m_mainwindow->setWindowTitle( "Tomahawk" ); m_mainwindow->setObjectName( "TH_Main_Window" ); if ( !arguments().contains( "--hide" ) ) { m_mainwindow->show(); } } #endif tDebug() << "Init Local Collection."; initLocalCollection(); tDebug() << "Init Pipeline."; initPipeline(); #ifndef ENABLE_HEADLESS // load remote list of resolvers able to be installed AtticaManager::instance(); #endif if ( arguments().contains( "--http" ) || TomahawkSettings::instance()->value( "network/http", true ).toBool() ) { initHTTP(); } connect( TomahawkSettings::instance(), SIGNAL( changed() ), SLOT( initHTTP() ) ); #ifndef ENABLE_HEADLESS if ( !s->hasScannerPaths() ) { m_mainwindow->showSettingsDialog(); } #endif #ifdef LIBLASTFM_FOUND tDebug() << "Init Scrobbler."; m_scrobbler = new Scrobbler( this ); #endif if ( arguments().contains( "--filescan" ) ) { m_scanManager.data()->runFullRescan(); } // Set up echonest catalog synchronizer Tomahawk::EchonestCatalogSynchronizer::instance(); PlaylistUpdaterInterface::registerUpdaterFactory( new XspfUpdaterFactory ); PlaylistUpdaterInterface::registerUpdaterFactory( new SpotifyUpdaterFactory ); // Following work-around/fix taken from Clementine rev. 13e13ccd9a95 and courtesy of David Sansome // A bug in Qt means the wheel_scroll_lines setting gets ignored and replaced // with the default value of 3 in QApplicationPrivate::initialize. { QSettings qt_settings( QSettings::UserScope, "Trolltech" ); qt_settings.beginGroup( "Qt" ); QApplication::setWheelScrollLines( qt_settings.value( "wheelScrollLines", QApplication::wheelScrollLines() ).toInt() ); } #ifndef ENABLE_HEADLESS // Make sure to init GAM in the gui thread GlobalActionManager::instance(); // check if our spotify playlist api server is up and running, and enable spotify playlist drops if so QNetworkReply* r = TomahawkUtils::nam()->get( QNetworkRequest( QUrl( SPOTIFY_PLAYLIST_API_URL "/pong" ) ) ); connect( r, SIGNAL( finished() ), this, SLOT( spotifyApiCheckFinished() ) ); #endif #ifdef Q_OS_MAC // Make sure to do this after main window is inited Tomahawk::enableFullscreen( m_mainwindow ); #endif }
void TomahawkApp::init() { if ( arguments().contains( "--help" ) || arguments().contains( "-h" ) ) { printHelp(); ::exit( 0 ); } qDebug() << "TomahawkApp thread:" << thread(); Logger::setupLogfile(); qsrand( QTime( 0, 0, 0 ).secsTo( QTime::currentTime() ) ); tLog() << "Starting Tomahawk..."; #ifdef ENABLE_HEADLESS m_headless = true; #else m_mainwindow = 0; m_headless = arguments().contains( "--headless" ); setWindowIcon( QIcon( RESPATH "icons/tomahawk-icon-128x128.png" ) ); setQuitOnLastWindowClosed( false ); QFont f = APP->font(); f.setPixelSize( HeaderLabel::defaultFontSize() ); QFontMetrics fm( f ); TomahawkUtils::setHeaderHeight( fm.height() + 8 ); #endif TomahawkSettings* s = TomahawkSettings::instance(); tDebug( LOGINFO ) << "Setting NAM."; // Cause the creation of the nam, but don't need to address it directly, so prevent warning Q_UNUSED( TomahawkUtils::nam() ); m_audioEngine = QWeakPointer<AudioEngine>( new AudioEngine ); m_scanManager = QWeakPointer<ScanManager>( new ScanManager( this ) ); // init pipeline and resolver factories new Pipeline(); #ifndef ENABLE_HEADLESS Pipeline::instance()->addExternalResolverFactory( boost::bind( &QtScriptResolver::factory, _1 ) ); Pipeline::instance()->addExternalResolverFactory( boost::bind( &ScriptResolver::factory, _1 ) ); new ActionCollection( this ); connect( ActionCollection::instance()->getAction( "quit" ), SIGNAL( triggered() ), SLOT( quit() ), Qt::UniqueConnection ); #endif m_servent = QWeakPointer<Servent>( new Servent( this ) ); connect( m_servent.data(), SIGNAL( ready() ), SLOT( initSIP() ) ); tDebug() << "Init Database."; initDatabase(); QByteArray magic = QByteArray::fromBase64( enApiSecret ); QByteArray wand = QByteArray::fromBase64( QCoreApplication::applicationName().toLatin1() ); int length = magic.length(), n2 = wand.length(); for ( int i=0; i<length; i++ ) magic[i] = magic[i] ^ wand[i%n2]; Echonest::Config::instance()->setAPIKey( magic ); #ifndef ENABLE_HEADLESS tDebug() << "Init Echonest Factory."; GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); #endif tDebug() << "Init Database Factory."; GeneratorFactory::registerFactory( "database", new DatabaseFactory ); // Register shortcut handler for this platform #ifdef Q_WS_MAC m_shortcutHandler = QWeakPointer<Tomahawk::ShortcutHandler>( new MacShortcutHandler( this ) ); Tomahawk::setShortcutHandler( static_cast<MacShortcutHandler*>( m_shortcutHandler.data() ) ); Tomahawk::setApplicationHandler( this ); increaseMaxFileDescriptors(); #endif // Connect up shortcuts if ( !m_shortcutHandler.isNull() ) { connect( m_shortcutHandler.data(), SIGNAL( playPause() ), m_audioEngine.data(), SLOT( playPause() ) ); connect( m_shortcutHandler.data(), SIGNAL( pause() ), m_audioEngine.data(), SLOT( pause() ) ); connect( m_shortcutHandler.data(), SIGNAL( stop() ), m_audioEngine.data(), SLOT( stop() ) ); connect( m_shortcutHandler.data(), SIGNAL( previous() ), m_audioEngine.data(), SLOT( previous() ) ); connect( m_shortcutHandler.data(), SIGNAL( next() ), m_audioEngine.data(), SLOT( next() ) ); connect( m_shortcutHandler.data(), SIGNAL( volumeUp() ), m_audioEngine.data(), SLOT( raiseVolume() ) ); connect( m_shortcutHandler.data(), SIGNAL( volumeDown() ), m_audioEngine.data(), SLOT( lowerVolume() ) ); connect( m_shortcutHandler.data(), SIGNAL( mute() ), m_audioEngine.data(), SLOT( mute() ) ); } tDebug() << "Init InfoSystem."; m_infoSystem = QWeakPointer<Tomahawk::InfoSystem::InfoSystem>( Tomahawk::InfoSystem::InfoSystem::instance() ); tDebug() << "Init AccountManager."; m_accountManager = QWeakPointer< Tomahawk::Accounts::AccountManager >( new Tomahawk::Accounts::AccountManager( this ) ); Tomahawk::Accounts::LastFmAccountFactory* lastfmFactory = new Tomahawk::Accounts::LastFmAccountFactory(); m_accountManager.data()->addAccountFactory( lastfmFactory ); Tomahawk::Accounts::SpotifyAccountFactory* spotifyFactory = new Tomahawk::Accounts::SpotifyAccountFactory; m_accountManager.data()->addAccountFactory( spotifyFactory ); m_accountManager.data()->registerAccountFactoryForFilesystem( spotifyFactory ); Tomahawk::Accounts::AccountManager::instance()->loadFromConfig(); Echonest::Config::instance()->setNetworkAccessManager( TomahawkUtils::nam() ); #ifndef ENABLE_HEADLESS EchonestGenerator::setupCatalogs(); if ( !m_headless ) { tDebug() << "Init MainWindow."; m_mainwindow = new TomahawkWindow(); m_mainwindow->setWindowTitle( "Tomahawk" ); m_mainwindow->setObjectName( "TH_Main_Window" ); if ( !arguments().contains( "--hide" ) ) { m_mainwindow->show(); } } #endif tDebug() << "Init Local Collection."; initLocalCollection(); tDebug() << "Init Pipeline."; initPipeline(); #ifndef ENABLE_HEADLESS // load remote list of resolvers able to be installed AtticaManager::instance(); #endif if ( arguments().contains( "--http" ) || TomahawkSettings::instance()->value( "network/http", true ).toBool() ) { initHTTP(); } connect( TomahawkSettings::instance(), SIGNAL( changed() ), SLOT( initHTTP() ) ); #ifndef ENABLE_HEADLESS if ( !s->hasScannerPaths() ) { m_mainwindow->showSettingsDialog(); } #endif #ifdef LIBLASTFM_FOUND tDebug() << "Init Scrobbler."; m_scrobbler = new Scrobbler( this ); #endif if ( arguments().contains( "--filescan" ) ) { m_scanManager.data()->runScan( true ); } // Set up echonest catalog synchronizer Tomahawk::EchonestCatalogSynchronizer::instance(); #ifndef ENABLE_HEADLESS // Make sure to init GAM in the gui thread GlobalActionManager::instance(); // check if our spotify playlist api server is up and running, and enable spotify playlist drops if so QNetworkReply* r = TomahawkUtils::nam()->get( QNetworkRequest( QUrl( SPOTIFY_PLAYLIST_API_URL "/pong" ) ) ); connect( r, SIGNAL( finished() ), this, SLOT( spotifyApiCheckFinished() ) ); #endif #ifdef Q_WS_MAC // Make sure to do this after main window is inited Tomahawk::enableFullscreen(); #endif }
void TomahawkApp::onInfoSystemReady() { tDebug() << "Init AccountManager."; m_accountManager = QPointer< Tomahawk::Accounts::AccountManager >( new Tomahawk::Accounts::AccountManager( this ) ); connect( m_accountManager.data(), SIGNAL( readyForFactories() ), SLOT( initFactoriesForAccountManager() ) ); connect( m_accountManager.data(), SIGNAL( readyForSip() ), SLOT( initSIP() ) ); TomahawkSettings* s = TomahawkSettings::instance(); Echonest::Config::instance()->setNetworkAccessManager( Tomahawk::Utils::nam() ); EchonestGenerator::setupCatalogs(); m_scanManager = QPointer<ScanManager>( new ScanManager( this ) ); if ( !m_headless ) { tDebug() << "Init MainWindow."; m_mainwindow = new TomahawkWindow(); m_mainwindow->setWindowTitle( "Tomahawk" ); m_mainwindow->setObjectName( "TH_Main_Window" ); if ( !arguments().contains( "--hide" ) ) { m_mainwindow->show(); } qApp->installEventFilter( m_mainwindow ); } tDebug() << "Init Local Collection."; initLocalCollection(); tDebug() << "Init Pipeline."; initPipeline(); m_scanManager->init(); if ( arguments().contains( "--filescan" ) ) { m_scanManager->runFullRescan(); } // load remote list of resolvers able to be installed AtticaManager::instance(); if ( arguments().contains( "--http" ) || TomahawkSettings::instance()->value( "network/http", true ).toBool() ) { initHTTP(); } connect( TomahawkSettings::instance(), SIGNAL( changed() ), SLOT( initHTTP() ) ); if ( !s->hasScannerPaths() ) { m_mainwindow->showSettingsDialog(); } #ifdef LIBLASTFM_FOUND tDebug() << "Init Scrobbler."; m_scrobbler = new Scrobbler( this ); #endif // Set up echonest catalog synchronizer Tomahawk::EchonestCatalogSynchronizer::instance(); PlaylistUpdaterInterface::registerUpdaterFactory( new XspfUpdaterFactory ); // PlaylistUpdaterInterface::registerUpdaterFactory( new SpotifyUpdaterFactory ); // Following work-around/fix taken from Clementine rev. 13e13ccd9a95 and courtesy of David Sansome // A bug in Qt means the wheel_scroll_lines setting gets ignored and replaced // with the default value of 3 in QApplicationPrivate::initialize. { QSettings qt_settings( QSettings::UserScope, "Trolltech" ); qt_settings.beginGroup( "Qt" ); QApplication::setWheelScrollLines( qt_settings.value( "wheelScrollLines", QApplication::wheelScrollLines() ).toInt() ); } // Make sure to init GAM in the gui thread GlobalActionManager::instance(); // check if our spotify playlist api server is up and running, and enable spotify playlist drops if so QNetworkRequest request( QUrl( SPOTIFY_PLAYLIST_API_URL "/pong" ) ); QByteArray userAgent = TomahawkUtils::userAgentString( TOMAHAWK_APPLICATION_NAME, TOMAHAWK_VERSION ).toUtf8(); tLog() << "User-Agent:" << userAgent; request.setRawHeader( "User-Agent", userAgent ); QNetworkReply* r = Tomahawk::Utils::nam()->get( request ); connect( r, SIGNAL( finished() ), this, SLOT( spotifyApiCheckFinished() ) ); #ifdef Q_OS_MAC // Make sure to do this after main window is inited Tomahawk::enableFullscreen( m_mainwindow ); #endif initEnergyEventHandler(); if ( arguments().count() > 1 ) loadUrl( arguments().last() ); emit tomahawkLoaded(); }