From 589c8c147b06655d3d4f36d8d4f25ae2d757fd85 Mon Sep 17 00:00:00 2001 From: rakshasa Date: Mon, 15 Mar 2010 23:31:58 +0000 Subject: [PATCH] * Cleaned up torrent/download.h. * Removed raw_value as it is redundant. * Fixed 'greater' command and added 'equal'. Patch by Josef Drexler. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1146 e378c898-3ddf-0310-93e7-cc216c733640 --- src/command_download.cc | 6 +++--- src/command_ui.cc | 26 ++++++++++++++++++-------- src/core/download.cc | 8 ++++---- src/core/download_list.cc | 4 ++-- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/command_download.cc b/src/command_download.cc index ce3d9e24..ca845c94 100644 --- a/src/command_download.cc +++ b/src/command_download.cc @@ -307,11 +307,11 @@ retrieve_d_bitfield(core::Download* download) { // Just a helper function atm. torrent::Object cmd_d_initialize_logs(core::Download* download) { - download->download()->signal_network_log(sigc::mem_fun(control->core(), &core::Manager::push_log_complete)); - download->download()->signal_storage_error(sigc::mem_fun(control->core(), &core::Manager::push_log_complete)); + download->info()->signal_network_log().connect(sigc::mem_fun(control->core(), &core::Manager::push_log_complete)); + download->info()->signal_storage_error().connect(sigc::mem_fun(control->core(), &core::Manager::push_log_complete)); if (!rpc::call_command_string("log.tracker").empty()) - download->download()->signal_tracker_dump(sigc::ptr_fun(&core::receive_tracker_dump)); + download->info()->signal_tracker_dump().connect(sigc::ptr_fun(&core::receive_tracker_dump)); return torrent::Object(); } diff --git a/src/command_ui.cc b/src/command_ui.cc index f8356681..e9e05894 100644 --- a/src/command_ui.cc +++ b/src/command_ui.cc @@ -212,7 +212,7 @@ apply_or(rpc::target_type target, const torrent::Object& rawArgs) { } torrent::Object -apply_less(rpc::target_type target, const torrent::Object& rawArgs) { +apply_cmp(rpc::target_type target, const torrent::Object& rawArgs) { const torrent::Object::list_type& args = rawArgs.as_list(); // We only need to check if empty() since if size() == 1 it calls @@ -239,16 +239,25 @@ apply_less(rpc::target_type target, const torrent::Object& rawArgs) { throw torrent::input_error("Type mismatch."); switch (result1.type()) { - case torrent::Object::TYPE_VALUE: return result1.as_value() < result2.as_value(); - case torrent::Object::TYPE_STRING: return result1.as_string() < result2.as_string(); - default: return (int64_t)false; + case torrent::Object::TYPE_VALUE: return result1.as_value() - result2.as_value(); + case torrent::Object::TYPE_STRING: return result1.as_string().compare(result2.as_string()); + default: return torrent::Object(); } } -// Fixme. -torrent::Object -apply_greater(rpc::target_type target, const torrent::Object& rawArgs) { - return (int64_t)!apply_less(target, rawArgs).as_value(); +torrent::Object apply_less(rpc::target_type target, const torrent::Object& rawArgs) { + torrent::Object result = apply_cmp(target, rawArgs); + return result.is_value() ? result.as_value() < 0 : (int64_t)false; +} + +torrent::Object apply_greater(rpc::target_type target, const torrent::Object& rawArgs) { + torrent::Object result = apply_cmp(target, rawArgs); + return result.is_value() ? result.as_value() > 0 : (int64_t)false; +} + +torrent::Object apply_equal(rpc::target_type target, const torrent::Object& rawArgs) { + torrent::Object result = apply_cmp(target, rawArgs); + return result.is_value() ? result.as_value() == 0 : (int64_t)false; } torrent::Object @@ -505,6 +514,7 @@ initialize_command_ui() { ADD_ANY_LIST("less", rak::ptr_fn(&apply_less)); ADD_ANY_LIST("greater", rak::ptr_fn(&apply_greater)); + ADD_ANY_LIST("equal", rak::ptr_fn(&apply_equal)); // A temporary command for handling stuff until we get proper // support for seperation of commands and literals. diff --git a/src/core/download.cc b/src/core/download.cc index e50a98d9..c93c667f 100644 --- a/src/core/download.cc +++ b/src/core/download.cc @@ -63,11 +63,11 @@ Download::Download(download_type d) : m_chunksFailed(0), m_resumeFlags(~uint32_t()) { - m_connTrackerSucceeded = m_download.signal_tracker_succeeded(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_storage_error)); + m_connTrackerSucceeded = m_download.info()->signal_tracker_success().connect(sigc::bind(sigc::mem_fun(*this, &Download::receive_tracker_msg), "")); + m_connTrackerFailed = m_download.info()->signal_tracker_failed().connect(sigc::mem_fun(*this, &Download::receive_tracker_msg)); + m_connStorageError = m_download.info()->signal_storage_error().connect(sigc::mem_fun(*this, &Download::receive_storage_error)); - m_download.signal_chunk_failed(sigc::mem_fun(*this, &Download::receive_chunk_failed)); + m_download.info()->signal_chunk_failed().connect(sigc::mem_fun(*this, &Download::receive_chunk_failed)); } Download::~Download() { diff --git a/src/core/download_list.cc b/src/core/download_list.cc index fd5bbe4b..60f2f743 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -175,8 +175,8 @@ DownloadList::insert(Download* download) { iterator itr = base_type::insert(end(), download); try { - (*itr)->download()->signal_download_done(sigc::bind(sigc::mem_fun(*this, &DownloadList::received_finished), download)); - (*itr)->download()->signal_hash_done(sigc::bind(sigc::mem_fun(*this, &DownloadList::hash_done), download)); + (*itr)->info()->signal_download_done().connect(sigc::bind(sigc::mem_fun(*this, &DownloadList::received_finished), download)); + (*itr)->info()->signal_initial_hash().connect(sigc::bind(sigc::mem_fun(*this, &DownloadList::hash_done), download)); // This needs to be separated into two different calls to ensure // the download remains in the view.