diff --git a/src/stackedsettingsdialog.ui b/src/stackedsettingsdialog.ui index 704c60c40..3ee15c7fe 100644 --- a/src/stackedsettingsdialog.ui +++ b/src/stackedsettingsdialog.ui @@ -644,7 +644,7 @@ Qt::RightToLeft - Playdar HTTP API + Allow web browsers to detect Tomahawk true diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index d15440343..22bcad592 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -255,6 +255,7 @@ TomahawkApp::init() { initHTTP(); } + connect( TomahawkSettings::instance(), SIGNAL( changed() ), SLOT( initHTTP() ) ); #ifndef ENABLE_HEADLESS if ( !s->hasScannerPaths() ) @@ -296,6 +297,11 @@ TomahawkApp::~TomahawkApp() { tLog() << "Shutting down Tomahawk..."; + if ( !m_session.isNull() ) + delete m_session.data(); + if ( !m_connector.isNull() ) + delete m_connector.data(); + Pipeline::instance()->stop(); if ( !m_servent.isNull() ) @@ -458,15 +464,43 @@ TomahawkApp::initDatabase() void TomahawkApp::initHTTP() { - m_session.setPort( 60210 ); //TODO config - m_session.setListenInterface( QHostAddress::LocalHost ); - m_session.setConnector( &m_connector ); + if ( !TomahawkSettings::instance()->httpEnabled() ) + { + tLog() << "Stopping HTTPd, not enabled"; + if ( !m_session.isNull() ) + delete m_session.data(); + if ( !m_connector.isNull() ) + delete m_connector.data(); + return; + } - Api_v1* api = new Api_v1( &m_session ); - m_session.setStaticContentService( api ); + if ( m_session ) + { + tLog() << "HTTPd session already exists, returning"; + return; + } + + m_session = QWeakPointer< QxtHttpSessionManager >( new QxtHttpSessionManager() ); + m_connector = QWeakPointer< QxtHttpServerConnector >( new QxtHttpServerConnector ); + if ( m_session.isNull() || m_connector.isNull() ) + { + if ( !m_session.isNull() ) + delete m_session.data(); + if ( !m_connector.isNull() ) + delete m_connector.data(); + tLog() << "Failed to start HTTPd, could not create object"; + return; + } + + m_session.data()->setPort( 60210 ); //TODO config + m_session.data()->setListenInterface( QHostAddress::LocalHost ); + m_session.data()->setConnector( m_connector.data() ); - tLog() << "Starting HTTPd on" << m_session.listenInterface().toString() << m_session.port(); - m_session.start(); + Api_v1* api = new Api_v1( m_session.data() ); + m_session.data()->setStaticContentService( api ); + + tLog() << "Starting HTTPd on" << m_session.data()->listenInterface().toString() << m_session.data()->port(); + m_session.data()->start(); } diff --git a/src/tomahawkapp.h b/src/tomahawkapp.h index e97e359b8..f78a05b30 100644 --- a/src/tomahawkapp.h +++ b/src/tomahawkapp.h @@ -101,6 +101,7 @@ public slots: private slots: void initServent(); void initSIP(); + void initHTTP(); void spotifyApiCheckFinished(); @@ -114,8 +115,6 @@ private: void initLocalCollection(); void initPipeline(); - void initHTTP(); - QWeakPointer m_database; QWeakPointer m_scanManager; QWeakPointer m_audioEngine; @@ -135,8 +134,8 @@ private: bool m_headless, m_loaded; - QxtHttpServerConnector m_connector; - QxtHttpSessionManager m_session; + QWeakPointer< QxtHttpServerConnector > m_connector; + QWeakPointer< QxtHttpSessionManager > m_session; }; Q_DECLARE_METATYPE( QPersistentModelIndex )