1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-13 17:43:59 +02:00

Move initialization of Playdar API to the corresponding lib

This commit is contained in:
Uwe L. Korn
2013-08-24 15:13:54 +02:00
parent a340be767d
commit f818ecba52
5 changed files with 79 additions and 47 deletions

View File

@@ -39,11 +39,61 @@
using namespace Tomahawk;
using namespace TomahawkUtils;
Api_v1::Api_v1(QxtAbstractWebSessionManager* sm, QObject* parent)
QPointer< Api_v1 > Api_v1::s_instance = NULL;
QPointer< QxtHttpServerConnector > Api_v1::s_connector;
QPointer< QxtHttpSessionManager > Api_v1::s_session;
Api_v1::Api_v1( QxtAbstractWebSessionManager* sm, QObject* parent )
: QxtWebSlotService(sm, parent)
{
}
Api_v1*
Api_v1::startInstance( QHostAddress interface, qint16 port )
{
if ( !s_session.isNull() )
{
tLog() << "HTTPd session already exists, returning";
return NULL;
}
s_session = QPointer< QxtHttpSessionManager >( new QxtHttpSessionManager() );
s_connector = QPointer< QxtHttpServerConnector >( new QxtHttpServerConnector );
if ( s_session.isNull() || s_connector.isNull() )
{
if ( !s_session.isNull() )
delete s_session.data();
if ( !s_connector.isNull() )
delete s_connector.data();
tLog() << "Failed to start HTTPd, could not create object";
return NULL;
}
s_session->setListenInterface( interface );
s_session->setPort( port );
s_session->setConnector( s_connector.data() );
s_instance = new Api_v1( s_session.data() );
s_session->setStaticContentService( s_instance );
tLog() << "Starting HTTPd on" << s_session->listenInterface().toString() << s_session->port();
s_session->start();
return s_instance;
}
void
Api_v1::stopInstance()
{
if ( !s_connector.isNull() )
delete s_connector.data();
if ( !s_session.isNull() )
delete s_session.data();
if ( !s_instance.isNull() )
delete s_instance;
}
void
Api_v1::auth_1( QxtWebRequestEvent* event, QString arg )

View File

@@ -50,9 +50,26 @@ class TOMAHAWK_PLAYDARAPI_EXPORT Api_v1 : public QxtWebSlotService
Q_OBJECT
public:
Api_v1( QxtAbstractWebSessionManager* sm, QObject* parent = 0 );
/**
* Get the current running instance instaniated by the singleton helper
* functions.
*/
static Api_v1* instance();
/**
* Start a singleton instance of the playdar API. Though you are not
* limited to use one instance of this class, this helper function takes
* care of all related Qxt classes that need to be instantiated to run the API.
*/
static Api_v1* startInstance( QHostAddress interface, qint16 port );
/**
* Stop the singleton instance and release its resources.
*/
static void stopInstance();
public slots:
// authenticating uses /auth_1
// we redirect to /auth_2 for the callback
@@ -83,6 +100,12 @@ private:
QxtWebRequestEvent* m_storedEvent;
QSharedPointer< QIODevice > m_ioDevice;
// Static variables for the singleton instance.
static QPointer< Api_v1 > s_instance;
static QPointer< QxtHttpServerConnector > s_connector;
static QPointer< QxtHttpSessionManager > s_session;
};
#endif

View File

@@ -184,7 +184,6 @@ TARGET_LINK_LIBRARIES( tomahawk_bin
${QT_LIBRARIES}
${MAC_EXTRA_LIBS}
${ECHONEST_LIBRARIES}
${QXTWEB_LIBRARIES}
${QJSON_LIBRARIES}
${TAGLIB_LIBRARIES}
)

View File

@@ -285,11 +285,6 @@ TomahawkApp::~TomahawkApp()
{
tDebug( LOGVERBOSE ) << "Shutting down Tomahawk...";
if ( !m_httpv1_session.isNull() )
delete m_httpv1_session.data();
if ( !m_httpv1_connector.isNull() )
delete m_httpv1_connector.data();
if ( Pipeline::instance() )
Pipeline::instance()->stop();
@@ -482,43 +477,14 @@ TomahawkApp::initDatabase()
void
TomahawkApp::initHTTP()
{
if ( !TomahawkSettings::instance()->httpEnabled() )
if ( TomahawkSettings::instance()->httpEnabled() )
{
tLog() << "Stopping HTTPd, not enabled";
if ( !m_httpv1_session.isNull() )
delete m_httpv1_session.data();
if ( !m_httpv1_connector.isNull() )
delete m_httpv1_connector.data();
return;
Api_v1::startInstance( QHostAddress::LocalHost, 60210 ); // TODO: Config
}
if ( m_httpv1_session )
else
{
tLog() << "HTTPd session already exists, returning";
return;
Api_v1::stopInstance();
}
m_httpv1_session = QPointer< QxtHttpSessionManager >( new QxtHttpSessionManager() );
m_httpv1_connector = QPointer< QxtHttpServerConnector >( new QxtHttpServerConnector );
if ( m_httpv1_session.isNull() || m_httpv1_connector.isNull() )
{
if ( !m_httpv1_session.isNull() )
delete m_httpv1_session.data();
if ( !m_httpv1_connector.isNull() )
delete m_httpv1_connector.data();
tLog() << "Failed to start HTTPd, could not create object";
return;
}
m_httpv1_session->setPort( 60210 ); //TODO config
m_httpv1_session->setListenInterface( QHostAddress::LocalHost );
m_httpv1_session->setConnector( m_httpv1_connector.data() );
Api_v1* api = new Api_v1( m_httpv1_session.data() );
m_httpv1_session->setStaticContentService( api );
tLog() << "Starting HTTPd on" << m_httpv1_session->listenInterface().toString() << m_httpv1_session->port();
m_httpv1_session->start();
}

View File

@@ -31,9 +31,6 @@
#include "HeadlessCheck.h"
#include "config.h"
#include <QxtWeb/QxtHttpServerConnector>
#include <QxtWeb/HttpSessionManager>
#include <QRegExp>
#include <QFile>
#include <QSettings>
@@ -147,9 +144,6 @@ private:
#endif
bool m_headless;
QPointer< QxtHttpServerConnector > m_httpv1_connector;
QPointer< QxtHttpSessionManager > m_httpv1_session;
};
Q_DECLARE_METATYPE( PairList )