diff --git a/qt/mainwin.cc b/qt/mainwin.cc index 207e1c86b..2670f1be7 100644 --- a/qt/mainwin.cc +++ b/qt/mainwin.cc @@ -746,21 +746,40 @@ TrMainWindow :: refreshTrayIconSoon () void TrMainWindow :: refreshTrayIcon () { - const QString idle = tr ("Idle"); - const Speed u (myModel.getUploadSpeed ()); - const Speed d (myModel.getDownloadSpeed ()); + Speed upSpeed, downSpeed; + size_t upCount, downCount; + QString tip; - myTrayIcon.setToolTip (tr ("Transmission\nUp: %1\nDown: %2") - .arg (u.isZero () ? idle : Formatter::speedToString (u)) - .arg (d.isZero () ? idle : Formatter::speedToString (d))); + myModel.getTransferSpeed (upSpeed, upCount, downSpeed, downCount); + + if (!upCount && !downCount) + { + tip = tr ("Idle"); + } + else if (downCount) + { + tip = tr( "%1 %2" ).arg(Formatter::downloadSpeedToString(downSpeed)) + .arg(Formatter::uploadSpeedToString(upSpeed)); + } + else if (upCount) + { + tip = Formatter::uploadSpeedToString(upSpeed); + } + + myTrayIcon.setToolTip (tip); } void TrMainWindow :: refreshStatusBar () { - myUploadSpeedLabel->setText (Formatter::uploadSpeedToString(myModel.getUploadSpeed())); + Speed upSpeed, downSpeed; + size_t upCount, downCount; + myModel.getTransferSpeed (upSpeed, upCount, downSpeed, downCount); - myDownloadSpeedLabel->setText (Formatter::downloadSpeedToString(myModel.getDownloadSpeed())); + myUploadSpeedLabel->setText (Formatter::uploadSpeedToString(upSpeed)); + myUploadSpeedLabel->setVisible (downCount || upCount); + myDownloadSpeedLabel->setText (Formatter::downloadSpeedToString(downSpeed)); + myDownloadSpeedLabel->setVisible (downCount); myNetworkLabel->setVisible (!mySession.isServer ()); diff --git a/qt/torrent-model.cc b/qt/torrent-model.cc index af74f64c7..c99ea833b 100644 --- a/qt/torrent-model.cc +++ b/qt/torrent-model.cc @@ -230,22 +230,28 @@ TorrentModel :: removeTorrent( int id ) } } -Speed -TorrentModel :: getUploadSpeed( ) const +void +TorrentModel :: getTransferSpeed (Speed & uploadSpeed, + size_t & uploadPeerCount, + Speed & downloadSpeed, + size_t & downloadPeerCount) { - Speed up; - foreach( const Torrent * tor, myTorrents ) - up += tor->uploadSpeed( ); - return up; -} + Speed upSpeed, downSpeed; + size_t upCount=0, downCount=0; -Speed -TorrentModel :: getDownloadSpeed( ) const -{ - Speed down; - foreach( const Torrent * tor, myTorrents ) - down += tor->downloadSpeed( ); - return down; + foreach (const Torrent * const tor, myTorrents) + { + upSpeed += tor->uploadSpeed (); + upCount += tor->peersWeAreUploadingTo (); + downSpeed += tor->downloadSpeed (); + downCount += tor->webseedsWeAreDownloadingFrom(); + downCount += tor->peersWeAreDownloadingFrom(); + } + + uploadSpeed = upSpeed; + uploadPeerCount = upCount; + downloadSpeed = downSpeed; + downloadPeerCount = downCount; } QSet diff --git a/qt/torrent-model.h b/qt/torrent-model.h index 5e512e9db..408970cb7 100644 --- a/qt/torrent-model.h +++ b/qt/torrent-model.h @@ -57,8 +57,10 @@ class TorrentModel: public QAbstractListModel QSet getIds( ) const; public: - Speed getUploadSpeed( ) const; - Speed getDownloadSpeed( ) const; + void getTransferSpeed (Speed & uploadSpeed, + size_t & uploadPeerCount, + Speed & downloadSpeed, + size_t & downloadPeerCount); signals: void torrentsAdded( QSet );