diff --git a/src/core/bittorrent/session.cpp b/src/core/bittorrent/session.cpp index ad64966e0..67c78fce9 100644 --- a/src/core/bittorrent/session.cpp +++ b/src/core/bittorrent/session.cpp @@ -402,8 +402,8 @@ void Session::setSessionSettings() // Outgoing ports sessionSettings.outgoing_ports = std::make_pair(pref->outgoingPortsMin(), pref->outgoingPortsMax()); // Ignore limits on LAN - qDebug() << "Ignore limits on LAN" << pref->ignoreLimitsOnLAN(); - sessionSettings.ignore_limits_on_local_network = pref->ignoreLimitsOnLAN(); + qDebug() << "Ignore limits on LAN" << pref->getIgnoreLimitsOnLAN(); + sessionSettings.ignore_limits_on_local_network = pref->getIgnoreLimitsOnLAN(); // Include overhead in transfer limits sessionSettings.rate_limit_ip_overhead = pref->includeOverheadInLimits(); // IP address to announce to trackers diff --git a/src/core/preferences.cpp b/src/core/preferences.cpp index c37719cbf..d90b2aa26 100644 --- a/src/core/preferences.cpp +++ b/src/core/preferences.cpp @@ -1418,12 +1418,12 @@ void Preferences::setOutgoingPortsMax(uint val) setValue("Preferences/Advanced/OutgoingPortsMax", val); } -bool Preferences::ignoreLimitsOnLAN() const +bool Preferences::getIgnoreLimitsOnLAN() const { return value("Preferences/Advanced/IgnoreLimitsLAN", true).toBool(); } -void Preferences::ignoreLimitsOnLAN(bool ignore) +void Preferences::setIgnoreLimitsOnLAN(bool ignore) { setValue("Preferences/Advanced/IgnoreLimitsLAN", ignore); } diff --git a/src/core/preferences.h b/src/core/preferences.h index b44179a5d..e81357f2f 100644 --- a/src/core/preferences.h +++ b/src/core/preferences.h @@ -361,8 +361,8 @@ public: void setOutgoingPortsMin(uint val); uint outgoingPortsMax() const; void setOutgoingPortsMax(uint val); - bool ignoreLimitsOnLAN() const; - void ignoreLimitsOnLAN(bool ignore); + bool getIgnoreLimitsOnLAN() const; + void setIgnoreLimitsOnLAN(bool ignore); bool includeOverheadInLimits() const; void includeOverheadInLimits(bool include); bool trackerExchangeEnabled() const; diff --git a/src/gui/advancedsettings.h b/src/gui/advancedsettings.h index 2c70c3e98..149176dcb 100644 --- a/src/gui/advancedsettings.h +++ b/src/gui/advancedsettings.h @@ -12,293 +12,320 @@ #include "core/preferences.h" -enum AdvSettingsCols {PROPERTY, VALUE}; -enum AdvSettingsRows {DISK_CACHE, DISK_CACHE_TTL, OS_CACHE, SAVE_RESUME_DATA_INTERVAL, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN, SUPER_SEEDING, NETWORK_IFACE, NETWORK_LISTEN_IPV6, NETWORK_ADDRESS, PROGRAM_NOTIFICATIONS, TRACKER_STATUS, TRACKER_PORT, - #if defined(Q_OS_WIN) || defined(Q_OS_MAC) - UPDATE_CHECK, - #endif - #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - USE_ICON_THEME, - #endif - CONFIRM_DELETE_TORRENT, CONFIRM_RECHECK_TORRENT, TRACKER_EXCHANGE, - ANNOUNCE_ALL_TRACKERS, - ROW_COUNT}; +enum AdvSettingsCols +{ + PROPERTY, + VALUE +}; +enum AdvSettingsRows +{ + DISK_CACHE, + DISK_CACHE_TTL, + OS_CACHE, + SAVE_RESUME_DATA_INTERVAL, + OUTGOING_PORT_MIN, + OUTGOING_PORT_MAX, + RECHECK_COMPLETED, + LIST_REFRESH, + RESOLVE_COUNTRIES, + RESOLVE_HOSTS, + MAX_HALF_OPEN, + SUPER_SEEDING, + NETWORK_IFACE, + NETWORK_LISTEN_IPV6, + NETWORK_ADDRESS, + PROGRAM_NOTIFICATIONS, + TRACKER_STATUS, + TRACKER_PORT, +#if defined(Q_OS_WIN) || defined(Q_OS_MAC) + UPDATE_CHECK, +#endif +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) + USE_ICON_THEME, +#endif + CONFIRM_DELETE_TORRENT, + CONFIRM_RECHECK_TORRENT, + TRACKER_EXCHANGE, + ANNOUNCE_ALL_TRACKERS, + ROW_COUNT +}; -class AdvancedSettings: public QTableWidget { - Q_OBJECT +class AdvancedSettings: public QTableWidget +{ + Q_OBJECT private: - QSpinBox spin_cache, spin_save_resume_data_interval, outgoing_ports_min, outgoing_ports_max, spin_list_refresh, spin_maxhalfopen, spin_tracker_port; - QCheckBox cb_os_cache, cb_ignore_limits_lan, cb_recheck_completed, cb_resolve_countries, cb_resolve_hosts, - cb_super_seeding, cb_program_notifications, cb_tracker_status, cb_confirm_torrent_deletion, - cb_confirm_torrent_recheck, cb_enable_tracker_ext, cb_listen_ipv6; - QComboBox combo_iface; - QSpinBox spin_cache_ttl; + QSpinBox spin_cache, spin_save_resume_data_interval, outgoing_ports_min, outgoing_ports_max, spin_list_refresh, spin_maxhalfopen, spin_tracker_port; + QCheckBox cb_os_cache, cb_recheck_completed, cb_resolve_countries, cb_resolve_hosts, + cb_super_seeding, cb_program_notifications, cb_tracker_status, cb_confirm_torrent_deletion, + cb_confirm_torrent_recheck, cb_enable_tracker_ext, cb_listen_ipv6; + QComboBox combo_iface; + QSpinBox spin_cache_ttl; #if defined(Q_OS_WIN) || defined(Q_OS_MAC) - QCheckBox cb_update_check; + QCheckBox cb_update_check; #endif #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - QCheckBox cb_use_icon_theme; + QCheckBox cb_use_icon_theme; #endif - QCheckBox cb_announce_all_trackers; - QLineEdit txt_network_address; + QCheckBox cb_announce_all_trackers; + QLineEdit txt_network_address; public: - AdvancedSettings(QWidget *parent=0): QTableWidget(parent) { - // Set visual appearance - setEditTriggers(QAbstractItemView::NoEditTriggers); - setAlternatingRowColors(true); - setColumnCount(2); - QStringList header; - header << tr("Setting") << tr("Value", "Value set for this setting"); - setHorizontalHeaderLabels(header); - setColumnWidth(0, width()/2); - horizontalHeader()->setStretchLastSection(true); - verticalHeader()->setVisible(false); - setRowCount(ROW_COUNT); - // Signals - connect(&spin_cache, SIGNAL(valueChanged(int)), SLOT(updateCacheSpinSuffix(int))); - // Load settings - loadAdvancedSettings(); - } + AdvancedSettings(QWidget *parent=0): QTableWidget(parent) + { + // Set visual appearance + setEditTriggers(QAbstractItemView::NoEditTriggers); + setAlternatingRowColors(true); + setColumnCount(2); + QStringList header; + header << tr("Setting") << tr("Value", "Value set for this setting"); + setHorizontalHeaderLabels(header); + setColumnWidth(0, width()/2); + horizontalHeader()->setStretchLastSection(true); + verticalHeader()->setVisible(false); + setRowCount(ROW_COUNT); + // Signals + connect(&spin_cache, SIGNAL(valueChanged(int)), SLOT(updateCacheSpinSuffix(int))); + // Load settings + loadAdvancedSettings(); + } - ~AdvancedSettings() { - } + ~AdvancedSettings() {} public slots: - void saveAdvancedSettings() { - Preferences* const pref = Preferences::instance(); - // Disk write cache - pref->setDiskCacheSize(spin_cache.value()); - pref->setDiskCacheTTL(spin_cache_ttl.value()); - // Enable OS cache - pref->setOsCache(cb_os_cache.isChecked()); - // Save resume data interval - pref->setSaveResumeDataInterval(spin_save_resume_data_interval.value()); - // Outgoing ports - pref->setOutgoingPortsMin(outgoing_ports_min.value()); - pref->setOutgoingPortsMax(outgoing_ports_max.value()); - // Ignore limits on LAN - pref->ignoreLimitsOnLAN(cb_ignore_limits_lan.isChecked()); - // Recheck torrents on completion - pref->recheckTorrentsOnCompletion(cb_recheck_completed.isChecked()); - // Transfer list refresh interval - pref->setRefreshInterval(spin_list_refresh.value()); - // Peer resolution - pref->resolvePeerCountries(cb_resolve_countries.isChecked()); - pref->resolvePeerHostNames(cb_resolve_hosts.isChecked()); - // Max Half-Open connections - pref->setMaxHalfOpenConnections(spin_maxhalfopen.value()); - // Super seeding - pref->enableSuperSeeding(cb_super_seeding.isChecked()); - // Network interface - if (combo_iface.currentIndex() == 0) { - // All interfaces (default) - pref->setNetworkInterface(QString::null); - pref->setNetworkInterfaceName(QString::null); - } else { - pref->setNetworkInterface(combo_iface.itemData(combo_iface.currentIndex()).toString()); - pref->setNetworkInterfaceName(combo_iface.currentText()); - } - // Listen on IPv6 address - pref->setListenIPv6(cb_listen_ipv6.isChecked()); - // Network address - QHostAddress addr(txt_network_address.text().trimmed()); - if (addr.isNull()) - pref->setNetworkAddress(""); - else - pref->setNetworkAddress(addr.toString()); - // Program notification - pref->useProgramNotification(cb_program_notifications.isChecked()); - // Tracker - pref->setTrackerEnabled(cb_tracker_status.isChecked()); - pref->setTrackerPort(spin_tracker_port.value()); + void saveAdvancedSettings() + { + Preferences* const pref = Preferences::instance(); + // Disk write cache + pref->setDiskCacheSize(spin_cache.value()); + pref->setDiskCacheTTL(spin_cache_ttl.value()); + // Enable OS cache + pref->setOsCache(cb_os_cache.isChecked()); + // Save resume data interval + pref->setSaveResumeDataInterval(spin_save_resume_data_interval.value()); + // Outgoing ports + pref->setOutgoingPortsMin(outgoing_ports_min.value()); + pref->setOutgoingPortsMax(outgoing_ports_max.value()); + // Recheck torrents on completion + pref->recheckTorrentsOnCompletion(cb_recheck_completed.isChecked()); + // Transfer list refresh interval + pref->setRefreshInterval(spin_list_refresh.value()); + // Peer resolution + pref->resolvePeerCountries(cb_resolve_countries.isChecked()); + pref->resolvePeerHostNames(cb_resolve_hosts.isChecked()); + // Max Half-Open connections + pref->setMaxHalfOpenConnections(spin_maxhalfopen.value()); + // Super seeding + pref->enableSuperSeeding(cb_super_seeding.isChecked()); + // Network interface + if (combo_iface.currentIndex() == 0) { + // All interfaces (default) + pref->setNetworkInterface(QString::null); + pref->setNetworkInterfaceName(QString::null); + } + else { + pref->setNetworkInterface(combo_iface.itemData(combo_iface.currentIndex()).toString()); + pref->setNetworkInterfaceName(combo_iface.currentText()); + } + // Listen on IPv6 address + pref->setListenIPv6(cb_listen_ipv6.isChecked()); + // Network address + QHostAddress addr(txt_network_address.text().trimmed()); + if (addr.isNull()) + pref->setNetworkAddress(""); + else + pref->setNetworkAddress(addr.toString()); + // Program notification + pref->useProgramNotification(cb_program_notifications.isChecked()); + // Tracker + pref->setTrackerEnabled(cb_tracker_status.isChecked()); + pref->setTrackerPort(spin_tracker_port.value()); #if defined(Q_OS_WIN) || defined(Q_OS_MAC) - pref->setUpdateCheckEnabled(cb_update_check.isChecked()); + pref->setUpdateCheckEnabled(cb_update_check.isChecked()); #endif - // Icon theme + // Icon theme #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - pref->useSystemIconTheme(cb_use_icon_theme.isChecked()); + pref->useSystemIconTheme(cb_use_icon_theme.isChecked()); #endif - pref->setConfirmTorrentDeletion(cb_confirm_torrent_deletion.isChecked()); - pref->setConfirmTorrentRecheck(cb_confirm_torrent_recheck.isChecked()); - // Tracker exchange - pref->setTrackerExchangeEnabled(cb_enable_tracker_ext.isChecked()); - pref->setAnnounceToAllTrackers(cb_announce_all_trackers.isChecked()); - } + pref->setConfirmTorrentDeletion(cb_confirm_torrent_deletion.isChecked()); + pref->setConfirmTorrentRecheck(cb_confirm_torrent_recheck.isChecked()); + // Tracker exchange + pref->setTrackerExchangeEnabled(cb_enable_tracker_ext.isChecked()); + pref->setAnnounceToAllTrackers(cb_announce_all_trackers.isChecked()); + } signals: - void settingsChanged(); + void settingsChanged(); private: - void setRow(int row, const QString &property, QSpinBox* editor) { - setItem(row, PROPERTY, new QTableWidgetItem(property)); - bool ok; Q_UNUSED(ok); - ok = connect(editor, SIGNAL(valueChanged(int)), SIGNAL(settingsChanged())); - Q_ASSERT(ok); - setCellWidget(row, VALUE, editor); - } + void setRow(int row, const QString &property, QSpinBox* editor) + { + setItem(row, PROPERTY, new QTableWidgetItem(property)); + bool ok; Q_UNUSED(ok); + ok = connect(editor, SIGNAL(valueChanged(int)), SIGNAL(settingsChanged())); + Q_ASSERT(ok); + setCellWidget(row, VALUE, editor); + } - void setRow(int row, const QString &property, QComboBox* editor) { - setItem(row, PROPERTY, new QTableWidgetItem(property)); - bool ok; Q_UNUSED(ok); - ok = connect(editor, SIGNAL(currentIndexChanged(int)), SIGNAL(settingsChanged())); - Q_ASSERT(ok); - setCellWidget(row, VALUE, editor); - } + void setRow(int row, const QString &property, QComboBox* editor) + { + setItem(row, PROPERTY, new QTableWidgetItem(property)); + bool ok; Q_UNUSED(ok); + ok = connect(editor, SIGNAL(currentIndexChanged(int)), SIGNAL(settingsChanged())); + Q_ASSERT(ok); + setCellWidget(row, VALUE, editor); + } - void setRow(int row, const QString &property, QCheckBox* editor) { - setItem(row, PROPERTY, new QTableWidgetItem(property)); - bool ok; Q_UNUSED(ok); - ok = connect(editor, SIGNAL(stateChanged(int)), SIGNAL(settingsChanged())); - Q_ASSERT(ok); - setCellWidget(row, VALUE, editor); - } + void setRow(int row, const QString &property, QCheckBox* editor) + { + setItem(row, PROPERTY, new QTableWidgetItem(property)); + bool ok; Q_UNUSED(ok); + ok = connect(editor, SIGNAL(stateChanged(int)), SIGNAL(settingsChanged())); + Q_ASSERT(ok); + setCellWidget(row, VALUE, editor); + } - void setRow(int row, const QString &property, QLineEdit* editor) { - setItem(row, PROPERTY, new QTableWidgetItem(property)); - bool ok; Q_UNUSED(ok); - ok = connect(editor, SIGNAL(textChanged(QString)), SIGNAL(settingsChanged())); - Q_ASSERT(ok); - setCellWidget(row, VALUE, editor); - } + void setRow(int row, const QString &property, QLineEdit* editor) + { + setItem(row, PROPERTY, new QTableWidgetItem(property)); + bool ok; Q_UNUSED(ok); + ok = connect(editor, SIGNAL(textChanged(QString)), SIGNAL(settingsChanged())); + Q_ASSERT(ok); + setCellWidget(row, VALUE, editor); + } private slots: - void updateCacheSpinSuffix(int value) - { - if (value <= 0) - spin_cache.setSuffix(tr(" (auto)")); - else - spin_cache.setSuffix(tr(" MiB")); - } + void updateCacheSpinSuffix(int value) + { + if (value <= 0) + spin_cache.setSuffix(tr(" (auto)")); + else + spin_cache.setSuffix(tr(" MiB")); + } - void loadAdvancedSettings() - { - const Preferences* const pref = Preferences::instance(); - // Disk write cache - spin_cache.setMinimum(0); - // When build as 32bit binary, set the maximum at less than 2GB to prevent crashes. - // These macros may not be available on compilers other than MSVC and GCC + void loadAdvancedSettings() + { + const Preferences* const pref = Preferences::instance(); + // Disk write cache + spin_cache.setMinimum(0); + // When build as 32bit binary, set the maximum at less than 2GB to prevent crashes. + // These macros may not be available on compilers other than MSVC and GCC #if !defined(_M_X64) && !defined(__amd64__) - //1800MiB to leave 248MiB room to the rest of program data in RAM - spin_cache.setMaximum(1800); + //1800MiB to leave 248MiB room to the rest of program data in RAM + spin_cache.setMaximum(1800); #else - // 4GiB - spin_cache.setMaximum(4*1024); + // 4GiB + spin_cache.setMaximum(4*1024); #endif - spin_cache.setValue(pref->diskCacheSize()); - updateCacheSpinSuffix(spin_cache.value()); - setRow(DISK_CACHE, tr("Disk write cache size"), &spin_cache); - // Disk cache expiry - spin_cache_ttl.setMinimum(15); - spin_cache_ttl.setMaximum(600); - spin_cache_ttl.setValue(pref->diskCacheTTL()); - spin_cache_ttl.setSuffix(tr(" s", " seconds")); - setRow(DISK_CACHE_TTL, tr("Disk cache expiry interval"), &spin_cache_ttl); - // Enable OS cache - cb_os_cache.setChecked(pref->osCache()); - setRow(OS_CACHE, tr("Enable OS cache"), &cb_os_cache); - // Save resume data interval - spin_save_resume_data_interval.setMinimum(1); - spin_save_resume_data_interval.setMaximum(1440); - spin_save_resume_data_interval.setValue(pref->saveResumeDataInterval()); - spin_save_resume_data_interval.setSuffix(tr(" m", " minutes")); - setRow(SAVE_RESUME_DATA_INTERVAL, tr("Save resume data interval", "How often the fastresume file is saved."), &spin_save_resume_data_interval); - // Outgoing port Min - outgoing_ports_min.setMinimum(0); - outgoing_ports_min.setMaximum(65535); - outgoing_ports_min.setValue(pref->outgoingPortsMin()); - setRow(OUTGOING_PORT_MIN, tr("Outgoing ports (Min) [0: Disabled]"), &outgoing_ports_min); - // Outgoing port Min - outgoing_ports_max.setMinimum(0); - outgoing_ports_max.setMaximum(65535); - outgoing_ports_max.setValue(pref->outgoingPortsMax()); - setRow(OUTGOING_PORT_MAX, tr("Outgoing ports (Max) [0: Disabled]"), &outgoing_ports_max); - // Ignore transfer limits on local network - cb_ignore_limits_lan.setChecked(pref->ignoreLimitsOnLAN()); - setRow(IGNORE_LIMIT_LAN, tr("Ignore transfer limits on local network"), &cb_ignore_limits_lan); - // Recheck completed torrents - cb_recheck_completed.setChecked(pref->recheckTorrentsOnCompletion()); - setRow(RECHECK_COMPLETED, tr("Recheck torrents on completion"), &cb_recheck_completed); - // Transfer list refresh interval - spin_list_refresh.setMinimum(30); - spin_list_refresh.setMaximum(99999); - spin_list_refresh.setValue(pref->getRefreshInterval()); - spin_list_refresh.setSuffix(tr(" ms", " milliseconds")); - setRow(LIST_REFRESH, tr("Transfer list refresh interval"), &spin_list_refresh); - // Resolve Peer countries - cb_resolve_countries.setChecked(pref->resolvePeerCountries()); - setRow(RESOLVE_COUNTRIES, tr("Resolve peer countries (GeoIP)"), &cb_resolve_countries); - // Resolve peer hosts - cb_resolve_hosts.setChecked(pref->resolvePeerHostNames()); - setRow(RESOLVE_HOSTS, tr("Resolve peer host names"), &cb_resolve_hosts); - // Max Half Open connections - spin_maxhalfopen.setMinimum(0); - spin_maxhalfopen.setMaximum(99999); - spin_maxhalfopen.setValue(pref->getMaxHalfOpenConnections()); - setRow(MAX_HALF_OPEN, tr("Maximum number of half-open connections [0: Disabled]"), &spin_maxhalfopen); - // Super seeding - cb_super_seeding.setChecked(pref->isSuperSeedingEnabled()); - setRow(SUPER_SEEDING, tr("Strict super seeding"), &cb_super_seeding); - // Network interface - combo_iface.addItem(tr("Any interface", "i.e. Any network interface")); - const QString current_iface = pref->getNetworkInterface(); - bool interface_exists = current_iface.isEmpty(); - int i = 1; - foreach (const QNetworkInterface& iface, QNetworkInterface::allInterfaces()) { - if (iface.flags() & QNetworkInterface::IsLoopBack) continue; - combo_iface.addItem(iface.humanReadableName(),iface.name()); - if (!current_iface.isEmpty() && iface.name() == current_iface) { - combo_iface.setCurrentIndex(i); - interface_exists = true; - } - ++i; - } - // Saved interface does not exist, show it anyway - if (!interface_exists) { - combo_iface.addItem(pref->getNetworkInterfaceName(),current_iface); - combo_iface.setCurrentIndex(i); - } - setRow(NETWORK_IFACE, tr("Network Interface (requires restart)"), &combo_iface); - // Listen on IPv6 address - cb_listen_ipv6.setChecked(pref->getListenIPv6()); - setRow(NETWORK_LISTEN_IPV6, tr("Listen on IPv6 address (requires restart)"), &cb_listen_ipv6); - // Network address - txt_network_address.setText(pref->getNetworkAddress()); - setRow(NETWORK_ADDRESS, tr("IP Address to report to trackers (requires restart)"), &txt_network_address); - // Program notifications - cb_program_notifications.setChecked(pref->useProgramNotification()); - setRow(PROGRAM_NOTIFICATIONS, tr("Display program on-screen notifications"), &cb_program_notifications); - // Tracker State - cb_tracker_status.setChecked(pref->isTrackerEnabled()); - setRow(TRACKER_STATUS, tr("Enable embedded tracker"), &cb_tracker_status); - // Tracker port - spin_tracker_port.setMinimum(1); - spin_tracker_port.setMaximum(65535); - spin_tracker_port.setValue(pref->getTrackerPort()); - setRow(TRACKER_PORT, tr("Embedded tracker port"), &spin_tracker_port); + spin_cache.setValue(pref->diskCacheSize()); + updateCacheSpinSuffix(spin_cache.value()); + setRow(DISK_CACHE, tr("Disk write cache size"), &spin_cache); + // Disk cache expiry + spin_cache_ttl.setMinimum(15); + spin_cache_ttl.setMaximum(600); + spin_cache_ttl.setValue(pref->diskCacheTTL()); + spin_cache_ttl.setSuffix(tr(" s", " seconds")); + setRow(DISK_CACHE_TTL, tr("Disk cache expiry interval"), &spin_cache_ttl); + // Enable OS cache + cb_os_cache.setChecked(pref->osCache()); + setRow(OS_CACHE, tr("Enable OS cache"), &cb_os_cache); + // Save resume data interval + spin_save_resume_data_interval.setMinimum(1); + spin_save_resume_data_interval.setMaximum(1440); + spin_save_resume_data_interval.setValue(pref->saveResumeDataInterval()); + spin_save_resume_data_interval.setSuffix(tr(" m", " minutes")); + setRow(SAVE_RESUME_DATA_INTERVAL, tr("Save resume data interval", "How often the fastresume file is saved."), &spin_save_resume_data_interval); + // Outgoing port Min + outgoing_ports_min.setMinimum(0); + outgoing_ports_min.setMaximum(65535); + outgoing_ports_min.setValue(pref->outgoingPortsMin()); + setRow(OUTGOING_PORT_MIN, tr("Outgoing ports (Min) [0: Disabled]"), &outgoing_ports_min); + // Outgoing port Min + outgoing_ports_max.setMinimum(0); + outgoing_ports_max.setMaximum(65535); + outgoing_ports_max.setValue(pref->outgoingPortsMax()); + setRow(OUTGOING_PORT_MAX, tr("Outgoing ports (Max) [0: Disabled]"), &outgoing_ports_max); + // Recheck completed torrents + cb_recheck_completed.setChecked(pref->recheckTorrentsOnCompletion()); + setRow(RECHECK_COMPLETED, tr("Recheck torrents on completion"), &cb_recheck_completed); + // Transfer list refresh interval + spin_list_refresh.setMinimum(30); + spin_list_refresh.setMaximum(99999); + spin_list_refresh.setValue(pref->getRefreshInterval()); + spin_list_refresh.setSuffix(tr(" ms", " milliseconds")); + setRow(LIST_REFRESH, tr("Transfer list refresh interval"), &spin_list_refresh); + // Resolve Peer countries + cb_resolve_countries.setChecked(pref->resolvePeerCountries()); + setRow(RESOLVE_COUNTRIES, tr("Resolve peer countries (GeoIP)"), &cb_resolve_countries); + // Resolve peer hosts + cb_resolve_hosts.setChecked(pref->resolvePeerHostNames()); + setRow(RESOLVE_HOSTS, tr("Resolve peer host names"), &cb_resolve_hosts); + // Max Half Open connections + spin_maxhalfopen.setMinimum(0); + spin_maxhalfopen.setMaximum(99999); + spin_maxhalfopen.setValue(pref->getMaxHalfOpenConnections()); + setRow(MAX_HALF_OPEN, tr("Maximum number of half-open connections [0: Disabled]"), &spin_maxhalfopen); + // Super seeding + cb_super_seeding.setChecked(pref->isSuperSeedingEnabled()); + setRow(SUPER_SEEDING, tr("Strict super seeding"), &cb_super_seeding); + // Network interface + combo_iface.addItem(tr("Any interface", "i.e. Any network interface")); + const QString current_iface = pref->getNetworkInterface(); + bool interface_exists = current_iface.isEmpty(); + int i = 1; + foreach (const QNetworkInterface& iface, QNetworkInterface::allInterfaces()) { + if (iface.flags() & QNetworkInterface::IsLoopBack) continue; + combo_iface.addItem(iface.humanReadableName(),iface.name()); + if (!current_iface.isEmpty() && iface.name() == current_iface) { + combo_iface.setCurrentIndex(i); + interface_exists = true; + } + ++i; + } + // Saved interface does not exist, show it anyway + if (!interface_exists) { + combo_iface.addItem(pref->getNetworkInterfaceName(),current_iface); + combo_iface.setCurrentIndex(i); + } + setRow(NETWORK_IFACE, tr("Network Interface (requires restart)"), &combo_iface); + // Listen on IPv6 address + cb_listen_ipv6.setChecked(pref->getListenIPv6()); + setRow(NETWORK_LISTEN_IPV6, tr("Listen on IPv6 address (requires restart)"), &cb_listen_ipv6); + // Network address + txt_network_address.setText(pref->getNetworkAddress()); + setRow(NETWORK_ADDRESS, tr("IP Address to report to trackers (requires restart)"), &txt_network_address); + // Program notifications + cb_program_notifications.setChecked(pref->useProgramNotification()); + setRow(PROGRAM_NOTIFICATIONS, tr("Display program on-screen notifications"), &cb_program_notifications); + // Tracker State + cb_tracker_status.setChecked(pref->isTrackerEnabled()); + setRow(TRACKER_STATUS, tr("Enable embedded tracker"), &cb_tracker_status); + // Tracker port + spin_tracker_port.setMinimum(1); + spin_tracker_port.setMaximum(65535); + spin_tracker_port.setValue(pref->getTrackerPort()); + setRow(TRACKER_PORT, tr("Embedded tracker port"), &spin_tracker_port); #if defined(Q_OS_WIN) || defined(Q_OS_MAC) - cb_update_check.setChecked(pref->isUpdateCheckEnabled()); - setRow(UPDATE_CHECK, tr("Check for software updates"), &cb_update_check); + cb_update_check.setChecked(pref->isUpdateCheckEnabled()); + setRow(UPDATE_CHECK, tr("Check for software updates"), &cb_update_check); #endif #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - cb_use_icon_theme.setChecked(pref->useSystemIconTheme()); - setRow(USE_ICON_THEME, tr("Use system icon theme"), &cb_use_icon_theme); + cb_use_icon_theme.setChecked(pref->useSystemIconTheme()); + setRow(USE_ICON_THEME, tr("Use system icon theme"), &cb_use_icon_theme); #endif - // Torrent deletion confirmation - cb_confirm_torrent_deletion.setChecked(pref->confirmTorrentDeletion()); - setRow(CONFIRM_DELETE_TORRENT, tr("Confirm torrent deletion"), &cb_confirm_torrent_deletion); - // Torrent recheck confirmation - cb_confirm_torrent_recheck.setChecked(pref->confirmTorrentRecheck()); - setRow(CONFIRM_RECHECK_TORRENT, tr("Confirm torrent recheck"), &cb_confirm_torrent_recheck); - // Tracker exchange - cb_enable_tracker_ext.setChecked(pref->trackerExchangeEnabled()); - setRow(TRACKER_EXCHANGE, tr("Exchange trackers with other peers"), &cb_enable_tracker_ext); - // Announce to all trackers - cb_announce_all_trackers.setChecked(pref->announceToAllTrackers()); - setRow(ANNOUNCE_ALL_TRACKERS, tr("Always announce to all trackers"), &cb_announce_all_trackers); - } - + // Torrent deletion confirmation + cb_confirm_torrent_deletion.setChecked(pref->confirmTorrentDeletion()); + setRow(CONFIRM_DELETE_TORRENT, tr("Confirm torrent deletion"), &cb_confirm_torrent_deletion); + // Torrent recheck confirmation + cb_confirm_torrent_recheck.setChecked(pref->confirmTorrentRecheck()); + setRow(CONFIRM_RECHECK_TORRENT, tr("Confirm torrent recheck"), &cb_confirm_torrent_recheck); + // Tracker exchange + cb_enable_tracker_ext.setChecked(pref->trackerExchangeEnabled()); + setRow(TRACKER_EXCHANGE, tr("Exchange trackers with other peers"), &cb_enable_tracker_ext); + // Announce to all trackers + cb_announce_all_trackers.setChecked(pref->announceToAllTrackers()); + setRow(ANNOUNCE_ALL_TRACKERS, tr("Always announce to all trackers"), &cb_announce_all_trackers); + } }; #endif // ADVANCEDSETTINGS_H diff --git a/src/gui/options.ui b/src/gui/options.ui index 5bdfc2fa9..2ea6455cf 100644 --- a/src/gui/options.ui +++ b/src/gui/options.ui @@ -1668,6 +1668,13 @@ + + + + Apply rate limit to peers on LAN + + + diff --git a/src/gui/options_imp.cpp b/src/gui/options_imp.cpp index 24b7a9533..9dae4786f 100644 --- a/src/gui/options_imp.cpp +++ b/src/gui/options_imp.cpp @@ -210,6 +210,7 @@ options_imp::options_imp(QWidget *parent): connect(checkuTP, SIGNAL(toggled(bool)), SLOT(enableApplyButton())); connect(checkLimituTPConnections, SIGNAL(toggled(bool)), SLOT(enableApplyButton())); connect(checkLimitTransportOverhead, SIGNAL(toggled(bool)), SLOT(enableApplyButton())); + connect(checkLimitLocalPeerRate, SIGNAL(toggled(bool)), SLOT(enableApplyButton())); // Bittorrent tab connect(checkMaxConnecs, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); connect(checkMaxConnecsPerTorrent, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); @@ -429,6 +430,7 @@ void options_imp::saveOptions() { pref->setuTPEnabled(checkuTP->isChecked()); pref->setuTPRateLimited(checkLimituTPConnections->isChecked()); pref->includeOverheadInLimits(checkLimitTransportOverhead->isChecked()); + pref->setIgnoreLimitsOnLAN(!checkLimitLocalPeerRate->isChecked()); const QPair alt_down_up_limit = getAltGlobalBandwidthLimits(); pref->setAltGlobalDownloadLimit(alt_down_up_limit.first); pref->setAltGlobalUploadLimit(alt_down_up_limit.second); @@ -665,6 +667,7 @@ void options_imp::loadOptions() { checkuTP->setChecked(pref->isuTPEnabled()); checkLimituTPConnections->setChecked(pref->isuTPRateLimited()); checkLimitTransportOverhead->setChecked(pref->includeOverheadInLimits()); + checkLimitLocalPeerRate->setChecked(!pref->getIgnoreLimitsOnLAN()); // Scheduler check_schedule->setChecked(pref->isSchedulerEnabled()); schedule_from->setTime(pref->getSchedulerStartTime());