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 <CoreServices/CoreServices.h>
41 #include <QCoreApplication>
46 #include <QNetworkCookie>
51 #include <QRegularExpression>
54 #include "algorithm.h"
58 #include "settingsstorage.h"
64 T
value(const QString
&key
, const T
&defaultValue
= {})
66 return SettingsStorage::instance()->loadValue(key
, defaultValue
);
70 void setValue(const QString
&key
, const T
&value
)
72 SettingsStorage::instance()->storeValue(key
, value
);
76 QString
makeProfileID(const Path
&profilePath
, const QString
&profileName
)
78 return profilePath
.isEmpty()
80 : profileName
+ u
'@' + Utils::Fs::toValidFileName(profilePath
.data(), {});
85 Preferences
*Preferences::m_instance
= nullptr;
87 Preferences::Preferences() = default;
89 Preferences
*Preferences::instance()
94 void Preferences::initInstance()
97 m_instance
= new Preferences
;
100 void Preferences::freeInstance()
103 m_instance
= nullptr;
107 QString
Preferences::getLocale() const
109 const auto localeName
= value
<QString
>(u
"Preferences/General/Locale"_qs
);
110 return (localeName
.isEmpty() ? QLocale::system().name() : localeName
);
113 void Preferences::setLocale(const QString
&locale
)
115 setValue(u
"Preferences/General/Locale"_qs
, locale
);
118 bool Preferences::useCustomUITheme() const
120 return value(u
"Preferences/General/UseCustomUITheme"_qs
, false) && !customUIThemePath().isEmpty();
123 void Preferences::setUseCustomUITheme(const bool use
)
125 setValue(u
"Preferences/General/UseCustomUITheme"_qs
, use
);
128 Path
Preferences::customUIThemePath() const
130 return value
<Path
>(u
"Preferences/General/CustomUIThemePath"_qs
);
133 void Preferences::setCustomUIThemePath(const Path
&path
)
135 setValue(u
"Preferences/General/CustomUIThemePath"_qs
, path
);
138 bool Preferences::deleteTorrentFilesAsDefault() const
140 return value(u
"Preferences/General/DeleteTorrentsFilesAsDefault"_qs
, false);
143 void Preferences::setDeleteTorrentFilesAsDefault(const bool del
)
145 setValue(u
"Preferences/General/DeleteTorrentsFilesAsDefault"_qs
, del
);
148 bool Preferences::confirmOnExit() const
150 return value(u
"Preferences/General/ExitConfirm"_qs
, true);
153 void Preferences::setConfirmOnExit(const bool confirm
)
155 setValue(u
"Preferences/General/ExitConfirm"_qs
, confirm
);
158 bool Preferences::speedInTitleBar() const
160 return value(u
"Preferences/General/SpeedInTitleBar"_qs
, false);
163 void Preferences::showSpeedInTitleBar(const bool show
)
165 setValue(u
"Preferences/General/SpeedInTitleBar"_qs
, show
);
168 bool Preferences::useAlternatingRowColors() const
170 return value(u
"Preferences/General/AlternatingRowColors"_qs
, true);
173 void Preferences::setAlternatingRowColors(const bool b
)
175 setValue(u
"Preferences/General/AlternatingRowColors"_qs
, b
);
178 bool Preferences::getHideZeroValues() const
180 return value(u
"Preferences/General/HideZeroValues"_qs
, false);
183 void Preferences::setHideZeroValues(const bool b
)
185 setValue(u
"Preferences/General/HideZeroValues"_qs
, b
);
188 int Preferences::getHideZeroComboValues() const
190 return value
<int>(u
"Preferences/General/HideZeroComboValues"_qs
, 0);
193 void Preferences::setHideZeroComboValues(const int n
)
195 setValue(u
"Preferences/General/HideZeroComboValues"_qs
, n
);
198 // In Mac OS X the dock is sufficient for our needs so we disable the sys tray functionality.
199 // See extensive discussion in https://github.com/qbittorrent/qBittorrent/pull/3018
201 bool Preferences::systemTrayEnabled() const
203 return value(u
"Preferences/General/SystrayEnabled"_qs
, true);
206 void Preferences::setSystemTrayEnabled(const bool enabled
)
208 setValue(u
"Preferences/General/SystrayEnabled"_qs
, enabled
);
211 bool Preferences::minimizeToTray() const
213 return value(u
"Preferences/General/MinimizeToTray"_qs
, false);
216 void Preferences::setMinimizeToTray(const bool b
)
218 setValue(u
"Preferences/General/MinimizeToTray"_qs
, b
);
221 bool Preferences::minimizeToTrayNotified() const
223 return value(u
"Preferences/General/MinimizeToTrayNotified"_qs
, false);
226 void Preferences::setMinimizeToTrayNotified(const bool b
)
228 setValue(u
"Preferences/General/MinimizeToTrayNotified"_qs
, b
);
231 bool Preferences::closeToTray() const
233 return value(u
"Preferences/General/CloseToTray"_qs
, true);
236 void Preferences::setCloseToTray(const bool b
)
238 setValue(u
"Preferences/General/CloseToTray"_qs
, b
);
241 bool Preferences::closeToTrayNotified() const
243 return value(u
"Preferences/General/CloseToTrayNotified"_qs
, false);
246 void Preferences::setCloseToTrayNotified(const bool b
)
248 setValue(u
"Preferences/General/CloseToTrayNotified"_qs
, b
);
251 bool Preferences::iconsInMenusEnabled() const
253 return value(u
"Preferences/Advanced/EnableIconsInMenus"_qs
, true);
256 void Preferences::setIconsInMenusEnabled(const bool enable
)
258 setValue(u
"Preferences/Advanced/EnableIconsInMenus"_qs
, enable
);
262 bool Preferences::isToolbarDisplayed() const
264 return value(u
"Preferences/General/ToolbarDisplayed"_qs
, true);
267 void Preferences::setToolbarDisplayed(const bool displayed
)
269 setValue(u
"Preferences/General/ToolbarDisplayed"_qs
, displayed
);
272 bool Preferences::isStatusbarDisplayed() const
274 return value(u
"Preferences/General/StatusbarDisplayed"_qs
, true);
277 void Preferences::setStatusbarDisplayed(const bool displayed
)
279 setValue(u
"Preferences/General/StatusbarDisplayed"_qs
, displayed
);
282 bool Preferences::isSplashScreenDisabled() const
284 return value(u
"Preferences/General/NoSplashScreen"_qs
, true);
287 void Preferences::setSplashScreenDisabled(const bool b
)
289 setValue(u
"Preferences/General/NoSplashScreen"_qs
, b
);
292 // Preventing from system suspend while active torrents are presented.
293 bool Preferences::preventFromSuspendWhenDownloading() const
295 return value(u
"Preferences/General/PreventFromSuspendWhenDownloading"_qs
, false);
298 void Preferences::setPreventFromSuspendWhenDownloading(const bool b
)
300 setValue(u
"Preferences/General/PreventFromSuspendWhenDownloading"_qs
, b
);
303 bool Preferences::preventFromSuspendWhenSeeding() const
305 return value(u
"Preferences/General/PreventFromSuspendWhenSeeding"_qs
, false);
308 void Preferences::setPreventFromSuspendWhenSeeding(const bool b
)
310 setValue(u
"Preferences/General/PreventFromSuspendWhenSeeding"_qs
, b
);
314 bool Preferences::WinStartup() const
316 const QString profileName
= Profile::instance()->profileName();
317 const Path profilePath
= Profile::instance()->rootPath();
318 const QString profileID
= makeProfileID(profilePath
, profileName
);
319 const QSettings settings
{u
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"_qs
, QSettings::NativeFormat
};
321 return settings
.contains(profileID
);
324 void Preferences::setWinStartup(const bool b
)
326 const QString profileName
= Profile::instance()->profileName();
327 const Path profilePath
= Profile::instance()->rootPath();
328 const QString profileID
= makeProfileID(profilePath
, profileName
);
329 QSettings settings
{u
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"_qs
, QSettings::NativeFormat
};
332 const QString configuration
= Profile::instance()->configurationName();
334 const auto cmd
= uR
"("%1" "--profile
=%2" "--configuration
=%3")"_qs
335 .arg(Path(qApp
->applicationFilePath()).toString(), profilePath
.toString(), configuration
);
336 settings
.setValue(profileID
, cmd
);
340 settings
.remove(profileID
);
346 Path
Preferences::getScanDirsLastPath() const
348 return value
<Path
>(u
"Preferences/Downloads/ScanDirsLastPath"_qs
);
351 void Preferences::setScanDirsLastPath(const Path
&path
)
353 setValue(u
"Preferences/Downloads/ScanDirsLastPath"_qs
, path
);
356 bool Preferences::isMailNotificationEnabled() const
358 return value(u
"Preferences/MailNotification/enabled"_qs
, false);
361 void Preferences::setMailNotificationEnabled(const bool enabled
)
363 setValue(u
"Preferences/MailNotification/enabled"_qs
, enabled
);
366 QString
Preferences::getMailNotificationSender() const
368 return value
<QString
>(u
"Preferences/MailNotification/sender"_qs
369 , u
"qBittorrent_notification@example.com"_qs
);
372 void Preferences::setMailNotificationSender(const QString
&mail
)
374 setValue(u
"Preferences/MailNotification/sender"_qs
, mail
);
377 QString
Preferences::getMailNotificationEmail() const
379 return value
<QString
>(u
"Preferences/MailNotification/email"_qs
);
382 void Preferences::setMailNotificationEmail(const QString
&mail
)
384 setValue(u
"Preferences/MailNotification/email"_qs
, mail
);
387 QString
Preferences::getMailNotificationSMTP() const
389 return value
<QString
>(u
"Preferences/MailNotification/smtp_server"_qs
, u
"smtp.changeme.com"_qs
);
392 void Preferences::setMailNotificationSMTP(const QString
&smtp_server
)
394 setValue(u
"Preferences/MailNotification/smtp_server"_qs
, smtp_server
);
397 bool Preferences::getMailNotificationSMTPSSL() const
399 return value(u
"Preferences/MailNotification/req_ssl"_qs
, false);
402 void Preferences::setMailNotificationSMTPSSL(const bool use
)
404 setValue(u
"Preferences/MailNotification/req_ssl"_qs
, use
);
407 bool Preferences::getMailNotificationSMTPAuth() const
409 return value(u
"Preferences/MailNotification/req_auth"_qs
, false);
412 void Preferences::setMailNotificationSMTPAuth(const bool use
)
414 setValue(u
"Preferences/MailNotification/req_auth"_qs
, use
);
417 QString
Preferences::getMailNotificationSMTPUsername() const
419 return value
<QString
>(u
"Preferences/MailNotification/username"_qs
);
422 void Preferences::setMailNotificationSMTPUsername(const QString
&username
)
424 setValue(u
"Preferences/MailNotification/username"_qs
, username
);
427 QString
Preferences::getMailNotificationSMTPPassword() const
429 return value
<QString
>(u
"Preferences/MailNotification/password"_qs
);
432 void Preferences::setMailNotificationSMTPPassword(const QString
&password
)
434 setValue(u
"Preferences/MailNotification/password"_qs
, password
);
437 int Preferences::getActionOnDblClOnTorrentDl() const
439 return value
<int>(u
"Preferences/Downloads/DblClOnTorDl"_qs
, 0);
442 void Preferences::setActionOnDblClOnTorrentDl(const int act
)
444 setValue(u
"Preferences/Downloads/DblClOnTorDl"_qs
, act
);
447 int Preferences::getActionOnDblClOnTorrentFn() const
449 return value
<int>(u
"Preferences/Downloads/DblClOnTorFn"_qs
, 1);
452 void Preferences::setActionOnDblClOnTorrentFn(const int act
)
454 setValue(u
"Preferences/Downloads/DblClOnTorFn"_qs
, act
);
457 QTime
Preferences::getSchedulerStartTime() const
459 return value(u
"Preferences/Scheduler/start_time"_qs
, QTime(8, 0));
462 void Preferences::setSchedulerStartTime(const QTime
&time
)
464 setValue(u
"Preferences/Scheduler/start_time"_qs
, time
);
467 QTime
Preferences::getSchedulerEndTime() const
469 return value(u
"Preferences/Scheduler/end_time"_qs
, QTime(20, 0));
472 void Preferences::setSchedulerEndTime(const QTime
&time
)
474 setValue(u
"Preferences/Scheduler/end_time"_qs
, time
);
477 Scheduler::Days
Preferences::getSchedulerDays() const
479 return value(u
"Preferences/Scheduler/days"_qs
, Scheduler::Days::EveryDay
);
482 void Preferences::setSchedulerDays(const Scheduler::Days days
)
484 setValue(u
"Preferences/Scheduler/days"_qs
, days
);
488 bool Preferences::isSearchEnabled() const
490 return value(u
"Preferences/Search/SearchEnabled"_qs
, false);
493 void Preferences::setSearchEnabled(const bool enabled
)
495 setValue(u
"Preferences/Search/SearchEnabled"_qs
, enabled
);
498 bool Preferences::isWebUiEnabled() const
503 return value(u
"Preferences/WebUI/Enabled"_qs
, false);
507 void Preferences::setWebUiEnabled(const bool enabled
)
509 setValue(u
"Preferences/WebUI/Enabled"_qs
, enabled
);
512 bool Preferences::isWebUiLocalAuthEnabled() const
514 return value(u
"Preferences/WebUI/LocalHostAuth"_qs
, true);
517 void Preferences::setWebUiLocalAuthEnabled(const bool enabled
)
519 setValue(u
"Preferences/WebUI/LocalHostAuth"_qs
, enabled
);
522 bool Preferences::isWebUiAuthSubnetWhitelistEnabled() const
524 return value(u
"Preferences/WebUI/AuthSubnetWhitelistEnabled"_qs
, false);
527 void Preferences::setWebUiAuthSubnetWhitelistEnabled(const bool enabled
)
529 setValue(u
"Preferences/WebUI/AuthSubnetWhitelistEnabled"_qs
, enabled
);
532 QVector
<Utils::Net::Subnet
> Preferences::getWebUiAuthSubnetWhitelist() const
534 const auto subnets
= value
<QStringList
>(u
"Preferences/WebUI/AuthSubnetWhitelist"_qs
);
536 QVector
<Utils::Net::Subnet
> ret
;
537 ret
.reserve(subnets
.size());
539 for (const QString
&rawSubnet
: subnets
)
541 const std::optional
<Utils::Net::Subnet
> subnet
= Utils::Net::parseSubnet(rawSubnet
.trimmed());
543 ret
.append(subnet
.value());
549 void Preferences::setWebUiAuthSubnetWhitelist(QStringList subnets
)
551 Algorithm::removeIf(subnets
, [](const QString
&subnet
)
553 return !Utils::Net::parseSubnet(subnet
.trimmed()).has_value();
556 setValue(u
"Preferences/WebUI/AuthSubnetWhitelist"_qs
, subnets
);
559 QString
Preferences::getServerDomains() const
561 return value
<QString
>(u
"Preferences/WebUI/ServerDomains"_qs
, u
"*"_qs
);
564 void Preferences::setServerDomains(const QString
&str
)
566 setValue(u
"Preferences/WebUI/ServerDomains"_qs
, str
);
569 QString
Preferences::getWebUiAddress() const
571 return value
<QString
>(u
"Preferences/WebUI/Address"_qs
, u
"*"_qs
).trimmed();
574 void Preferences::setWebUiAddress(const QString
&addr
)
576 setValue(u
"Preferences/WebUI/Address"_qs
, addr
.trimmed());
579 quint16
Preferences::getWebUiPort() const
581 return value
<quint16
>(u
"Preferences/WebUI/Port"_qs
, 8080);
584 void Preferences::setWebUiPort(const quint16 port
)
586 // cast to `int` type so it will show human readable unit in configuration file
587 setValue(u
"Preferences/WebUI/Port"_qs
, static_cast<int>(port
));
590 bool Preferences::useUPnPForWebUIPort() const
592 return value(u
"Preferences/WebUI/UseUPnP"_qs
, false);
595 void Preferences::setUPnPForWebUIPort(const bool enabled
)
597 setValue(u
"Preferences/WebUI/UseUPnP"_qs
, enabled
);
600 QString
Preferences::getWebUiUsername() const
602 return value
<QString
>(u
"Preferences/WebUI/Username"_qs
, u
"admin"_qs
);
605 void Preferences::setWebUiUsername(const QString
&username
)
607 setValue(u
"Preferences/WebUI/Username"_qs
, username
);
610 QByteArray
Preferences::getWebUIPassword() const
612 // default: adminadmin
613 const auto defaultValue
= QByteArrayLiteral("ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==");
614 return value(u
"Preferences/WebUI/Password_PBKDF2"_qs
, defaultValue
);
617 void Preferences::setWebUIPassword(const QByteArray
&password
)
619 setValue(u
"Preferences/WebUI/Password_PBKDF2"_qs
, password
);
622 int Preferences::getWebUIMaxAuthFailCount() const
624 return value
<int>(u
"Preferences/WebUI/MaxAuthenticationFailCount"_qs
, 5);
627 void Preferences::setWebUIMaxAuthFailCount(const int count
)
629 setValue(u
"Preferences/WebUI/MaxAuthenticationFailCount"_qs
, count
);
632 std::chrono::seconds
Preferences::getWebUIBanDuration() const
634 return std::chrono::seconds(value
<int>(u
"Preferences/WebUI/BanDuration"_qs
, 3600));
637 void Preferences::setWebUIBanDuration(const std::chrono::seconds duration
)
639 setValue(u
"Preferences/WebUI/BanDuration"_qs
, static_cast<int>(duration
.count()));
642 int Preferences::getWebUISessionTimeout() const
644 return value
<int>(u
"Preferences/WebUI/SessionTimeout"_qs
, 3600);
647 void Preferences::setWebUISessionTimeout(const int timeout
)
649 setValue(u
"Preferences/WebUI/SessionTimeout"_qs
, timeout
);
652 QString
Preferences::getWebAPISessionCookieName() const
654 return value
<QString
>(u
"WebAPI/SessionCookieName"_qs
);
657 void Preferences::setWebAPISessionCookieName(const QString
&cookieName
)
659 setValue(u
"WebAPI/SessionCookieName"_qs
, cookieName
);
662 bool Preferences::isWebUiClickjackingProtectionEnabled() const
664 return value(u
"Preferences/WebUI/ClickjackingProtection"_qs
, true);
667 void Preferences::setWebUiClickjackingProtectionEnabled(const bool enabled
)
669 setValue(u
"Preferences/WebUI/ClickjackingProtection"_qs
, enabled
);
672 bool Preferences::isWebUiCSRFProtectionEnabled() const
674 return value(u
"Preferences/WebUI/CSRFProtection"_qs
, true);
677 void Preferences::setWebUiCSRFProtectionEnabled(const bool enabled
)
679 setValue(u
"Preferences/WebUI/CSRFProtection"_qs
, enabled
);
682 bool Preferences::isWebUiSecureCookieEnabled() const
684 return value(u
"Preferences/WebUI/SecureCookie"_qs
, true);
687 void Preferences::setWebUiSecureCookieEnabled(const bool enabled
)
689 setValue(u
"Preferences/WebUI/SecureCookie"_qs
, enabled
);
692 bool Preferences::isWebUIHostHeaderValidationEnabled() const
694 return value(u
"Preferences/WebUI/HostHeaderValidation"_qs
, true);
697 void Preferences::setWebUIHostHeaderValidationEnabled(const bool enabled
)
699 setValue(u
"Preferences/WebUI/HostHeaderValidation"_qs
, enabled
);
702 bool Preferences::isWebUiHttpsEnabled() const
704 return value(u
"Preferences/WebUI/HTTPS/Enabled"_qs
, false);
707 void Preferences::setWebUiHttpsEnabled(const bool enabled
)
709 setValue(u
"Preferences/WebUI/HTTPS/Enabled"_qs
, enabled
);
712 Path
Preferences::getWebUIHttpsCertificatePath() const
714 return value
<Path
>(u
"Preferences/WebUI/HTTPS/CertificatePath"_qs
);
717 void Preferences::setWebUIHttpsCertificatePath(const Path
&path
)
719 setValue(u
"Preferences/WebUI/HTTPS/CertificatePath"_qs
, path
);
722 Path
Preferences::getWebUIHttpsKeyPath() const
724 return value
<Path
>(u
"Preferences/WebUI/HTTPS/KeyPath"_qs
);
727 void Preferences::setWebUIHttpsKeyPath(const Path
&path
)
729 setValue(u
"Preferences/WebUI/HTTPS/KeyPath"_qs
, path
);
732 bool Preferences::isAltWebUiEnabled() const
734 return value(u
"Preferences/WebUI/AlternativeUIEnabled"_qs
, false);
737 void Preferences::setAltWebUiEnabled(const bool enabled
)
739 setValue(u
"Preferences/WebUI/AlternativeUIEnabled"_qs
, enabled
);
742 Path
Preferences::getWebUiRootFolder() const
744 return value
<Path
>(u
"Preferences/WebUI/RootFolder"_qs
);
747 void Preferences::setWebUiRootFolder(const Path
&path
)
749 setValue(u
"Preferences/WebUI/RootFolder"_qs
, path
);
752 bool Preferences::isWebUICustomHTTPHeadersEnabled() const
754 return value(u
"Preferences/WebUI/CustomHTTPHeadersEnabled"_qs
, false);
757 void Preferences::setWebUICustomHTTPHeadersEnabled(const bool enabled
)
759 setValue(u
"Preferences/WebUI/CustomHTTPHeadersEnabled"_qs
, enabled
);
762 QString
Preferences::getWebUICustomHTTPHeaders() const
764 return value
<QString
>(u
"Preferences/WebUI/CustomHTTPHeaders"_qs
);
767 void Preferences::setWebUICustomHTTPHeaders(const QString
&headers
)
769 setValue(u
"Preferences/WebUI/CustomHTTPHeaders"_qs
, headers
);
772 bool Preferences::isWebUIReverseProxySupportEnabled() const
774 return value(u
"Preferences/WebUI/ReverseProxySupportEnabled"_qs
, false);
777 void Preferences::setWebUIReverseProxySupportEnabled(const bool enabled
)
779 setValue(u
"Preferences/WebUI/ReverseProxySupportEnabled"_qs
, enabled
);
782 QString
Preferences::getWebUITrustedReverseProxiesList() const
784 return value
<QString
>(u
"Preferences/WebUI/TrustedReverseProxiesList"_qs
);
787 void Preferences::setWebUITrustedReverseProxiesList(const QString
&addr
)
789 setValue(u
"Preferences/WebUI/TrustedReverseProxiesList"_qs
, addr
);
792 bool Preferences::isDynDNSEnabled() const
794 return value(u
"Preferences/DynDNS/Enabled"_qs
, false);
797 void Preferences::setDynDNSEnabled(const bool enabled
)
799 setValue(u
"Preferences/DynDNS/Enabled"_qs
, enabled
);
802 DNS::Service
Preferences::getDynDNSService() const
804 return value(u
"Preferences/DynDNS/Service"_qs
, DNS::Service::DynDNS
);
807 void Preferences::setDynDNSService(const DNS::Service service
)
809 setValue(u
"Preferences/DynDNS/Service"_qs
, service
);
812 QString
Preferences::getDynDomainName() const
814 return value
<QString
>(u
"Preferences/DynDNS/DomainName"_qs
, u
"changeme.dyndns.org"_qs
);
817 void Preferences::setDynDomainName(const QString
&name
)
819 setValue(u
"Preferences/DynDNS/DomainName"_qs
, name
);
822 QString
Preferences::getDynDNSUsername() const
824 return value
<QString
>(u
"Preferences/DynDNS/Username"_qs
);
827 void Preferences::setDynDNSUsername(const QString
&username
)
829 setValue(u
"Preferences/DynDNS/Username"_qs
, username
);
832 QString
Preferences::getDynDNSPassword() const
834 return value
<QString
>(u
"Preferences/DynDNS/Password"_qs
);
837 void Preferences::setDynDNSPassword(const QString
&password
)
839 setValue(u
"Preferences/DynDNS/Password"_qs
, password
);
843 QByteArray
Preferences::getUILockPassword() const
845 return value
<QByteArray
>(u
"Locking/password_PBKDF2"_qs
);
848 void Preferences::setUILockPassword(const QByteArray
&password
)
850 setValue(u
"Locking/password_PBKDF2"_qs
, password
);
853 bool Preferences::isUILocked() const
855 return value(u
"Locking/locked"_qs
, false);
858 void Preferences::setUILocked(const bool locked
)
860 setValue(u
"Locking/locked"_qs
, locked
);
863 bool Preferences::isAutoRunOnTorrentAddedEnabled() const
865 return value(u
"AutoRun/OnTorrentAdded/Enabled"_qs
, false);
868 void Preferences::setAutoRunOnTorrentAddedEnabled(const bool enabled
)
870 setValue(u
"AutoRun/OnTorrentAdded/Enabled"_qs
, enabled
);
873 QString
Preferences::getAutoRunOnTorrentAddedProgram() const
875 return value
<QString
>(u
"AutoRun/OnTorrentAdded/Program"_qs
);
878 void Preferences::setAutoRunOnTorrentAddedProgram(const QString
&program
)
880 setValue(u
"AutoRun/OnTorrentAdded/Program"_qs
, program
);
883 bool Preferences::isAutoRunOnTorrentFinishedEnabled() const
885 return value(u
"AutoRun/enabled"_qs
, false);
888 void Preferences::setAutoRunOnTorrentFinishedEnabled(const bool enabled
)
890 setValue(u
"AutoRun/enabled"_qs
, enabled
);
893 QString
Preferences::getAutoRunOnTorrentFinishedProgram() const
895 return value
<QString
>(u
"AutoRun/program"_qs
);
898 void Preferences::setAutoRunOnTorrentFinishedProgram(const QString
&program
)
900 setValue(u
"AutoRun/program"_qs
, program
);
903 #if defined(Q_OS_WIN)
904 bool Preferences::isAutoRunConsoleEnabled() const
906 return value(u
"AutoRun/ConsoleEnabled"_qs
, false);
909 void Preferences::setAutoRunConsoleEnabled(const bool enabled
)
911 setValue(u
"AutoRun/ConsoleEnabled"_qs
, enabled
);
915 bool Preferences::shutdownWhenDownloadsComplete() const
917 return value(u
"Preferences/Downloads/AutoShutDownOnCompletion"_qs
, false);
920 void Preferences::setShutdownWhenDownloadsComplete(const bool shutdown
)
922 setValue(u
"Preferences/Downloads/AutoShutDownOnCompletion"_qs
, shutdown
);
925 bool Preferences::suspendWhenDownloadsComplete() const
927 return value(u
"Preferences/Downloads/AutoSuspendOnCompletion"_qs
, false);
930 void Preferences::setSuspendWhenDownloadsComplete(const bool suspend
)
932 setValue(u
"Preferences/Downloads/AutoSuspendOnCompletion"_qs
, suspend
);
935 bool Preferences::hibernateWhenDownloadsComplete() const
937 return value(u
"Preferences/Downloads/AutoHibernateOnCompletion"_qs
, false);
940 void Preferences::setHibernateWhenDownloadsComplete(const bool hibernate
)
942 setValue(u
"Preferences/Downloads/AutoHibernateOnCompletion"_qs
, hibernate
);
945 bool Preferences::shutdownqBTWhenDownloadsComplete() const
947 return value(u
"Preferences/Downloads/AutoShutDownqBTOnCompletion"_qs
, false);
950 void Preferences::setShutdownqBTWhenDownloadsComplete(const bool shutdown
)
952 setValue(u
"Preferences/Downloads/AutoShutDownqBTOnCompletion"_qs
, shutdown
);
955 bool Preferences::dontConfirmAutoExit() const
957 return value(u
"ShutdownConfirmDlg/DontConfirmAutoExit"_qs
, false);
960 void Preferences::setDontConfirmAutoExit(const bool dontConfirmAutoExit
)
962 setValue(u
"ShutdownConfirmDlg/DontConfirmAutoExit"_qs
, dontConfirmAutoExit
);
965 bool Preferences::recheckTorrentsOnCompletion() const
967 return value(u
"Preferences/Advanced/RecheckOnCompletion"_qs
, false);
970 void Preferences::recheckTorrentsOnCompletion(const bool recheck
)
972 setValue(u
"Preferences/Advanced/RecheckOnCompletion"_qs
, recheck
);
975 bool Preferences::resolvePeerCountries() const
977 return value(u
"Preferences/Connection/ResolvePeerCountries"_qs
, true);
980 void Preferences::resolvePeerCountries(const bool resolve
)
982 setValue(u
"Preferences/Connection/ResolvePeerCountries"_qs
, resolve
);
985 bool Preferences::resolvePeerHostNames() const
987 return value(u
"Preferences/Connection/ResolvePeerHostNames"_qs
, false);
990 void Preferences::resolvePeerHostNames(const bool resolve
)
992 setValue(u
"Preferences/Connection/ResolvePeerHostNames"_qs
, resolve
);
995 #if (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
996 bool Preferences::useSystemIcons() const
998 return value(u
"Preferences/Advanced/useSystemIconTheme"_qs
, false);
1001 void Preferences::useSystemIcons(const bool enabled
)
1003 setValue(u
"Preferences/Advanced/useSystemIconTheme"_qs
, enabled
);
1007 bool Preferences::isRecursiveDownloadEnabled() const
1009 return !value(u
"Preferences/Advanced/DisableRecursiveDownload"_qs
, false);
1012 void Preferences::setRecursiveDownloadEnabled(const bool enable
)
1014 setValue(u
"Preferences/Advanced/DisableRecursiveDownload"_qs
, !enable
);
1018 bool Preferences::neverCheckFileAssoc() const
1020 return value(u
"Preferences/Win32/NeverCheckFileAssocation"_qs
, false);
1023 void Preferences::setNeverCheckFileAssoc(const bool check
)
1025 setValue(u
"Preferences/Win32/NeverCheckFileAssocation"_qs
, check
);
1028 bool Preferences::isTorrentFileAssocSet()
1030 const QSettings
settings(u
"HKEY_CURRENT_USER\\Software\\Classes"_qs
, QSettings::NativeFormat
);
1031 if (settings
.value(u
".torrent/Default"_qs
).toString() != u
"qBittorrent")
1033 qDebug(".torrent != qBittorrent");
1040 bool Preferences::isMagnetLinkAssocSet()
1042 const QSettings
settings(u
"HKEY_CURRENT_USER\\Software\\Classes"_qs
, QSettings::NativeFormat
);
1044 // Check magnet link assoc
1045 const QString shellCommand
= settings
.value(u
"magnet/shell/open/command/Default"_qs
, QString()).toString();
1047 const QRegularExpressionMatch exeRegMatch
= QRegularExpression(u
"\"([^\"]+)\".*"_qs
).match(shellCommand
);
1048 if (!exeRegMatch
.hasMatch())
1051 const Path assocExe
{exeRegMatch
.captured(1)};
1052 if (assocExe
!= Path(qApp
->applicationFilePath()))
1058 void Preferences::setTorrentFileAssoc(const bool set
)
1060 QSettings
settings(u
"HKEY_CURRENT_USER\\Software\\Classes"_qs
, QSettings::NativeFormat
);
1062 // .Torrent association
1065 const QString oldProgId
= settings
.value(u
".torrent/Default"_qs
).toString();
1066 if (!oldProgId
.isEmpty() && (oldProgId
!= u
"qBittorrent"))
1067 settings
.setValue((u
".torrent/OpenWithProgids/" + oldProgId
), QString());
1068 settings
.setValue(u
".torrent/Default"_qs
, u
"qBittorrent"_qs
);
1070 else if (isTorrentFileAssocSet())
1072 settings
.setValue(u
".torrent/Default"_qs
, QString());
1075 SHChangeNotify(SHCNE_ASSOCCHANGED
, SHCNF_IDLIST
, 0, 0);
1078 void Preferences::setMagnetLinkAssoc(const bool set
)
1080 QSettings
settings(u
"HKEY_CURRENT_USER\\Software\\Classes"_qs
, QSettings::NativeFormat
);
1082 // Magnet association
1085 const QString applicationFilePath
= Path(qApp
->applicationFilePath()).toString();
1086 const QString commandStr
= u
'"' + applicationFilePath
+ u
"\" \"%1\"";
1087 const QString iconStr
= u
'"' + applicationFilePath
+ u
"\",1";
1089 settings
.setValue(u
"magnet/Default"_qs
, u
"URL:Magnet link"_qs
);
1090 settings
.setValue(u
"magnet/Content Type"_qs
, u
"application/x-magnet"_qs
);
1091 settings
.setValue(u
"magnet/URL Protocol"_qs
, QString());
1092 settings
.setValue(u
"magnet/DefaultIcon/Default"_qs
, iconStr
);
1093 settings
.setValue(u
"magnet/shell/Default"_qs
, u
"open"_qs
);
1094 settings
.setValue(u
"magnet/shell/open/command/Default"_qs
, commandStr
);
1096 else if (isMagnetLinkAssocSet())
1098 settings
.remove(u
"magnet"_qs
);
1101 SHChangeNotify(SHCNE_ASSOCCHANGED
, SHCNF_IDLIST
, 0, 0);
1108 const CFStringRef torrentExtension
= CFSTR("torrent");
1109 const CFStringRef magnetUrlScheme
= CFSTR("magnet");
1112 bool Preferences::isTorrentFileAssocSet()
1115 const CFStringRef torrentId
= UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension
, torrentExtension
, NULL
);
1116 if (torrentId
!= NULL
)
1118 const CFStringRef defaultHandlerId
= LSCopyDefaultRoleHandlerForContentType(torrentId
, kLSRolesViewer
);
1119 if (defaultHandlerId
!= NULL
)
1121 const CFStringRef myBundleId
= CFBundleGetIdentifier(CFBundleGetMainBundle());
1122 isSet
= CFStringCompare(myBundleId
, defaultHandlerId
, 0) == kCFCompareEqualTo
;
1123 CFRelease(defaultHandlerId
);
1125 CFRelease(torrentId
);
1130 bool Preferences::isMagnetLinkAssocSet()
1133 const CFStringRef defaultHandlerId
= LSCopyDefaultHandlerForURLScheme(magnetUrlScheme
);
1134 if (defaultHandlerId
!= NULL
)
1136 const CFStringRef myBundleId
= CFBundleGetIdentifier(CFBundleGetMainBundle());
1137 isSet
= CFStringCompare(myBundleId
, defaultHandlerId
, 0) == kCFCompareEqualTo
;
1138 CFRelease(defaultHandlerId
);
1143 void Preferences::setTorrentFileAssoc()
1145 if (isTorrentFileAssocSet())
1147 const CFStringRef torrentId
= UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension
, torrentExtension
, NULL
);
1148 if (torrentId
!= NULL
)
1150 const CFStringRef myBundleId
= CFBundleGetIdentifier(CFBundleGetMainBundle());
1151 LSSetDefaultRoleHandlerForContentType(torrentId
, kLSRolesViewer
, myBundleId
);
1152 CFRelease(torrentId
);
1156 void Preferences::setMagnetLinkAssoc()
1158 if (isMagnetLinkAssocSet())
1160 const CFStringRef myBundleId
= CFBundleGetIdentifier(CFBundleGetMainBundle());
1161 LSSetDefaultHandlerForURLScheme(magnetUrlScheme
, myBundleId
);
1163 #endif // Q_OS_MACOS
1165 int Preferences::getTrackerPort() const
1167 return value
<int>(u
"Preferences/Advanced/trackerPort"_qs
, 9000);
1170 void Preferences::setTrackerPort(const int port
)
1172 setValue(u
"Preferences/Advanced/trackerPort"_qs
, port
);
1175 bool Preferences::isTrackerPortForwardingEnabled() const
1177 return value(u
"Preferences/Advanced/trackerPortForwarding"_qs
, false);
1180 void Preferences::setTrackerPortForwardingEnabled(const bool enabled
)
1182 setValue(u
"Preferences/Advanced/trackerPortForwarding"_qs
, enabled
);
1185 #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
1186 bool Preferences::isUpdateCheckEnabled() const
1188 return value(u
"Preferences/Advanced/updateCheck"_qs
, true);
1191 void Preferences::setUpdateCheckEnabled(const bool enabled
)
1193 setValue(u
"Preferences/Advanced/updateCheck"_qs
, enabled
);
1197 bool Preferences::confirmTorrentDeletion() const
1199 return value(u
"Preferences/Advanced/confirmTorrentDeletion"_qs
, true);
1202 void Preferences::setConfirmTorrentDeletion(const bool enabled
)
1204 setValue(u
"Preferences/Advanced/confirmTorrentDeletion"_qs
, enabled
);
1207 bool Preferences::confirmTorrentRecheck() const
1209 return value(u
"Preferences/Advanced/confirmTorrentRecheck"_qs
, true);
1212 void Preferences::setConfirmTorrentRecheck(const bool enabled
)
1214 setValue(u
"Preferences/Advanced/confirmTorrentRecheck"_qs
, enabled
);
1217 bool Preferences::confirmRemoveAllTags() const
1219 return value(u
"Preferences/Advanced/confirmRemoveAllTags"_qs
, true);
1222 void Preferences::setConfirmRemoveAllTags(const bool enabled
)
1224 setValue(u
"Preferences/Advanced/confirmRemoveAllTags"_qs
, enabled
);
1228 TrayIcon::Style
Preferences::trayIconStyle() const
1230 return value(u
"Preferences/Advanced/TrayIconStyle"_qs
, TrayIcon::Style::Normal
);
1233 void Preferences::setTrayIconStyle(const TrayIcon::Style style
)
1235 setValue(u
"Preferences/Advanced/TrayIconStyle"_qs
, style
);
1239 // Stuff that don't appear in the Options GUI but are saved
1240 // in the same file.
1242 QDateTime
Preferences::getDNSLastUpd() const
1244 return value
<QDateTime
>(u
"DNSUpdater/lastUpdateTime"_qs
);
1247 void Preferences::setDNSLastUpd(const QDateTime
&date
)
1249 setValue(u
"DNSUpdater/lastUpdateTime"_qs
, date
);
1252 QString
Preferences::getDNSLastIP() const
1254 return value
<QString
>(u
"DNSUpdater/lastIP"_qs
);
1257 void Preferences::setDNSLastIP(const QString
&ip
)
1259 setValue(u
"DNSUpdater/lastIP"_qs
, ip
);
1262 bool Preferences::getAcceptedLegal() const
1264 return value(u
"LegalNotice/Accepted"_qs
, false);
1267 void Preferences::setAcceptedLegal(const bool accepted
)
1269 setValue(u
"LegalNotice/Accepted"_qs
, accepted
);
1272 QByteArray
Preferences::getMainGeometry() const
1274 return value
<QByteArray
>(u
"MainWindow/geometry"_qs
);
1277 void Preferences::setMainGeometry(const QByteArray
&geometry
)
1279 setValue(u
"MainWindow/geometry"_qs
, geometry
);
1282 bool Preferences::isFiltersSidebarVisible() const
1284 return value(u
"GUI/MainWindow/FiltersSidebarVisible"_qs
, true);
1287 void Preferences::setFiltersSidebarVisible(const bool value
)
1289 setValue(u
"GUI/MainWindow/FiltersSidebarVisible"_qs
, value
);
1292 int Preferences::getFiltersSidebarWidth() const
1294 return value(u
"GUI/MainWindow/FiltersSidebarWidth"_qs
, 120);
1297 void Preferences::setFiltersSidebarWidth(const int value
)
1299 setValue(u
"GUI/MainWindow/FiltersSidebarWidth"_qs
, value
);
1302 Path
Preferences::getMainLastDir() const
1304 return value(u
"MainWindow/LastDir"_qs
, Utils::Fs::homePath());
1307 void Preferences::setMainLastDir(const Path
&path
)
1309 setValue(u
"MainWindow/LastDir"_qs
, path
);
1312 QByteArray
Preferences::getPeerListState() const
1314 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1315 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/PeerListState"_qs
);
1317 return value
<QByteArray
>(u
"TorrentProperties/Peers/qt5/PeerListState"_qs
);
1321 void Preferences::setPeerListState(const QByteArray
&state
)
1323 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1324 setValue(u
"GUI/Qt6/TorrentProperties/PeerListState"_qs
, state
);
1326 setValue(u
"TorrentProperties/Peers/qt5/PeerListState"_qs
, state
);
1330 QString
Preferences::getPropSplitterSizes() const
1332 return value
<QString
>(u
"TorrentProperties/SplitterSizes"_qs
);
1335 void Preferences::setPropSplitterSizes(const QString
&sizes
)
1337 setValue(u
"TorrentProperties/SplitterSizes"_qs
, sizes
);
1340 QByteArray
Preferences::getPropFileListState() const
1342 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1343 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/FilesListState"_qs
);
1345 return value
<QByteArray
>(u
"TorrentProperties/qt5/FilesListState"_qs
);
1349 void Preferences::setPropFileListState(const QByteArray
&state
)
1351 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1352 setValue(u
"GUI/Qt6/TorrentProperties/FilesListState"_qs
, state
);
1354 setValue(u
"TorrentProperties/qt5/FilesListState"_qs
, state
);
1358 int Preferences::getPropCurTab() const
1360 return value
<int>(u
"TorrentProperties/CurrentTab"_qs
, -1);
1363 void Preferences::setPropCurTab(const int tab
)
1365 setValue(u
"TorrentProperties/CurrentTab"_qs
, tab
);
1368 bool Preferences::getPropVisible() const
1370 return value(u
"TorrentProperties/Visible"_qs
, false);
1373 void Preferences::setPropVisible(const bool visible
)
1375 setValue(u
"TorrentProperties/Visible"_qs
, visible
);
1378 QByteArray
Preferences::getPropTrackerListState() const
1380 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1381 return value
<QByteArray
>(u
"GUI/Qt6/TorrentProperties/TrackerListState"_qs
);
1383 return value
<QByteArray
>(u
"TorrentProperties/Trackers/qt5/TrackerListState"_qs
);
1387 void Preferences::setPropTrackerListState(const QByteArray
&state
)
1389 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1390 setValue(u
"GUI/Qt6/TorrentProperties/TrackerListState"_qs
, state
);
1392 setValue(u
"TorrentProperties/Trackers/qt5/TrackerListState"_qs
, state
);
1396 QStringList
Preferences::getRssOpenFolders() const
1398 return value
<QStringList
>(u
"GUI/RSSWidget/OpenedFolders"_qs
);
1401 void Preferences::setRssOpenFolders(const QStringList
&folders
)
1403 setValue(u
"GUI/RSSWidget/OpenedFolders"_qs
, folders
);
1406 QByteArray
Preferences::getRssSideSplitterState() const
1408 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1409 return value
<QByteArray
>(u
"GUI/Qt6/RSSWidget/SideSplitterState"_qs
);
1411 return value
<QByteArray
>(u
"GUI/RSSWidget/qt5/splitter_h"_qs
);
1415 void Preferences::setRssSideSplitterState(const QByteArray
&state
)
1417 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1418 setValue(u
"GUI/Qt6/RSSWidget/SideSplitterState"_qs
, state
);
1420 setValue(u
"GUI/RSSWidget/qt5/splitter_h"_qs
, state
);
1424 QByteArray
Preferences::getRssMainSplitterState() const
1426 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1427 return value
<QByteArray
>(u
"GUI/Qt6/RSSWidget/MainSplitterState"_qs
);
1429 return value
<QByteArray
>(u
"GUI/RSSWidget/qt5/splitterMain"_qs
);
1433 void Preferences::setRssMainSplitterState(const QByteArray
&state
)
1435 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1436 setValue(u
"GUI/Qt6/RSSWidget/MainSplitterState"_qs
, state
);
1438 setValue(u
"GUI/RSSWidget/qt5/splitterMain"_qs
, state
);
1442 QByteArray
Preferences::getSearchTabHeaderState() const
1444 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1445 return value
<QByteArray
>(u
"GUI/Qt6/SearchTab/HeaderState"_qs
);
1447 return value
<QByteArray
>(u
"SearchTab/qt5/HeaderState"_qs
);
1451 void Preferences::setSearchTabHeaderState(const QByteArray
&state
)
1453 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1454 setValue(u
"GUI/Qt6/SearchTab/HeaderState"_qs
, state
);
1456 setValue(u
"SearchTab/qt5/HeaderState"_qs
, state
);
1460 bool Preferences::getRegexAsFilteringPatternForSearchJob() const
1462 return value(u
"SearchTab/UseRegexAsFilteringPattern"_qs
, false);
1465 void Preferences::setRegexAsFilteringPatternForSearchJob(const bool checked
)
1467 setValue(u
"SearchTab/UseRegexAsFilteringPattern"_qs
, checked
);
1470 QStringList
Preferences::getSearchEngDisabled() const
1472 return value
<QStringList
>(u
"SearchEngines/disabledEngines"_qs
);
1475 void Preferences::setSearchEngDisabled(const QStringList
&engines
)
1477 setValue(u
"SearchEngines/disabledEngines"_qs
, engines
);
1480 QString
Preferences::getTorImportLastContentDir() const
1482 return value(u
"TorrentImport/LastContentDir"_qs
, QDir::homePath());
1485 void Preferences::setTorImportLastContentDir(const QString
&path
)
1487 setValue(u
"TorrentImport/LastContentDir"_qs
, path
);
1490 QByteArray
Preferences::getTorImportGeometry() const
1492 return value
<QByteArray
>(u
"TorrentImportDlg/dimensions"_qs
);
1495 void Preferences::setTorImportGeometry(const QByteArray
&geometry
)
1497 setValue(u
"TorrentImportDlg/dimensions"_qs
, geometry
);
1500 bool Preferences::getStatusFilterState() const
1502 return value(u
"TransferListFilters/statusFilterState"_qs
, true);
1505 void Preferences::setStatusFilterState(const bool checked
)
1507 setValue(u
"TransferListFilters/statusFilterState"_qs
, checked
);
1510 bool Preferences::getCategoryFilterState() const
1512 return value(u
"TransferListFilters/CategoryFilterState"_qs
, true);
1515 void Preferences::setCategoryFilterState(const bool checked
)
1517 setValue(u
"TransferListFilters/CategoryFilterState"_qs
, checked
);
1520 bool Preferences::getTagFilterState() const
1522 return value(u
"TransferListFilters/TagFilterState"_qs
, true);
1525 void Preferences::setTagFilterState(const bool checked
)
1527 setValue(u
"TransferListFilters/TagFilterState"_qs
, checked
);
1530 bool Preferences::getTrackerFilterState() const
1532 return value(u
"TransferListFilters/trackerFilterState"_qs
, true);
1535 void Preferences::setTrackerFilterState(const bool checked
)
1537 setValue(u
"TransferListFilters/trackerFilterState"_qs
, checked
);
1540 int Preferences::getTransSelFilter() const
1542 return value
<int>(u
"TransferListFilters/selectedFilterIndex"_qs
, 0);
1545 void Preferences::setTransSelFilter(const int index
)
1547 setValue(u
"TransferListFilters/selectedFilterIndex"_qs
, index
);
1550 bool Preferences::getHideZeroStatusFilters() const
1552 return value
<bool>(u
"TransferListFilters/HideZeroStatusFilters"_qs
, false);
1555 void Preferences::setHideZeroStatusFilters(const bool hide
)
1557 setValue(u
"TransferListFilters/HideZeroStatusFilters"_qs
, hide
);
1560 QByteArray
Preferences::getTransHeaderState() const
1562 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1563 return value
<QByteArray
>(u
"GUI/Qt6/TransferList/HeaderState"_qs
);
1565 return value
<QByteArray
>(u
"TransferList/qt5/HeaderState"_qs
);
1569 void Preferences::setTransHeaderState(const QByteArray
&state
)
1571 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1572 setValue(u
"GUI/Qt6/TransferList/HeaderState"_qs
, state
);
1574 setValue(u
"TransferList/qt5/HeaderState"_qs
, state
);
1578 bool Preferences::getRegexAsFilteringPatternForTransferList() const
1580 return value(u
"TransferList/UseRegexAsFilteringPattern"_qs
, false);
1583 void Preferences::setRegexAsFilteringPatternForTransferList(const bool checked
)
1585 setValue(u
"TransferList/UseRegexAsFilteringPattern"_qs
, checked
);
1588 // From old RssSettings class
1589 bool Preferences::isRSSWidgetEnabled() const
1591 return value(u
"GUI/RSSWidget/Enabled"_qs
, false);
1594 void Preferences::setRSSWidgetVisible(const bool enabled
)
1596 setValue(u
"GUI/RSSWidget/Enabled"_qs
, enabled
);
1599 int Preferences::getToolbarTextPosition() const
1601 return value
<int>(u
"Toolbar/textPosition"_qs
, -1);
1604 void Preferences::setToolbarTextPosition(const int position
)
1606 setValue(u
"Toolbar/textPosition"_qs
, position
);
1609 QList
<QNetworkCookie
> Preferences::getNetworkCookies() const
1611 const auto rawCookies
= value
<QStringList
>(u
"Network/Cookies"_qs
);
1612 QList
<QNetworkCookie
> cookies
;
1613 cookies
.reserve(rawCookies
.size());
1614 for (const QString
&rawCookie
: rawCookies
)
1615 cookies
<< QNetworkCookie::parseCookies(rawCookie
.toUtf8());
1619 void Preferences::setNetworkCookies(const QList
<QNetworkCookie
> &cookies
)
1621 QStringList rawCookies
;
1622 rawCookies
.reserve(cookies
.size());
1623 for (const QNetworkCookie
&cookie
: cookies
)
1624 rawCookies
<< QString::fromLatin1(cookie
.toRawForm());
1625 setValue(u
"Network/Cookies"_qs
, rawCookies
);
1628 bool Preferences::useProxyForBT() const
1630 return value
<bool>(u
"Network/Proxy/Profiles/BitTorrent"_qs
);
1633 void Preferences::setUseProxyForBT(const bool value
)
1635 setValue(u
"Network/Proxy/Profiles/BitTorrent"_qs
, value
);
1638 bool Preferences::useProxyForRSS() const
1640 return value
<bool>(u
"Network/Proxy/Profiles/RSS"_qs
);
1643 void Preferences::setUseProxyForRSS(const bool value
)
1645 setValue(u
"Network/Proxy/Profiles/RSS"_qs
, value
);
1648 bool Preferences::useProxyForGeneralPurposes() const
1650 return value
<bool>(u
"Network/Proxy/Profiles/Misc"_qs
);
1654 void Preferences::setUseProxyForGeneralPurposes(const bool value
)
1656 setValue(u
"Network/Proxy/Profiles/Misc"_qs
, value
);
1659 bool Preferences::isSpeedWidgetEnabled() const
1661 return value(u
"SpeedWidget/Enabled"_qs
, true);
1664 void Preferences::setSpeedWidgetEnabled(const bool enabled
)
1666 setValue(u
"SpeedWidget/Enabled"_qs
, enabled
);
1669 int Preferences::getSpeedWidgetPeriod() const
1671 return value
<int>(u
"SpeedWidget/period"_qs
, 1);
1674 void Preferences::setSpeedWidgetPeriod(const int period
)
1676 setValue(u
"SpeedWidget/period"_qs
, period
);
1679 bool Preferences::getSpeedWidgetGraphEnable(const int id
) const
1681 // UP and DOWN graphs enabled by default
1682 return value(u
"SpeedWidget/graph_enable_%1"_qs
.arg(id
), ((id
== 0) || (id
== 1)));
1685 void Preferences::setSpeedWidgetGraphEnable(const int id
, const bool enable
)
1687 setValue(u
"SpeedWidget/graph_enable_%1"_qs
.arg(id
), enable
);
1690 void Preferences::apply()
1692 if (SettingsStorage::instance()->save())