diff --git a/src/GUI.cpp b/src/GUI.cpp index 220fbd798..3f8f838e3 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -62,7 +62,6 @@ #include "preferences.h" #include #include "console_imp.h" -#include "httpserver.h" #include "torrentPersistentData.h" #include "TransferListFiltersWidget.h" #include "propertieswidget.h" @@ -171,10 +170,6 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis BTSession->startUpTorrents(); // Add torrent given on command line processParams(torrentCmdLine); - // Initialize Web UI - if(Preferences::isWebUiEnabled()) { - initWebUi(Preferences::getWebUiUsername(), Preferences::getWebUiPassword(), Preferences::getWebUiPort()); - } // Use a tcp server to allow only one instance of qBittorrent localServer = new QLocalServer(); QString uid = QString::number(getuid()); @@ -238,9 +233,6 @@ GUI::~GUI() { localServer->close(); delete localServer; delete tabs; - // HTTP Server - if(httpServer) - delete httpServer; qDebug("3"); // Keyboard shortcuts delete switchSearchShortcut; @@ -702,16 +694,6 @@ void GUI::loadPreferences(bool configure_session) { } systrayIntegration = newSystrayIntegration; } - // XXX: Should probably be done in bittorrent, not here - // Update Web UI - if (Preferences::isWebUiEnabled()) { - quint16 port = Preferences::getWebUiPort(); - QString username = Preferences::getWebUiUsername(); - QString password = Preferences::getWebUiPassword(); - initWebUi(username, password, port); - } else if(httpServer) { - delete httpServer; - } // General bool new_displaySpeedInTitle = Preferences::speedInTitleBar(); if(!new_displaySpeedInTitle && new_displaySpeedInTitle != displaySpeedInTitle) { @@ -893,20 +875,6 @@ void GUI::on_actionOptions_triggered() { connect(options, SIGNAL(status_changed()), this, SLOT(optionsSaved())); } -bool GUI::initWebUi(QString username, QString password, int port) { - if(httpServer) - httpServer->close(); - else - httpServer = new HttpServer(BTSession, 3000, this); - httpServer->setAuthorization(username, password); - bool success = httpServer->listen(QHostAddress::Any, port); - if (success) - qDebug("Web UI listening on port %d", port); - else - QMessageBox::critical(this, "Web User Interface Error", "Unable to initialize HTTP Server on port " + misc::toQString(port)); - return success; -} - /***************************************************** * * * HTTP Downloader * diff --git a/src/GUI.h b/src/GUI.h index 84cc77164..a69bf8317 100644 --- a/src/GUI.h +++ b/src/GUI.h @@ -53,7 +53,6 @@ class options_imp; class QTabWidget; class QLabel; class QModelIndex; -class HttpServer; class QFrame; class TransferListWidget; class TransferListFiltersWidget; @@ -97,8 +96,6 @@ class GUI : public QMainWindow, private Ui::MainWindow{ SearchEngine *searchEngine; // RSS QPointer rssWidget; - // Web UI - QPointer httpServer; // Misc QLocalServer *localServer; QLocalSocket *clientConnection; @@ -142,8 +139,6 @@ class GUI : public QMainWindow, private Ui::MainWindow{ void processDownloadedFiles(QString path, QString url); void downloadFromURLList(const QStringList& urls); void finishedTorrent(QTorrentHandle& h) const; - //void updateLists(bool force=false); - bool initWebUi(QString username, QString password, int port); // Options slots void on_actionOptions_triggered(); void optionsSaved(); diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index 79f045767..c58b701f2 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -42,9 +42,10 @@ #include "preferences.h" #include "geoip.h" #include "torrentPersistentData.h" +#include "httpserver.h" #include #ifdef LIBTORRENT_0_15 - #include +#include #endif #include #include @@ -119,6 +120,9 @@ bittorrent::~bittorrent() { if(FSWatcher) { delete FSWatcher; } + // HTTP Server + if(httpServer) + delete httpServer; if(timerETA) delete timerETA; // Delete BT session @@ -370,6 +374,15 @@ void bittorrent::configureSession() { }else{ disableIPFilter(); } + // Update Web UI + if (Preferences::isWebUiEnabled()) { + quint16 port = Preferences::getWebUiPort(); + QString username = Preferences::getWebUiUsername(); + QString password = Preferences::getWebUiPassword(); + initWebUi(username, password, port); + } else if(httpServer) { + delete httpServer; + } // * Proxy settings proxy_settings proxySettings; if(Preferences::isProxyEnabled()) { @@ -438,6 +451,20 @@ void bittorrent::configureSession() { qDebug("Session configured"); } +bool bittorrent::initWebUi(QString username, QString password, int port) { + if(httpServer) + httpServer->close(); + else + httpServer = new HttpServer(this, 3000, this); + httpServer->setAuthorization(username, password); + bool success = httpServer->listen(QHostAddress::Any, port); + if (success) + qDebug("Web UI listening on port %d", port); + else + addConsoleMessage(tr("Web User Interface Error - Unable to bind Web UI to port %1").arg(port), QColor("red")); + return success; +} + void bittorrent::takeETASamples() { bool change = false;; foreach(const QString &hash, ETA_samples.keys()) { diff --git a/src/bittorrent.h b/src/bittorrent.h index 84a710621..3a4148e72 100644 --- a/src/bittorrent.h +++ b/src/bittorrent.h @@ -48,6 +48,7 @@ class downloadThread; class QTimer; class FileSystemWatcher; class FilterParserThread; +class HttpServer; class bittorrent : public QObject { Q_OBJECT @@ -79,9 +80,12 @@ class bittorrent : public QObject { bool geoipDBLoaded; QPointer timerETA; QHash > ETA_samples; + // Web UI + QPointer httpServer; protected: QString getSavePath(QString hash); + bool initWebUi(QString username, QString password, int port); public: // Constructor / Destructor