2 * Bittorrent Client using Qt and libtorrent.
3 * Copyright (C) 2014 sledgehammer999 <hammered999@gmail.com>
4 * Copyright (C) 2006 Christophe Dumez <chris@qbittorrent.org>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * In addition, as a special exception, the copyright holders give permission to
21 * link this program with the OpenSSL project's "OpenSSL" library (or with
22 * modified versions of it that use the same license as the "OpenSSL" library),
23 * and distribute the linked executables. You must obey the GNU General Public
24 * License in all respects for all of the code used other than "OpenSSL". If you
25 * modify file(s), you may extend this exception to your version of the file(s),
26 * but you are not obligated to do so. If you do not wish to do so, delete this
27 * exception statement from your version.
30 #include "preferences.h"
35 #include <QCoreApplication>
40 #include <QNetworkCookie>
44 #include "algorithm.h"
48 #include "settingsstorage.h"
54 T
value(const QString
&key
, const T
&defaultValue
= {})
56 return SettingsStorage::instance()->loadValue(key
, defaultValue
);
60 void setValue(const QString
&key
, const T
&value
)
62 SettingsStorage::instance()->storeValue(key
, value
);
66 QString
makeProfileID(const Path
&profilePath
, const QString
&profileName
)
68 return profilePath
.isEmpty()
70 : profileName
+ u
'@' + Utils::Fs::toValidFileName(profilePath
.data(), {});
75 Preferences
*Preferences::m_instance
= nullptr;
77 Preferences::Preferences() = default;
79 Preferences
*Preferences::instance()
84 void Preferences::initInstance()
87 m_instance
= new Preferences
;
90 void Preferences::freeInstance()
97 QString
Preferences::getLocale() const
99 const auto localeName
= value
<QString
>(u
"Preferences/General/Locale"_s
);
100 return (localeName
.isEmpty() ? QLocale::system().name() : localeName
);
103 void Preferences::setLocale(const QString
&locale
)
105 if (locale
== getLocale())
108 setValue(u
"Preferences/General/Locale"_s
, locale
);
111 bool Preferences::useCustomUITheme() const
113 return value(u
"Preferences/General/UseCustomUITheme"_s
, false) && !customUIThemePath().isEmpty();
116 void Preferences::setUseCustomUITheme(const bool use
)
118 if (use
== useCustomUITheme())
121 setValue(u
"Preferences/General/UseCustomUITheme"_s
, use
);
124 Path
Preferences::customUIThemePath() const
126 return value
<Path
>(u
"Preferences/General/CustomUIThemePath"_s
);
129 void Preferences::setCustomUIThemePath(const Path
&path
)
131 if (path
== customUIThemePath())
134 setValue(u
"Preferences/General/CustomUIThemePath"_s
, path
);
137 bool Preferences::removeTorrentContent() const
139 return value(u
"Preferences/General/DeleteTorrentsFilesAsDefault"_s
, false);
142 void Preferences::setRemoveTorrentContent(const bool remove
)
144 if (remove
== removeTorrentContent())
147 setValue(u
"Preferences/General/DeleteTorrentsFilesAsDefault"_s
, remove
);
150 bool Preferences::confirmOnExit() const
152 return value(u
"Preferences/General/ExitConfirm"_s
, true);
155 void Preferences::setConfirmOnExit(const bool confirm
)
157 if (confirm
== confirmOnExit())
160 setValue(u
"Preferences/General/ExitConfirm"_s
, confirm
);
163 bool Preferences::speedInTitleBar() const
165 return value(u
"Preferences/General/SpeedInTitleBar"_s
, false);
168 void Preferences::showSpeedInTitleBar(const bool show
)
170 if (show
== speedInTitleBar())
173 setValue(u
"Preferences/General/SpeedInTitleBar"_s
, show
);
176 bool Preferences::useAlternatingRowColors() const
178 return value(u
"Preferences/General/AlternatingRowColors"_s
, true);
181 void Preferences::setAlternatingRowColors(const bool b
)
183 if (b
== useAlternatingRowColors())
186 setValue(u
"Preferences/General/AlternatingRowColors"_s
, b
);
189 bool Preferences::getHideZeroValues() const
191 return value(u
"Preferences/General/HideZeroValues"_s
, false);
194 void Preferences::setHideZeroValues(const bool b
)
196 if (b
== getHideZeroValues())
199 setValue(u
"Preferences/General/HideZeroValues"_s
, b
);
202 int Preferences::getHideZeroComboValues() const
204 return value
<int>(u
"Preferences/General/HideZeroComboValues"_s
, 0);
207 void Preferences::setHideZeroComboValues(const int n
)
209 if (n
== getHideZeroComboValues())
212 setValue(u
"Preferences/General/HideZeroComboValues"_s
, n
);
215 // In Mac OS X the dock is sufficient for our needs so we disable the sys tray functionality.
216 // See extensive discussion in https://github.com/qbittorrent/qBittorrent/pull/3018
218 bool Preferences::systemTrayEnabled() const
220 return value(u
"Preferences/General/SystrayEnabled"_s
, true);
223 void Preferences::setSystemTrayEnabled(const bool enabled
)
225 if (enabled
== systemTrayEnabled())
228 setValue(u
"Preferences/General/SystrayEnabled"_s
, enabled
);
231 bool Preferences::minimizeToTray() const
233 return value(u
"Preferences/General/MinimizeToTray"_s
, false);
236 void Preferences::setMinimizeToTray(const bool b
)
238 if (b
== minimizeToTray())
241 setValue(u
"Preferences/General/MinimizeToTray"_s
, b
);
244 bool Preferences::minimizeToTrayNotified() const
246 return value(u
"Preferences/General/MinimizeToTrayNotified"_s
, false);
249 void Preferences::setMinimizeToTrayNotified(const bool b
)
251 if (b
== minimizeToTrayNotified())
254 setValue(u
"Preferences/General/MinimizeToTrayNotified"_s
, b
);
257 bool Preferences::closeToTray() const
259 return value(u
"Preferences/General/CloseToTray"_s
, true);
262 void Preferences::setCloseToTray(const bool b
)
264 if (b
== closeToTray())
267 setValue(u
"Preferences/General/CloseToTray"_s
, b
);
270 bool Preferences::closeToTrayNotified() const
272 return value(u
"Preferences/General/CloseToTrayNotified"_s
, false);
275 void Preferences::setCloseToTrayNotified(const bool b
)
277 if (b
== closeToTrayNotified())
280 setValue(u
"Preferences/General/CloseToTrayNotified"_s
, b
);
283 bool Preferences::iconsInMenusEnabled() const
285 return value(u
"Preferences/Advanced/EnableIconsInMenus"_s
, true);
288 void Preferences::setIconsInMenusEnabled(const bool enable
)
290 if (enable
== iconsInMenusEnabled())
293 setValue(u
"Preferences/Advanced/EnableIconsInMenus"_s
, enable
);
297 qint64
Preferences::getTorrentFileSizeLimit() const
299 return value(u
"BitTorrent/TorrentFileSizeLimit"_s
, (100 * 1024 * 1024));
302 void Preferences::setTorrentFileSizeLimit(const qint64 value
)
304 if (value
== getTorrentFileSizeLimit())
307 setValue(u
"BitTorrent/TorrentFileSizeLimit"_s
, value
);
310 int Preferences::getBdecodeDepthLimit() const
312 return value(u
"BitTorrent/BdecodeDepthLimit"_s
, 100);
315 void Preferences::setBdecodeDepthLimit(const int value
)
317 if (value
== getBdecodeDepthLimit())
320 setValue(u
"BitTorrent/BdecodeDepthLimit"_s
, value
);
323 int Preferences::getBdecodeTokenLimit() const
325 return value(u
"BitTorrent/BdecodeTokenLimit"_s
, 10'000'000);
328 void Preferences::setBdecodeTokenLimit(const int value
)
330 if (value
== getBdecodeTokenLimit())
333 setValue(u
"BitTorrent/BdecodeTokenLimit"_s
, value
);
336 bool Preferences::isToolbarDisplayed() const
338 return value(u
"Preferences/General/ToolbarDisplayed"_s
, true);
341 void Preferences::setToolbarDisplayed(const bool displayed
)
343 if (displayed
== isToolbarDisplayed())
346 setValue(u
"Preferences/General/ToolbarDisplayed"_s
, displayed
);
349 bool Preferences::isStatusbarDisplayed() const
351 return value(u
"Preferences/General/StatusbarDisplayed"_s
, true);
354 void Preferences::setStatusbarDisplayed(const bool displayed
)
356 if (displayed
== isStatusbarDisplayed())
359 setValue(u
"Preferences/General/StatusbarDisplayed"_s
, displayed
);
362 bool Preferences::isSplashScreenDisabled() const
364 return value(u
"Preferences/General/NoSplashScreen"_s
, true);
367 void Preferences::setSplashScreenDisabled(const bool b
)
369 if (b
== isSplashScreenDisabled())
372 setValue(u
"Preferences/General/NoSplashScreen"_s
, b
);
375 // Preventing from system suspend while active torrents are presented.
376 bool Preferences::preventFromSuspendWhenDownloading() const
378 return value(u
"Preferences/General/PreventFromSuspendWhenDownloading"_s
, false);
381 void Preferences::setPreventFromSuspendWhenDownloading(const bool b
)
383 if (b
== preventFromSuspendWhenDownloading())
386 setValue(u
"Preferences/General/PreventFromSuspendWhenDownloading"_s
, b
);
389 bool Preferences::preventFromSuspendWhenSeeding() const
391 return value(u
"Preferences/General/PreventFromSuspendWhenSeeding"_s
, false);
394 void Preferences::setPreventFromSuspendWhenSeeding(const bool b
)
396 if (b
== preventFromSuspendWhenSeeding())
399 setValue(u
"Preferences/General/PreventFromSuspendWhenSeeding"_s
, b
);
403 bool Preferences::WinStartup() const
405 const QString profileName
= Profile::instance()->profileName();
406 const Path profilePath
= Profile::instance()->rootPath();
407 const QString profileID
= makeProfileID(profilePath
, profileName
);
408 const QSettings settings
{u
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"_s
, QSettings::NativeFormat
};
410 return settings
.contains(profileID
);
413 void Preferences::setWinStartup(const bool b
)
415 const QString profileName
= Profile::instance()->profileName();
416 const Path profilePath
= Profile::instance()->rootPath();
417 const QString profileID
= makeProfileID(profilePath
, profileName
);
418 QSettings settings
{u
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"_s
, QSettings::NativeFormat
};
421 const QString configuration
= Profile::instance()->configurationName();
423 const auto cmd
= uR
"("%1" "--profile
=%2" "--configuration
=%3")"_s
424 .arg(Path(qApp
->applicationFilePath()).toString(), profilePath
.toString(), configuration
);
425 settings
.setValue(profileID
, cmd
);
429 settings
.remove(profileID
);
433 QString
Preferences::getStyle() const
435 return value
<QString
>(u
"Appearance/Style"_s
);
438 void Preferences::setStyle(const QString
&styleName
)
440 if (styleName
== getStyle())
443 setValue(u
"Appearance/Style"_s
, styleName
);
448 Path
Preferences::getScanDirsLastPath() const
450 return value
<Path
>(u
"Preferences/Downloads/ScanDirsLastPath"_s
);
453 void Preferences::setScanDirsLastPath(const Path
&path
)
455 if (path
== getScanDirsLastPath())
458 setValue(u
"Preferences/Downloads/ScanDirsLastPath"_s
, path
);
461 bool Preferences::isMailNotificationEnabled() const
463 return value(u
"Preferences/MailNotification/enabled"_s
, false);
466 void Preferences::setMailNotificationEnabled(const bool enabled
)
468 if (enabled
== isMailNotificationEnabled())
471 setValue(u
"Preferences/MailNotification/enabled"_s
, enabled
);
474 QString
Preferences::getMailNotificationSender() const
476 return value
<QString
>(u
"Preferences/MailNotification/sender"_s
477 , u
"qBittorrent_notification@example.com"_s
);
480 void Preferences::setMailNotificationSender(const QString
&mail
)
482 if (mail
== getMailNotificationSender())
485 setValue(u
"Preferences/MailNotification/sender"_s
, mail
);
488 QString
Preferences::getMailNotificationEmail() const
490 return value
<QString
>(u
"Preferences/MailNotification/email"_s
);
493 void Preferences::setMailNotificationEmail(const QString
&mail
)
495 if (mail
== getMailNotificationEmail())
498 setValue(u
"Preferences/MailNotification/email"_s
, mail
);
501 QString
Preferences::getMailNotificationSMTP() const
503 return value
<QString
>(u
"Preferences/MailNotification/smtp_server"_s
, u
"smtp.changeme.com"_s
);
506 void Preferences::setMailNotificationSMTP(const QString
&smtpServer
)
508 if (smtpServer
== getMailNotificationSMTP())
511 setValue(u
"Preferences/MailNotification/smtp_server"_s
, smtpServer
);
514 bool Preferences::getMailNotificationSMTPSSL() const
516 return value(u
"Preferences/MailNotification/req_ssl"_s
, false);
519 void Preferences::setMailNotificationSMTPSSL(const bool use
)
521 if (use
== getMailNotificationSMTPSSL())
524 setValue(u
"Preferences/MailNotification/req_ssl"_s
, use
);
527 bool Preferences::getMailNotificationSMTPAuth() const
529 return value(u
"Preferences/MailNotification/req_auth"_s
, false);
532 void Preferences::setMailNotificationSMTPAuth(const bool use
)
534 if (use
== getMailNotificationSMTPAuth())
537 setValue(u
"Preferences/MailNotification/req_auth"_s
, use
);
540 QString
Preferences::getMailNotificationSMTPUsername() const
542 return value
<QString
>(u
"Preferences/MailNotification/username"_s
);
545 void Preferences::setMailNotificationSMTPUsername(const QString
&username
)
547 if (username
== getMailNotificationSMTPUsername())
550 setValue(u
"Preferences/MailNotification/username"_s
, username
);
553 QString
Preferences::getMailNotificationSMTPPassword() const
555 return value
<QString
>(u
"Preferences/MailNotification/password"_s
);
558 void Preferences::setMailNotificationSMTPPassword(const QString
&password
)
560 if (password
== getMailNotificationSMTPPassword())
563 setValue(u
"Preferences/MailNotification/password"_s
, password
);
566 int Preferences::getActionOnDblClOnTorrentDl() const
568 return value
<int>(u
"Preferences/Downloads/DblClOnTorDl"_s
, 0);
571 void Preferences::setActionOnDblClOnTorrentDl(const int act
)
573 if (act
== getActionOnDblClOnTorrentDl())
576 setValue(u
"Preferences/Downloads/DblClOnTorDl"_s
, act
);
579 int Preferences::getActionOnDblClOnTorrentFn() const
581 return value
<int>(u
"Preferences/Downloads/DblClOnTorFn"_s
, 1);
584 void Preferences::setActionOnDblClOnTorrentFn(const int act
)
586 if (act
== getActionOnDblClOnTorrentFn())
589 setValue(u
"Preferences/Downloads/DblClOnTorFn"_s
, act
);
592 QTime
Preferences::getSchedulerStartTime() const
594 return value(u
"Preferences/Scheduler/start_time"_s
, QTime(8, 0));
597 void Preferences::setSchedulerStartTime(const QTime
&time
)
599 if (time
== getSchedulerStartTime())
602 setValue(u
"Preferences/Scheduler/start_time"_s
, time
);
605 QTime
Preferences::getSchedulerEndTime() const
607 return value(u
"Preferences/Scheduler/end_time"_s
, QTime(20, 0));
610 void Preferences::setSchedulerEndTime(const QTime
&time
)
612 if (time
== getSchedulerEndTime())
615 setValue(u
"Preferences/Scheduler/end_time"_s
, time
);
618 Scheduler::Days
Preferences::getSchedulerDays() const
620 return value(u
"Preferences/Scheduler/days"_s
, Scheduler::Days::EveryDay
);
623 void Preferences::setSchedulerDays(const Scheduler::Days days
)
625 if (days
== getSchedulerDays())
628 setValue(u
"Preferences/Scheduler/days"_s
, days
);
632 bool Preferences::isSearchEnabled() const
634 return value(u
"Preferences/Search/SearchEnabled"_s
, false);
637 void Preferences::setSearchEnabled(const bool enabled
)
639 if (enabled
== isSearchEnabled())
642 setValue(u
"Preferences/Search/SearchEnabled"_s
, enabled
);
645 bool Preferences::isWebUIEnabled() const
648 const bool defaultValue
= true;
650 const bool defaultValue
= false;
652 return value(u
"Preferences/WebUI/Enabled"_s
, defaultValue
);
655 void Preferences::setWebUIEnabled(const bool enabled
)
657 if (enabled
== isWebUIEnabled())
660 setValue(u
"Preferences/WebUI/Enabled"_s
, enabled
);
663 bool Preferences::isWebUILocalAuthEnabled() const
665 return value(u
"Preferences/WebUI/LocalHostAuth"_s
, true);
668 void Preferences::setWebUILocalAuthEnabled(const bool enabled
)
670 if (enabled
== isWebUILocalAuthEnabled())
673 setValue(u
"Preferences/WebUI/LocalHostAuth"_s
, enabled
);
676 bool Preferences::isWebUIAuthSubnetWhitelistEnabled() const
678 return value(u
"Preferences/WebUI/AuthSubnetWhitelistEnabled"_s
, false);
681 void Preferences::setWebUIAuthSubnetWhitelistEnabled(const bool enabled
)
683 if (enabled
== isWebUIAuthSubnetWhitelistEnabled())
686 setValue(u
"Preferences/WebUI/AuthSubnetWhitelistEnabled"_s
, enabled
);
689 QList
<Utils::Net::Subnet
> Preferences::getWebUIAuthSubnetWhitelist() const
691 const auto subnets
= value
<QStringList
>(u
"Preferences/WebUI/AuthSubnetWhitelist"_s
);
693 QList
<Utils::Net::Subnet
> ret
;
694 ret
.reserve(subnets
.size());
696 for (const QString
&rawSubnet
: subnets
)
698 const std::optional
<Utils::Net::Subnet
> subnet
= Utils::Net::parseSubnet(rawSubnet
.trimmed());
700 ret
.append(subnet
.value());
706 void Preferences::setWebUIAuthSubnetWhitelist(QStringList subnets
)
708 subnets
.removeIf([](const QString
&subnet
)
710 return !Utils::Net::parseSubnet(subnet
.trimmed()).has_value();
713 setValue(u
"Preferences/WebUI/AuthSubnetWhitelist"_s
, subnets
);
716 QString
Preferences::getServerDomains() const
718 return value
<QString
>(u
"Preferences/WebUI/ServerDomains"_s
, u
"*"_s
);
721 void Preferences::setServerDomains(const QString
&str
)
723 if (str
== getServerDomains())
726 setValue(u
"Preferences/WebUI/ServerDomains"_s
, str
);
729 QString
Preferences::getWebUIAddress() const
731 return value
<QString
>(u
"Preferences/WebUI/Address"_s
, u
"*"_s
).trimmed();
734 void Preferences::setWebUIAddress(const QString
&addr
)
736 if (addr
== getWebUIAddress())
739 setValue(u
"Preferences/WebUI/Address"_s
, addr
.trimmed());
742 quint16
Preferences::getWebUIPort() const
744 return value
<quint16
>(u
"Preferences/WebUI/Port"_s
, 8080);
747 void Preferences::setWebUIPort(const quint16 port
)
749 if (port
== getWebUIPort())
752 // cast to `int` type so it will show human readable unit in configuration file
753 setValue(u
"Preferences/WebUI/Port"_s
, static_cast<int>(port
));
756 bool Preferences::useUPnPForWebUIPort() const
758 return value(u
"Preferences/WebUI/UseUPnP"_s
, false);
761 void Preferences::setUPnPForWebUIPort(const bool enabled
)
763 if (enabled
== useUPnPForWebUIPort())
766 setValue(u
"Preferences/WebUI/UseUPnP"_s
, enabled
);
769 QString
Preferences::getWebUIUsername() const
771 return value
<QString
>(u
"Preferences/WebUI/Username"_s
, u
"admin"_s
);
774 void Preferences::setWebUIUsername(const QString
&username
)
776 if (username
== getWebUIUsername())
779 setValue(u
"Preferences/WebUI/Username"_s
, username
);
782 QByteArray
Preferences::getWebUIPassword() const
784 return value
<QByteArray
>(u
"Preferences/WebUI/Password_PBKDF2"_s
);
787 void Preferences::setWebUIPassword(const QByteArray
&password
)
789 if (password
== getWebUIPassword())
792 setValue(u
"Preferences/WebUI/Password_PBKDF2"_s
, password
);
795 int Preferences::getWebUIMaxAuthFailCount() const
797 return value
<int>(u
"Preferences/WebUI/MaxAuthenticationFailCount"_s
, 5);
800 void Preferences::setWebUIMaxAuthFailCount(const int count
)
802 if (count
== getWebUIMaxAuthFailCount())
805 setValue(u
"Preferences/WebUI/MaxAuthenticationFailCount"_s
, count
);
808 std::chrono::seconds
Preferences::getWebUIBanDuration() const
810 return std::chrono::seconds(value
<int>(u
"Preferences/WebUI/BanDuration"_s
, 3600));
813 void Preferences::setWebUIBanDuration(const std::chrono::seconds duration
)
815 if (duration
== getWebUIBanDuration())
818 setValue(u
"Preferences/WebUI/BanDuration"_s
, static_cast<int>(duration
.count()));
821 int Preferences::getWebUISessionTimeout() const
823 return value
<int>(u
"Preferences/WebUI/SessionTimeout"_s
, 3600);
826 void Preferences::setWebUISessionTimeout(const int timeout
)
828 if (timeout
== getWebUISessionTimeout())
831 setValue(u
"Preferences/WebUI/SessionTimeout"_s
, timeout
);
834 QString
Preferences::getWebAPISessionCookieName() const
836 return value
<QString
>(u
"WebAPI/SessionCookieName"_s
);
839 void Preferences::setWebAPISessionCookieName(const QString
&cookieName
)
841 if (cookieName
== getWebAPISessionCookieName())
844 setValue(u
"WebAPI/SessionCookieName"_s
, cookieName
);
847 bool Preferences::isWebUIClickjackingProtectionEnabled() const
849 return value(u
"Preferences/WebUI/ClickjackingProtection"_s
, true);
852 void Preferences::setWebUIClickjackingProtectionEnabled(const bool enabled
)
854 if (enabled
== isWebUIClickjackingProtectionEnabled())
857 setValue(u
"Preferences/WebUI/ClickjackingProtection"_s
, enabled
);
860 bool Preferences::isWebUICSRFProtectionEnabled() const
862 return value(u
"Preferences/WebUI/CSRFProtection"_s
, true);
865 void Preferences::setWebUICSRFProtectionEnabled(const bool enabled
)
867 if (enabled
== isWebUICSRFProtectionEnabled())
870 setValue(u
"Preferences/WebUI/CSRFProtection"_s
, enabled
);
873 bool Preferences::isWebUISecureCookieEnabled() const
875 return value(u
"Preferences/WebUI/SecureCookie"_s
, true);
878 void Preferences::setWebUISecureCookieEnabled(const bool enabled
)
880 if (enabled
== isWebUISecureCookieEnabled())
883 setValue(u
"Preferences/WebUI/SecureCookie"_s
, enabled
);
886 bool Preferences::isWebUIHostHeaderValidationEnabled() const
888 return value(u
"Preferences/WebUI/HostHeaderValidation"_s
, true);
891 void Preferences::setWebUIHostHeaderValidationEnabled(const bool enabled
)
893 if (enabled
== isWebUIHostHeaderValidationEnabled())
896 setValue(u
"Preferences/WebUI/HostHeaderValidation"_s
, enabled
);
899 bool Preferences::isWebUIHttpsEnabled() const
901 return value(u
"Preferences/WebUI/HTTPS/Enabled"_s
, false);
904 void Preferences::setWebUIHttpsEnabled(const bool enabled
)
906 if (enabled
== isWebUIHttpsEnabled())
909 setValue(u
"Preferences/WebUI/HTTPS/Enabled"_s
, enabled
);
912 Path
Preferences::getWebUIHttpsCertificatePath() const
914 return value
<Path
>(u
"Preferences/WebUI/HTTPS/CertificatePath"_s
);
917 void Preferences::setWebUIHttpsCertificatePath(const Path
&path
)
919 if (path
== getWebUIHttpsCertificatePath())
922 setValue(u
"Preferences/WebUI/HTTPS/CertificatePath"_s
, path
);
925 Path
Preferences::getWebUIHttpsKeyPath() const
927 return value
<Path
>(u
"Preferences/WebUI/HTTPS/KeyPath"_s
);
930 void Preferences::setWebUIHttpsKeyPath(const Path
&path
)
932 if (path
== getWebUIHttpsKeyPath())
935 setValue(u
"Preferences/WebUI/HTTPS/KeyPath"_s
, path
);
938 bool Preferences::isAltWebUIEnabled() const
940 return value(u
"Preferences/WebUI/AlternativeUIEnabled"_s
, false);
943 void Preferences::setAltWebUIEnabled(const bool enabled
)
945 if (enabled
== isAltWebUIEnabled())
948 setValue(u
"Preferences/WebUI/AlternativeUIEnabled"_s
, enabled
);
951 Path
Preferences::getWebUIRootFolder() const
953 return value
<Path
>(u
"Preferences/WebUI/RootFolder"_s
);
956 void Preferences::setWebUIRootFolder(const Path
&path
)
958 if (path
== getWebUIRootFolder())
961 setValue(u
"Preferences/WebUI/RootFolder"_s
, path
);
964 bool Preferences::isWebUICustomHTTPHeadersEnabled() const
966 return value(u
"Preferences/WebUI/CustomHTTPHeadersEnabled"_s
, false);
969 void Preferences::setWebUICustomHTTPHeadersEnabled(const bool enabled
)
971 if (enabled
== isWebUICustomHTTPHeadersEnabled())
974 setValue(u
"Preferences/WebUI/CustomHTTPHeadersEnabled"_s
, enabled
);
977 QString
Preferences::getWebUICustomHTTPHeaders() const
979 return value
<QString
>(u
"Preferences/WebUI/CustomHTTPHeaders"_s
);
982 void Preferences::setWebUICustomHTTPHeaders(const QString
&headers
)
984 if (headers
== getWebUICustomHTTPHeaders())
987 setValue(u
"Preferences/WebUI/CustomHTTPHeaders"_s
, headers
);
990 bool Preferences::isWebUIReverseProxySupportEnabled() const
992 return value(u
"Preferences/WebUI/ReverseProxySupportEnabled"_s
, false);
995 void Preferences::setWebUIReverseProxySupportEnabled(const bool enabled
)
997 if (enabled
== isWebUIReverseProxySupportEnabled())
1000 setValue(u
"Preferences/WebUI/ReverseProxySupportEnabled"_s
, enabled
);
1003 QString
Preferences::getWebUITrustedReverseProxiesList() const
1005 return value
<QString
>(u
"Preferences/WebUI/TrustedReverseProxiesList"_s
);
1008 void Preferences::setWebUITrustedReverseProxiesList(const QString
&addr
)
1010 if (addr
== getWebUITrustedReverseProxiesList())
1013 setValue(u
"Preferences/WebUI/TrustedReverseProxiesList"_s
, addr
);
1016 bool Preferences::isDynDNSEnabled() const
1018 return value(u
"Preferences/DynDNS/Enabled"_s
, false);
1021 void Preferences::setDynDNSEnabled(const bool enabled
)
1023 if (enabled
== isDynDNSEnabled())
1026 setValue(u
"Preferences/DynDNS/Enabled"_s
, enabled
);
1029 DNS::Service
Preferences::getDynDNSService() const
1031 return value(u
"Preferences/DynDNS/Service"_s
, DNS::Service::DynDNS
);
1034 void Preferences::setDynDNSService(const DNS::Service service
)
1036 if (service
== getDynDNSService())
1039 setValue(u
"Preferences/DynDNS/Service"_s
, service
);
1042 QString
Preferences::getDynDomainName() const
1044 return value
<QString
>(u
"Preferences/DynDNS/DomainName"_s
, u
"changeme.dyndns.org"_s
);
1047 void Preferences::setDynDomainName(const QString
&name
)
1049 if (name
== getDynDomainName())
1052 setValue(u
"Preferences/DynDNS/DomainName"_s
, name
);
1055 QString
Preferences::getDynDNSUsername() const
1057 return value
<QString
>(u
"Preferences/DynDNS/Username"_s
);
1060 void Preferences::setDynDNSUsername(const QString
&username
)
1062 if (username
== getDynDNSUsername())
1065 setValue(u
"Preferences/DynDNS/Username"_s
, username
);
1068 QString
Preferences::getDynDNSPassword() const
1070 return value
<QString
>(u
"Preferences/DynDNS/Password"_s
);
1073 void Preferences::setDynDNSPassword(const QString
&password
)
1075 if (password
== getDynDNSPassword())
1078 setValue(u
"Preferences/DynDNS/Password"_s
, password
);
1081 // Advanced settings
1082 QByteArray
Preferences::getUILockPassword() const
1084 return value
<QByteArray
>(u
"Locking/password_PBKDF2"_s
);
1087 void Preferences::setUILockPassword(const QByteArray
&password
)
1089 if (password
== getUILockPassword())
1092 setValue(u
"Locking/password_PBKDF2"_s
, password
);
1095 bool Preferences::isUILocked() const
1097 return value(u
"Locking/locked"_s
, false);
1100 void Preferences::setUILocked(const bool locked
)
1102 if (locked
== isUILocked())
1105 setValue(u
"Locking/locked"_s
, locked
);
1108 bool Preferences::isAutoRunOnTorrentAddedEnabled() const
1110 return value(u
"AutoRun/OnTorrentAdded/Enabled"_s
, false);
1113 void Preferences::setAutoRunOnTorrentAddedEnabled(const bool enabled
)
1115 if (enabled
== isAutoRunOnTorrentAddedEnabled())
1118 setValue(u
"AutoRun/OnTorrentAdded/Enabled"_s
, enabled
);
1121 QString
Preferences::getAutoRunOnTorrentAddedProgram() const
1123 return value
<QString
>(u
"AutoRun/OnTorrentAdded/Program"_s
);
1126 void Preferences::setAutoRunOnTorrentAddedProgram(const QString
&program
)
1128 if (program
== getAutoRunOnTorrentAddedProgram())
1131 setValue(u
"AutoRun/OnTorrentAdded/Program"_s
, program
);
1134 bool Preferences::isAutoRunOnTorrentFinishedEnabled() const
1136 return value(u
"AutoRun/enabled"_s
, false);
1139 void Preferences::setAutoRunOnTorrentFinishedEnabled(const bool enabled
)
1141 if (enabled
== isAutoRunOnTorrentFinishedEnabled())
1144 setValue(u
"AutoRun/enabled"_s
, enabled
);
1147 QString
Preferences::getAutoRunOnTorrentFinishedProgram() const
1149 return value
<QString
>(u
"AutoRun/program"_s
);
1152 void Preferences::setAutoRunOnTorrentFinishedProgram(const QString
&program
)
1154 if (program
== getAutoRunOnTorrentFinishedProgram())
1157 setValue(u
"AutoRun/program"_s
, program
);
1160 #if defined(Q_OS_WIN)
1161 bool Preferences::isAutoRunConsoleEnabled() const
1163 return value(u
"AutoRun/ConsoleEnabled"_s
, false);
1166 void Preferences::setAutoRunConsoleEnabled(const bool enabled
)
1168 if (enabled
== isAutoRunConsoleEnabled())
1171 setValue(u
"AutoRun/ConsoleEnabled"_s
, enabled
);
1175 bool Preferences::shutdownWhenDownloadsComplete() const
1177 return value(u
"Preferences/Downloads/AutoShutDownOnCompletion"_s
, false);
1180 void Preferences::setShutdownWhenDownloadsComplete(const bool shutdown
)
1182 if (shutdown
== shutdownWhenDownloadsComplete())
1185 setValue(u
"Preferences/Downloads/AutoShutDownOnCompletion"_s
, shutdown
);
1188 bool Preferences::suspendWhenDownloadsComplete() const
1190 return value(u
"Preferences/Downloads/AutoSuspendOnCompletion"_s
, false);
1193 void Preferences::setSuspendWhenDownloadsComplete(const bool suspend
)
1195 if (suspend
== suspendWhenDownloadsComplete())
1198 setValue(u
"Preferences/Downloads/AutoSuspendOnCompletion"_s
, suspend
);
1201 bool Preferences::hibernateWhenDownloadsComplete() const
1203 return value(u
"Preferences/Downloads/AutoHibernateOnCompletion"_s
, false);
1206 void Preferences::setHibernateWhenDownloadsComplete(const bool hibernate
)
1208 if (hibernate
== hibernateWhenDownloadsComplete())
1211 setValue(u
"Preferences/Downloads/AutoHibernateOnCompletion"_s
, hibernate
);
1214 bool Preferences::shutdownqBTWhenDownloadsComplete() const
1216 return value(u
"Preferences/Downloads/AutoShutDownqBTOnCompletion"_s
, false);
1219 void Preferences::setShutdownqBTWhenDownloadsComplete(const bool shutdown
)
1221 if (shutdown
== shutdownqBTWhenDownloadsComplete())
1224 setValue(u
"Preferences/Downloads/AutoShutDownqBTOnCompletion"_s
, shutdown
);
1227 bool Preferences::dontConfirmAutoExit() const
1229 return value(u
"ShutdownConfirmDlg/DontConfirmAutoExit"_s
, false);
1232 void Preferences::setDontConfirmAutoExit(const bool dontConfirmAutoExit
)
1234 if (dontConfirmAutoExit
== this->dontConfirmAutoExit())
1237 setValue(u
"ShutdownConfirmDlg/DontConfirmAutoExit"_s
, dontConfirmAutoExit
);
1240 bool Preferences::recheckTorrentsOnCompletion() const
1242 return value(u
"Preferences/Advanced/RecheckOnCompletion"_s
, false);
1245 void Preferences::recheckTorrentsOnCompletion(const bool recheck
)
1247 if (recheck
== recheckTorrentsOnCompletion())
1250 setValue(u
"Preferences/Advanced/RecheckOnCompletion"_s
, recheck
);
1253 bool Preferences::resolvePeerCountries() const
1255 return value(u
"Preferences/Connection/ResolvePeerCountries"_s
, true);
1258 void Preferences::resolvePeerCountries(const bool resolve
)
1260 if (resolve
== resolvePeerCountries())
1263 setValue(u
"Preferences/Connection/ResolvePeerCountries"_s
, resolve
);
1266 bool Preferences::resolvePeerHostNames() const
1268 return value(u
"Preferences/Connection/ResolvePeerHostNames"_s
, false);
1271 void Preferences::resolvePeerHostNames(const bool resolve
)
1273 if (resolve
== resolvePeerHostNames())
1276 setValue(u
"Preferences/Connection/ResolvePeerHostNames"_s
, resolve
);
1279 #if (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
1280 bool Preferences::useSystemIcons() const
1282 return value(u
"Preferences/Advanced/useSystemIconTheme"_s
, false);
1285 void Preferences::useSystemIcons(const bool enabled
)
1287 if (enabled
== useSystemIcons())
1290 setValue(u
"Preferences/Advanced/useSystemIconTheme"_s
, enabled
);
1294 bool Preferences::isRecursiveDownloadEnabled() const
1296 return !value(u
"Preferences/Advanced/DisableRecursiveDownload"_s
, false);
1299 void Preferences::setRecursiveDownloadEnabled(const bool enable
)
1301 if (enable
== isRecursiveDownloadEnabled())
1304 setValue(u
"Preferences/Advanced/DisableRecursiveDownload"_s
, !enable
);
1307 int Preferences::getTrackerPort() const
1309 return value
<int>(u
"Preferences/Advanced/trackerPort"_s
, 9000);
1312 void Preferences::setTrackerPort(const int port
)
1314 if (port
== getTrackerPort())
1317 setValue(u
"Preferences/Advanced/trackerPort"_s
, port
);
1320 bool Preferences::isTrackerPortForwardingEnabled() const
1322 return value(u
"Preferences/Advanced/trackerPortForwarding"_s
, false);
1325 void Preferences::setTrackerPortForwardingEnabled(const bool enabled
)
1327 if (enabled
== isTrackerPortForwardingEnabled())
1330 setValue(u
"Preferences/Advanced/trackerPortForwarding"_s
, enabled
);
1333 bool Preferences::isMarkOfTheWebEnabled() const
1335 return value(u
"Preferences/Advanced/markOfTheWeb"_s
, true);
1338 void Preferences::setMarkOfTheWebEnabled(const bool enabled
)
1340 if (enabled
== isMarkOfTheWebEnabled())
1343 setValue(u
"Preferences/Advanced/markOfTheWeb"_s
, enabled
);
1346 bool Preferences::isIgnoreSSLErrors() const
1348 return value(u
"Preferences/Advanced/IgnoreSSLErrors"_s
, false);
1351 void Preferences::setIgnoreSSLErrors(const bool enabled
)
1353 if (enabled
== isIgnoreSSLErrors())
1356 setValue(u
"Preferences/Advanced/IgnoreSSLErrors"_s
, enabled
);
1359 Path
Preferences::getPythonExecutablePath() const
1361 return value(u
"Preferences/Search/pythonExecutablePath"_s
, Path());
1364 void Preferences::setPythonExecutablePath(const Path
&path
)
1366 if (path
== getPythonExecutablePath())
1369 setValue(u
"Preferences/Search/pythonExecutablePath"_s
, path
);
1372 #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
1373 bool Preferences::isUpdateCheckEnabled() const
1375 return value(u
"Preferences/Advanced/updateCheck"_s
, true);
1378 void Preferences::setUpdateCheckEnabled(const bool enabled
)
1380 if (enabled
== isUpdateCheckEnabled())
1383 setValue(u
"Preferences/Advanced/updateCheck"_s
, enabled
);
1387 bool Preferences::confirmTorrentDeletion() const
1389 return value(u
"Preferences/Advanced/confirmTorrentDeletion"_s
, true);
1392 void Preferences::setConfirmTorrentDeletion(const bool enabled
)
1394 if (enabled
== confirmTorrentDeletion())
1397 setValue(u
"Preferences/Advanced/confirmTorrentDeletion"_s
, enabled
);
1400 bool Preferences::confirmTorrentRecheck() const
1402 return value(u
"Preferences/Advanced/confirmTorrentRecheck"_s
, true);
1405 void Preferences::setConfirmTorrentRecheck(const bool enabled
)
1407 if (enabled
== confirmTorrentRecheck())
1410 setValue(u
"Preferences/Advanced/confirmTorrentRecheck"_s
, enabled
);
1413 bool Preferences::confirmRemoveAllTags() const
1415 return value(u
"Preferences/Advanced/confirmRemoveAllTags"_s
, true);
1418 void Preferences::setConfirmRemoveAllTags(const bool enabled
)
1420 if (enabled
== confirmRemoveAllTags())
1423 setValue(u
"Preferences/Advanced/confirmRemoveAllTags"_s
, enabled
);
1426 bool Preferences::confirmMergeTrackers() const
1428 return value(u
"GUI/ConfirmActions/MergeTrackers"_s
, true);
1431 void Preferences::setConfirmMergeTrackers(const bool enabled
)
1433 if (enabled
== confirmMergeTrackers())
1436 setValue(u
"GUI/ConfirmActions/MergeTrackers"_s
, enabled
);
1439 bool Preferences::confirmRemoveTrackerFromAllTorrents() const
1441 return value(u
"GUI/ConfirmActions/RemoveTrackerFromAllTorrents"_s
, true);
1444 void Preferences::setConfirmRemoveTrackerFromAllTorrents(const bool enabled
)
1446 if (enabled
== confirmRemoveTrackerFromAllTorrents())
1449 setValue(u
"GUI/ConfirmActions/RemoveTrackerFromAllTorrents"_s
, enabled
);
1453 TrayIcon::Style
Preferences::trayIconStyle() const
1455 return value(u
"Preferences/Advanced/TrayIconStyle"_s
, TrayIcon::Style::Normal
);
1458 void Preferences::setTrayIconStyle(const TrayIcon::Style style
)
1460 if (style
== trayIconStyle())
1463 setValue(u
"Preferences/Advanced/TrayIconStyle"_s
, style
);
1467 // Stuff that don't appear in the Options GUI but are saved
1468 // in the same file.
1470 QDateTime
Preferences::getDNSLastUpd() const
1472 return value
<QDateTime
>(u
"DNSUpdater/lastUpdateTime"_s
);
1475 void Preferences::setDNSLastUpd(const QDateTime
&date
)
1477 if (date
== getDNSLastUpd())
1480 setValue(u
"DNSUpdater/lastUpdateTime"_s
, date
);
1483 QString
Preferences::getDNSLastIP() const
1485 return value
<QString
>(u
"DNSUpdater/lastIP"_s
);
1488 void Preferences::setDNSLastIP(const QString
&ip
)
1490 if (ip
== getDNSLastIP())
1493 setValue(u
"DNSUpdater/lastIP"_s
, ip
);
1496 QByteArray
Preferences::getMainGeometry() const
1498 return value
<QByteArray
>(u
"MainWindow/geometry"_s
);
1501 void Preferences::setMainGeometry(const QByteArray
&geometry
)
1503 if (geometry
== getMainGeometry())
1506 setValue(u
"MainWindow/geometry"_s
, geometry
);
1509 bool Preferences::isFiltersSidebarVisible() const
1511 return value(u
"GUI/MainWindow/FiltersSidebarVisible"_s
, true);
1514 void Preferences::setFiltersSidebarVisible(const bool value
)
1516 if (value
== isFiltersSidebarVisible())
1519 setValue(u
"GUI/MainWindow/FiltersSidebarVisible"_s
, value
);
1522 int Preferences::getFiltersSidebarWidth() const
1524 return value(u
"GUI/MainWindow/FiltersSidebarWidth"_s
, 120);
1527 void Preferences::setFiltersSidebarWidth(const int value
)
1529 if (value
== getFiltersSidebarWidth())
1532 setValue(u
"GUI/MainWindow/FiltersSidebarWidth"_s
, value
);
1535 Path
Preferences::getMainLastDir() const
1537 return value(u
"MainWindow/LastDir"_s
, Utils::Fs::homePath());
1540 void Preferences::setMainLastDir(const Path
&path
)
1542 if (path
== getMainLastDir())
1545 setValue(u
"MainWindow/LastDir"_s
, path
);
1548 QByteArray
Preferences::getPeerListState() const
1550 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/PeerListState"_s
);
1553 void Preferences::setPeerListState(const QByteArray
&state
)
1555 if (state
== getPeerListState())
1558 setValue(u
"GUI/Qt6/TorrentProperties/PeerListState"_s
, state
);
1561 QString
Preferences::getPropSplitterSizes() const
1563 return value
<QString
>(u
"TorrentProperties/SplitterSizes"_s
);
1566 void Preferences::setPropSplitterSizes(const QString
&sizes
)
1568 if (sizes
== getPropSplitterSizes())
1571 setValue(u
"TorrentProperties/SplitterSizes"_s
, sizes
);
1574 QByteArray
Preferences::getPropFileListState() const
1576 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/FilesListState"_s
);
1579 void Preferences::setPropFileListState(const QByteArray
&state
)
1581 if (state
== getPropFileListState())
1584 setValue(u
"GUI/Qt6/TorrentProperties/FilesListState"_s
, state
);
1587 int Preferences::getPropCurTab() const
1589 return value
<int>(u
"TorrentProperties/CurrentTab"_s
, -1);
1592 void Preferences::setPropCurTab(const int tab
)
1594 if (tab
== getPropCurTab())
1597 setValue(u
"TorrentProperties/CurrentTab"_s
, tab
);
1600 bool Preferences::getPropVisible() const
1602 return value(u
"TorrentProperties/Visible"_s
, false);
1605 void Preferences::setPropVisible(const bool visible
)
1607 if (visible
== getPropVisible())
1610 setValue(u
"TorrentProperties/Visible"_s
, visible
);
1613 QByteArray
Preferences::getTrackerListState() const
1615 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/TrackerListState"_s
);
1618 void Preferences::setTrackerListState(const QByteArray
&state
)
1620 if (state
== getTrackerListState())
1623 setValue(u
"GUI/Qt6/TorrentProperties/TrackerListState"_s
, state
);
1626 QStringList
Preferences::getRssOpenFolders() const
1628 return value
<QStringList
>(u
"GUI/RSSWidget/OpenedFolders"_s
);
1631 void Preferences::setRssOpenFolders(const QStringList
&folders
)
1633 if (folders
== getRssOpenFolders())
1636 setValue(u
"GUI/RSSWidget/OpenedFolders"_s
, folders
);
1639 QByteArray
Preferences::getRssSideSplitterState() const
1641 return value
<QByteArray
>(u
"GUI/Qt6/RSSWidget/SideSplitterState"_s
);
1644 void Preferences::setRssSideSplitterState(const QByteArray
&state
)
1646 if (state
== getRssSideSplitterState())
1649 setValue(u
"GUI/Qt6/RSSWidget/SideSplitterState"_s
, state
);
1652 QByteArray
Preferences::getRssMainSplitterState() const
1654 return value
<QByteArray
>(u
"GUI/Qt6/RSSWidget/MainSplitterState"_s
);
1657 void Preferences::setRssMainSplitterState(const QByteArray
&state
)
1659 if (state
== getRssMainSplitterState())
1662 setValue(u
"GUI/Qt6/RSSWidget/MainSplitterState"_s
, state
);
1665 QByteArray
Preferences::getSearchTabHeaderState() const
1667 return value
<QByteArray
>(u
"GUI/Qt6/SearchTab/HeaderState"_s
);
1670 void Preferences::setSearchTabHeaderState(const QByteArray
&state
)
1672 if (state
== getSearchTabHeaderState())
1675 setValue(u
"GUI/Qt6/SearchTab/HeaderState"_s
, state
);
1678 bool Preferences::getRegexAsFilteringPatternForSearchJob() const
1680 return value(u
"SearchTab/UseRegexAsFilteringPattern"_s
, false);
1683 void Preferences::setRegexAsFilteringPatternForSearchJob(const bool checked
)
1685 if (checked
== getRegexAsFilteringPatternForSearchJob())
1688 setValue(u
"SearchTab/UseRegexAsFilteringPattern"_s
, checked
);
1691 QStringList
Preferences::getSearchEngDisabled() const
1693 return value
<QStringList
>(u
"SearchEngines/disabledEngines"_s
);
1696 void Preferences::setSearchEngDisabled(const QStringList
&engines
)
1698 if (engines
== getSearchEngDisabled())
1701 setValue(u
"SearchEngines/disabledEngines"_s
, engines
);
1704 QString
Preferences::getTorImportLastContentDir() const
1706 return value(u
"TorrentImport/LastContentDir"_s
, QDir::homePath());
1709 void Preferences::setTorImportLastContentDir(const QString
&path
)
1711 if (path
== getTorImportLastContentDir())
1714 setValue(u
"TorrentImport/LastContentDir"_s
, path
);
1717 QByteArray
Preferences::getTorImportGeometry() const
1719 return value
<QByteArray
>(u
"TorrentImportDlg/dimensions"_s
);
1722 void Preferences::setTorImportGeometry(const QByteArray
&geometry
)
1724 if (geometry
== getTorImportGeometry())
1727 setValue(u
"TorrentImportDlg/dimensions"_s
, geometry
);
1730 bool Preferences::getStatusFilterState() const
1732 return value(u
"TransferListFilters/statusFilterState"_s
, true);
1735 void Preferences::setStatusFilterState(const bool checked
)
1737 if (checked
== getStatusFilterState())
1740 setValue(u
"TransferListFilters/statusFilterState"_s
, checked
);
1743 bool Preferences::getCategoryFilterState() const
1745 return value(u
"TransferListFilters/CategoryFilterState"_s
, true);
1748 void Preferences::setCategoryFilterState(const bool checked
)
1750 if (checked
== getCategoryFilterState())
1753 setValue(u
"TransferListFilters/CategoryFilterState"_s
, checked
);
1756 bool Preferences::getTagFilterState() const
1758 return value(u
"TransferListFilters/TagFilterState"_s
, true);
1761 void Preferences::setTagFilterState(const bool checked
)
1763 if (checked
== getTagFilterState())
1766 setValue(u
"TransferListFilters/TagFilterState"_s
, checked
);
1769 bool Preferences::getTrackerFilterState() const
1771 return value(u
"TransferListFilters/trackerFilterState"_s
, true);
1774 void Preferences::setTrackerFilterState(const bool checked
)
1776 if (checked
== getTrackerFilterState())
1779 setValue(u
"TransferListFilters/trackerFilterState"_s
, checked
);
1782 int Preferences::getTransSelFilter() const
1784 return value
<int>(u
"TransferListFilters/selectedFilterIndex"_s
, 0);
1787 void Preferences::setTransSelFilter(const int index
)
1789 if (index
== getTransSelFilter())
1792 setValue(u
"TransferListFilters/selectedFilterIndex"_s
, index
);
1795 bool Preferences::getHideZeroStatusFilters() const
1797 return value
<bool>(u
"TransferListFilters/HideZeroStatusFilters"_s
, false);
1800 void Preferences::setHideZeroStatusFilters(const bool hide
)
1802 if (hide
== getHideZeroStatusFilters())
1805 setValue(u
"TransferListFilters/HideZeroStatusFilters"_s
, hide
);
1808 QByteArray
Preferences::getTransHeaderState() const
1810 return value
<QByteArray
>(u
"GUI/Qt6/TransferList/HeaderState"_s
);
1813 void Preferences::setTransHeaderState(const QByteArray
&state
)
1815 if (state
== getTransHeaderState())
1818 setValue(u
"GUI/Qt6/TransferList/HeaderState"_s
, state
);
1821 bool Preferences::getRegexAsFilteringPatternForTransferList() const
1823 return value(u
"TransferList/UseRegexAsFilteringPattern"_s
, false);
1826 void Preferences::setRegexAsFilteringPatternForTransferList(const bool checked
)
1828 if (checked
== getRegexAsFilteringPatternForTransferList())
1831 setValue(u
"TransferList/UseRegexAsFilteringPattern"_s
, checked
);
1834 // From old RssSettings class
1835 bool Preferences::isRSSWidgetEnabled() const
1837 return value(u
"GUI/RSSWidget/Enabled"_s
, false);
1840 void Preferences::setRSSWidgetVisible(const bool enabled
)
1842 if (enabled
== isRSSWidgetEnabled())
1845 setValue(u
"GUI/RSSWidget/Enabled"_s
, enabled
);
1848 int Preferences::getToolbarTextPosition() const
1850 return value
<int>(u
"Toolbar/textPosition"_s
, -1);
1853 void Preferences::setToolbarTextPosition(const int position
)
1855 if (position
== getToolbarTextPosition())
1858 setValue(u
"Toolbar/textPosition"_s
, position
);
1861 QList
<QNetworkCookie
> Preferences::getNetworkCookies() const
1863 const auto rawCookies
= value
<QStringList
>(u
"Network/Cookies"_s
);
1864 QList
<QNetworkCookie
> cookies
;
1865 cookies
.reserve(rawCookies
.size());
1866 for (const QString
&rawCookie
: rawCookies
)
1867 cookies
<< QNetworkCookie::parseCookies(rawCookie
.toUtf8());
1871 void Preferences::setNetworkCookies(const QList
<QNetworkCookie
> &cookies
)
1873 QStringList rawCookies
;
1874 rawCookies
.reserve(cookies
.size());
1875 for (const QNetworkCookie
&cookie
: cookies
)
1876 rawCookies
<< QString::fromLatin1(cookie
.toRawForm());
1877 setValue(u
"Network/Cookies"_s
, rawCookies
);
1880 bool Preferences::useProxyForBT() const
1882 return value
<bool>(u
"Network/Proxy/Profiles/BitTorrent"_s
);
1885 void Preferences::setUseProxyForBT(const bool value
)
1887 if (value
== useProxyForBT())
1890 setValue(u
"Network/Proxy/Profiles/BitTorrent"_s
, value
);
1893 bool Preferences::useProxyForRSS() const
1895 return value
<bool>(u
"Network/Proxy/Profiles/RSS"_s
);
1898 void Preferences::setUseProxyForRSS(const bool value
)
1900 if (value
== useProxyForRSS())
1903 setValue(u
"Network/Proxy/Profiles/RSS"_s
, value
);
1906 bool Preferences::useProxyForGeneralPurposes() const
1908 return value
<bool>(u
"Network/Proxy/Profiles/Misc"_s
);
1911 void Preferences::setUseProxyForGeneralPurposes(const bool value
)
1913 if (value
== useProxyForGeneralPurposes())
1916 setValue(u
"Network/Proxy/Profiles/Misc"_s
, value
);
1919 bool Preferences::isSpeedWidgetEnabled() const
1921 return value(u
"SpeedWidget/Enabled"_s
, true);
1924 void Preferences::setSpeedWidgetEnabled(const bool enabled
)
1926 if (enabled
== isSpeedWidgetEnabled())
1929 setValue(u
"SpeedWidget/Enabled"_s
, enabled
);
1932 int Preferences::getSpeedWidgetPeriod() const
1934 return value
<int>(u
"SpeedWidget/period"_s
, 1);
1937 void Preferences::setSpeedWidgetPeriod(const int period
)
1939 if (period
== getSpeedWidgetPeriod())
1942 setValue(u
"SpeedWidget/period"_s
, period
);
1945 bool Preferences::getSpeedWidgetGraphEnable(const int id
) const
1947 // UP and DOWN graphs enabled by default
1948 return value(u
"SpeedWidget/graph_enable_%1"_s
.arg(id
), ((id
== 0) || (id
== 1)));
1951 void Preferences::setSpeedWidgetGraphEnable(const int id
, const bool enable
)
1953 if (enable
== getSpeedWidgetGraphEnable(id
))
1956 setValue(u
"SpeedWidget/graph_enable_%1"_s
.arg(id
), enable
);
1959 bool Preferences::isAddNewTorrentDialogEnabled() const
1961 return value(u
"AddNewTorrentDialog/Enabled"_s
, true);
1964 void Preferences::setAddNewTorrentDialogEnabled(const bool value
)
1966 if (value
== isAddNewTorrentDialogEnabled())
1969 setValue(u
"AddNewTorrentDialog/Enabled"_s
, value
);
1972 bool Preferences::isAddNewTorrentDialogTopLevel() const
1974 return value(u
"AddNewTorrentDialog/TopLevel"_s
, true);
1977 void Preferences::setAddNewTorrentDialogTopLevel(const bool value
)
1979 if (value
== isAddNewTorrentDialogTopLevel())
1982 setValue(u
"AddNewTorrentDialog/TopLevel"_s
, value
);
1985 int Preferences::addNewTorrentDialogSavePathHistoryLength() const
1987 const int defaultHistoryLength
= 8;
1989 const int val
= value(u
"AddNewTorrentDialog/SavePathHistoryLength"_s
, defaultHistoryLength
);
1990 return std::clamp(val
, 0, 99);
1993 void Preferences::setAddNewTorrentDialogSavePathHistoryLength(const int value
)
1995 const int clampedValue
= std::clamp(value
, 0, 99);
1996 const int oldValue
= addNewTorrentDialogSavePathHistoryLength();
1997 if (clampedValue
== oldValue
)
2000 setValue(u
"AddNewTorrentDialog/SavePathHistoryLength"_s
, clampedValue
);
2003 void Preferences::apply()
2005 if (SettingsStorage::instance()->save())