From e028d8085b5c6d08d684b832695a0c94a91b31a7 Mon Sep 17 00:00:00 2001 From: tristanleboss Date: Fri, 14 Oct 2022 07:12:51 +0200 Subject: [PATCH] Add a "Moving" status filter Because sometime (when your save and download path are on different drives, when your disk drive is super busy, ...) move operations can stack up, I add this "Moving" status filter so you can see in a blink of the eye which torrents are in a move state. PR #17810. --- src/base/bittorrent/torrent.h | 1 + src/base/bittorrent/torrentimpl.cpp | 5 +++++ src/base/bittorrent/torrentimpl.h | 1 + src/base/torrentfilter.cpp | 5 +++++ src/base/torrentfilter.h | 2 ++ src/gui/transferlistfilterswidget.cpp | 7 +++++++ src/gui/transferlistfilterswidget.h | 1 + 7 files changed, 22 insertions(+) diff --git a/src/base/bittorrent/torrent.h b/src/base/bittorrent/torrent.h index 36bc8e072..4b90026c6 100644 --- a/src/base/bittorrent/torrent.h +++ b/src/base/bittorrent/torrent.h @@ -222,6 +222,7 @@ namespace BitTorrent virtual bool isForced() const = 0; virtual bool isChecking() const = 0; virtual bool isDownloading() const = 0; + virtual bool isMoving() const = 0; virtual bool isUploading() const = 0; virtual bool isCompleted() const = 0; virtual bool isActive() const = 0; diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 094309340..94d65587b 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -873,6 +873,11 @@ bool TorrentImpl::isDownloading() const return false; } +bool TorrentImpl::isMoving() const +{ + return m_state == TorrentState::Moving; +} + bool TorrentImpl::isUploading() const { switch (m_state) diff --git a/src/base/bittorrent/torrentimpl.h b/src/base/bittorrent/torrentimpl.h index eebacfd8f..bc0b5db86 100644 --- a/src/base/bittorrent/torrentimpl.h +++ b/src/base/bittorrent/torrentimpl.h @@ -145,6 +145,7 @@ namespace BitTorrent bool isForced() const override; bool isChecking() const override; bool isDownloading() const override; + bool isMoving() const override; bool isUploading() const override; bool isCompleted() const override; bool isActive() const override; diff --git a/src/base/torrentfilter.cpp b/src/base/torrentfilter.cpp index 92d90fe92..9eb2a8833 100644 --- a/src/base/torrentfilter.cpp +++ b/src/base/torrentfilter.cpp @@ -46,6 +46,7 @@ const TorrentFilter TorrentFilter::StalledTorrent(TorrentFilter::Stalled); const TorrentFilter TorrentFilter::StalledUploadingTorrent(TorrentFilter::StalledUploading); const TorrentFilter TorrentFilter::StalledDownloadingTorrent(TorrentFilter::StalledDownloading); const TorrentFilter TorrentFilter::CheckingTorrent(TorrentFilter::Checking); +const TorrentFilter TorrentFilter::MovingTorrent(TorrentFilter::Moving); const TorrentFilter TorrentFilter::ErroredTorrent(TorrentFilter::Errored); using BitTorrent::Torrent; @@ -106,6 +107,8 @@ bool TorrentFilter::setTypeByName(const QString &filter) type = StalledDownloading; else if (filter == u"checking") type = Checking; + else if (filter == u"moving") + type = Moving; else if (filter == u"errored") type = Errored; @@ -184,6 +187,8 @@ bool TorrentFilter::matchState(const BitTorrent::Torrent *const torrent) const return (torrent->state() == BitTorrent::TorrentState::CheckingUploading) || (torrent->state() == BitTorrent::TorrentState::CheckingDownloading) || (torrent->state() == BitTorrent::TorrentState::CheckingResumeData); + case Moving: + return torrent->isMoving(); case Errored: return torrent->isErrored(); } diff --git a/src/base/torrentfilter.h b/src/base/torrentfilter.h index a8267593b..3358ef380 100644 --- a/src/base/torrentfilter.h +++ b/src/base/torrentfilter.h @@ -59,6 +59,7 @@ public: StalledUploading, StalledDownloading, Checking, + Moving, Errored }; @@ -78,6 +79,7 @@ public: static const TorrentFilter StalledUploadingTorrent; static const TorrentFilter StalledDownloadingTorrent; static const TorrentFilter CheckingTorrent; + static const TorrentFilter MovingTorrent; static const TorrentFilter ErroredTorrent; TorrentFilter() = default; diff --git a/src/gui/transferlistfilterswidget.cpp b/src/gui/transferlistfilterswidget.cpp index 448217cfa..4a7c0281d 100644 --- a/src/gui/transferlistfilterswidget.cpp +++ b/src/gui/transferlistfilterswidget.cpp @@ -207,6 +207,9 @@ StatusFilterWidget::StatusFilterWidget(QWidget *parent, TransferListWidget *tran auto *checking = new QListWidgetItem(this); checking->setData(Qt::DisplayRole, tr("Checking (0)")); checking->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"force-recheck"_qs)); + auto *moving = new QListWidgetItem(this); + moving->setData(Qt::DisplayRole, tr("Moving (0)")); + moving->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"set-location"_qs)); auto *errored = new QListWidgetItem(this); errored->setData(Qt::DisplayRole, tr("Errored (0)")); errored->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"error"_qs)); @@ -267,6 +270,7 @@ void StatusFilterWidget::updateTorrentStatus(const BitTorrent::Torrent *torrent) update(TorrentFilter::StalledUploading, m_nbStalledUploading); update(TorrentFilter::StalledDownloading, m_nbStalledDownloading); update(TorrentFilter::Checking, m_nbChecking); + update(TorrentFilter::Moving, m_nbMoving); update(TorrentFilter::Errored, m_nbErrored); m_nbStalled = m_nbStalledUploading + m_nbStalledDownloading; @@ -287,6 +291,7 @@ void StatusFilterWidget::updateTexts() item(TorrentFilter::StalledUploading)->setData(Qt::DisplayRole, tr("Stalled Uploading (%1)").arg(m_nbStalledUploading)); item(TorrentFilter::StalledDownloading)->setData(Qt::DisplayRole, tr("Stalled Downloading (%1)").arg(m_nbStalledDownloading)); item(TorrentFilter::Checking)->setData(Qt::DisplayRole, tr("Checking (%1)").arg(m_nbChecking)); + item(TorrentFilter::Moving)->setData(Qt::DisplayRole, tr("Moving (%1)").arg(m_nbMoving)); item(TorrentFilter::Errored)->setData(Qt::DisplayRole, tr("Errored (%1)").arg(m_nbErrored)); } @@ -350,6 +355,8 @@ void StatusFilterWidget::torrentAboutToBeDeleted(BitTorrent::Torrent *const torr --m_nbStalledDownloading; if (status[TorrentFilter::Checking]) --m_nbChecking; + if (status[TorrentFilter::Moving]) + --m_nbMoving; if (status[TorrentFilter::Errored]) --m_nbErrored; diff --git a/src/gui/transferlistfilterswidget.h b/src/gui/transferlistfilterswidget.h index 4745d6540..82a97b373 100644 --- a/src/gui/transferlistfilterswidget.h +++ b/src/gui/transferlistfilterswidget.h @@ -114,6 +114,7 @@ private: int m_nbStalledUploading = 0; int m_nbStalledDownloading = 0; int m_nbChecking = 0; + int m_nbMoving = 0; int m_nbErrored = 0; };