From ad80247ba6ab2ded862b0cb222323b4df9345c0c Mon Sep 17 00:00:00 2001 From: rakshasa Date: Mon, 10 Oct 2005 19:36:12 +0000 Subject: [PATCH] * Improved hash checking, it now stops a torrent if some chunk mappings fail even though a file has been allocated. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@578 e378c898-3ddf-0310-93e7-cc216c733640 --- src/core/download.cc | 2 +- src/core/download_list.cc | 3 ++- src/core/manager.cc | 12 +++++++++--- src/display/utils.cc | 6 +++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/core/download.cc b/src/core/download.cc index 16db5eb7..6a3e3c5e 100644 --- a/src/core/download.cc +++ b/src/core/download.cc @@ -66,7 +66,7 @@ Download::set_download(torrent::Download d) { m_connTrackerSucceded = m_download.signal_tracker_succeded(sigc::bind(sigc::mem_fun(*this, &Download::receive_tracker_msg), "")); m_connTrackerFailed = m_download.signal_tracker_failed(sigc::mem_fun(*this, &Download::receive_tracker_msg)); - m_connStorageError = m_download.signal_storage_error(sigc::mem_fun(*this, &Download::receive_tracker_msg)); + m_connStorageError = m_download.signal_storage_error(sigc::mem_fun(*this, &Download::receive_storage_error)); } void diff --git a/src/core/download_list.cc b/src/core/download_list.cc index ce66f1aa..bb62b299 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -90,7 +90,8 @@ DownloadList::close(Download* d) { void DownloadList::start(Download* d) { - if (d->get_download().is_active()) + if (d->get_download().is_active() || + !d->get_download().is_hash_checked()) return; open(d); diff --git a/src/core/manager.cc b/src/core/manager.cc index cb39fe2b..d5857862 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -61,9 +61,14 @@ connect_signal_network_log(Download* d, torrent::Download::SlotString s) { d->get_download().signal_network_log(s); } +// static void +// connect_signal_tracker_log(Download* d, torrent::Download::SlotString s) { +// d->get_download().signal_tracker_failed(s); +// } + static void -connect_signal_tracker_log(Download* d, torrent::Download::SlotString s) { - d->get_download().signal_tracker_failed(s); +connect_signal_storage_log(Download* d, torrent::Download::SlotString s) { + d->get_download().signal_storage_error(s); } Manager::Manager() : @@ -99,7 +104,8 @@ Manager::initialize_second() { // opened or closed. m_downloadList.slot_map_insert()["0_initialize_bencode"] = sigc::mem_fun(*this, &Manager::initialize_bencode); m_downloadList.slot_map_insert()["1_connect_network_log"] = sigc::bind(sigc::ptr_fun(&connect_signal_network_log), sigc::mem_fun(m_logComplete, &Log::push_front)); - m_downloadList.slot_map_insert()["1_connect_tracker_log"] = sigc::bind(sigc::ptr_fun(&connect_signal_tracker_log), sigc::mem_fun(m_logComplete, &Log::push_front)); +// m_downloadList.slot_map_insert()["1_connect_tracker_log"] = sigc::bind(sigc::ptr_fun(&connect_signal_tracker_log), sigc::mem_fun(m_logComplete, &Log::push_front)); + m_downloadList.slot_map_insert()["1_connect_storage_log"] = sigc::bind(sigc::ptr_fun(&connect_signal_storage_log), sigc::mem_fun(m_logComplete, &Log::push_front)); //m_downloadList.slot_map_insert()["1_enable_udp_trackers"] = sigc::bind(sigc::mem_fun(&core::Download::enable_udp_trackers), true); m_downloadList.slot_map_erase()["1_hash_queue_remove"] = sigc::mem_fun(m_hashQueue, &HashQueue::remove); diff --git a/src/display/utils.cc b/src/display/utils.cc index 6fcbf27c..74be7688 100644 --- a/src/display/utils.cc +++ b/src/display/utils.cc @@ -80,6 +80,9 @@ print_download_info(char* buf, unsigned int length, core::Download* d) { char* print_download_status(char* buf, unsigned int length, core::Download* d) { + if (!d->get_download().is_active()) + buf += std::max(0, snprintf(buf, length, "Inactive: ")); + if (d->get_download().is_hash_checking()) buf += std::max(0, snprintf(buf, length, "Checking hash")); @@ -90,9 +93,6 @@ print_download_status(char* buf, unsigned int length, core::Download* d) { d->get_download().get_tracker_focus(), d->get_download().get_tracker(d->get_download().get_tracker_focus()).get_url().c_str())); - else if (!d->get_download().is_active()) - buf += std::max(0, snprintf(buf, length, "Inactive")); - else if (!d->get_message().empty()) buf += std::max(0, snprintf(buf, length, "%s", d->get_message().c_str()));