35 #include <CoreServices/CoreServices.h>
41 #include <QCoreApplication>
46 #include <QNetworkCookie>
52 #include <QRegularExpression>
64 T
value(
const QString &key,
const T &defaultValue = {})
70 T
value(
const char *key,
const T &defaultValue = {})
72 return value(QLatin1String(key), defaultValue);
88 QString makeProfileID(
const QString &profilePath,
const QString &profileName)
90 return profilePath.isEmpty()
121 const auto localeName = value<QString>(
"Preferences/General/Locale");
122 return (localeName.isEmpty() ? QLocale::system().name() : localeName);
127 setValue(
"Preferences/General/Locale", locale);
137 setValue(
"Preferences/General/UseCustomUITheme",
use);
142 return value<QString>(
"Preferences/General/CustomUIThemePath");
147 setValue(
"Preferences/General/CustomUIThemePath", path);
152 return value(
"Preferences/General/DeleteTorrentsFilesAsDefault",
false);
157 setValue(
"Preferences/General/DeleteTorrentsFilesAsDefault", del);
162 return value(
"Preferences/General/ExitConfirm",
true);
167 setValue(
"Preferences/General/ExitConfirm", confirm);
172 return value(
"Preferences/General/SpeedInTitleBar",
false);
177 setValue(
"Preferences/General/SpeedInTitleBar", show);
182 return value(
"Preferences/General/AlternatingRowColors",
true);
187 setValue(
"Preferences/General/AlternatingRowColors", b);
192 return value(
"Preferences/General/HideZeroValues",
false);
197 setValue(
"Preferences/General/HideZeroValues", b);
202 return value<int>(
"Preferences/General/HideZeroComboValues", 0);
207 setValue(
"Preferences/General/HideZeroComboValues", n);
215 return value(
"Preferences/General/SystrayEnabled",
true);
220 setValue(
"Preferences/General/SystrayEnabled", enabled);
225 return value(
"Preferences/General/MinimizeToTray",
false);
230 setValue(
"Preferences/General/MinimizeToTray", b);
235 return value(
"Preferences/General/MinimizeToTrayNotified",
false);
240 setValue(
"Preferences/General/MinimizeToTrayNotified", b);
245 return value(
"Preferences/General/CloseToTray",
true);
250 setValue(
"Preferences/General/CloseToTray", b);
255 return value(
"Preferences/General/CloseToTrayNotified",
false);
260 setValue(
"Preferences/General/CloseToTrayNotified", b);
265 return value(
"Preferences/Advanced/EnableIconsInMenus",
true);
270 setValue(
"Preferences/Advanced/EnableIconsInMenus", enable);
276 return value(
"Preferences/General/ToolbarDisplayed",
true);
281 setValue(
"Preferences/General/ToolbarDisplayed", displayed);
286 return value(
"Preferences/General/StatusbarDisplayed",
true);
291 setValue(
"Preferences/General/StatusbarDisplayed", displayed);
296 return value(
"Preferences/General/StartMinimized",
false);
301 setValue(
"Preferences/General/StartMinimized", b);
306 return value(
"Preferences/General/NoSplashScreen",
true);
311 setValue(
"Preferences/General/NoSplashScreen", b);
317 return value(
"Preferences/General/PreventFromSuspendWhenDownloading",
false);
322 setValue(
"Preferences/General/PreventFromSuspendWhenDownloading", b);
327 return value(
"Preferences/General/PreventFromSuspendWhenSeeding",
false);
332 setValue(
"Preferences/General/PreventFromSuspendWhenSeeding", b);
336 bool Preferences::WinStartup()
const
340 const QString profileID = makeProfileID(profilePath, profileName);
341 const QSettings
settings {
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat};
343 return settings.contains(profileID);
346 void Preferences::setWinStartup(
const bool b)
350 const QString profileID = makeProfileID(profilePath, profileName);
351 QSettings
settings {
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat};
356 const auto cmd = QString::fromLatin1(R
"("%1" "--profile=%2" "--configuration=%3")")
390 return value(
"Preferences/MailNotification/enabled",
false);
395 setValue(
"Preferences/MailNotification/enabled", enabled);
400 return value<QString>(
"Preferences/MailNotification/sender"
406 setValue(
"Preferences/MailNotification/sender", mail);
411 return value<QString>(
"Preferences/MailNotification/email");
416 setValue(
"Preferences/MailNotification/email", mail);
421 return value<QString>(
"Preferences/MailNotification/smtp_server", QLatin1String(
"smtp.changeme.com"));
426 setValue(
"Preferences/MailNotification/smtp_server", smtp_server);
431 return value(
"Preferences/MailNotification/req_ssl",
false);
436 setValue(
"Preferences/MailNotification/req_ssl",
use);
441 return value(
"Preferences/MailNotification/req_auth",
false);
446 setValue(
"Preferences/MailNotification/req_auth",
use);
451 return value<QString>(
"Preferences/MailNotification/username");
456 setValue(
"Preferences/MailNotification/username", username);
461 return value<QString>(
"Preferences/MailNotification/password");
466 setValue(
"Preferences/MailNotification/password", password);
471 return value<int>(
"Preferences/Downloads/DblClOnTorDl", 0);
476 setValue(
"Preferences/Downloads/DblClOnTorDl", act);
481 return value<int>(
"Preferences/Downloads/DblClOnTorFn", 1);
486 setValue(
"Preferences/Downloads/DblClOnTorFn", act);
491 return value(
"Preferences/Scheduler/start_time", QTime(8, 0));
496 setValue(
"Preferences/Scheduler/start_time", time);
501 return value(
"Preferences/Scheduler/end_time", QTime(20, 0));
506 setValue(
"Preferences/Scheduler/end_time", time);
516 setValue(
"Preferences/Scheduler/days", days);
522 return value(
"Preferences/Search/SearchEnabled",
false);
527 setValue(
"Preferences/Search/SearchEnabled", enabled);
535 return value(
"Preferences/WebUI/Enabled",
false);
541 setValue(
"Preferences/WebUI/Enabled", enabled);
546 return value(
"Preferences/WebUI/LocalHostAuth",
true);
551 setValue(
"Preferences/WebUI/LocalHostAuth", enabled);
556 return value(
"Preferences/WebUI/AuthSubnetWhitelistEnabled",
false);
561 setValue(
"Preferences/WebUI/AuthSubnetWhitelistEnabled", enabled);
566 const auto subnets = value<QStringList>(
"Preferences/WebUI/AuthSubnetWhitelist");
568 QVector<Utils::Net::Subnet> ret;
569 ret.reserve(subnets.size());
571 for (
const QString &rawSubnet : subnets)
591 setValue(
"Preferences/WebUI/AuthSubnetWhitelist", subnets);
596 return value<QString>(
"Preferences/WebUI/ServerDomains", QChar(
'*'));
601 setValue(
"Preferences/WebUI/ServerDomains", str);
606 return value<QString>(
"Preferences/WebUI/Address", QChar(
'*')).trimmed();
611 setValue(
"Preferences/WebUI/Address", addr.trimmed());
616 return value<int>(
"Preferences/WebUI/Port", 8080);
621 setValue(
"Preferences/WebUI/Port", port);
627 return value(
"Preferences/WebUI/UseUPnP",
true);
629 return value(
"Preferences/WebUI/UseUPnP",
false);
635 setValue(
"Preferences/WebUI/UseUPnP", enabled);
640 return value<QString>(
"Preferences/WebUI/Username", QLatin1String(
"admin"));
645 setValue(
"Preferences/WebUI/Username", username);
651 const QByteArray defaultValue =
"ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==";
652 return value(
"Preferences/WebUI/Password_PBKDF2", defaultValue);
657 setValue(
"Preferences/WebUI/Password_PBKDF2", password);
662 return value<int>(
"Preferences/WebUI/MaxAuthenticationFailCount", 5);
667 setValue(
"Preferences/WebUI/MaxAuthenticationFailCount", count);
672 return std::chrono::seconds(value<int>(
"Preferences/WebUI/BanDuration", 3600));
677 setValue(
"Preferences/WebUI/BanDuration",
static_cast<int>(duration.count()));
682 return value<int>(
"Preferences/WebUI/SessionTimeout", 3600);
687 setValue(
"Preferences/WebUI/SessionTimeout", timeout);
692 return value(
"Preferences/WebUI/ClickjackingProtection",
true);
697 setValue(
"Preferences/WebUI/ClickjackingProtection", enabled);
702 return value(
"Preferences/WebUI/CSRFProtection",
true);
707 setValue(
"Preferences/WebUI/CSRFProtection", enabled);
712 return value(
"Preferences/WebUI/SecureCookie",
true);
717 setValue(
"Preferences/WebUI/SecureCookie", enabled);
722 return value(
"Preferences/WebUI/HostHeaderValidation",
true);
727 setValue(
"Preferences/WebUI/HostHeaderValidation", enabled);
732 return value(
"Preferences/WebUI/HTTPS/Enabled",
false);
737 setValue(
"Preferences/WebUI/HTTPS/Enabled", enabled);
742 return value<QString>(
"Preferences/WebUI/HTTPS/CertificatePath");
747 setValue(
"Preferences/WebUI/HTTPS/CertificatePath", path);
752 return value<QString>(
"Preferences/WebUI/HTTPS/KeyPath");
757 setValue(
"Preferences/WebUI/HTTPS/KeyPath", path);
762 return value(
"Preferences/WebUI/AlternativeUIEnabled",
false);
767 setValue(
"Preferences/WebUI/AlternativeUIEnabled", enabled);
772 return value<QString>(
"Preferences/WebUI/RootFolder");
777 setValue(
"Preferences/WebUI/RootFolder", path);
782 return value(
"Preferences/WebUI/CustomHTTPHeadersEnabled",
false);
787 setValue(
"Preferences/WebUI/CustomHTTPHeadersEnabled", enabled);
792 return value<QString>(
"Preferences/WebUI/CustomHTTPHeaders");
802 return value(
"Preferences/WebUI/ReverseProxySupportEnabled",
false);
807 setValue(
"Preferences/WebUI/ReverseProxySupportEnabled", enabled);
812 return value<QString>(
"Preferences/WebUI/TrustedReverseProxiesList");
817 setValue(
"Preferences/WebUI/TrustedReverseProxiesList", addr);
822 return value(
"Preferences/DynDNS/Enabled",
false);
827 setValue(
"Preferences/DynDNS/Enabled", enabled);
837 setValue(
"Preferences/DynDNS/Service", service);
842 return value<QString>(
"Preferences/DynDNS/DomainName", QLatin1String(
"changeme.dyndns.org"));
847 setValue(
"Preferences/DynDNS/DomainName", name);
852 return value<QString>(
"Preferences/DynDNS/Username");
857 setValue(
"Preferences/DynDNS/Username", username);
862 return value<QString>(
"Preferences/DynDNS/Password");
867 setValue(
"Preferences/DynDNS/Password", password);
873 return value<QByteArray>(
"Locking/password_PBKDF2");
878 setValue(
"Locking/password_PBKDF2", password);
883 return value(
"Locking/locked",
false);
893 return value(
"AutoRun/enabled",
false);
898 setValue(
"AutoRun/enabled", enabled);
903 return value<QString>(
"AutoRun/program");
908 setValue(
"AutoRun/program", program);
911 #if defined(Q_OS_WIN)
912 bool Preferences::isAutoRunConsoleEnabled()
const
914 return value(
"AutoRun/ConsoleEnabled",
false);
917 void Preferences::setAutoRunConsoleEnabled(
const bool enabled)
919 setValue(
"AutoRun/ConsoleEnabled", enabled);
925 return value(
"Preferences/Downloads/AutoShutDownOnCompletion",
false);
930 setValue(
"Preferences/Downloads/AutoShutDownOnCompletion", shutdown);
935 return value(
"Preferences/Downloads/AutoSuspendOnCompletion",
false);
940 setValue(
"Preferences/Downloads/AutoSuspendOnCompletion", suspend);
945 return value(
"Preferences/Downloads/AutoHibernateOnCompletion",
false);
950 setValue(
"Preferences/Downloads/AutoHibernateOnCompletion", hibernate);
955 return value(
"Preferences/Downloads/AutoShutDownqBTOnCompletion",
false);
960 setValue(
"Preferences/Downloads/AutoShutDownqBTOnCompletion", shutdown);
965 return value(
"ShutdownConfirmDlg/DontConfirmAutoExit",
false);
975 return value(
"Preferences/Advanced/RecheckOnCompletion",
false);
980 setValue(
"Preferences/Advanced/RecheckOnCompletion", recheck);
985 return value(
"Preferences/Connection/ResolvePeerCountries",
true);
990 setValue(
"Preferences/Connection/ResolvePeerCountries", resolve);
995 return value(
"Preferences/Connection/ResolvePeerHostNames",
false);
1000 setValue(
"Preferences/Connection/ResolvePeerHostNames", resolve);
1003 #if (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
1004 bool Preferences::useSystemIconTheme()
const
1006 return value(
"Preferences/Advanced/useSystemIconTheme",
true);
1009 void Preferences::useSystemIconTheme(
const bool enabled)
1011 setValue(
"Preferences/Advanced/useSystemIconTheme", enabled);
1017 return value(
"Preferences/Advanced/DisableRecursiveDownload",
false);
1022 setValue(
"Preferences/Advanced/DisableRecursiveDownload", disable);
1026 bool Preferences::neverCheckFileAssoc()
const
1028 return value(
"Preferences/Win32/NeverCheckFileAssocation",
false);
1031 void Preferences::setNeverCheckFileAssoc(
const bool check)
1033 setValue(
"Preferences/Win32/NeverCheckFileAssocation", check);
1036 bool Preferences::isTorrentFileAssocSet()
1038 const QSettings
settings(
"HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat);
1039 if (
settings.value(
".torrent/Default").toString() !=
"qBittorrent")
1041 qDebug(
".torrent != qBittorrent");
1048 bool Preferences::isMagnetLinkAssocSet()
1050 const QSettings
settings(
"HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat);
1055 const QRegularExpressionMatch exeRegMatch = QRegularExpression(
"\"([^\"]+)\".*").match(shellCommand);
1056 if (!exeRegMatch.hasMatch())
1059 const QString assocExe = exeRegMatch.captured(1);
1066 void Preferences::setTorrentFileAssoc(
const bool set)
1068 QSettings
settings(
"HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat);
1073 const QString oldProgId =
settings.value(
".torrent/Default").toString();
1074 if (!oldProgId.isEmpty() && (oldProgId !=
"qBittorrent"))
1075 settings.setValue(
".torrent/OpenWithProgids/" + oldProgId,
"");
1076 settings.setValue(
".torrent/Default",
"qBittorrent");
1078 else if (isTorrentFileAssocSet())
1080 settings.setValue(
".torrent/Default",
"");
1083 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
1086 void Preferences::setMagnetLinkAssoc(
const bool set)
1088 QSettings
settings(
"HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat);
1093 const QString commandStr =
'"' + qApp->applicationFilePath() +
"\" \"%1\"";
1094 const QString iconStr =
'"' + qApp->applicationFilePath() +
"\",1";
1096 settings.setValue(
"magnet/Default",
"URL:Magnet link");
1097 settings.setValue(
"magnet/Content Type",
"application/x-magnet");
1098 settings.setValue(
"magnet/URL Protocol",
"");
1100 settings.setValue(
"magnet/shell/Default",
"open");
1103 else if (isMagnetLinkAssocSet())
1108 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
1115 const CFStringRef torrentExtension = CFSTR(
"torrent");
1116 const CFStringRef magnetUrlScheme = CFSTR(
"magnet");
1119 bool Preferences::isTorrentFileAssocSet()
1122 const CFStringRef torrentId = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, torrentExtension, NULL);
1123 if (torrentId != NULL)
1125 const CFStringRef defaultHandlerId = LSCopyDefaultRoleHandlerForContentType(torrentId, kLSRolesViewer);
1126 if (defaultHandlerId != NULL)
1128 const CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
1129 isSet = CFStringCompare(myBundleId, defaultHandlerId, 0) == kCFCompareEqualTo;
1130 CFRelease(defaultHandlerId);
1132 CFRelease(torrentId);
1137 bool Preferences::isMagnetLinkAssocSet()
1140 const CFStringRef defaultHandlerId = LSCopyDefaultHandlerForURLScheme(magnetUrlScheme);
1141 if (defaultHandlerId != NULL)
1143 const CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
1144 isSet = CFStringCompare(myBundleId, defaultHandlerId, 0) == kCFCompareEqualTo;
1145 CFRelease(defaultHandlerId);
1150 void Preferences::setTorrentFileAssoc()
1152 if (isTorrentFileAssocSet())
1154 const CFStringRef torrentId = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, torrentExtension, NULL);
1155 if (torrentId != NULL)
1157 const CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
1158 LSSetDefaultRoleHandlerForContentType(torrentId, kLSRolesViewer, myBundleId);
1159 CFRelease(torrentId);
1163 void Preferences::setMagnetLinkAssoc()
1165 if (isMagnetLinkAssocSet())
1167 const CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
1168 LSSetDefaultHandlerForURLScheme(magnetUrlScheme, myBundleId);
1174 return value<int>(
"Preferences/Advanced/trackerPort", 9000);
1179 setValue(
"Preferences/Advanced/trackerPort", port);
1182 #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
1183 bool Preferences::isUpdateCheckEnabled()
const
1185 return value(
"Preferences/Advanced/updateCheck",
true);
1188 void Preferences::setUpdateCheckEnabled(
const bool enabled)
1190 setValue(
"Preferences/Advanced/updateCheck", enabled);
1196 return value(
"Preferences/Advanced/confirmTorrentDeletion",
true);
1201 setValue(
"Preferences/Advanced/confirmTorrentDeletion", enabled);
1206 return value(
"Preferences/Advanced/confirmTorrentRecheck",
true);
1211 setValue(
"Preferences/Advanced/confirmTorrentRecheck", enabled);
1216 return value(
"Preferences/Advanced/confirmRemoveAllTags",
true);
1221 setValue(
"Preferences/Advanced/confirmRemoveAllTags", enabled);
1232 setValue(
"Preferences/Advanced/TrayIconStyle", style);
1241 return value<QDateTime>(
"DNSUpdater/lastUpdateTime");
1246 setValue(
"DNSUpdater/lastUpdateTime", date);
1251 return value<QString>(
"DNSUpdater/lastIP");
1261 return value(
"LegalNotice/Accepted",
false);
1266 setValue(
"LegalNotice/Accepted", accepted);
1271 return value<QByteArray>(
"MainWindow/geometry");
1276 setValue(
"MainWindow/geometry", geometry);
1281 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1282 return value<QByteArray>(
"GUI/Qt6/MainWindow/VSplitterState");
1284 return value<QByteArray>(
"MainWindow/qt5/vsplitterState");
1290 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1291 setValue(
"GUI/Qt6/MainWindow/VSplitterState", state);
1293 setValue(
"MainWindow/qt5/vsplitterState", state);
1299 return value(
"MainWindow/LastDir", QDir::homePath());
1304 setValue(
"MainWindow/LastDir", path);
1309 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1310 return value<QByteArray>(
"GUI/Qt6/TorrentProperties/PeerListState");
1312 return value<QByteArray>(
"TorrentProperties/Peers/qt5/PeerListState");
1318 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1319 setValue(
"GUI/Qt6/TorrentProperties/PeerListState", state);
1321 setValue(
"TorrentProperties/Peers/qt5/PeerListState", state);
1327 return value<QString>(
"TorrentProperties/SplitterSizes");
1332 setValue(
"TorrentProperties/SplitterSizes", sizes);
1337 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1338 return value<QByteArray>(
"GUI/Qt6/TorrentProperties/FilesListState");
1340 return value<QByteArray>(
"TorrentProperties/qt5/FilesListState");
1346 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1347 setValue(
"GUI/Qt6/TorrentProperties/FilesListState", state);
1349 setValue(
"TorrentProperties/qt5/FilesListState", state);
1355 return value<int>(
"TorrentProperties/CurrentTab", -1);
1360 setValue(
"TorrentProperties/CurrentTab", tab);
1365 return value(
"TorrentProperties/Visible",
false);
1370 setValue(
"TorrentProperties/Visible", visible);
1375 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1376 return value<QByteArray>(
"GUI/Qt6/TorrentProperties/TrackerListState");
1378 return value<QByteArray>(
"TorrentProperties/Trackers/qt5/TrackerListState");
1384 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1385 setValue(
"GUI/Qt6/TorrentProperties/TrackerListState", state);
1387 setValue(
"TorrentProperties/Trackers/qt5/TrackerListState", state);
1393 return value<QSize>(
"RssFeedDownloader/geometrySize");
1398 setValue(
"RssFeedDownloader/geometrySize", geometry);
1403 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1404 return value<QByteArray>(
"GUI/Qt6/RSSFeedDownloader/HSplitterSizes");
1406 return value<QByteArray>(
"RssFeedDownloader/qt5/hsplitterSizes");
1412 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1413 setValue(
"GUI/Qt6/RSSFeedDownloader/HSplitterSizes", sizes);
1415 setValue(
"RssFeedDownloader/qt5/hsplitterSizes", sizes);
1421 return value<QStringList>(
"GUI/RSSWidget/OpenedFolders");
1426 setValue(
"GUI/RSSWidget/OpenedFolders", folders);
1431 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1432 return value<QByteArray>(
"GUI/Qt6/RSSWidget/SideSplitterState");
1434 return value<QByteArray>(
"GUI/RSSWidget/qt5/splitter_h");
1440 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1441 setValue(
"GUI/Qt6/RSSWidget/SideSplitterState", state);
1443 setValue(
"GUI/RSSWidget/qt5/splitter_h", state);
1449 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1450 return value<QByteArray>(
"GUI/Qt6/RSSWidget/MainSplitterState");
1452 return value<QByteArray>(
"GUI/RSSWidget/qt5/splitterMain");
1458 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1459 setValue(
"GUI/Qt6/RSSWidget/MainSplitterState", state);
1461 setValue(
"GUI/RSSWidget/qt5/splitterMain", state);
1467 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1468 return value<QByteArray>(
"GUI/Qt6/SearchTab/HeaderState");
1470 return value<QByteArray>(
"SearchTab/qt5/HeaderState");
1476 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1477 setValue(
"GUI/Qt6/SearchTab/HeaderState", state);
1479 setValue(
"SearchTab/qt5/HeaderState", state);
1485 return value(
"SearchTab/UseRegexAsFilteringPattern",
false);
1490 setValue(
"SearchTab/UseRegexAsFilteringPattern", checked);
1495 return value<QStringList>(
"SearchEngines/disabledEngines");
1505 return value(
"TorrentImport/LastContentDir", QDir::homePath());
1510 setValue(
"TorrentImport/LastContentDir", path);
1515 return value<QByteArray>(
"TorrentImportDlg/dimensions");
1520 setValue(
"TorrentImportDlg/dimensions", geometry);
1525 return value(
"TransferListFilters/statusFilterState",
true);
1530 setValue(
"TransferListFilters/statusFilterState", checked);
1535 return value(
"TransferListFilters/CategoryFilterState",
true);
1540 setValue(
"TransferListFilters/CategoryFilterState", checked);
1545 return value(
"TransferListFilters/TagFilterState",
true);
1550 setValue(
"TransferListFilters/TagFilterState", checked);
1555 return value(
"TransferListFilters/trackerFilterState",
true);
1560 setValue(
"TransferListFilters/trackerFilterState", checked);
1565 return value<int>(
"TransferListFilters/selectedFilterIndex", 0);
1570 setValue(
"TransferListFilters/selectedFilterIndex", index);
1575 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1576 return value<QByteArray>(
"GUI/Qt6/TransferList/HeaderState");
1578 return value<QByteArray>(
"TransferList/qt5/HeaderState");
1584 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
1585 setValue(
"GUI/Qt6/TransferList/HeaderState", state);
1587 setValue(
"TransferList/qt5/HeaderState", state);
1593 return value(
"TransferList/UseRegexAsFilteringPattern",
false);
1598 setValue(
"TransferList/UseRegexAsFilteringPattern", checked);
1604 return value(
"GUI/RSSWidget/Enabled",
false);
1609 setValue(
"GUI/RSSWidget/Enabled", enabled);
1614 return value<int>(
"Toolbar/textPosition", -1);
1619 setValue(
"Toolbar/textPosition", position);
1624 const auto rawCookies = value<QStringList>(
"Network/Cookies");
1625 QList<QNetworkCookie> cookies;
1626 cookies.reserve(rawCookies.size());
1627 for (
const QString &rawCookie : rawCookies)
1628 cookies << QNetworkCookie::parseCookies(rawCookie.toUtf8());
1634 QStringList rawCookies;
1635 rawCookies.reserve(cookies.size());
1636 for (
const QNetworkCookie &cookie : cookies)
1637 rawCookies << cookie.toRawForm();
1638 setValue(
"Network/Cookies", rawCookies);
1643 return value(
"SpeedWidget/Enabled",
true);
1648 setValue(
"SpeedWidget/Enabled", enabled);
1653 return value<int>(
"SpeedWidget/period", 1);
1658 setValue(
"SpeedWidget/period", period);
1664 return value(QString::fromLatin1(
"SpeedWidget/graph_enable_%1").arg(
id), ((
id == 0) || (
id == 1)));
1669 setValue(QString::fromLatin1(
"SpeedWidget/graph_enable_%1").arg(
id), enable);
void setTorImportGeometry(const QByteArray &geometry)
void setTransHeaderState(const QByteArray &state)
void setWebUIHttpsCertificatePath(const QString &path)
void disableRecursiveDownload(bool disable=true)
QString getMailNotificationSMTPUsername() const
void setWebUiRootFolder(const QString &path)
bool deleteTorrentFilesAsDefault() const
bool recursiveDownloadDisabled() const
bool shutdownqBTWhenDownloadsComplete() const
void setActionOnDblClOnTorrentDl(int act)
QByteArray getTransHeaderState() const
QString getWebUICustomHTTPHeaders() const
QString getMailNotificationSMTPPassword() const
bool resolvePeerCountries() const
QString getAutoRunProgram() const
void setAltWebUiEnabled(bool enabled)
static Preferences * instance()
void setDynDNSEnabled(bool enabled)
bool shutdownWhenDownloadsComplete() const
int getWebUIMaxAuthFailCount() const
QString getWebUiRootFolder() const
QString getWebUIHttpsCertificatePath() const
void setSuspendWhenDownloadsComplete(bool suspend)
void setPropCurTab(int tab)
void setMailNotificationSMTPUsername(const QString &username)
int getPropCurTab() const
bool getStatusFilterState() const
void setCloseToTray(bool b)
void setSpeedWidgetPeriod(int period)
int getTrackerPort() const
void setMinimizeToTray(bool b)
void setUPnPForWebUIPort(bool enabled)
QString lastLocationPath() const
void setHideZeroValues(bool b)
bool resolvePeerHostNames() const
void setNetworkCookies(const QList< QNetworkCookie > &cookies)
void setIconsInMenusEnabled(bool enable)
void setWebUiCSRFProtectionEnabled(bool enabled)
void setWebUiSecureCookieEnabled(bool enabled)
bool getTrackerFilterState() const
bool isSplashScreenDisabled() const
QByteArray getPropTrackerListState() const
void setWebUIReverseProxySupportEnabled(bool enabled)
void setCloseToTrayNotified(bool b)
void setConfirmOnExit(bool confirm)
std::chrono::seconds getWebUIBanDuration() const
QString getMailNotificationEmail() const
bool preventFromSuspendWhenSeeding() const
void setShutdownqBTWhenDownloadsComplete(bool shutdown)
bool isWebUiLocalAuthEnabled() const
void setStartMinimized(bool b)
int getTransSelFilter() const
QString getWebUiAddress() const
void setAlternatingRowColors(bool b)
void setWebUIBanDuration(std::chrono::seconds duration)
void setSpeedWidgetGraphEnable(int id, bool enable)
bool useAlternatingRowColors() const
bool getMailNotificationSMTPAuth() const
void setPropTrackerListState(const QByteArray &state)
void setPreventFromSuspendWhenDownloading(bool b)
bool isWebUiSecureCookieEnabled() const
void setCustomUIThemePath(const QString &path)
bool isStatusbarDisplayed() const
QString getDynDNSUsername() const
void setStatusFilterState(bool checked)
void setRssMainSplitterState(const QByteArray &state)
QByteArray getMainGeometry() const
void setServerDomains(const QString &str)
bool suspendWhenDownloadsComplete() const
void setDynDNSUsername(const QString &username)
QString getMailNotificationSender() const
bool isSearchEnabled() const
QString customUIThemePath() const
bool useCustomUITheme() const
void setRegexAsFilteringPatternForTransferList(bool checked)
void setMinimizeToTrayNotified(bool b)
void setSchedulerEndTime(const QTime &time)
bool getMailNotificationSMTPSSL() const
bool confirmOnExit() const
void setConfirmTorrentDeletion(bool enabled)
void setRegexAsFilteringPatternForSearchJob(bool checked)
void setMainLastDir(const QString &path)
void setWebUIHostHeaderValidationEnabled(bool enabled)
QString getPropSplitterSizes() const
static void initInstance()
QByteArray getTorImportGeometry() const
void setDontConfirmAutoExit(bool dontConfirmAutoExit)
QList< QNetworkCookie > getNetworkCookies() const
bool systemTrayEnabled() const
void setWebUiAddress(const QString &addr)
void setSchedulerDays(Scheduler::Days days)
void setMailNotificationEnabled(bool enabled)
QDateTime getDNSLastUpd() const
void setScanDirsLastPath(const QString &path)
QString getDynDNSPassword() const
bool isWebUIHostHeaderValidationEnabled() const
void setDNSLastIP(const QString &ip)
void showSpeedInTitleBar(bool show)
QByteArray getRssMainSplitterState() const
void setStatusbarDisplayed(bool displayed)
bool getPropVisible() const
void setSearchTabHeaderState(const QByteArray &state)
void setSystemTrayEnabled(bool enabled)
void setWebUIPassword(const QByteArray &password)
void setWebUiAuthSubnetWhitelist(QStringList subnets)
QTime getSchedulerStartTime() const
void setAutoRunEnabled(bool enabled)
void setTorImportLastContentDir(const QString &path)
bool useUPnPForWebUIPort() const
QByteArray getWebUIPassword() const
void setWebUiClickjackingProtectionEnabled(bool enabled)
int getActionOnDblClOnTorrentFn() const
void setTrayIconStyle(TrayIcon::Style style)
bool isAltWebUiEnabled() const
void setMainGeometry(const QByteArray &geometry)
QStringList getSearchEngDisabled() const
void setUILocked(bool locked)
void setSearchEngDisabled(const QStringList &engines)
void setWebUiUsername(const QString &username)
bool isWebUiAuthSubnetWhitelistEnabled() const
static void freeInstance()
bool speedInTitleBar() const
void setUILockPassword(const QByteArray &password)
bool getRegexAsFilteringPatternForTransferList() const
QString getWebUITrustedReverseProxiesList() const
bool dontConfirmAutoExit() const
bool recheckTorrentsOnCompletion() const
QByteArray getRssSideSplitterState() const
void setDeleteTorrentFilesAsDefault(bool del)
void setPropVisible(bool visible)
QTime getSchedulerEndTime() const
void setDynDomainName(const QString &name)
void setWebUISessionTimeout(int timeout)
QByteArray getPeerListState() const
bool isWebUICustomHTTPHeadersEnabled() const
bool isWebUiClickjackingProtectionEnabled() const
DNS::Service getDynDNSService() const
void setPeerListState(const QByteArray &state)
TrayIcon::Style trayIconStyle() const
bool isRSSWidgetEnabled() const
void setActionOnDblClOnTorrentFn(int act)
void setLastLocationPath(const QString &path)
void setWebUICustomHTTPHeaders(const QString &headers)
void setRssGeometrySize(const QSize &geometry)
bool closeToTrayNotified() const
void setDynDNSPassword(const QString &password)
bool confirmRemoveAllTags() const
void setToolbarTextPosition(int position)
void setMailNotificationSMTPPassword(const QString &password)
void setUseCustomUITheme(bool use)
void setTrackerPort(int port)
bool isDynDNSEnabled() const
void setWebUiLocalAuthEnabled(bool enabled)
void setHideZeroComboValues(int n)
bool confirmTorrentDeletion() const
void setWebUICustomHTTPHeadersEnabled(bool enabled)
QByteArray getMainVSplitterState() const
void setLocale(const QString &locale)
void setWebUITrustedReverseProxiesList(const QString &addr)
QString getScanDirsLastPath() const
void setWebUIMaxAuthFailCount(int count)
int getHideZeroComboValues() const
void setAcceptedLegal(bool accepted)
QString getLocale() const
void setShutdownWhenDownloadsComplete(bool shutdown)
void setDynDNSService(DNS::Service service)
bool isSpeedWidgetEnabled() const
bool getAcceptedLegal() const
bool getSpeedWidgetGraphEnable(int id) const
static Preferences * m_instance
void setMailNotificationSender(const QString &mail)
void setSchedulerStartTime(const QTime &time)
void setWebUiPort(quint16 port)
void setAutoRunProgram(const QString &program)
QString getMainLastDir() const
quint16 getWebUiPort() const
void setTagFilterState(bool checked)
bool isWebUiCSRFProtectionEnabled() const
bool getCategoryFilterState() const
bool getHideZeroValues() const
bool isToolbarDisplayed() const
bool confirmTorrentRecheck() const
QSize getRssGeometrySize() const
void setRSSWidgetVisible(bool enabled)
void setSearchEnabled(bool enabled)
bool isWebUIReverseProxySupportEnabled() const
QString getWebUiUsername() const
bool minimizeToTray() const
void setToolbarDisplayed(bool displayed)
Scheduler::Days getSchedulerDays() const
void setWebUIHttpsKeyPath(const QString &path)
void setMailNotificationSMTPSSL(bool use)
int getToolbarTextPosition() const
void setWebUiEnabled(bool enabled)
QString getTorImportLastContentDir() const
void setSplashScreenDisabled(bool b)
QString getServerDomains() const
void setSpeedWidgetEnabled(bool enabled)
void setHibernateWhenDownloadsComplete(bool hibernate)
void setTrackerFilterState(bool checked)
QString getMailNotificationSMTP() const
QString getDNSLastIP() const
QByteArray getUILockPassword() const
void setRssOpenFolders(const QStringList &folders)
void setDNSLastUpd(const QDateTime &date)
QByteArray getSearchTabHeaderState() const
int getWebUISessionTimeout() const
void setRssSideSplitterState(const QByteArray &state)
bool preventFromSuspendWhenDownloading() const
bool iconsInMenusEnabled() const
int getActionOnDblClOnTorrentDl() const
bool minimizeToTrayNotified() const
bool getTagFilterState() const
int getSpeedWidgetPeriod() const
bool isWebUiEnabled() const
QVector< Utils::Net::Subnet > getWebUiAuthSubnetWhitelist() const
void setRssHSplitterSizes(const QByteArray &sizes)
void setConfirmRemoveAllTags(bool enabled)
void setTransSelFilter(int index)
void setPropFileListState(const QByteArray &state)
QByteArray getRssHSplitterSizes() const
bool isMailNotificationEnabled() const
bool isWebUiHttpsEnabled() const
void setWebUiAuthSubnetWhitelistEnabled(bool enabled)
QStringList getRssOpenFolders() const
bool isAutoRunEnabled() const
void setPropSplitterSizes(const QString &sizes)
void setPreventFromSuspendWhenSeeding(bool b)
void setWebUiHttpsEnabled(bool enabled)
void setMailNotificationEmail(const QString &mail)
bool getRegexAsFilteringPatternForSearchJob() const
void setCategoryFilterState(bool checked)
QByteArray getPropFileListState() const
void setMainVSplitterState(const QByteArray &state)
QString getDynDomainName() const
void setMailNotificationSMTP(const QString &smtp_server)
void setMailNotificationSMTPAuth(bool use)
bool hibernateWhenDownloadsComplete() const
void setConfirmTorrentRecheck(bool enabled)
bool startMinimized() const
QString getWebUIHttpsKeyPath() const
QString profileName() const
QString configurationName() const
static const Profile * instance()
void storeValue(const QString &key, const T &value)
T loadValue(const QString &key, const T &defaultValue={}) const
static SettingsStorage * instance()
flag icons free of to any person obtaining a copy of this software and associated documentation to deal in the Software without including without limitation the rights to use
void removeIf(T &dict, BinaryPredicate &&p)
QString toValidFileSystemName(const QString &name, bool allowSeparators=false, const QString &pad=QLatin1String(" "))
QString toUniformPath(const QString &path)
QString toNativePath(const QString &path)
Subnet parseSubnet(const QString &subnetStr, bool *ok)
QPair< QHostAddress, int > Subnet
SettingsStorage * settings()
T value(const char *key, const T &defaultValue={})
void setValue(const char *key, const T &value)