diff --git a/configure.ac b/configure.ac index d95c34ea..a25947db 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ AC_INIT(rtorrent, 0.8.9, jaris@ifi.uio.no) -AC_DEFINE(API_VERSION, 3, api version) +AC_DEFINE(API_VERSION, 4, api version) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) diff --git a/src/command_download.cc b/src/command_download.cc index 14394e6a..18db22c5 100644 --- a/src/command_download.cc +++ b/src/command_download.cc @@ -285,8 +285,8 @@ retrieve_d_bitfield(core::Download* download) { // Just a helper function atm. torrent::Object cmd_d_initialize_logs(core::Download* download) { - 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)); + download->info()->signal_network_log().push_back(tr1::bind(&core::Manager::push_log_complete, control->core(), tr1::placeholders::_1)); + download->info()->signal_storage_error().push_back(tr1::bind(&core::Manager::push_log_complete, control->core(), tr1::placeholders::_1)); return torrent::Object(); } @@ -334,8 +334,14 @@ d_chunks_seen(core::Download* download) { if (seen == NULL) return std::string(); - else - return std::string((const char*)seen, download->download()->file_list()->size_chunks()); + + uint32_t size = download->download()->file_list()->size_chunks(); + + std::string result; + result.resize(size * 2); + + rak::transform_hex((const char*)seen, (const char*)seen + size, result.begin()); + return result; } torrent::Object diff --git a/src/command_tracker.cc b/src/command_tracker.cc index 0fc58353..63bf691f 100644 --- a/src/command_tracker.cc +++ b/src/command_tracker.cc @@ -113,10 +113,16 @@ void initialize_command_tracker() { CMD2_TRACKER ("t.is_open", tr1::bind(&torrent::Tracker::is_busy, tr1::placeholders::_1)); CMD2_TRACKER ("t.is_enabled", tr1::bind(&torrent::Tracker::is_enabled, tr1::placeholders::_1)); - CMD2_TRACKER_VALUE_V("t.is_enabled.set", tr1::bind(&tracker_set_enabled, tr1::placeholders::_1, tr1::placeholders::_2)); + CMD2_TRACKER ("t.is_usable", tr1::bind(&torrent::Tracker::is_usable, tr1::placeholders::_1)); + CMD2_TRACKER ("t.is_busy", tr1::bind(&torrent::Tracker::is_busy, tr1::placeholders::_1)); + CMD2_TRACKER ("t.is_extra_tracker", tr1::bind(&torrent::Tracker::is_extra_tracker, tr1::placeholders::_1)); + CMD2_TRACKER ("t.can_scrape", tr1::bind(&torrent::Tracker::can_scrape, tr1::placeholders::_1)); + CMD2_TRACKER_V ("t.enable", tr1::bind(&torrent::Tracker::enable, tr1::placeholders::_1)); CMD2_TRACKER_V ("t.disable", tr1::bind(&torrent::Tracker::disable, tr1::placeholders::_1)); + CMD2_TRACKER_VALUE_V("t.is_enabled.set", tr1::bind(&tracker_set_enabled, tr1::placeholders::_1, tr1::placeholders::_2)); + CMD2_TRACKER ("t.url", tr1::bind(&torrent::Tracker::url, tr1::placeholders::_1)); CMD2_TRACKER ("t.group", tr1::bind(&torrent::Tracker::group, tr1::placeholders::_1)); CMD2_TRACKER ("t.type", tr1::bind(&torrent::Tracker::type, tr1::placeholders::_1)); @@ -131,9 +137,14 @@ initialize_command_tracker() { CMD2_TRACKER ("t.normal_interval", tr1::bind(&torrent::Tracker::normal_interval, tr1::placeholders::_1)); CMD2_TRACKER ("t.min_interval", tr1::bind(&torrent::Tracker::min_interval, tr1::placeholders::_1)); + CMD2_TRACKER ("t.activity_time_next", tr1::bind(&torrent::Tracker::activity_time_next, tr1::placeholders::_1)); + CMD2_TRACKER ("t.activity_time_last", tr1::bind(&torrent::Tracker::activity_time_last, tr1::placeholders::_1)); + + CMD2_TRACKER ("t.success_time_next", tr1::bind(&torrent::Tracker::success_time_next, tr1::placeholders::_1)); CMD2_TRACKER ("t.success_time_last", tr1::bind(&torrent::Tracker::success_time_last, tr1::placeholders::_1)); CMD2_TRACKER ("t.success_counter", tr1::bind(&torrent::Tracker::success_counter, tr1::placeholders::_1)); + CMD2_TRACKER ("t.failed_time_next", tr1::bind(&torrent::Tracker::failed_time_next, tr1::placeholders::_1)); CMD2_TRACKER ("t.failed_time_last", tr1::bind(&torrent::Tracker::failed_time_last, tr1::placeholders::_1)); CMD2_TRACKER ("t.failed_counter", tr1::bind(&torrent::Tracker::failed_counter, tr1::placeholders::_1)); diff --git a/src/core/download.cc b/src/core/download.cc index d8c051a8..3e704a49 100644 --- a/src/core/download.cc +++ b/src/core/download.cc @@ -65,21 +65,16 @@ Download::Download(download_type d) : m_resumeFlags(~uint32_t()), m_group(0) { - 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.info()->signal_chunk_failed().connect(sigc::mem_fun(*this, &Download::receive_chunk_failed)); + m_download.info()->signal_tracker_success().push_back(tr1::bind(&Download::receive_tracker_msg, this, "")); + m_download.info()->signal_tracker_failed().push_back(tr1::bind(&Download::receive_tracker_msg, this, tr1::placeholders::_1)); + m_download.info()->signal_storage_error().push_back(tr1::bind(&Download::receive_storage_error, this, tr1::placeholders::_1)); + m_download.info()->signal_chunk_failed().push_back(tr1::bind(&Download::receive_chunk_failed, this, tr1::placeholders::_1)); } Download::~Download() { if (!m_download.is_valid()) return; - m_connTrackerSucceeded.disconnect(); - m_connTrackerFailed.disconnect(); - m_connStorageError.disconnect(); - m_download = download_type(); } diff --git a/src/core/download.h b/src/core/download.h index 78df4c04..145e2915 100644 --- a/src/core/download.h +++ b/src/core/download.h @@ -155,10 +155,6 @@ private: uint32_t m_resumeFlags; - sigc::connection m_connTrackerSucceeded; - sigc::connection m_connTrackerFailed; - sigc::connection m_connStorageError; - unsigned int m_group; }; diff --git a/src/ui/element_peer_list.cc b/src/ui/element_peer_list.cc index b3059c82..d2acf0c7 100644 --- a/src/ui/element_peer_list.cc +++ b/src/ui/element_peer_list.cc @@ -65,8 +65,12 @@ ElementPeerList::ElementPeerList(core::Download* d) : std::for_each(m_download->download()->connection_list()->begin(), m_download->download()->connection_list()->end(), rak::bind1st(std::mem_fun(&PList::push_back), &m_list)); - m_connPeerConnected = m_download->download()->connection_list()->signal_connected().connect(sigc::mem_fun(*this, &ElementPeerList::receive_peer_connected)); - m_connPeerDisconnected = m_download->download()->connection_list()->signal_disconnected().connect(sigc::mem_fun(*this, &ElementPeerList::receive_peer_disconnected)); + torrent::ConnectionList* connection_list = m_download->download()->connection_list(); + + m_peer_connected = connection_list->signal_connected().insert(connection_list->signal_connected().end(), + tr1::bind(&ElementPeerList::receive_peer_connected, this, tr1::placeholders::_1)); + m_peer_disconnected = connection_list->signal_disconnected().insert(connection_list->signal_disconnected().end(), + tr1::bind(&ElementPeerList::receive_peer_disconnected, this, tr1::placeholders::_1)); m_windowList = new display::WindowPeerList(m_download, &m_list, &m_listItr); m_elementInfo = create_info(); @@ -84,8 +88,10 @@ ElementPeerList::ElementPeerList(core::Download* d) : } ElementPeerList::~ElementPeerList() { - m_connPeerConnected.disconnect(); - m_connPeerDisconnected.disconnect(); + torrent::ConnectionList* connection_list = m_download->download()->connection_list(); + + connection_list->signal_connected().erase(m_peer_connected); + connection_list->signal_disconnected().erase(m_peer_disconnected); delete m_windowList; delete m_elementInfo; diff --git a/src/ui/element_peer_list.h b/src/ui/element_peer_list.h index 680d1e39..12f78899 100644 --- a/src/ui/element_peer_list.h +++ b/src/ui/element_peer_list.h @@ -37,6 +37,8 @@ #ifndef RTORRENT_UI_ELEMENT_PEER_LIST_H #define RTORRENT_UI_ELEMENT_PEER_LIST_H +#include + #include "core/download.h" #include "element_base.h" @@ -49,6 +51,8 @@ class ElementPeerList : public ElementBase { public: typedef std::list PList; + typedef torrent::ConnectionList::signal_peer_type::iterator signal_connection; + typedef enum { DISPLAY_LIST, DISPLAY_INFO, @@ -89,8 +93,8 @@ private: PList m_list; PList::iterator m_listItr; - sigc::connection m_connPeerConnected; - sigc::connection m_connPeerDisconnected; + signal_connection m_peer_connected; + signal_connection m_peer_disconnected; }; }