Browse Source

Move "torrent status report" functionality out of Session class

adaptive-webui-19844
Chocobo1 5 years ago
parent
commit
418164bee4
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 25
      src/base/bittorrent/session.cpp
  2. 14
      src/base/bittorrent/session.h
  3. 53
      src/gui/transferlistfilterswidget.cpp

25
src/base/bittorrent/session.cpp

@ -1796,11 +1796,6 @@ QHash<InfoHash, TorrentHandle *> Session::torrents() const
return m_torrents; return m_torrents;
} }
TorrentStatusReport Session::torrentStatusReport() const
{
return m_torrentStatusReport;
}
bool Session::addTorrent(const QString &source, const AddTorrentParams &params) bool Session::addTorrent(const QString &source, const AddTorrentParams &params)
{ {
// `source`: .torrent file path/url or magnet uri // `source`: .torrent file path/url or magnet uri
@ -4404,26 +4399,6 @@ void Session::handleStateUpdateAlert(const lt::state_update_alert *p)
updatedTorrents.push_back(torrent); updatedTorrents.push_back(torrent);
} }
m_torrentStatusReport = TorrentStatusReport();
for (const TorrentHandle *torrent : asConst(m_torrents)) {
if (torrent->isDownloading())
++m_torrentStatusReport.nbDownloading;
if (torrent->isUploading())
++m_torrentStatusReport.nbSeeding;
if (torrent->isCompleted())
++m_torrentStatusReport.nbCompleted;
if (torrent->isPaused())
++m_torrentStatusReport.nbPaused;
if (torrent->isResumed())
++m_torrentStatusReport.nbResumed;
if (torrent->isActive())
++m_torrentStatusReport.nbActive;
if (torrent->isInactive())
++m_torrentStatusReport.nbInactive;
if (torrent->isErrored())
++m_torrentStatusReport.nbErrored;
}
emit torrentsUpdated(updatedTorrents); emit torrentsUpdated(updatedTorrents);
} }

14
src/base/bittorrent/session.h

