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 )