|
|
@ -231,42 +231,36 @@ void StatusFilterWidget::populate() |
|
|
|
|
|
|
|
|
|
|
|
const QVector<BitTorrent::Torrent *> torrents = BitTorrent::Session::instance()->torrents(); |
|
|
|
const QVector<BitTorrent::Torrent *> torrents = BitTorrent::Session::instance()->torrents(); |
|
|
|
for (const BitTorrent::Torrent *torrent : torrents) |
|
|
|
for (const BitTorrent::Torrent *torrent : torrents) |
|
|
|
{ |
|
|
|
|
|
|
|
updateTorrentStatus(torrent); |
|
|
|
updateTorrentStatus(torrent); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updateTexts(); |
|
|
|
updateTexts(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void StatusFilterWidget::updateTorrentStatus(const BitTorrent::Torrent *torrent) |
|
|
|
void StatusFilterWidget::updateTorrentStatus(const BitTorrent::Torrent *torrent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const auto update = [this, torrent](const TorrentFilter::Type status, const bool insert, int &count) |
|
|
|
TorrentFilterBitset &torrentStatus = m_torrentsStatus[torrent]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const auto update = [this, &torrentStatus](const TorrentFilter::Type status, const bool needStatus, int &counter) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const bool contains = m_torrentsStatus.contains(torrent, status); |
|
|
|
const bool hasStatus = torrentStatus[status]; |
|
|
|
if (insert && !contains) |
|
|
|
if (needStatus && !hasStatus) |
|
|
|
{ |
|
|
|
{ |
|
|
|
++count; |
|
|
|
++counter; |
|
|
|
m_torrentsStatus.insert(torrent, status); |
|
|
|
torrentStatus.set(status); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (!insert && contains) |
|
|
|
else if (!needStatus && hasStatus) |
|
|
|
{ |
|
|
|
{ |
|
|
|
--count; |
|
|
|
--counter; |
|
|
|
m_torrentsStatus.remove(torrent, status); |
|
|
|
torrentStatus.reset(status); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Downloading, torrent->isDownloading(), m_nbDownloading); |
|
|
|
update(TorrentFilter::Downloading, torrent->isDownloading(), m_nbDownloading); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Seeding, torrent->isUploading(), m_nbSeeding); |
|
|
|
update(TorrentFilter::Seeding, torrent->isUploading(), m_nbSeeding); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Completed, torrent->isCompleted(), m_nbCompleted); |
|
|
|
update(TorrentFilter::Completed, torrent->isCompleted(), m_nbCompleted); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Resumed, torrent->isResumed(), m_nbResumed); |
|
|
|
update(TorrentFilter::Resumed, torrent->isResumed(), m_nbResumed); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Paused, torrent->isPaused(), m_nbPaused); |
|
|
|
update(TorrentFilter::Paused, torrent->isPaused(), m_nbPaused); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Active, torrent->isActive(), m_nbActive); |
|
|
|
update(TorrentFilter::Active, torrent->isActive(), m_nbActive); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Inactive, torrent->isInactive(), m_nbInactive); |
|
|
|
update(TorrentFilter::Inactive, torrent->isInactive(), m_nbInactive); |
|
|
|
|
|
|
|
|
|
|
|
const bool isStalledUploading = (torrent->state() == BitTorrent::TorrentState::StalledUploading); |
|
|
|
const bool isStalledUploading = (torrent->state() == BitTorrent::TorrentState::StalledUploading); |
|
|
@ -276,7 +270,6 @@ void StatusFilterWidget::updateTorrentStatus(const BitTorrent::Torrent *torrent) |
|
|
|
update(TorrentFilter::StalledDownloading, isStalledDownloading, m_nbStalledDownloading); |
|
|
|
update(TorrentFilter::StalledDownloading, isStalledDownloading, m_nbStalledDownloading); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Checking, torrent->isChecking(), m_nbChecking); |
|
|
|
update(TorrentFilter::Checking, torrent->isChecking(), m_nbChecking); |
|
|
|
|
|
|
|
|
|
|
|
update(TorrentFilter::Errored, torrent->isErrored(), m_nbErrored); |
|
|
|
update(TorrentFilter::Errored, torrent->isErrored(), m_nbErrored); |
|
|
|
|
|
|
|
|
|
|
|
m_nbStalled = m_nbStalledUploading + m_nbStalledDownloading; |
|
|
|
m_nbStalled = m_nbStalledUploading + m_nbStalledDownloading; |
|
|
@ -336,54 +329,33 @@ void StatusFilterWidget::handleNewTorrent(BitTorrent::Torrent *const torrent) |
|
|
|
|
|
|
|
|
|
|
|
void StatusFilterWidget::torrentAboutToBeDeleted(BitTorrent::Torrent *const torrent) |
|
|
|
void StatusFilterWidget::torrentAboutToBeDeleted(BitTorrent::Torrent *const torrent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (const TorrentFilter::Type status : m_torrentsStatus.values(torrent)) |
|
|
|
const TorrentFilterBitset status = m_torrentsStatus.take(torrent); |
|
|
|
{ |
|
|
|
|
|
|
|
switch (status) |
|
|
|
if (status[TorrentFilter::Downloading]) |
|
|
|
{ |
|
|
|
--m_nbDownloading; |
|
|
|
case TorrentFilter::Downloading: |
|
|
|
if (status[TorrentFilter::Seeding]) |
|
|
|
--m_nbDownloading; |
|
|
|
--m_nbSeeding; |
|
|
|
break; |
|
|
|
if (status[TorrentFilter::Completed]) |
|
|
|
case TorrentFilter::Seeding: |
|
|
|
--m_nbCompleted; |
|
|
|
--m_nbSeeding; |
|
|
|
if (status[TorrentFilter::Resumed]) |
|
|
|
break; |
|
|
|
--m_nbResumed; |
|
|
|
case TorrentFilter::Completed: |
|
|
|
if (status[TorrentFilter::Paused]) |
|
|
|
--m_nbCompleted; |
|
|
|
--m_nbPaused; |
|
|
|
break; |
|
|
|
if (status[TorrentFilter::Active]) |
|
|
|
case TorrentFilter::Resumed: |
|
|
|
--m_nbActive; |
|
|
|
--m_nbResumed; |
|
|
|
if (status[TorrentFilter::Inactive]) |
|
|
|
break; |
|
|
|
--m_nbInactive; |
|
|
|
case TorrentFilter::Paused: |
|
|
|
if (status[TorrentFilter::StalledUploading]) |
|
|
|
--m_nbPaused; |
|
|
|
--m_nbStalledUploading; |
|
|
|
break; |
|
|
|
if (status[TorrentFilter::StalledDownloading]) |
|
|
|
case TorrentFilter::Active: |
|
|
|
--m_nbStalledDownloading; |
|
|
|
--m_nbActive; |
|
|
|
if (status[TorrentFilter::Checking]) |
|
|
|
break; |
|
|
|
--m_nbChecking; |
|
|
|
case TorrentFilter::Inactive: |
|
|
|
if (status[TorrentFilter::Errored]) |
|
|
|
--m_nbInactive; |
|
|
|
--m_nbErrored; |
|
|
|
break; |
|
|
|
|
|
|
|
case TorrentFilter::StalledUploading: |
|
|
|
|
|
|
|
--m_nbStalledUploading; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case TorrentFilter::StalledDownloading: |
|
|
|
|
|
|
|
--m_nbStalledDownloading; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case TorrentFilter::Checking: |
|
|
|
|
|
|
|
--m_nbChecking; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case TorrentFilter::Errored: |
|
|
|
|
|
|
|
--m_nbErrored; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
Q_ASSERT(false); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_nbStalled = m_nbStalledUploading + m_nbStalledDownloading; |
|
|
|
m_nbStalled = m_nbStalledUploading + m_nbStalledDownloading; |
|
|
|
|
|
|
|
|
|
|
|
m_torrentsStatus.remove(torrent); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updateTexts(); |
|
|
|
updateTexts(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|