This commit is contained in:
Bark 2025-08-18 12:52:01 +08:00 committed by GitHub
commit d7d666bc22
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 50 additions and 23 deletions

View file

@ -451,6 +451,18 @@ void Preferences::setPreventFromSuspendWhenSeeding(const bool 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
bool Preferences::WinStartup() const
{

View file

@ -278,6 +278,8 @@ public:
void setAutoRunOnTorrentFinishedEnabled(bool enabled);
QString getAutoRunOnTorrentFinishedProgram() const;
void setAutoRunOnTorrentFinishedProgram(const QString &program);
bool isDownloadTrackerFavicon() const;
void setDownloadTrackerFavicon(bool enabled);
#if defined(Q_OS_WIN)
bool isAutoRunConsoleEnabled() const;
void setAutoRunConsoleEnabled(bool enabled);

View file

@ -328,7 +328,7 @@ void AdvancedSettings::saveAdvancedSettings() const
// Reannounce to all trackers when ip/port changed
session->setReannounceWhenAddressChangedEnabled(m_checkBoxReannounceWhenAddressChanged.isChecked());
// Misc GUI properties
app()->mainWindow()->setDownloadTrackerFavicon(m_checkBoxTrackerFavicon.isChecked());
pref->setDownloadTrackerFavicon(m_checkBoxTrackerFavicon.isChecked());
pref->setAddNewTorrentDialogSavePathHistoryLength(m_spinBoxSavePathHistoryLength.value());
pref->setSpeedWidgetEnabled(m_checkBoxSpeedWidgetEnabled.isChecked());
#ifndef Q_OS_MACOS
@ -854,7 +854,7 @@ void AdvancedSettings::loadAdvancedSettings()
m_checkBoxReannounceWhenAddressChanged.setChecked(session->isReannounceWhenAddressChangedEnabled());
addRow(REANNOUNCE_WHEN_ADDRESS_CHANGED, tr("Reannounce to all trackers when IP or port changed"), &m_checkBoxReannounceWhenAddressChanged);
// 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);
// Save path history length
m_spinBoxSavePathHistoryLength.setRange(0, 99);

View file

@ -134,7 +134,6 @@ MainWindow::MainWindow(IGUIApplication *app, const WindowState initialState, con
, m_pwr {new PowerManagement}
, m_preventTimer {new QTimer(this)}
, 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}
#ifdef Q_OS_MACOS
, m_badger {std::make_unique<MacUtils::Badger>()}
@ -477,7 +476,7 @@ MainWindow::MainWindow(IGUIApplication *app, const WindowState initialState, con
m_ui->actionShowFiltersSidebar->setChecked(isFiltersSidebarVisible);
if (isFiltersSidebarVisible)
{
showFiltersSidebar(true);
showFiltersSidebar(true, pref->isDownloadTrackerFavicon());
}
else
{
@ -530,18 +529,6 @@ void MainWindow::setExecutionLogMsgTypes(const Log::MsgTypes 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)
{
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)
{
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::trackersRemoved, m_transferListFiltersWidget, &TransferListFiltersWidget::removeTrackers);
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();
pref->setFiltersSidebarVisible(checked);
showFiltersSidebar(checked);
showFiltersSidebar(checked, pref->isDownloadTrackerFavicon());
}
void MainWindow::on_actionSpeedInTitleBar_triggered()

View file

@ -196,7 +196,7 @@ private:
void displaySearchTab(bool enable);
void createTorrentTriggered(const Path &path);
void showStatusBar(bool show);
void showFiltersSidebar(bool show);
void showFiltersSidebar(bool show, bool showTrackerFavicon);
void applyTransferListFilter();
void refreshWindowTitle();
void refreshTrayIconTooltip();
@ -250,7 +250,6 @@ private:
QMenu *m_toolbarMenu = nullptr;
SettingValue<bool> m_storeExecutionLogEnabled;
SettingValue<bool> m_storeDownloadTrackerFavicon;
CachedSettingValue<Log::MsgTypes> m_storeExecutionLogTypes;
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)

View file

@ -410,6 +410,8 @@ void AppController::preferencesAction()
data[u"ignore_ssl_errors"_s] = pref->isIgnoreSSLErrors();
// Python executable path
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
// Bdecode depth limit
@ -1023,6 +1025,8 @@ void AppController::setPreferencesAction()
// Reannounce to all trackers when ip/port changed
if (hasKey(u"reannounce_when_address_changed"_s))
session->setReannounceWhenAddressChangedEnabled(it.value().toBool());
if (hasKey(u"show_tracker_favicon"_s))
pref->setDownloadTrackerFavicon(it.value().toBool());
// Embedded tracker
if (hasKey(u"embedded_tracker_port"_s))
pref->setTrackerPort(it.value().toInt());

View file

@ -487,7 +487,7 @@ void WebApplication::configure()
const QString contentSecurityPolicy =
(m_isAltUIUsed
? 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())
+ (m_isHttpsEnabled ? u" upgrade-insecure-requests;"_s : QString());
if (!contentSecurityPolicy.isEmpty())

View file

@ -781,6 +781,18 @@ window.addEventListener("DOMContentLoaded", (event) => {
case TRACKERS_WARNING:
span.lastElementChild.src = "images/tracker-warning.svg";
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;

View file

@ -60,7 +60,7 @@
<template id="trackerFilterItem">
<li class="trackersFilterContextMenuTarget">
<span class="link">
<img src="images/trackers.svg" alt="">
<img src="images/trackers.svg" alt="" referrerpolicy="no-referrer">
</span>
</li>
</template>

View file

@ -1262,6 +1262,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
<input type="checkbox" id="reannounceWhenAddressChanged">
</td>
</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>
<td>
<label for="enableEmbeddedTracker">QBT_TR(Enable embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]</label>
@ -2599,6 +2607,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
document.getElementById("markOfTheWeb").checked = pref.mark_of_the_web;
document.getElementById("ignoreSSLErrors").checked = pref.ignore_ssl_errors;
document.getElementById("pythonExecutablePath").value = pref.python_executable_path;
document.getElementById("showTrackerFavicon").checked = pref.show_tracker_favicon;
// libtorrent section
document.getElementById("bdecodeDepthLimit").value = pref.bdecode_depth_limit;
document.getElementById("bdecodeTokenLimit").value = pref.bdecode_token_limit;
@ -3071,6 +3080,8 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
settings["refresh_interval"] = Number(document.getElementById("refreshInterval").value);
settings["resolve_peer_countries"] = document.getElementById("resolvePeerCountries").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["embedded_tracker_port"] = Number(document.getElementById("embeddedTrackerPort").value);
settings["embedded_tracker_port_forwarding"] = document.getElementById("embeddedTrackerPortForwarding").checked;