mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-21 05:43:32 -07:00
Merge 8089b5903b
into 4f94eac235
This commit is contained in:
commit
b65de0b940
2 changed files with 33 additions and 1 deletions
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue