mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-13 20:56:17 +00:00
* Partial implementation of better detection and handling of deleted
files in a torrent. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1017 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
@@ -452,6 +452,7 @@ initialize_command_download() {
|
|||||||
// value, it indicates the last time the torrent changed its state,
|
// value, it indicates the last time the torrent changed its state,
|
||||||
// resume/pause.
|
// resume/pause.
|
||||||
ADD_CD_VARIABLE_VALUE("state_changed", "rtorrent", "state_changed");
|
ADD_CD_VARIABLE_VALUE("state_changed", "rtorrent", "state_changed");
|
||||||
|
ADD_CD_VARIABLE_VALUE("state_counter", "rtorrent", "state_counter");
|
||||||
ADD_CD_VARIABLE_VALUE_PUBLIC("ignore_commands", "rtorrent", "ignore_commands");
|
ADD_CD_VARIABLE_VALUE_PUBLIC("ignore_commands", "rtorrent", "ignore_commands");
|
||||||
|
|
||||||
ADD_CD_STRING_BI("connection_current", std::ptr_fun(&apply_d_connection_type), std::ptr_fun(&retrieve_d_connection_type));
|
ADD_CD_STRING_BI("connection_current", std::ptr_fun(&apply_d_connection_type), std::ptr_fun(&retrieve_d_connection_type));
|
||||||
|
|||||||
@@ -310,10 +310,13 @@ DownloadFactory::initialize_rtorrent(Download* download, torrent::Object* rtorre
|
|||||||
if (!rtorrent->has_key_value("state") || rtorrent->get_key_value("state") > 1) {
|
if (!rtorrent->has_key_value("state") || rtorrent->get_key_value("state") > 1) {
|
||||||
rtorrent->insert_key("state", (int64_t)m_start);
|
rtorrent->insert_key("state", (int64_t)m_start);
|
||||||
rtorrent->insert_key("state_changed", cachedTime.seconds());
|
rtorrent->insert_key("state_changed", cachedTime.seconds());
|
||||||
|
rtorrent->insert_key("state_counter", int64_t());
|
||||||
|
|
||||||
} else if (!rtorrent->has_key_value("state_changed") ||
|
} else if (!rtorrent->has_key_value("state_changed") ||
|
||||||
rtorrent->get_key_value("state_changed") > cachedTime.seconds() || rtorrent->get_key_value("state_changed") == 0) {
|
rtorrent->get_key_value("state_changed") > cachedTime.seconds() || rtorrent->get_key_value("state_changed") == 0 ||
|
||||||
|
!rtorrent->has_key_value("state_counter") || (uint64_t)rtorrent->get_key_value("state_counter") > (1 << 20)) {
|
||||||
rtorrent->insert_key("state_changed", cachedTime.seconds());
|
rtorrent->insert_key("state_changed", cachedTime.seconds());
|
||||||
|
rtorrent->insert_key("state_counter", int64_t());
|
||||||
}
|
}
|
||||||
|
|
||||||
rtorrent->insert_preserve_value("complete", 0);
|
rtorrent->insert_preserve_value("complete", 0);
|
||||||
|
|||||||
@@ -221,8 +221,7 @@ DownloadList::open_throw(Download* download) {
|
|||||||
if (download->download()->is_open())
|
if (download->download()->is_open())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// download->download()->open(torrent::Download::open_no_create);
|
download->download()->open(download->resume_flags());
|
||||||
download->download()->open(0);
|
|
||||||
|
|
||||||
std::for_each(slot_map_open().begin(), slot_map_open().end(), download_list_call(download));
|
std::for_each(slot_map_open().begin(), slot_map_open().end(), download_list_call(download));
|
||||||
}
|
}
|
||||||
@@ -395,6 +394,7 @@ DownloadList::resume(Download* download, int flags) {
|
|||||||
// open_throw(download);
|
// open_throw(download);
|
||||||
|
|
||||||
rpc::call_command("d.set_state_changed", cachedTime.seconds(), rpc::make_target(download));
|
rpc::call_command("d.set_state_changed", cachedTime.seconds(), rpc::make_target(download));
|
||||||
|
rpc::call_command("d.set_state_counter", rpc::call_command_value("d.get_state_counter", rpc::make_target(download)) + 1, rpc::make_target(download));
|
||||||
|
|
||||||
if (download->is_done()) {
|
if (download->is_done()) {
|
||||||
rpc::call_command("d.set_connection_current", rpc::call_command_void("d.get_connection_seed", rpc::make_target(download)), rpc::make_target(download));
|
rpc::call_command("d.set_connection_current", rpc::call_command_void("d.get_connection_seed", rpc::make_target(download)), rpc::make_target(download));
|
||||||
@@ -452,6 +452,7 @@ DownloadList::pause(Download* download, int flags) {
|
|||||||
std::for_each(slot_map_stop().begin(), slot_map_stop().end(), download_list_call(download));
|
std::for_each(slot_map_stop().begin(), slot_map_stop().end(), download_list_call(download));
|
||||||
|
|
||||||
rpc::call_command("d.set_state_changed", cachedTime.seconds(), rpc::make_target(download));
|
rpc::call_command("d.set_state_changed", cachedTime.seconds(), rpc::make_target(download));
|
||||||
|
rpc::call_command("d.set_state_counter", rpc::call_command_value("d.get_state_counter", rpc::make_target(download)), rpc::make_target(download));
|
||||||
|
|
||||||
// Save the state after all the slots, etc have been called so we
|
// Save the state after all the slots, etc have been called so we
|
||||||
// include the modifications they may make.
|
// include the modifications they may make.
|
||||||
@@ -522,7 +523,7 @@ DownloadList::hash_done(Download* download) {
|
|||||||
torrent::resume_save_progress(*download->download(), download->download()->bencode()->get_key("libtorrent_resume"));
|
torrent::resume_save_progress(*download->download(), download->download()->bencode()->get_key("libtorrent_resume"));
|
||||||
|
|
||||||
if (rpc::call_command_value("d.get_state", rpc::make_target(download)) == 1)
|
if (rpc::call_command_value("d.get_state", rpc::make_target(download)) == 1)
|
||||||
resume(download);
|
resume(download, download->resume_flags());
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -623,7 +624,7 @@ DownloadList::confirm_finished(Download* download) {
|
|||||||
throw torrent::internal_error("DownloadList::confirm_finished(...) download->resume_flags() != ~uint32_t().");
|
throw torrent::internal_error("DownloadList::confirm_finished(...) download->resume_flags() != ~uint32_t().");
|
||||||
|
|
||||||
if (!download->is_active() && rpc::call_command_value("d.get_state", rpc::make_target(download)) == 1)
|
if (!download->is_active() && rpc::call_command_value("d.get_state", rpc::make_target(download)) == 1)
|
||||||
resume(download, torrent::Download::start_skip_tracker | torrent::Download::start_keep_baseline);
|
resume(download, torrent::Download::start_no_create | torrent::Download::start_skip_tracker | torrent::Download::start_keep_baseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user