@ -86,18 +86,6 @@ namespace BitTorrent
class TrackerEntry; class TrackerEntry;
struct CreateTorrentParams; struct CreateTorrentParams;
struct TorrentStatusReport
{
uint nbDownloading = 0;
uint nbSeeding = 0;
uint nbCompleted = 0;
uint nbActive = 0;
uint nbInactive = 0;
uint nbPaused = 0;
uint nbResumed = 0;
uint nbErrored = 0;
};
class SessionSettingsEnums class SessionSettingsEnums
{ {
Q_GADGET Q_GADGET
@ -395,7 +383,6 @@ namespace BitTorrent
void startUpTorrents(); void startUpTorrents();
TorrentHandle *findTorrent(const InfoHash &hash) const; TorrentHandle *findTorrent(const InfoHash &hash) const;
QHash<InfoHash, TorrentHandle *> torrents() const; QHash<InfoHash, TorrentHandle *> torrents() const;
TorrentStatusReport torrentStatusReport() const;
bool hasActiveTorrents() const; bool hasActiveTorrents() const;
bool hasUnfinishedTorrents() const; bool hasUnfinishedTorrents() const;
bool hasRunningSeed() const; bool hasRunningSeed() const;
@ -694,7 +681,6 @@ namespace BitTorrent
QHash<InfoHash, CreateTorrentParams> m_addingTorrents; QHash<InfoHash, CreateTorrentParams> m_addingTorrents;
QHash<QString, AddTorrentParams> m_downloadedTorrents; QHash<QString, AddTorrentParams> m_downloadedTorrents;
QHash<InfoHash, RemovingTorrentData> m_removingTorrents; QHash<InfoHash, RemovingTorrentData> m_removingTorrents;
TorrentStatusReport m_torrentStatusReport;
QStringMap m_categories; QStringMap m_categories;
QSet<QString> m_tags; QSet<QString> m_tags;

53
src/gui/transferlistfilterswidget.cpp

@ -146,8 +146,12 @@ void BaseFilterWidget::toggleFilter(bool checked)
StatusFilterWidget::StatusFilterWidget(QWidget *parent, TransferListWidget *transferList) StatusFilterWidget::StatusFilterWidget(QWidget *parent, TransferListWidget *transferList)
: BaseFilterWidget(parent, transferList) : BaseFilterWidget(parent, transferList)
{ {
connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentAdded
, this, &StatusFilterWidget::updateTorrentNumbers);
connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentsUpdated connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentsUpdated
, this, &StatusFilterWidget::updateTorrentNumbers); , this, &StatusFilterWidget::updateTorrentNumbers);
connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentAboutToBeRemoved
, this, &StatusFilterWidget::updateTorrentNumbers);
// Add status filters // Add status filters
auto *all = new QListWidgetItem(this); auto *all = new QListWidgetItem(this);
@ -190,17 +194,44 @@ StatusFilterWidget::~StatusFilterWidget()
void StatusFilterWidget::updateTorrentNumbers() void StatusFilterWidget::updateTorrentNumbers()
{ {
const BitTorrent::TorrentStatusReport report = BitTorrent::Session::instance()->torrentStatusReport(); int nbDownloading = 0;
int nbSeeding = 0;
item(TorrentFilter::All)->setData(Qt::DisplayRole, tr("All (%1)").arg(report.nbActive + report.nbInactive)); int nbCompleted = 0;
item(TorrentFilter::Downloading)->setData(Qt::DisplayRole, tr("Downloading (%1)").arg(report.nbDownloading)); int nbResumed = 0;
item(TorrentFilter::Seeding)->setData(Qt::DisplayRole, tr("Seeding (%1)").arg(report.nbSeeding)); int nbPaused = 0;
item(TorrentFilter::Completed)->setData(Qt::DisplayRole, tr("Completed (%1)").arg(report.nbCompleted)); int nbActive = 0;
item(TorrentFilter::Paused)->setData(Qt::DisplayRole, tr("Paused (%1)").arg(report.nbPaused)); int nbInactive = 0;
item(TorrentFilter::Resumed)->setData(Qt::DisplayRole, tr("Resumed (%1)").arg(report.nbResumed)); int nbErrored = 0;
item(TorrentFilter::Active)->setData(Qt::DisplayRole, tr("Active (%1)").arg(report.nbActive));
item(TorrentFilter::Inactive)->setData(Qt::DisplayRole, tr("Inactive (%1)").arg(report.nbInactive)); const QHash<BitTorrent::InfoHash, BitTorrent::TorrentHandle *> torrents = BitTorrent::Session::instance()->torrents();
item(TorrentFilter::Errored)->setData(Qt::DisplayRole, tr("Errored (%1)").arg(report.nbErrored)); for (const BitTorrent::TorrentHandle *torrent : torrents) {
if (torrent->isDownloading())
++nbDownloading;
if (torrent->isUploading())
++nbSeeding;
if (torrent->isCompleted())
++nbCompleted;
if (torrent->isResumed())
++nbResumed;
if (torrent->isPaused())
++nbPaused;
if (torrent->isActive())
++nbActive;
if (torrent->isInactive())
++nbInactive;
if (torrent->isErrored())
++nbErrored;
}
item(TorrentFilter::All)->setData(Qt::DisplayRole, tr("All (%1)").arg(torrents.count()));
item(TorrentFilter::Downloading)->setData(Qt::DisplayRole, tr("Downloading (%1)").arg(nbDownloading));
item(TorrentFilter::Seeding)->setData(Qt::DisplayRole, tr("Seeding (%1)").arg(nbSeeding));
item(TorrentFilter::Completed)->setData(Qt::DisplayRole, tr("Completed (%1)").arg(nbCompleted));
item(TorrentFilter::Resumed)->setData(Qt::DisplayRole, tr("Resumed (%1)").arg(nbResumed));
item(TorrentFilter::Paused)->setData(Qt::DisplayRole, tr("Paused (%1)").arg(nbPaused));
item(TorrentFilter::Active)->setData(Qt::DisplayRole, tr("Active (%1)").arg(nbActive));
item(TorrentFilter::Inactive)->setData(Qt::DisplayRole, tr("Inactive (%1)").arg(nbInactive));
item(TorrentFilter::Errored)->setData(Qt::DisplayRole, tr("Errored (%1)").arg(nbErrored));
} }
void StatusFilterWidget::showMenu(const QPoint &) {} void StatusFilterWidget::showMenu(const QPoint &) {}

Loading…
Cancel
Save