예제 #1
0
void
TomahawkApp::init()
{
    qDebug() << "TomahawkApp thread:" << thread();
    m_logFile.setFileName( TomahawkUtils::logFilePath() );
    Logger::setupLogfile( m_logFile );

    qsrand( QTime( 0, 0, 0 ).secsTo( QTime::currentTime() ) );

    tLog() << "Starting Tomahawk...";

    m_headless = true;
    m_headless = arguments().contains( "--headless" );
    setWindowIcon( QIcon( RESPATH "icons/tomahawk-icon-128x128.png" ) );

#ifndef Q_OS_MAC
    setQuitOnLastWindowClosed( false );
#endif

    if ( arguments().contains( "--splash" ) )
    {
        startSplashWidget( "Splash screen test\n" );
        updateSplashWidgetMessage( "Splash screen test\n2/7" );
    }

    TomahawkStyle::loadFonts();
    QFont f = font();
    TomahawkUtils::setSystemFont( f );
    f.setFamily( "Roboto" );
#ifdef Q_OS_WIN
    f.setPointSize( 10 );
#endif
#ifdef Q_OS_MAC
    f.setPointSize( f.pointSize() - 2 );
#endif

    setFont( f );
    tDebug() << "Default font:" << f.pixelSize() << f.pointSizeF() << f.family() << QFontMetrics( f ).height();
    TomahawkUtils::setDefaultFontSize( f.pointSize() );

    TomahawkUtils::setHeadless( m_headless );
    new ACLRegistryImpl( this );

    TomahawkSettings *s = TomahawkSettings::instance();
    Tomahawk::Utils::setProxyDns( s->proxyDns() );
    Tomahawk::Utils::setProxyType( s->proxyType() );
    Tomahawk::Utils::setProxyHost( s->proxyHost() );
    Tomahawk::Utils::setProxyPort( s->proxyPort() );
    Tomahawk::Utils::setProxyUsername( s->proxyUsername() );
    Tomahawk::Utils::setProxyPassword( s->proxyPassword() );
    Tomahawk::Utils::setProxyNoProxyHosts( s->proxyNoProxyHosts() );

    // Cause the creation of the nam, but don't need to address it directly, so prevent warning
    tDebug() << "Setting NAM:" << Tomahawk::Utils::nam();

    DownloadManager::instance();
    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();

    Pipeline::instance()->addExternalResolverFactory(
                std::bind( &JSResolver::factory, std::placeholders::_1,
                           std::placeholders::_2, std::placeholders::_3 ) );
    Pipeline::instance()->addExternalResolverFactory(
                std::bind( &ScriptResolver::factory, std::placeholders::_1,
                           std::placeholders::_2, std::placeholders::_3 ) );

    new ActionCollection( this );
    connect( ActionCollection::instance()->getAction( "quit" ), SIGNAL( triggered() ), SLOT( quit() ), Qt::UniqueConnection );

    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 );

    tDebug() << "Init Echonest Factory.";
    GeneratorFactory::registerFactory( "echonest", new EchonestFactory );
    tDebug() << "Init Database Factory.";
    GeneratorFactory::registerFactory( "database", new DatabaseFactory );

    // Register shortcut handler for this platform
#ifdef Q_OS_MAC
    m_shortcutHandler = QPointer<Tomahawk::ShortcutHandler>( new MacShortcutHandler( this ) );
    Tomahawk::setShortcutHandler( static_cast<MacShortcutHandler*>( m_shortcutHandler.data() ) );

    Tomahawk::setApplicationHandler( this );
    increaseMaxFileDescriptors();
#endif

#ifdef WITH_GNOMESHORTCUTHANDLER
    GnomeShortcutHandler *gnomeShortcutHandler = new GnomeShortcutHandler( this );
    gnomeShortcutHandler->DoRegister();
    m_shortcutHandler = QPointer<Tomahawk::ShortcutHandler>( gnomeShortcutHandler );
#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() ) );
    }

    connect( Playlist::removalHandler().data(), SIGNAL( aboutToBeDeletePlaylist( Tomahawk::playlist_ptr ) ),
             SLOT( playlistRemoved( Tomahawk::playlist_ptr ) ));

    tDebug() << "Init InfoSystem.";
    m_infoSystem = QPointer<Tomahawk::InfoSystem::InfoSystem>( Tomahawk::InfoSystem::InfoSystem::instance() );
    connect( m_infoSystem, SIGNAL( ready() ), SLOT( onInfoSystemReady() ) );
}