mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-21 05:43:32 -07:00
Merge 1459429035
into b7a43ea118
This commit is contained in:
commit
a4a7700c11
10 changed files with 50 additions and 23 deletions
|
@ -425,6 +425,18 @@ void Preferences::setPreventFromSuspendWhenSeeding(const bool b)
|
||||||
setValue(u"Preferences/General/PreventFromSuspendWhenSeeding"_s, b);
|
setValue(u"Preferences/General/PreventFromSuspendWhenSeeding"_s, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Preferences::isDownloadTrackerFavicon() const
|
||||||
|
{
|
||||||
|
return value(u"Preferences/General/DownloadTrackerFavicon"_s, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Preferences::setDownloadTrackerFavicon(const bool value)
|
||||||
|
{
|
||||||
|
if (value == isDownloadTrackerFavicon())
|
||||||
|
return;
|
||||||
|
setValue(u"Preferences/General/DownloadTrackerFavicon"_s, value);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool Preferences::WinStartup() const
|
bool Preferences::WinStartup() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -274,6 +274,8 @@ public:
|
||||||
void setAutoRunOnTorrentFinishedEnabled(bool enabled);
|
void setAutoRunOnTorrentFinishedEnabled(bool enabled);
|
||||||
QString getAutoRunOnTorrentFinishedProgram() const;
|
QString getAutoRunOnTorrentFinishedProgram() const;
|
||||||
void setAutoRunOnTorrentFinishedProgram(const QString &program);
|
void setAutoRunOnTorrentFinishedProgram(const QString &program);
|
||||||
|
bool isDownloadTrackerFavicon() const;
|
||||||
|
void setDownloadTrackerFavicon(bool enabled);
|
||||||
#if defined(Q_OS_WIN)
|
#if defined(Q_OS_WIN)
|
||||||
bool isAutoRunConsoleEnabled() const;
|
bool isAutoRunConsoleEnabled() const;
|
||||||
void setAutoRunConsoleEnabled(bool enabled);
|
void setAutoRunConsoleEnabled(bool enabled);
|
||||||
|
|
|
@ -328,7 +328,7 @@ void AdvancedSettings::saveAdvancedSettings() const
|
||||||
// Reannounce to all trackers when ip/port changed
|
// Reannounce to all trackers when ip/port changed
|
||||||
session->setReannounceWhenAddressChangedEnabled(m_checkBoxReannounceWhenAddressChanged.isChecked());
|
session->setReannounceWhenAddressChangedEnabled(m_checkBoxReannounceWhenAddressChanged.isChecked());
|
||||||
// Misc GUI properties
|
// Misc GUI properties
|
||||||
app()->mainWindow()->setDownloadTrackerFavicon(m_checkBoxTrackerFavicon.isChecked());
|
pref->setDownloadTrackerFavicon(m_checkBoxTrackerFavicon.isChecked());
|
||||||
pref->setAddNewTorrentDialogSavePathHistoryLength(m_spinBoxSavePathHistoryLength.value());
|
pref->setAddNewTorrentDialogSavePathHistoryLength(m_spinBoxSavePathHistoryLength.value());
|
||||||
pref->setSpeedWidgetEnabled(m_checkBoxSpeedWidgetEnabled.isChecked());
|
pref->setSpeedWidgetEnabled(m_checkBoxSpeedWidgetEnabled.isChecked());
|
||||||
#ifndef Q_OS_MACOS
|
#ifndef Q_OS_MACOS
|
||||||
|
@ -854,7 +854,7 @@ void AdvancedSettings::loadAdvancedSettings()
|
||||||
m_checkBoxReannounceWhenAddressChanged.setChecked(session->isReannounceWhenAddressChangedEnabled());
|
m_checkBoxReannounceWhenAddressChanged.setChecked(session->isReannounceWhenAddressChangedEnabled());
|
||||||
addRow(REANNOUNCE_WHEN_ADDRESS_CHANGED, tr("Reannounce to all trackers when IP or port changed"), &m_checkBoxReannounceWhenAddressChanged);
|
addRow(REANNOUNCE_WHEN_ADDRESS_CHANGED, tr("Reannounce to all trackers when IP or port changed"), &m_checkBoxReannounceWhenAddressChanged);
|
||||||
// Download tracker's favicon
|
// Download tracker's favicon
|
||||||
m_checkBoxTrackerFavicon.setChecked(app()->mainWindow()->isDownloadTrackerFavicon());
|
m_checkBoxTrackerFavicon.setChecked(pref->isDownloadTrackerFavicon());
|
||||||
addRow(DOWNLOAD_TRACKER_FAVICON, tr("Download tracker's favicon"), &m_checkBoxTrackerFavicon);
|
addRow(DOWNLOAD_TRACKER_FAVICON, tr("Download tracker's favicon"), &m_checkBoxTrackerFavicon);
|
||||||
// Save path history length
|
// Save path history length
|
||||||
m_spinBoxSavePathHistoryLength.setRange(0, 99);
|
m_spinBoxSavePathHistoryLength.setRange(0, 99);
|
||||||
|
|
|
@ -134,7 +134,6 @@ MainWindow::MainWindow(IGUIApplication *app, const WindowState initialState, con
|
||||||
, m_pwr {new PowerManagement}
|
, m_pwr {new PowerManagement}
|
||||||
, m_preventTimer {new QTimer(this)}
|
, m_preventTimer {new QTimer(this)}
|
||||||
, m_storeExecutionLogEnabled {EXECUTIONLOG_SETTINGS_KEY(u"Enabled"_s)}
|
, m_storeExecutionLogEnabled {EXECUTIONLOG_SETTINGS_KEY(u"Enabled"_s)}
|
||||||
, m_storeDownloadTrackerFavicon {SETTINGS_KEY(u"DownloadTrackerFavicon"_s)}
|
|
||||||
, m_storeExecutionLogTypes {EXECUTIONLOG_SETTINGS_KEY(u"Types"_s), Log::MsgType::ALL}
|
, m_storeExecutionLogTypes {EXECUTIONLOG_SETTINGS_KEY(u"Types"_s), Log::MsgType::ALL}
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
, m_badger {std::make_unique<MacUtils::Badger>()}
|
, m_badger {std::make_unique<MacUtils::Badger>()}
|
||||||
|
@ -477,7 +476,7 @@ MainWindow::MainWindow(IGUIApplication *app, const WindowState initialState, con
|
||||||
m_ui->actionShowFiltersSidebar->setChecked(isFiltersSidebarVisible);
|
m_ui->actionShowFiltersSidebar->setChecked(isFiltersSidebarVisible);
|
||||||
if (isFiltersSidebarVisible)
|
if (isFiltersSidebarVisible)
|
||||||
{
|
{
|
||||||
showFiltersSidebar(true);
|
showFiltersSidebar(true, pref->isDownloadTrackerFavicon());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -530,18 +529,6 @@ void MainWindow::setExecutionLogMsgTypes(const Log::MsgTypes value)
|
||||||
m_storeExecutionLogTypes = value;
|
m_storeExecutionLogTypes = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWindow::isDownloadTrackerFavicon() const
|
|
||||||
{
|
|
||||||
return m_storeDownloadTrackerFavicon;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::setDownloadTrackerFavicon(const bool value)
|
|
||||||
{
|
|
||||||
if (m_transferListFiltersWidget)
|
|
||||||
m_transferListFiltersWidget->setDownloadTrackerFavicon(value);
|
|
||||||
m_storeDownloadTrackerFavicon = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::setTitleSuffix(const QString &suffix)
|
void MainWindow::setTitleSuffix(const QString &suffix)
|
||||||
{
|
{
|
||||||
const auto emDash = QChar(0x2014);
|
const auto emDash = QChar(0x2014);
|
||||||
|
@ -1348,11 +1335,11 @@ void MainWindow::showStatusBar(bool show)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::showFiltersSidebar(const bool show)
|
void MainWindow::showFiltersSidebar(const bool show, const bool showTrackerFavicon)
|
||||||
{
|
{
|
||||||
if (show && !m_transferListFiltersWidget)
|
if (show && !m_transferListFiltersWidget)
|
||||||
{
|
{
|
||||||
m_transferListFiltersWidget = new TransferListFiltersWidget(m_splitter, m_transferListWidget, isDownloadTrackerFavicon());
|
m_transferListFiltersWidget = new TransferListFiltersWidget(m_splitter, m_transferListWidget, showTrackerFavicon);
|
||||||
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersAdded, m_transferListFiltersWidget, &TransferListFiltersWidget::addTrackers);
|
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersAdded, m_transferListFiltersWidget, &TransferListFiltersWidget::addTrackers);
|
||||||
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersRemoved, m_transferListFiltersWidget, &TransferListFiltersWidget::removeTrackers);
|
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersRemoved, m_transferListFiltersWidget, &TransferListFiltersWidget::removeTrackers);
|
||||||
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersChanged, m_transferListFiltersWidget, &TransferListFiltersWidget::refreshTrackers);
|
connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersChanged, m_transferListFiltersWidget, &TransferListFiltersWidget::refreshTrackers);
|
||||||
|
@ -1566,7 +1553,7 @@ void MainWindow::on_actionShowFiltersSidebar_triggered(const bool checked)
|
||||||
{
|
{
|
||||||
Preferences *const pref = Preferences::instance();
|
Preferences *const pref = Preferences::instance();
|
||||||
pref->setFiltersSidebarVisible(checked);
|
pref->setFiltersSidebarVisible(checked);
|
||||||
showFiltersSidebar(checked);
|
showFiltersSidebar(checked, pref->isDownloadTrackerFavicon());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionSpeedInTitleBar_triggered()
|
void MainWindow::on_actionSpeedInTitleBar_triggered()
|
||||||
|
|
|
@ -196,7 +196,7 @@ private:
|
||||||
void displaySearchTab(bool enable);
|
void displaySearchTab(bool enable);
|
||||||
void createTorrentTriggered(const Path &path);
|
void createTorrentTriggered(const Path &path);
|
||||||
void showStatusBar(bool show);
|
void showStatusBar(bool show);
|
||||||
void showFiltersSidebar(bool show);
|
void showFiltersSidebar(bool show, bool showTrackerFavicon);
|
||||||
void applyTransferListFilter();
|
void applyTransferListFilter();
|
||||||
void refreshWindowTitle();
|
void refreshWindowTitle();
|
||||||
void refreshTrayIconTooltip();
|
void refreshTrayIconTooltip();
|
||||||
|
@ -250,7 +250,6 @@ private:
|
||||||
QMenu *m_toolbarMenu = nullptr;
|
QMenu *m_toolbarMenu = nullptr;
|
||||||
|
|
||||||
SettingValue<bool> m_storeExecutionLogEnabled;
|
SettingValue<bool> m_storeExecutionLogEnabled;
|
||||||
SettingValue<bool> m_storeDownloadTrackerFavicon;
|
|
||||||
CachedSettingValue<Log::MsgTypes> m_storeExecutionLogTypes;
|
CachedSettingValue<Log::MsgTypes> m_storeExecutionLogTypes;
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
|
||||||
|
|
|
@ -410,6 +410,8 @@ void AppController::preferencesAction()
|
||||||
data[u"ignore_ssl_errors"_s] = pref->isIgnoreSSLErrors();
|
data[u"ignore_ssl_errors"_s] = pref->isIgnoreSSLErrors();
|
||||||
// Python executable path
|
// Python executable path
|
||||||
data[u"python_executable_path"_s] = pref->getPythonExecutablePath().toString();
|
data[u"python_executable_path"_s] = pref->getPythonExecutablePath().toString();
|
||||||
|
// Should we show Tracker's Favicon
|
||||||
|
data[u"show_tracker_favicon"_s] = pref->isDownloadTrackerFavicon();
|
||||||
|
|
||||||
// libtorrent preferences
|
// libtorrent preferences
|
||||||
// Bdecode depth limit
|
// Bdecode depth limit
|
||||||
|
@ -1023,6 +1025,8 @@ void AppController::setPreferencesAction()
|
||||||
// Reannounce to all trackers when ip/port changed
|
// Reannounce to all trackers when ip/port changed
|
||||||
if (hasKey(u"reannounce_when_address_changed"_s))
|
if (hasKey(u"reannounce_when_address_changed"_s))
|
||||||
session->setReannounceWhenAddressChangedEnabled(it.value().toBool());
|
session->setReannounceWhenAddressChangedEnabled(it.value().toBool());
|
||||||
|
if (hasKey(u"show_tracker_favicon"_s))
|
||||||
|
pref->setDownloadTrackerFavicon(it.value().toBool());
|
||||||
// Embedded tracker
|
// Embedded tracker
|
||||||
if (hasKey(u"embedded_tracker_port"_s))
|
if (hasKey(u"embedded_tracker_port"_s))
|
||||||
pref->setTrackerPort(it.value().toInt());
|
pref->setTrackerPort(it.value().toInt());
|
||||||
|
|
|
@ -487,7 +487,7 @@ void WebApplication::configure()
|
||||||
const QString contentSecurityPolicy =
|
const QString contentSecurityPolicy =
|
||||||
(m_isAltUIUsed
|
(m_isAltUIUsed
|
||||||
? QString()
|
? QString()
|
||||||
: u"default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-src 'self' blob:;"_s)
|
: u"default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-src 'self' blob:;"_s)
|
||||||
+ (isClickjackingProtectionEnabled ? u" frame-ancestors 'self';"_s : QString())
|
+ (isClickjackingProtectionEnabled ? u" frame-ancestors 'self';"_s : QString())
|
||||||
+ (m_isHttpsEnabled ? u" upgrade-insecure-requests;"_s : QString());
|
+ (m_isHttpsEnabled ? u" upgrade-insecure-requests;"_s : QString());
|
||||||
if (!contentSecurityPolicy.isEmpty())
|
if (!contentSecurityPolicy.isEmpty())
|
||||||
|
|
|
@ -702,6 +702,18 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||||
case TRACKERS_WARNING:
|
case TRACKERS_WARNING:
|
||||||
span.lastElementChild.src = "images/tracker-warning.svg";
|
span.lastElementChild.src = "images/tracker-warning.svg";
|
||||||
break;
|
break;
|
||||||
|
default: {
|
||||||
|
if (LocalPreferences.get("show_tracker_favicon", "false") === "false")
|
||||||
|
break;
|
||||||
|
const link = host.split(".").slice(1).join(".");
|
||||||
|
const img = trackerFilterItem.getElementsByTagName("img")[0];
|
||||||
|
|
||||||
|
img.src = `https://${link}/favicon.ico`;
|
||||||
|
img.onerror = () => {
|
||||||
|
img.src = "images/trackers.svg";
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return trackerFilterItem;
|
return trackerFilterItem;
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
<template id="trackerFilterItem">
|
<template id="trackerFilterItem">
|
||||||
<li class="trackersFilterContextMenuTarget">
|
<li class="trackersFilterContextMenuTarget">
|
||||||
<span class="link">
|
<span class="link">
|
||||||
<img src="images/trackers.svg" alt="">
|
<img src="images/trackers.svg" alt="" referrerpolicy="no-referrer">
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1262,6 +1262,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||||
<input type="checkbox" id="reannounceWhenAddressChanged">
|
<input type="checkbox" id="reannounceWhenAddressChanged">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="showTrackerFavicon">QBT_TR(Show tracker favicon in torrent list:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="showTrackerFavicon">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<label for="enableEmbeddedTracker">QBT_TR(Enable embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="enableEmbeddedTracker">QBT_TR(Enable embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
|
@ -2597,6 +2605,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||||
document.getElementById("markOfTheWeb").checked = pref.mark_of_the_web;
|
document.getElementById("markOfTheWeb").checked = pref.mark_of_the_web;
|
||||||
document.getElementById("ignoreSSLErrors").checked = pref.ignore_ssl_errors;
|
document.getElementById("ignoreSSLErrors").checked = pref.ignore_ssl_errors;
|
||||||
document.getElementById("pythonExecutablePath").value = pref.python_executable_path;
|
document.getElementById("pythonExecutablePath").value = pref.python_executable_path;
|
||||||
|
document.getElementById("showTrackerFavicon").checked = pref.show_tracker_favicon;
|
||||||
// libtorrent section
|
// libtorrent section
|
||||||
document.getElementById("bdecodeDepthLimit").value = pref.bdecode_depth_limit;
|
document.getElementById("bdecodeDepthLimit").value = pref.bdecode_depth_limit;
|
||||||
document.getElementById("bdecodeTokenLimit").value = pref.bdecode_token_limit;
|
document.getElementById("bdecodeTokenLimit").value = pref.bdecode_token_limit;
|
||||||
|
@ -3069,6 +3078,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||||
settings["refresh_interval"] = Number(document.getElementById("refreshInterval").value);
|
settings["refresh_interval"] = Number(document.getElementById("refreshInterval").value);
|
||||||
settings["resolve_peer_countries"] = document.getElementById("resolvePeerCountries").checked;
|
settings["resolve_peer_countries"] = document.getElementById("resolvePeerCountries").checked;
|
||||||
settings["reannounce_when_address_changed"] = document.getElementById("reannounceWhenAddressChanged").checked;
|
settings["reannounce_when_address_changed"] = document.getElementById("reannounceWhenAddressChanged").checked;
|
||||||
|
settings["show_tracker_favicon"] = document.getElementById("showTrackerFavicon").checked;
|
||||||
|
LocalPreferences.set("show_tracker_favicon", settings["show_tracker_favicon"].toString());
|
||||||
settings["enable_embedded_tracker"] = document.getElementById("enableEmbeddedTracker").checked;
|
settings["enable_embedded_tracker"] = document.getElementById("enableEmbeddedTracker").checked;
|
||||||
settings["embedded_tracker_port"] = Number(document.getElementById("embeddedTrackerPort").value);
|
settings["embedded_tracker_port"] = Number(document.getElementById("embeddedTrackerPort").value);
|
||||||
settings["embedded_tracker_port_forwarding"] = document.getElementById("embeddedTrackerPortForwarding").checked;
|
settings["embedded_tracker_port_forwarding"] = document.getElementById("embeddedTrackerPortForwarding").checked;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue