This commit is contained in:
AdKiller 2025-07-03 23:26:50 +05:00 committed by GitHub
commit b65de0b940
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 33 additions and 1 deletions

View file

@ -57,7 +57,7 @@ namespace
TRACKERERROR_ROW, TRACKERERROR_ROW,
OTHERERROR_ROW, OTHERERROR_ROW,
WARNING_ROW, WARNING_ROW,
ONLY_HTTP_ROW, // Only HTTP special row
NUM_SPECIAL_ROWS NUM_SPECIAL_ROWS
}; };
@ -97,12 +97,15 @@ namespace
return TrackersFilterWidget::tr("All (%1)", "this is for the tracker filter"); return TrackersFilterWidget::tr("All (%1)", "this is for the tracker filter");
case TRACKERLESS_ROW: case TRACKERLESS_ROW:
return TrackersFilterWidget::tr("Trackerless (%1)"); return TrackersFilterWidget::tr("Trackerless (%1)");
case ONLY_HTTP_ROW:
return TrackersFilterWidget::tr("Only HTTP (%1)");
case TRACKERERROR_ROW: case TRACKERERROR_ROW:
return TrackersFilterWidget::tr("Tracker error (%1)"); return TrackersFilterWidget::tr("Tracker error (%1)");
case OTHERERROR_ROW: case OTHERERROR_ROW:
return TrackersFilterWidget::tr("Other error (%1)"); return TrackersFilterWidget::tr("Other error (%1)");
case WARNING_ROW: case WARNING_ROW:
return TrackersFilterWidget::tr("Warning (%1)"); return TrackersFilterWidget::tr("Warning (%1)");
default: default:
return {}; return {};
} }
@ -141,6 +144,10 @@ TrackersFilterWidget::TrackersFilterWidget(QWidget *parent, TransferListWidget *
warningItem->setData(Qt::DisplayRole, formatItemText(WARNING_ROW, 0)); warningItem->setData(Qt::DisplayRole, formatItemText(WARNING_ROW, 0));
warningItem->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"tracker-warning"_s, u"dialog-warning"_s)); warningItem->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"tracker-warning"_s, u"dialog-warning"_s));
auto *onlyHttpItem = new QListWidgetItem(this);
onlyHttpItem->setData(Qt::DisplayRole, formatItemText(ONLY_HTTP_ROW, 0));
onlyHttpItem->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"trackers"_s, u"network-server"_s));
m_trackers[NULL_HOST] = {{}, trackerlessItem}; m_trackers[NULL_HOST] = {{}, trackerlessItem};
handleTorrentsLoaded(BitTorrent::Session::instance()->torrents()); handleTorrentsLoaded(BitTorrent::Session::instance()->torrents());
@ -714,7 +721,27 @@ QSet<BitTorrent::TorrentID> TrackersFilterWidget::getTorrentIDs(const int row) c
return {m_trackerErrors.keyBegin(), m_trackerErrors.keyEnd()}; return {m_trackerErrors.keyBegin(), m_trackerErrors.keyEnd()};
case WARNING_ROW: case WARNING_ROW:
return {m_warnings.keyBegin(), m_warnings.keyEnd()}; return {m_warnings.keyBegin(), m_warnings.keyEnd()};
case ONLY_HTTP_ROW:
// Placeholder: implement the "only HTTP" logic later
return {}; // TODO: Populate with IDs of torrents having only HTTP trackers
default: default:
return m_trackers.value(trackerFromRow(row)).torrents; return m_trackers.value(trackerFromRow(row)).torrents;
} }
bool TrackersFilterWidget::isOnlyHttpTrackers(const QList<BitTorrent::TrackerEntryStatus> &trackers)
{
if (trackers.isEmpty())
return false;
bool anyHttps = false;
for (const auto &tracker : trackers) {
const QString scheme = QUrl(tracker.url).scheme();
if (scheme.compare(u"https", Qt::CaseInsensitive) == 0)
anyHttps = true;
else if (!scheme.isEmpty() && scheme.compare(u"http", Qt::CaseInsensitive) != 0)
return false;
}
return !anyHttps;
}
} }

View file

@ -85,6 +85,9 @@ private:
void downloadFavicon(const QString &trackerHost, const QString &faviconURL); void downloadFavicon(const QString &trackerHost, const QString &faviconURL);
void removeTracker(const QString &tracker); void removeTracker(const QString &tracker);
static bool isOnlyHttpTrackers(const QList<BitTorrent::TrackerEntryStatus> &trackers);
QSet<BitTorrent::TorrentID> m_onlyHttpTorrents;
struct TrackerData struct TrackerData
{ {
QSet<BitTorrent::TorrentID> torrents; QSet<BitTorrent::TorrentID> torrents;
@ -99,4 +102,6 @@ private:
int m_totalTorrents = 0; int m_totalTorrents = 0;
bool m_downloadTrackerFavicon = false; bool m_downloadTrackerFavicon = false;
QHash<QString, QSet<QString>> m_downloadingFavicons; // <favicon URL, tracker hosts> QHash<QString, QSet<QString>> m_downloadingFavicons; // <favicon URL, tracker hosts>
static bool isOnlyHttpTrackers(const QList<BitTorrent::TrackerEntryStatus> &trackers);
}; };