From 2dc7ffdb8fbf26267faea5973fcae3beac9df445 Mon Sep 17 00:00:00 2001 From: rakshasa Date: Sat, 5 Mar 2005 02:20:45 +0000 Subject: [PATCH] Fixed bug in display code for peer percentage progress. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@325 e378c898-3ddf-0310-93e7-cc216c733640 --- TODO | 5 +---- src/core/download_list.cc | 2 +- src/display/window_peer_info.cc | 9 ++++++++- src/display/window_peer_info.h | 2 ++ src/display/window_peer_list.cc | 9 ++++++++- src/display/window_peer_list.h | 2 ++ src/utils/functional.h | 13 +++---------- 7 files changed, 25 insertions(+), 17 deletions(-) diff --git a/TODO b/TODO index b46adfa7..fed45bf3 100644 --- a/TODO +++ b/TODO @@ -6,7 +6,4 @@ normal timeout. Make clear distinction of upload/download throttle. -"Caught exception: "Tried to add an existing DownloadMain to DownloadManager"" -Properly handle duplicate torrents. - -Add log message for failed http requests. +Consider basing WindowPeer* on a common base class. diff --git a/src/core/download_list.cc b/src/core/download_list.cc index 66a7cb8e..bde65232 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -32,7 +32,7 @@ DownloadList::erase(iterator itr) { void DownloadList::clear() { - std::for_each(begin(), end(), func::call_delete()); + std::for_each(begin(), end(), func::call_delete()); Base::clear(); } diff --git a/src/display/window_peer_info.cc b/src/display/window_peer_info.cc index 7994b6f4..4f398719 100644 --- a/src/display/window_peer_info.cc +++ b/src/display/window_peer_info.cc @@ -43,7 +43,7 @@ WindowPeerInfo::redraw() { m_canvas->print(0, y++, "Id: %s" , utils::escape_string((*m_focus)->get_id()).c_str()); m_canvas->print(0, y++, "Snubbed: %s", (*m_focus)->get_snubbed() ? "Yes" : "No"); - m_canvas->print(0, y++, "Done: %i%", d.get_chunks_total() ? (*m_focus)->get_chunks_done() / d.get_chunks_total() : 0); + m_canvas->print(0, y++, "Done: %i%", done_percentage(**m_focus)); m_canvas->print(0, y++, "Rate: %5.1f/%5.1f KB Total: %.1f/%.1f MB", (double)(*m_focus)->get_rate_up() / (double)(1 << 10), @@ -52,4 +52,11 @@ WindowPeerInfo::redraw() { (double)(*m_focus)->get_transfered_down() / (double)(1 << 20)); } +int +WindowPeerInfo::done_percentage(torrent::Peer& p) { + int chunks = m_download->get_download().get_chunks_total(); + + return chunks ? (100 * p.get_chunks_done()) / chunks : 0; +} + } diff --git a/src/display/window_peer_info.h b/src/display/window_peer_info.h index 27020be4..5265386f 100644 --- a/src/display/window_peer_info.h +++ b/src/display/window_peer_info.h @@ -21,6 +21,8 @@ public: virtual void redraw(); private: + int done_percentage(torrent::Peer& p); + core::Download* m_download; PList* m_list; diff --git a/src/display/window_peer_list.cc b/src/display/window_peer_list.cc index 4830626d..b2bccec3 100644 --- a/src/display/window_peer_list.cc +++ b/src/display/window_peer_list.cc @@ -98,7 +98,7 @@ WindowPeerList::redraw() { itr->get_incoming_queue_size()); x += 6; - m_canvas->print(x, y, "%3i", (itr->get_chunks_done() * 100) / m_download->get_download().get_chunks_total()); + m_canvas->print(x, y, "%3i", done_percentage(*itr)); x += 6; if (itr->get_incoming_queue_size()) @@ -115,4 +115,11 @@ WindowPeerList::redraw() { } } +int +WindowPeerList::done_percentage(torrent::Peer& p) { + int chunks = m_download->get_download().get_chunks_total(); + + return chunks ? (100 * p.get_chunks_done()) / chunks : 0; +} + } diff --git a/src/display/window_peer_list.h b/src/display/window_peer_list.h index d32d3742..9a8b54cb 100644 --- a/src/display/window_peer_list.h +++ b/src/display/window_peer_list.h @@ -21,6 +21,8 @@ public: virtual void redraw(); private: + int done_percentage(torrent::Peer& p); + core::Download* m_download; PList* m_list; diff --git a/src/utils/functional.h b/src/utils/functional.h index 1aca1581..a4fbbe38 100644 --- a/src/utils/functional.h +++ b/src/utils/functional.h @@ -108,20 +108,13 @@ if_then(Cond c, Then t) { return _if_then(c, t); } -struct _call_delete - : public std::unary_function { - - template - void operator () (Type* t) { +template +struct call_delete : public std::unary_function { + void operator () (T* t) { delete t; } }; -inline _call_delete -call_delete() { - return _call_delete(); -} - } #endif