diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 0974ee5bc..2c9369c3c 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -4376,6 +4376,9 @@ void Session::handleSessionStatsAlert(const lt::session_stats_alert *p) void Session::handleStateUpdateAlert(const lt::state_update_alert *p) { + QVector updatedTorrents; + updatedTorrents.reserve(p->status.size()); + for (const lt::torrent_status &status : p->status) { TorrentHandle *const torrent = m_torrents.value(status.info_hash); @@ -4383,6 +4386,7 @@ void Session::handleStateUpdateAlert(const lt::state_update_alert *p) continue; torrent->handleStateUpdate(status); + updatedTorrents.push_back(torrent); } m_torrentStatusReport = TorrentStatusReport(); @@ -4405,7 +4409,7 @@ void Session::handleStateUpdateAlert(const lt::state_update_alert *p) ++m_torrentStatusReport.nbErrored; } - emit torrentsUpdated(); + emit torrentsUpdated(updatedTorrents); } namespace diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index 529f4e1b9..65959f6bb 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -450,7 +450,7 @@ namespace BitTorrent signals: void statsUpdated(); - void torrentsUpdated(); + void torrentsUpdated(const QVector &torrents); void addTorrentFailed(const QString &error); void torrentAdded(BitTorrent::TorrentHandle *const torrent); void torrentNew(BitTorrent::TorrentHandle *const torrent); diff --git a/src/gui/transferlistmodel.cpp b/src/gui/transferlistmodel.cpp index 66ea53667..2f21d3e48 100644 --- a/src/gui/transferlistmodel.cpp +++ b/src/gui/transferlistmodel.cpp @@ -315,9 +315,18 @@ void TransferListModel::handleTorrentStatusUpdated(BitTorrent::TorrentHandle *co emit dataChanged(index(row, 0), index(row, columnCount() - 1)); } -void TransferListModel::handleTorrentsUpdated() +void TransferListModel::handleTorrentsUpdated(const QVector &torrents) { - emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); + const int columns = (columnCount() - 1); + + for (BitTorrent::TorrentHandle *const torrent : torrents) { + const int row = m_torrents.indexOf(torrent); + + if (row < 0) + continue; + + emit dataChanged(index(row, 0), index(row, columns)); + } } // Static functions diff --git a/src/gui/transferlistmodel.h b/src/gui/transferlistmodel.h index 38ee85427..10cbafc36 100644 --- a/src/gui/transferlistmodel.h +++ b/src/gui/transferlistmodel.h @@ -97,7 +97,7 @@ private slots: void addTorrent(BitTorrent::TorrentHandle *const torrent); void handleTorrentAboutToBeRemoved(BitTorrent::TorrentHandle *const torrent); void handleTorrentStatusUpdated(BitTorrent::TorrentHandle *const torrent); - void handleTorrentsUpdated(); + void handleTorrentsUpdated(const QVector &torrents); private: QList m_torrents;