diff --git a/src/display/window_download_chunks_seen.cc b/src/display/window_download_chunks_seen.cc index 015d2e45..92dbbcc2 100644 --- a/src/display/window_download_chunks_seen.cc +++ b/src/display/window_download_chunks_seen.cc @@ -40,6 +40,8 @@ #include #include #include +#include +#include #include "core/download.h" @@ -74,12 +76,25 @@ WindowDownloadChunksSeen::redraw() { return; } + if (!m_download->is_done()) { + m_canvas->print(36, 0, "X downloaded missing downloading"); + m_canvas->print_char(50, 0, 'X' | A_BOLD); + m_canvas->print_char(61, 0, 'X' | A_REVERSE); + } + *m_focus = std::min(*m_focus, max_focus()); const uint8_t* chunk = seen + *m_focus * chunks_per_row(); const uint8_t* last = seen + m_download->download()->chunks_total(); const torrent::Bitfield* bitfield = m_download->download()->bitfield(); + const torrent::TransferList* transfers = m_download->download()->transfer_list(); + std::vector transferChunks(transfers->size(), 0); + + std::transform(transfers->begin(), transfers->end(), transferChunks.begin(), std::mem_fun(&torrent::BlockList::index)); + std::sort(transferChunks.begin(), transferChunks.end()); + + std::vector::const_iterator itrTransfer = transferChunks.begin(); for (int y = 1; y < m_canvas->get_height() && chunk < last; ++y) { m_canvas->print(0, y, "%5d ", (int)(chunk - seen)); @@ -87,12 +102,14 @@ WindowDownloadChunksSeen::redraw() { while (chunk < last) { chtype attr; - if (bitfield->get(chunk - seen)) + if (bitfield->get(chunk - seen)) { attr = A_NORMAL; -// else if (foo->is_downloading(chunk - seen)) -// attr = A_UNDERLINE; - else + } else if (itrTransfer != transferChunks.end() && (uint32_t)(chunk - seen) == *itrTransfer) { + attr = A_REVERSE; + itrTransfer++; + } else { attr = A_BOLD; + } m_canvas->print_char(attr | rak::value_to_hexchar<0>(std::min(*chunk, 0xF))); chunk++; diff --git a/src/display/window_peer_list.cc b/src/display/window_peer_list.cc index 1d3882c6..acc0d7c7 100644 --- a/src/display/window_peer_list.cc +++ b/src/display/window_peer_list.cc @@ -38,6 +38,7 @@ #include #include +#include #include #include @@ -83,9 +84,9 @@ WindowPeerList::redraw() { typedef std::pair Range; Range range = rak::advance_bidirectional(m_list->begin(), - *m_focus != m_list->end() ? *m_focus : m_list->begin(), - m_list->end(), - m_canvas->get_height() - y); + *m_focus != m_list->end() ? *m_focus : m_list->begin(), + m_list->end(), + m_canvas->get_height() - y); if (m_download->download()->chunks_total() <= 0) throw std::logic_error("WindowPeerList::redraw() m_slotChunksTotal() returned invalid value"); @@ -96,8 +97,8 @@ WindowPeerList::redraw() { x = 0; m_canvas->print(x, y, "%c %s", - range.first == *m_focus ? '*' : ' ', - rak::socket_address::cast_from(p.address())->address_str().c_str()); + range.first == *m_focus ? '*' : ' ', + rak::socket_address::cast_from(p.address())->address_str().c_str()); x += 18; m_canvas->print(x, y, "%.1f", (double)p.up_rate()->rate() / 1024); x += 7; @@ -105,23 +106,23 @@ WindowPeerList::redraw() { m_canvas->print(x, y, "%.1f", (double)p.peer_rate()->rate() / 1024); x += 7; m_canvas->print(x, y, "%c/%c%c/%c%c", - p.is_incoming() ? 'r' : 'l', - p.is_remote_choked() ? 'c' : 'u', - p.is_remote_interested() ? 'i' : 'n', - p.is_local_choked() ? 'c' : 'u', - p.is_local_interested() ? 'i' : 'n'); + p.is_incoming() ? 'r' : 'l', + p.is_remote_choked() ? 'c' : 'u', + p.is_remote_interested() ? 'i' : 'n', + p.is_local_choked() ? 'c' : 'u', + p.is_local_interested() ? 'i' : 'n'); x += 9; - m_canvas->print(x, y, "%i/%i", - p.outgoing_queue_size(), - p.incoming_queue_size()); + m_canvas->print(x, y, "%i/%i", p.outgoing_queue_size(), p.incoming_queue_size()); x += 6; m_canvas->print(x, y, "%3i", done_percentage(*range.first)); x += 6; - if (p.incoming_queue_size()) - m_canvas->print(x, y, "%i", p.incoming_queue(0)->index()); + const torrent::BlockTransfer* transfer = p.transfer(); + + if (transfer != NULL) + m_canvas->print(x, y, "%i", transfer->index()); x += 6;