From 43e1f7faafe668a583bec1037dd76053eb0e10d3 Mon Sep 17 00:00:00 2001 From: Anis Jonischkeit Date: Tue, 28 Jan 2025 11:56:23 +1100 Subject: [PATCH] try adding request_timeout option --- src/base/bittorrent/session.h | 2 ++ src/base/bittorrent/sessionimpl.cpp | 16 ++++++++++++++++ src/base/bittorrent/sessionimpl.h | 3 +++ src/gui/advancedsettings.cpp | 7 +++++++ src/gui/advancedsettings.h | 2 +- src/webui/api/appcontroller.cpp | 5 +++++ src/webui/www/private/views/preferences.html | 10 ++++++++++ 7 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index 118b02d35..c34892242 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -332,6 +332,8 @@ namespace BitTorrent virtual void setHashingThreads(int num) = 0; virtual int filePoolSize() const = 0; virtual void setFilePoolSize(int size) = 0; + virtual int requestTimeout() const = 0; + virtual void setRequestTimeout(int size) = 0; virtual int checkingMemUsage() const = 0; virtual void setCheckingMemUsage(int size) = 0; virtual int diskCacheSize() const = 0; diff --git a/src/base/bittorrent/sessionimpl.cpp b/src/base/bittorrent/sessionimpl.cpp index 0275dea4e..d88221c72 100644 --- a/src/base/bittorrent/sessionimpl.cpp +++ b/src/base/bittorrent/sessionimpl.cpp @@ -408,6 +408,7 @@ SessionImpl::SessionImpl(QObject *parent) , m_asyncIOThreads(BITTORRENT_SESSION_KEY(u"AsyncIOThreadsCount"_s), 10) , m_hashingThreads(BITTORRENT_SESSION_KEY(u"HashingThreadsCount"_s), 1) , m_filePoolSize(BITTORRENT_SESSION_KEY(u"FilePoolSize"_s), 100) + , m_requestTimeout(BITTORRENT_SESSION_KEY(u"RequestTimeout"_s), 60) , m_checkingMemUsage(BITTORRENT_SESSION_KEY(u"CheckingMemUsageSize"_s), 32) , m_diskCacheSize(BITTORRENT_SESSION_KEY(u"DiskCacheSize"_s), -1) , m_diskCacheTTL(BITTORRENT_SESSION_KEY(u"DiskCacheTTL"_s), 60) @@ -1916,6 +1917,7 @@ lt::settings_pack SessionImpl::loadLTSettings() const settingsPack.set_int(lt::settings_pack::hashing_threads, hashingThreads()); #endif settingsPack.set_int(lt::settings_pack::file_pool_size, filePoolSize()); + settingsPack.set_int(lt::settings_pack::request_timeout, requestTimeout()); const int checkingMemUsageSize = checkingMemUsage() * 64; settingsPack.set_int(lt::settings_pack::checking_mem_usage, checkingMemUsageSize); @@ -4412,6 +4414,20 @@ void SessionImpl::setFilePoolSize(const int size) configureDeferred(); } +int SessionImpl::requestTimeout() const +{ + return m_requestTimeout; +} + +void SessionImpl::setRequestTimeout(const int size) +{ + if (size == m_requestTimeout) + return; + + m_requestTimeout = size; + configureDeferred(); +} + int SessionImpl::checkingMemUsage() const { return std::max(1, m_checkingMemUsage.get()); diff --git a/src/base/bittorrent/sessionimpl.h b/src/base/bittorrent/sessionimpl.h index 9ac416e70..5a7d7016f 100644 --- a/src/base/bittorrent/sessionimpl.h +++ b/src/base/bittorrent/sessionimpl.h @@ -301,6 +301,8 @@ namespace BitTorrent void setHashingThreads(int num) override; int filePoolSize() const override; void setFilePoolSize(int size) override; + int requestTimeout() const override; + void setRequestTimeout(int size) override; int checkingMemUsage() const override; void setCheckingMemUsage(int size) override; int diskCacheSize() const override; @@ -637,6 +639,7 @@ namespace BitTorrent CachedSettingValue m_asyncIOThreads; CachedSettingValue m_hashingThreads; CachedSettingValue m_filePoolSize; + CachedSettingValue m_requestTimeout; CachedSettingValue m_checkingMemUsage; CachedSettingValue m_diskCacheSize; CachedSettingValue m_diskCacheTTL; diff --git a/src/gui/advancedsettings.cpp b/src/gui/advancedsettings.cpp index 27da9beba..6c91e53e4 100644 --- a/src/gui/advancedsettings.cpp +++ b/src/gui/advancedsettings.cpp @@ -121,6 +121,7 @@ namespace HASHING_THREADS, #endif FILE_POOL_SIZE, + REQUEST_TIMEOUT, CHECKING_MEM_USAGE, #ifndef QBT_USES_LIBTORRENT2 // cache @@ -226,6 +227,8 @@ void AdvancedSettings::saveAdvancedSettings() const #endif // File pool size session->setFilePoolSize(m_spinBoxFilePoolSize.value()); + // Request timeout + session->setRequestTimeout(m_spinBoxRequestTimeout.value()); // Checking Memory Usage session->setCheckingMemUsage(m_spinBoxCheckingMemUsage.value()); #ifndef QBT_USES_LIBTORRENT2 @@ -542,6 +545,10 @@ void AdvancedSettings::loadAdvancedSettings() m_spinBoxFilePoolSize.setValue(session->filePoolSize()); addRow(FILE_POOL_SIZE, (tr("File pool size") + u' ' + makeLink(u"https://www.libtorrent.org/reference-Settings.html#file_pool_size", u"(?)")) , &m_spinBoxFilePoolSize); + // Timouts + m_spinBoxRequestTimeout.setValue(session->requestTimeout()); + addRow(REQUEST_TIMEOUT, (tr("Request timeout") + u' ' + makeLink(u"https://www.libtorrent.org/reference-Settings.html#request_timeout", u"(?)")) + , &m_spinBoxRequestTimeout); // Checking Memory Usage m_spinBoxCheckingMemUsage.setMinimum(1); diff --git a/src/gui/advancedsettings.h b/src/gui/advancedsettings.h index 5c81745be..ef47afbb1 100644 --- a/src/gui/advancedsettings.h +++ b/src/gui/advancedsettings.h @@ -69,7 +69,7 @@ private: template void addRow(int row, const QString &text, T *widget); QSpinBox m_spinBoxSaveResumeDataInterval, m_spinBoxSaveStatisticsInterval, m_spinBoxTorrentFileSizeLimit, m_spinBoxBdecodeDepthLimit, m_spinBoxBdecodeTokenLimit, - m_spinBoxAsyncIOThreads, m_spinBoxFilePoolSize, m_spinBoxCheckingMemUsage, m_spinBoxDiskQueueSize, + m_spinBoxAsyncIOThreads, m_spinBoxFilePoolSize, m_spinBoxRequestTimeout, m_spinBoxCheckingMemUsage, m_spinBoxDiskQueueSize, m_spinBoxOutgoingPortsMin, m_spinBoxOutgoingPortsMax, m_spinBoxUPnPLeaseDuration, m_spinBoxPeerToS, m_spinBoxListRefresh, m_spinBoxTrackerPort, m_spinBoxSendBufferWatermark, m_spinBoxSendBufferLowWatermark, m_spinBoxSendBufferWatermarkFactor, m_spinBoxConnectionSpeed, m_spinBoxSocketSendBufferSize, m_spinBoxSocketReceiveBufferSize, m_spinBoxSocketBacklogSize, diff --git a/src/webui/api/appcontroller.cpp b/src/webui/api/appcontroller.cpp index a391c8dc9..417149864 100644 --- a/src/webui/api/appcontroller.cpp +++ b/src/webui/api/appcontroller.cpp @@ -415,6 +415,8 @@ void AppController::preferencesAction() data[u"hashing_threads"_s] = session->hashingThreads(); // File pool size data[u"file_pool_size"_s] = session->filePoolSize(); + // Request timeout + data[u"request_timeout"_s] = session->requestTimeout()(); // Checking memory usage data[u"checking_memory_use"_s] = session->checkingMemUsage(); // Disk write cache @@ -1051,6 +1053,9 @@ void AppController::setPreferencesAction() // File pool size if (hasKey(u"file_pool_size"_s)) session->setFilePoolSize(it.value().toInt()); + // Request timeout + if (hasKey(u"request_timeout"_s)) + session->setRequestTimeout(it.value().toInt()); // Checking Memory Usage if (hasKey(u"checking_memory_use"_s)) session->setCheckingMemUsage(it.value().toInt()); diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index df873927d..ce0201ddb 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -1343,6 +1343,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD + + + + + + + + @@ -2559,6 +2567,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD $("asyncIOThreads").value = pref.async_io_threads; $("hashingThreads").value = pref.hashing_threads; $("filePoolSize").value = pref.file_pool_size; + $("requestTimeout").value = pref.requestTimeout; $("outstandMemoryWhenCheckingTorrents").value = pref.checking_memory_use; $("diskCache").value = pref.disk_cache; $("diskCacheExpiryInterval").value = pref.disk_cache_ttl; @@ -3027,6 +3036,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD settings["async_io_threads"] = Number($("asyncIOThreads").value); settings["hashing_threads"] = Number($("hashingThreads").value); settings["file_pool_size"] = Number($("filePoolSize").value); + settings["request_timeout"] = Number($("requestTimeout").value); settings["checking_memory_use"] = Number($("outstandMemoryWhenCheckingTorrents").value); settings["disk_cache"] = Number($("diskCache").value); settings["disk_cache_ttl"] = Number($("diskCacheExpiryInterval").value);