From be338b969cc1b18a544e4d32e55d17bfa994d549 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:26:34 +0400 Subject: [PATCH 1/7] Remove unneccessary includes of libtorrent in misc.h --- src/misc.cpp | 29 +++++++++++++++++++++++++++++ src/misc.h | 39 ++++++++++++++++----------------------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/misc.cpp b/src/misc.cpp index fb0e1ebe3..8ace9bbb3 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -70,6 +70,13 @@ const int UNLEN = 256; #endif #endif // DISABLE_GUI +#if LIBTORRENT_VERSION_NUM < 10000 +#include +#else +#include +#endif +#include + using namespace libtorrent; static struct { const char *source; const char *comment; } units[] = { @@ -80,6 +87,28 @@ static struct { const char *source; const char *comment; } units[] = { QT_TRANSLATE_NOOP3("misc", "TiB", "tebibytes (1024 gibibytes)") }; +QString misc::toQString(const std::string &str) { + return QString::fromLocal8Bit(str.c_str()); +} + +QString misc::toQString(const char* str) { + return QString::fromLocal8Bit(str); +} + +QString misc::toQStringU(const std::string &str) { + return QString::fromUtf8(str.c_str()); +} + +QString misc::toQStringU(const char* str) { + return QString::fromUtf8(str); +} + +QString misc::toQString(const libtorrent::sha1_hash &hash) { + char out[41]; + libtorrent::to_hex((char const*)&hash[0], libtorrent::sha1_hash::size, out); + return QString(out); +} + #ifndef DISABLE_GUI void misc::shutdownComputer(shutDownAction action) { #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) && defined(QT_DBUS_LIB) diff --git a/src/misc.h b/src/misc.h index 45593c074..334c29d90 100644 --- a/src/misc.h +++ b/src/misc.h @@ -31,8 +31,6 @@ #ifndef MISC_H #define MISC_H -#include -#include #include #include #include @@ -46,33 +44,28 @@ #include #endif +#include + +namespace libtorrent { +#if LIBTORRENT_VERSION_NUM < 10000 + class big_number; + typedef big_number sha1_hash; +#else + class sha1_hash; +#endif +} + const qlonglong MAX_ETA = 8640000; enum shutDownAction { NO_SHUTDOWN, SHUTDOWN_COMPUTER, SUSPEND_COMPUTER, HIBERNATE_COMPUTER }; /* Miscellaneaous functions that can be useful */ namespace misc { - inline QString toQString(const std::string &str) { - return QString::fromLocal8Bit(str.c_str()); - } - - inline QString toQString(const char* str) { - return QString::fromLocal8Bit(str); - } - - inline QString toQStringU(const std::string &str) { - return QString::fromUtf8(str.c_str()); - } - - inline QString toQStringU(const char* str) { - return QString::fromUtf8(str); - } - - inline QString toQString(const libtorrent::sha1_hash &hash) { - char out[41]; - libtorrent::to_hex((char const*)&hash[0], libtorrent::sha1_hash::size, out); - return QString(out); - } + QString toQString(const std::string &str); + QString toQString(const char* str); + QString toQStringU(const std::string &str); + QString toQStringU(const char* str); + QString toQString(const libtorrent::sha1_hash &hash); #ifndef DISABLE_GUI void shutdownComputer(shutDownAction action=SHUTDOWN_COMPUTER); From 5ea1a4c3cc4e045411e73d2681b978abbb054819 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:29:12 +0400 Subject: [PATCH 2/7] Remove inclusion of from misc.h --- src/misc.cpp | 16 ++++++++++++++++ src/misc.h | 12 ++---------- src/properties/propertieswidget.cpp | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/misc.cpp b/src/misc.cpp index 8ace9bbb3..c9b1987d3 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #ifdef DISABLE_GUI #include @@ -631,3 +632,18 @@ QString misc::accurateDoubleToString(const double &n, const int &precision, bool else return QString::number(std::floor(n*prec)/prec, 'f', precision); } + +namespace { + // Trick to get a portable sleep() function + class SleeperThread : public QThread { + public: + static void msleep(unsigned long msecs) + { + QThread::msleep(msecs); + } + }; +} + +void misc::msleep(unsigned long msecs) { + SleeperThread::msleep(msecs); +} diff --git a/src/misc.h b/src/misc.h index 334c29d90..9e7cba903 100644 --- a/src/misc.h +++ b/src/misc.h @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -106,15 +105,8 @@ namespace misc #ifndef DISABLE_GUI bool naturalSort(QString left, QString right, bool& result); #endif -} -// Trick to get a portable sleep() function -class SleeperThread : public QThread { -public: - static void msleep(unsigned long msecs) - { - QThread::msleep(msecs); - } -}; + void msleep(unsigned long msecs); +} #endif diff --git a/src/properties/propertieswidget.cpp b/src/properties/propertieswidget.cpp index 36fb9b284..62486ac1f 100644 --- a/src/properties/propertieswidget.cpp +++ b/src/properties/propertieswidget.cpp @@ -666,7 +666,7 @@ void PropertiesWidget::renameSelectedFile() { int timeout = 10; while(!QDir().rmpath(old_folder.absolutePath()) && timeout > 0) { // XXX: We should not sleep here (freezes the UI for 1 second) - SleeperThread::msleep(100); + misc::msleep(100); --timeout; } } From 83dd35dbc99c68f955a6571a55a5a0227ffa8eb4 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:33:19 +0400 Subject: [PATCH 3/7] Make alertdispatcher.h self contained and replace include libtorrent/session with forward declaration --- src/qtlibtorrent/alertdispatcher.cpp | 1 + src/qtlibtorrent/alertdispatcher.h | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/qtlibtorrent/alertdispatcher.cpp b/src/qtlibtorrent/alertdispatcher.cpp index ccfd3308c..1ef90885c 100644 --- a/src/qtlibtorrent/alertdispatcher.cpp +++ b/src/qtlibtorrent/alertdispatcher.cpp @@ -30,6 +30,7 @@ #include "alertdispatcher.h" +#include #include #include diff --git a/src/qtlibtorrent/alertdispatcher.h b/src/qtlibtorrent/alertdispatcher.h index aa2a9ec1f..5ebaf9bc1 100644 --- a/src/qtlibtorrent/alertdispatcher.h +++ b/src/qtlibtorrent/alertdispatcher.h @@ -36,7 +36,14 @@ #include #include #include -#include + +#include +#include + +namespace libtorrent { + class session; + class alert; +} class QAlertDispatcher : public QObject { Q_OBJECT From c9b27e032b5ad8322541bc21ca0dd8c0ea91fb80 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:35:41 +0400 Subject: [PATCH 4/7] Remove inclusion of alertdispatch.h from qbtsession.h --- src/qtlibtorrent/qbtsession.cpp | 1 + src/qtlibtorrent/qbtsession.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 1417f4a37..891251c75 100755 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -41,6 +41,7 @@ #include "torrentspeedmonitor.h" #include "torrentstatistics.h" #include "qbtsession.h" +#include "alertdispatcher.h" #include "misc.h" #include "fs_utils.h" #include "downloadthread.h" diff --git a/src/qtlibtorrent/qbtsession.h b/src/qtlibtorrent/qbtsession.h index 2b252c6ae..4fd63f848 100755 --- a/src/qtlibtorrent/qbtsession.h +++ b/src/qtlibtorrent/qbtsession.h @@ -52,7 +52,6 @@ #include "qtracker.h" #include "qtorrenthandle.h" #include "trackerinfos.h" -#include "alertdispatcher.h" #include "misc.h" #define MAX_SAMPLES 20 @@ -65,6 +64,7 @@ class ScanFoldersModel; class TorrentSpeedMonitor; class TorrentStatistics; class DNSUpdater; +class QAlertDispatcher; const int MAX_LOG_MESSAGES = 1000; From b2e3739da2bf9daa28090371e9ae659d0f080e15 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:37:34 +0400 Subject: [PATCH 5/7] Replace include of with forward declaration --- src/geoip/geoipmanager.cpp | 1 + src/geoip/geoipmanager.h | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/geoip/geoipmanager.cpp b/src/geoip/geoipmanager.cpp index 9401ed091..6b970d52c 100644 --- a/src/geoip/geoipmanager.cpp +++ b/src/geoip/geoipmanager.cpp @@ -65,6 +65,7 @@ #include #include "fs_utils.h" +#include using namespace libtorrent; diff --git a/src/geoip/geoipmanager.h b/src/geoip/geoipmanager.h index 00bb730fa..7ea828e57 100644 --- a/src/geoip/geoipmanager.h +++ b/src/geoip/geoipmanager.h @@ -31,10 +31,13 @@ #ifndef GEOIPMANAGER_H #define GEOIPMANAGER_H -#include #include #include +namespace libtorrent { + class session; +} + class GeoIPManager : public QObject { Q_OBJECT From f6732e87f2499a8b781b998711a89772796e4055 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:39:14 +0400 Subject: [PATCH 6/7] Remove inclusion of "qtracker.h" in "qbtsession.h" --- src/qtlibtorrent/qbtsession.cpp | 1 + src/qtlibtorrent/qbtsession.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 891251c75..50b4b6edc 100755 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -48,6 +48,7 @@ #include "filterparserthread.h" #include "preferences.h" #include "scannedfoldersmodel.h" +#include "qtracker.h" #ifndef DISABLE_GUI #include "shutdownconfirm.h" #include "geoipmanager.h" diff --git a/src/qtlibtorrent/qbtsession.h b/src/qtlibtorrent/qbtsession.h index 4fd63f848..26b30d273 100755 --- a/src/qtlibtorrent/qbtsession.h +++ b/src/qtlibtorrent/qbtsession.h @@ -49,7 +49,6 @@ #include #include -#include "qtracker.h" #include "qtorrenthandle.h" #include "trackerinfos.h" #include "misc.h" @@ -73,6 +72,8 @@ enum TorrentExportFolder { FinishedTorrentExportFolder }; +class QTracker; + class QBtSession : public QObject { Q_OBJECT Q_DISABLE_COPY(QBtSession) From de5f38a160372811c36718b7e02b3d7d94ff5c73 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sat, 18 Oct 2014 03:42:36 +0400 Subject: [PATCH 7/7] Speedup compilation speed libtorrent has a relatively heavy headers, that take lots of time to process. This commit removes unnecessary includes of libtorrent headers and replaces them with forward declarations. I had to move some functions in QBtSession from slots to regular functions because moc'ed file want to see complete types of all parameters of slots. "time make" of full rebuild before this series of commits: real 13m35.937s user 12m1.295s sys 1m25.908s after: real 10m54.390s user 9m31.167s sys 1m12.580s --- src/fs_utils.h | 1 - src/preferences/options_imp.h | 1 - src/properties/peeraddition.h | 3 +- src/qtlibtorrent/qbtsession.cpp | 97 ++++++++++++++++--------------- src/qtlibtorrent/qbtsession.h | 49 +++++++++++++--- src/qtlibtorrent/qtorrenthandle.h | 2 - src/qtlibtorrent/torrentmodel.cpp | 2 + src/statsdialog.cpp | 2 + src/statusbar.h | 3 + src/webui/btjson.cpp | 2 + src/webui/httpconnection.cpp | 2 + 11 files changed, 105 insertions(+), 59 deletions(-) diff --git a/src/fs_utils.h b/src/fs_utils.h index be7f6ba21..eeceec516 100644 --- a/src/fs_utils.h +++ b/src/fs_utils.h @@ -32,7 +32,6 @@ #define FS_UTILS_H #include -#include /** * Utility functions related to file system. diff --git a/src/preferences/options_imp.h b/src/preferences/options_imp.h index f219239d8..4dbf277a5 100755 --- a/src/preferences/options_imp.h +++ b/src/preferences/options_imp.h @@ -32,7 +32,6 @@ #define OPTIONS_IMP_H #include "ui_options.h" -#include // actions on double-click on torrents enum DoubleClickAction {TOGGLE_PAUSE, OPEN_DEST, NO_ACTION}; diff --git a/src/properties/peeraddition.h b/src/properties/peeraddition.h index 07cde7994..b4f778f40 100644 --- a/src/properties/peeraddition.h +++ b/src/properties/peeraddition.h @@ -37,7 +37,8 @@ #include #include "ui_peer.h" -#include +#include +#include #include #if BOOST_VERSION < 103500 diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 50b4b6edc..3795c67d4 100755 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -70,6 +70,9 @@ #include #include #include +#include +#include +#include #include #include #include "dnsupdater.h" @@ -2056,48 +2059,6 @@ void QBtSession::disableIPFilter() { filterPath = ""; } -// Set BT session settings (user_agent) -void QBtSession::setSessionSettings(const session_settings &sessionSettings) { - qDebug("Set session settings"); - s->set_settings(sessionSettings); -} - -// Set Proxy -void QBtSession::setProxySettings(proxy_settings proxySettings) { - qDebug() << Q_FUNC_INFO; - - proxySettings.proxy_peer_connections = Preferences::instance()->proxyPeerConnections(); - s->set_proxy(proxySettings); - - // Define environment variable - QString proxy_str; - switch(proxySettings.type) { - case proxy_settings::http_pw: - proxy_str = "http://"+misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); - break; - case proxy_settings::http: - proxy_str = "http://"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); - break; - case proxy_settings::socks5: - proxy_str = misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); - break; - case proxy_settings::socks5_pw: - proxy_str = misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); - break; - default: - qDebug("Disabling HTTP communications proxy"); - qputenv("http_proxy", QByteArray()); - qputenv("sock_proxy", QByteArray()); - return; - } - // We need this for urllib in search engine plugins - qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str)); - if (proxySettings.type == proxy_settings::socks5 || proxySettings.type == proxy_settings::socks5_pw) - qputenv("sock_proxy", proxy_str.toLocal8Bit()); - else - qputenv("http_proxy", proxy_str.toLocal8Bit()); -} - void QBtSession::recursiveTorrentDownload(const QTorrentHandle &h) { try { for (int i=0; istatus(); } +void QBtSession::applyEncryptionSettings(pe_settings se) { + qDebug("Applying encryption settings"); + s->set_pe_settings(se); +} + +// Set Proxy +void QBtSession::setProxySettings(proxy_settings proxySettings) { + qDebug() << Q_FUNC_INFO; + + proxySettings.proxy_peer_connections = Preferences::instance()->proxyPeerConnections(); + s->set_proxy(proxySettings); + + // Define environment variable + QString proxy_str; + switch(proxySettings.type) { + case proxy_settings::http_pw: + proxy_str = "http://"+misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); + break; + case proxy_settings::http: + proxy_str = "http://"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); + break; + case proxy_settings::socks5: + proxy_str = misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); + break; + case proxy_settings::socks5_pw: + proxy_str = misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port); + break; + default: + qDebug("Disabling HTTP communications proxy"); + qputenv("http_proxy", QByteArray()); + qputenv("sock_proxy", QByteArray()); + return; + } + // We need this for urllib in search engine plugins + qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str)); + if (proxySettings.type == proxy_settings::socks5 || proxySettings.type == proxy_settings::socks5_pw) + qputenv("sock_proxy", proxy_str.toLocal8Bit()); + else + qputenv("http_proxy", proxy_str.toLocal8Bit()); +} + +// Set BT session settings (user_agent) +void QBtSession::setSessionSettings(const session_settings &sessionSettings) { + qDebug("Set session settings"); + s->set_settings(sessionSettings); +} + QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString filePath, bool imported) { QString savePath; if (TorrentTempData::hasTempData(hash)) { @@ -2923,11 +2931,6 @@ qreal QBtSession::getPayloadUploadRate() const { return s->status().payload_upload_rate; } -void QBtSession::applyEncryptionSettings(pe_settings se) { - qDebug("Applying encryption settings"); - s->set_pe_settings(se); -} - // Will fast resume torrents in // backup directory void QBtSession::startUpTorrents() { diff --git a/src/qtlibtorrent/qbtsession.h b/src/qtlibtorrent/qbtsession.h index 26b30d273..a68ff26ab 100755 --- a/src/qtlibtorrent/qbtsession.h +++ b/src/qtlibtorrent/qbtsession.h @@ -45,15 +45,50 @@ #include #include -#include -#include -#include #include "qtorrenthandle.h" #include "trackerinfos.h" #include "misc.h" -#define MAX_SAMPLES 20 +namespace libtorrent { + class add_torrent_params; + class pe_settings; + class proxy_settings; + class session; + class session_status; + + class alert; + class torrent_finished_alert; + class save_resume_data_alert; + class file_renamed_alert; + class torrent_deleted_alert; + class storage_moved_alert; + class storage_moved_failed_alert; + class metadata_received_alert; + class file_error_alert; + class file_completed_alert; + class torrent_paused_alert; + class tracker_error_alert; + class tracker_reply_alert; + class tracker_warning_alert; + class portmap_error_alert; + class portmap_alert; + class peer_blocked_alert; + class peer_ban_alert; + class fastresume_rejected_alert; + class url_seed_alert; + class listen_succeeded_alert; + class listen_failed_alert; + class torrent_checked_alert; + class external_ip_alert; + class state_update_alert; + class stats_alert; + +#if LIBTORRENT_VERSION_NUM < 10000 + class upnp; + class natpmp; +#endif +} class DownloadThread; class FilterParserThread; @@ -152,8 +187,6 @@ public slots: void setMaxRatioPerTorrent(const QString &hash, qreal ratio); qreal getMaxRatioPerTorrent(const QString &hash, bool *usesGlobalRatio) const; void removeRatioPerTorrent(const QString &hash); - void setProxySettings(libtorrent::proxy_settings proxySettings); - void setSessionSettings(const libtorrent::session_settings &sessionSettings); void setDefaultSavePath(const QString &savepath); void setDefaultTempPath(const QString &temppath); void setAppendLabelToSavePath(bool append); @@ -161,7 +194,6 @@ public slots: void changeLabelInTorrentSavePath(const QTorrentHandle &h, QString old_label, QString new_label); void appendqBextensionToTorrent(const QTorrentHandle &h, bool append); void setAppendqBExtension(bool append); - void applyEncryptionSettings(libtorrent::pe_settings se); void setDownloadLimit(QString hash, long val); void setUploadLimit(QString hash, long val); void enableUPnP(bool b); @@ -185,6 +217,9 @@ public slots: void unhideMagnet(const QString &hash); private: + void applyEncryptionSettings(libtorrent::pe_settings se); + void setProxySettings(libtorrent::proxy_settings proxySettings); + void setSessionSettings(const libtorrent::session_settings &sessionSettings); QString getSavePath(const QString &hash, bool fromScanDir = false, QString filePath = QString::null, bool imported = false); bool loadFastResumeData(const QString &hash, std::vector &buf); void loadTorrentSettings(QTorrentHandle &h); diff --git a/src/qtlibtorrent/qtorrenthandle.h b/src/qtlibtorrent/qtorrenthandle.h index ac6439cc0..a41be30c2 100644 --- a/src/qtlibtorrent/qtorrenthandle.h +++ b/src/qtlibtorrent/qtorrenthandle.h @@ -31,9 +31,7 @@ #ifndef QTORRENTHANDLE_H #define QTORRENTHANDLE_H -#include #include -#include #include diff --git a/src/qtlibtorrent/torrentmodel.cpp b/src/qtlibtorrent/torrentmodel.cpp index 419361ec1..fcaee6bd3 100644 --- a/src/qtlibtorrent/torrentmodel.cpp +++ b/src/qtlibtorrent/torrentmodel.cpp @@ -35,6 +35,8 @@ #include "qbtsession.h" #include "fs_utils.h" +#include + using namespace libtorrent; namespace { diff --git a/src/statsdialog.cpp b/src/statsdialog.cpp index bbaa43b30..f90e38716 100644 --- a/src/statsdialog.cpp +++ b/src/statsdialog.cpp @@ -32,6 +32,8 @@ #include "ui_statsdialog.h" #include "misc.h" +#include +#include StatsDialog::StatsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::StatsDialog) { ui->setupUi(this); diff --git a/src/statusbar.h b/src/statusbar.h index 8c0316638..1870e87f3 100644 --- a/src/statusbar.h +++ b/src/statusbar.h @@ -46,6 +46,9 @@ #include "preferences.h" #include "misc.h" +#include +#include + class StatusBar: public QObject { Q_OBJECT diff --git a/src/webui/btjson.cpp b/src/webui/btjson.cpp index ad2be1dca..b276c1de3 100644 --- a/src/webui/btjson.cpp +++ b/src/webui/btjson.cpp @@ -39,6 +39,8 @@ #include #endif +#include + using namespace libtorrent; #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) diff --git a/src/webui/httpconnection.cpp b/src/webui/httpconnection.cpp index af1f619f5..00ac1c636 100644 --- a/src/webui/httpconnection.cpp +++ b/src/webui/httpconnection.cpp @@ -52,6 +52,8 @@ #include #include +#include + using namespace libtorrent; HttpConnection::HttpConnection(QTcpSocket *socket, HttpServer *parent)