* Replaced the old TrackerList API with the cleaned up

TrackerContainer code.


git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1005 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
rakshasa
2007-11-08 16:33:51 +00:00
parent 4a2ae4d339
commit 04e6575e5d
9 changed files with 33 additions and 42 deletions
+9 -9
View File
@@ -280,7 +280,7 @@ t_multicall(core::Download* download, const torrent::Object& rawArgs) {
for (torrent::Object::list_const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) {
const std::string& cmd = cItr->as_string();
torrent::Tracker* t = download->tracker_list()->get(itr);
torrent::Tracker* t = download->tracker_list()->at(itr);
row.push_back(rpc::parse_command(rpc::make_target(t), cmd.c_str(), cmd.c_str() + cmd.size()).first);
}
@@ -477,14 +477,14 @@ initialize_command_download() {
ADD_CD_VALUE_UNI("chunk_size", rak::on(std::mem_fun(&core::Download::file_list), std::mem_fun(&torrent::FileList::chunk_size)));
ADD_CD_VALUE_MEM_BI("tracker_numwant", &core::Download::tracker_list, &torrent::TrackerList::set_numwant, &torrent::TrackerList::numwant);
ADD_CD_VALUE_UNI("tracker_focus", rak::on(std::mem_fun(&core::Download::tracker_list), std::mem_fun(&torrent::TrackerList::focus)));
ADD_CD_VALUE_UNI("tracker_size", rak::on(std::mem_fun(&core::Download::tracker_list), std::mem_fun(&torrent::TrackerList::size)));
ADD_CD_VALUE_MEM_BI("tracker_numwant", &core::Download::tracker_list, &torrent::TrackerList::set_numwant, &torrent::TrackerList::numwant);
ADD_CD_VALUE_UNI("tracker_focus", rak::on(std::mem_fun(&core::Download::tracker_list), std::mem_fun(&torrent::TrackerList::focus_index)));
ADD_CD_VALUE_UNI("tracker_size", std::mem_fun(&core::Download::tracker_list_size));
ADD_CD_STRING_BI("directory", std::mem_fun(&core::Download::set_root_directory), rak::on(std::mem_fun(&core::Download::file_list), std::mem_fun(&torrent::FileList::root_dir)));
ADD_CD_VALUE_BI("priority", std::mem_fun(&core::Download::set_priority), std::mem_fun(&core::Download::priority));
ADD_CD_STRING_UNI("priority_str", std::ptr_fun(&retrieve_d_priority_str));
ADD_CD_STRING_BI("directory", std::mem_fun(&core::Download::set_root_directory), rak::on(std::mem_fun(&core::Download::file_list), std::mem_fun(&torrent::FileList::root_dir)));
ADD_CD_VALUE_BI("priority", std::mem_fun(&core::Download::set_priority), std::mem_fun(&core::Download::priority));
ADD_CD_STRING_UNI("priority_str", std::ptr_fun(&retrieve_d_priority_str));
ADD_CD_SLOT_PUBLIC("f.multicall", call_list, rak::ptr_fn(&f_multicall), "i:", "")
ADD_CD_SLOT_PUBLIC("t.multicall", call_list, rak::ptr_fn(&t_multicall), "i:", "")
ADD_CD_SLOT_PUBLIC("f.multicall", call_list, rak::ptr_fn(&f_multicall), "i:", "")
ADD_CD_SLOT_PUBLIC("t.multicall", call_list, rak::ptr_fn(&t_multicall), "i:", "")
}
+3 -8
View File
@@ -122,13 +122,8 @@ void apply_encoding_list(const std::string& arg) { torrent::encoding_list()->pus
void
apply_enable_trackers(int64_t arg) {
for (core::Manager::DListItr itr = control->core()->download_list()->begin(), last = control->core()->download_list()->end(); itr != last; ++itr) {
torrent::TrackerList tl = (*itr)->download()->tracker_list();
for (int i = 0, last = tl.size(); i < last; ++i)
if (arg)
tl.get(i)->enable();
else
tl.get(i)->disable();
std::for_each((*itr)->tracker_list()->begin(), (*itr)->tracker_list()->end(),
arg ? std::mem_fun(&torrent::Tracker::enable) : std::mem_fun(&torrent::Tracker::disable));
if (arg && !rpc::call_command_value("get_use_udp_trackers"))
(*itr)->enable_udp_trackers(false);
@@ -149,7 +144,7 @@ xmlrpc_find_tracker(core::Download* download, uint32_t index) {
if (index >= download->tracker_list()->size())
return NULL;
return download->tracker_list()->get(index);
return download->tracker_list()->at(index);
}
void
+4 -8
View File
@@ -58,8 +58,6 @@ namespace core {
Download::Download(download_type d) :
m_download(d),
m_trackerList(d.tracker_list()),
m_hashFailed(false),
m_chunksFailed(0),
@@ -85,14 +83,12 @@ Download::~Download() {
void
Download::enable_udp_trackers(bool state) {
torrent::TrackerList tl = m_download.tracker_list();
for (int i = 0, last = tl.size(); i < last; ++i)
if (tl.get(i)->type() == torrent::Tracker::TRACKER_UDP)
for (torrent::TrackerList::iterator itr = m_download.tracker_list()->begin(), last = m_download.tracker_list()->end(); itr != last; ++itr)
if ((*itr)->type() == torrent::Tracker::TRACKER_UDP)
if (state)
tl.get(i)->enable();
(*itr)->enable();
else
tl.get(i)->disable();
(*itr)->disable();
}
uint32_t
+2 -2
View File
@@ -88,7 +88,8 @@ public:
const file_list_type* c_file_list() const { return m_download.file_list(); }
torrent::Object* bencode() { return m_download.bencode(); }
tracker_list_type* tracker_list() { return &m_trackerList; }
tracker_list_type* tracker_list() { return m_download.tracker_list(); }
uint32_t tracker_list_size() const { return m_download.tracker_list()->size(); }
const std::string& message() const { return m_message; }
void set_message(const std::string& msg) { m_message = msg; }
@@ -120,7 +121,6 @@ private:
// Store the FileList instance so we can use slots etc on it.
download_type m_download;
tracker_list_type m_trackerList;
bool m_hashFailed;
+2 -2
View File
@@ -269,7 +269,7 @@ DownloadList::close_quick(Download* download) {
// handled by some parameter to the close function, or some other
// way of giving the client more control of when STOPPED requests
// are sent.
download->download()->tracker_list().manual_cancel();
download->download()->tracker_list()->manual_cancel();
}
void
@@ -607,7 +607,7 @@ DownloadList::confirm_finished(Download* download) {
// Send the completed request before resuming so we don't reset the
// up/downloaded baseline.
download->download()->tracker_list().send_completed();
download->download()->tracker_list()->send_completed();
std::for_each(slot_map_finished().begin(), slot_map_finished().end(), download_list_call(download));
+2 -2
View File
@@ -188,11 +188,11 @@ print_download_status(char* first, char* last, core::Download* d) {
first = print_buffer(first, last, "Checking hash [%2i%%]",
(d->download()->chunks_hashed() * 100) / d->download()->file_list()->size_chunks());
} else if (d->tracker_list()->is_busy() && d->tracker_list()->focus() < d->tracker_list()->size()) {
} else if (d->tracker_list()->has_active() && d->tracker_list()->focus() < d->tracker_list()->end()) {
torrent::TrackerList* tl = d->tracker_list();
first = print_buffer(first, last, "Tracker[%i:%i]: Connecting to %s",
tl->get(tl->focus())->group(), tl->focus(), tl->get(tl->focus())->url().c_str());
(*tl->focus())->group(), tl->focus_index(), (*tl->focus())->url().c_str());
} else if (!d->message().empty()) {
first = print_buffer(first, last, "%s", d->message().c_str());
+2 -2
View File
@@ -83,8 +83,8 @@ WindowDownloadStatusbar::redraw() {
position = print_download_status(buffer, last, m_download);
m_canvas->print(0, 2, "[%c:%i] %s",
m_download->tracker_list()->is_busy() ? 'C' : ' ',
(int)(m_download->download()->tracker_list().timeout() / 1000000),
m_download->tracker_list()->has_active() ? 'C' : ' ',
(int)(m_download->download()->tracker_list()->time_next_connection()),
buffer);
}
+2 -2
View File
@@ -75,7 +75,7 @@ WindowTrackerList::redraw() {
Range range = rak::advance_bidirectional<unsigned int>(0, *m_focus, tl->size(), (m_canvas->height() + 1) / 2);
while (range.first != range.second) {
torrent::Tracker* tracker = tl->get(range.first);
torrent::Tracker* tracker = tl->at(range.first);
// m_canvas->print(0, pos, "[%c] [S/L %5i/%5i] %s",
// tracker->is_enabled() ? (tracker->is_open() ? '*' : ' ') : '-',
@@ -90,7 +90,7 @@ WindowTrackerList::redraw() {
m_canvas->print(4, pos++, "Id: %s Focus: %s Enabled: %s Open: %s S/L: %u/%u",
rak::copy_escape_html(tracker->tracker_id()).c_str(),
range.first == tl->focus() ? "yes" : " no",
range.first == tl->focus_index() ? "yes" : " no",
tracker->is_enabled() ? "yes" : " no",
tracker->is_busy() ? "yes" : " no",
tracker->scrape_complete(),
+7 -7
View File
@@ -103,7 +103,7 @@ ElementTrackerList::receive_disable() {
if (m_window == NULL)
throw torrent::internal_error("ui::ElementTrackerList::receive_disable(...) called on a disabled object");
torrent::Tracker* t = m_download->download()->tracker_list().get(m_focus);
torrent::Tracker* t = m_download->download()->tracker_list()->at(m_focus);
if (t->is_enabled())
t->disable();
@@ -118,7 +118,7 @@ ElementTrackerList::receive_next() {
if (m_window == NULL)
throw torrent::internal_error("ui::ElementTrackerList::receive_next(...) called on a disabled object");
if (++m_focus >= m_download->download()->tracker_list().size())
if (++m_focus >= m_download->download()->tracker_list()->size())
m_focus = 0;
m_window->mark_dirty();
@@ -129,13 +129,13 @@ ElementTrackerList::receive_prev() {
if (m_window == NULL)
throw torrent::internal_error("ui::ElementTrackerList::receive_prev(...) called on a disabled object");
if (m_download->download()->tracker_list().size() == 0)
if (m_download->download()->tracker_list()->size() == 0)
return;
if (m_focus != 0)
--m_focus;
else
m_focus = m_download->download()->tracker_list().size() - 1;
m_focus = m_download->download()->tracker_list()->size() - 1;
m_window->mark_dirty();
}
@@ -145,12 +145,12 @@ ElementTrackerList::receive_cycle_group() {
if (m_window == NULL)
throw torrent::internal_error("ui::ElementTrackerList::receive_group_cycle(...) called on a disabled object");
torrent::TrackerList tl = m_download->download()->tracker_list();
torrent::TrackerList* tl = m_download->tracker_list();
if (m_focus >= tl.size())
if (m_focus >= tl->size())
throw torrent::internal_error("ui::ElementTrackerList::receive_group_cycle(...) called with an invalid focus");
tl.cycle_group(tl.get(m_focus)->group());
tl->cycle_group(tl->at(m_focus)->group());
m_window->mark_dirty();
}