mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-11 04:32:30 +00:00
* Added "key_layout" option with support for azerty.
* Delayed the hash done signal. * Allow quick hash checks that only handles invalid chunks. * Show failed counter for peers. * Updated the man page. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@737 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+46
-9
@@ -199,12 +199,23 @@ Close a torrent and its files.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>I</term>
|
||||
<listitem><para>
|
||||
Toggle whether torrent ignores ratio settings.
|
||||
<varlistentry>
|
||||
<term>U</term>
|
||||
<listitem><para>
|
||||
|
||||
Delete the file the torrent is tied to, and clear the association.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>I</term>
|
||||
<listitem><para>
|
||||
|
||||
Toggle whether torrent ignores ratio settings.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
@@ -246,6 +257,15 @@ Close a torrent and its files.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>u</term>
|
||||
<listitem><para>
|
||||
|
||||
Display transfering blocks.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>i</term>
|
||||
<listitem><para>
|
||||
@@ -569,6 +589,15 @@ Delete <emphasis>id</emphasis> from the scheduler.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>start_tied =</term>
|
||||
<listitem><para>
|
||||
|
||||
Start torrents that are tied to filenames that have been re-added.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>stop_untied =</term>
|
||||
<term>close_untied =</term>
|
||||
@@ -576,8 +605,7 @@ Delete <emphasis>id</emphasis> from the scheduler.
|
||||
<listitem><para>
|
||||
|
||||
Stop, close or remove the torrents that are tied to filenames that
|
||||
have been deleted, the association with the file is then cleared so
|
||||
the event will not trigger more than once.
|
||||
have been deleted. Clear the association with the 'U' key.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
@@ -645,7 +673,7 @@ torrent::input_error exception on bad input.
|
||||
|
||||
|
||||
<refsect1>
|
||||
<title>DISPLAY SETTINGS</title>
|
||||
<title>USER-INTERFACE SETTINGS</title>
|
||||
<para>
|
||||
Display related settings.
|
||||
</para>
|
||||
@@ -700,7 +728,7 @@ number of criteria, including zero, from the following:
|
||||
<listitem><para>
|
||||
|
||||
Set a list of filter to apply when new new downloads are added and
|
||||
when <emphasis>view_sort</emphasis> gets called. All filters must
|
||||
when <emphasis>view_sort</emphasis> is called. All filters must
|
||||
match for the download to be included.
|
||||
|
||||
</para><para>
|
||||
@@ -711,6 +739,15 @@ match for the download to be included.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>key_layout = <replaceable>querty|azerty</replaceable></term>
|
||||
<listitem><para>
|
||||
|
||||
Change the key-bindings.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</refsect1>
|
||||
|
||||
@@ -283,9 +283,11 @@ DownloadList::resume(Download* download) {
|
||||
// 'hashing' was set.
|
||||
if (!download->is_hash_checked()) {
|
||||
// If the hash failed flag wasn't cleared then hashing won't be
|
||||
// initiated. The check here is just for convenience so the hash
|
||||
// queue doesn't need to check it.
|
||||
if (!download->is_hash_failed() && download->variable()->get_value("hashing") == Download::variable_hashing_stopped)
|
||||
// initiated.
|
||||
if (download->is_hash_failed())
|
||||
return;
|
||||
|
||||
if (download->variable()->get_value("hashing") == Download::variable_hashing_stopped)
|
||||
download->variable()->set("hashing", Download::variable_hashing_initial);
|
||||
|
||||
std::for_each(slot_map_hash_queued().begin(), slot_map_hash_queued().end(), download_list_call(download));
|
||||
|
||||
+42
-7
@@ -384,12 +384,48 @@ Manager::try_create_download_expand(const std::string& uri, bool start, bool pri
|
||||
// hashing view and starts hashing if nessesary.
|
||||
void
|
||||
Manager::receive_hashing_changed() {
|
||||
if (m_hashingView->empty_visible() ||
|
||||
std::find_if(m_hashingView->begin_visible(), m_hashingView->end_visible(), std::mem_fun(&Download::is_hash_checking)) != m_hashingView->end_visible())
|
||||
bool foundHashing = false;
|
||||
|
||||
// Try quick hashing all those with hashing == initial, set them to
|
||||
// something else when failed.
|
||||
for (View::iterator itr = m_hashingView->begin_visible(), last = m_hashingView->end_visible(); itr != last; ++itr)
|
||||
try {
|
||||
|
||||
if ((*itr)->is_hash_checking()) {
|
||||
foundHashing = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((*itr)->is_hash_checked())
|
||||
throw torrent::client_error("core::Manager::receive_hashing_changed() hash already checked or checking.");
|
||||
|
||||
if ((*itr)->is_hash_failed() || (*itr)->variable()->get_value("hashing") != Download::variable_hashing_initial)
|
||||
continue;
|
||||
|
||||
m_downloadList->open_throw(*itr);
|
||||
torrent::resume_load_progress(*(*itr)->download(), (*itr)->download()->bencode()->get_key("libtorrent_resume"));
|
||||
|
||||
if ((*itr)->download()->hash_check(true)) {
|
||||
// Set this to exit the function so that the delayed hash done
|
||||
// signal gets triggered before we try any real hashing.
|
||||
foundHashing = true;
|
||||
|
||||
} else {
|
||||
// Temporary hack.
|
||||
(*itr)->download()->hash_stop();
|
||||
}
|
||||
|
||||
(*itr)->variable()->set_value("hashing", Download::variable_hashing_rehash);
|
||||
|
||||
} catch (torrent::local_error& e) {
|
||||
(*itr)->set_hash_failed(true);
|
||||
push_log(e.what());
|
||||
}
|
||||
|
||||
if (foundHashing)
|
||||
return;
|
||||
|
||||
for (View::iterator itr = m_hashingView->begin_visible(), last = m_hashingView->end_visible(); itr != last; ++itr) {
|
||||
|
||||
for (View::iterator itr = m_hashingView->begin_visible(), last = m_hashingView->end_visible(); itr != last; ++itr)
|
||||
try {
|
||||
|
||||
if ((*itr)->is_hash_checked() || (*itr)->is_hash_checking())
|
||||
@@ -399,9 +435,9 @@ Manager::receive_hashing_changed() {
|
||||
continue;
|
||||
|
||||
m_downloadList->open_throw(*itr);
|
||||
|
||||
torrent::resume_load_progress(*(*itr)->download(), (*itr)->download()->bencode()->get_key("libtorrent_resume"));
|
||||
(*itr)->download()->hash_check();
|
||||
|
||||
(*itr)->download()->hash_check(false);
|
||||
|
||||
return;
|
||||
|
||||
@@ -409,7 +445,6 @@ Manager::receive_hashing_changed() {
|
||||
(*itr)->set_hash_failed(true);
|
||||
push_log(e.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ struct client_info_equal {
|
||||
bool operator () (const ClientInfo::value_type& v) const {
|
||||
for (ClientInfo::size_type i = 0; i < m_size; ++i)
|
||||
if (v.first[i] != m_key[i])
|
||||
return false;
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -65,16 +65,18 @@ ClientInfo::ClientInfo() {
|
||||
m_containers[TYPE_AZUREUS].reserve(30);
|
||||
|
||||
insert(TYPE_AZUREUS, "AZ", "Azureus");
|
||||
insert(TYPE_AZUREUS, "BB", "BitBuddy");
|
||||
insert(TYPE_AZUREUS, "BC", "BitComet");
|
||||
insert(TYPE_AZUREUS, "UT", "uTorrent");
|
||||
insert(TYPE_AZUREUS, "lt", "libTorrent");
|
||||
insert(TYPE_AZUREUS, "BB", "BitBuddy");
|
||||
insert(TYPE_AZUREUS, "CT", "CTorrent");
|
||||
insert(TYPE_AZUREUS, "MT", "MoonlightTorrent");
|
||||
insert(TYPE_AZUREUS, "LT", "libtorrent");
|
||||
insert(TYPE_AZUREUS, "KT", "KTorrent");
|
||||
insert(TYPE_AZUREUS, "BX", "Bittorrent X");
|
||||
insert(TYPE_AZUREUS, "TS", "Torrentstorm");
|
||||
insert(TYPE_AZUREUS, "TN", "TorrentDotNET");
|
||||
insert(TYPE_AZUREUS, "TR", "Transmission");
|
||||
insert(TYPE_AZUREUS, "SS", "SwarmScope");
|
||||
insert(TYPE_AZUREUS, "XT", "XanTorrent");
|
||||
insert(TYPE_AZUREUS, "BS", "BTSlave");
|
||||
|
||||
@@ -74,7 +74,8 @@ WindowPeerList::redraw() {
|
||||
m_canvas->print(x, y, "QS"); x += 6;
|
||||
m_canvas->print(x, y, "DONE"); x += 6;
|
||||
m_canvas->print(x, y, "REQ"); x += 6;
|
||||
m_canvas->print(x, y, "SNUB");
|
||||
m_canvas->print(x, y, "SNUB"); x += 6;
|
||||
m_canvas->print(x, y, "FAILED");
|
||||
|
||||
++y;
|
||||
|
||||
@@ -129,7 +130,12 @@ WindowPeerList::redraw() {
|
||||
if (p.is_snubbed())
|
||||
m_canvas->print(x, y, "*");
|
||||
|
||||
x += 5;
|
||||
x += 6;
|
||||
|
||||
if (p.failed_counter() != 0)
|
||||
m_canvas->print(x, y, "%u", p.failed_counter());
|
||||
|
||||
x += 7;
|
||||
|
||||
char buf[128];
|
||||
control->client_info()->print(buf, buf + 128, p.id().c_str());
|
||||
|
||||
@@ -468,6 +468,8 @@ initialize_option_handler(Control* c) {
|
||||
variables->insert("view_sort_new", new utils::VariableStringSlot(rak::value_fn(std::string()), rak::bind_ptr_fn(&apply_view_sort_new, c)));
|
||||
variables->insert("view_sort_current", new utils::VariableStringSlot(rak::value_fn(std::string()), rak::bind_ptr_fn(&apply_view_sort_current, c)));
|
||||
|
||||
variables->insert("key_layout", new utils::VariableAny(std::string("qwerty")));
|
||||
|
||||
variables->insert("schedule", new utils::VariableStringSlot(rak::value_fn(std::string()), rak::mem_fn(c->command_scheduler(), &CommandScheduler::parse)));
|
||||
variables->insert("schedule_remove", new utils::VariableStringSlot(rak::value_fn(std::string()),
|
||||
rak::mem_fn<const std::string&>(c->command_scheduler(), &CommandScheduler::erase)));
|
||||
|
||||
+18
-7
@@ -37,11 +37,13 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <stdexcept>
|
||||
#include <string.h>
|
||||
#include <sigc++/bind.h>
|
||||
#include <torrent/torrent.h>
|
||||
|
||||
#include "display/window_statusbar.h"
|
||||
#include "input/manager.h"
|
||||
#include "utils/variable_map.h"
|
||||
|
||||
#include "control.h"
|
||||
#include "download_list.h"
|
||||
@@ -94,17 +96,26 @@ void
|
||||
Root::setup_keys() {
|
||||
m_control->input()->push_back(&m_bindings);
|
||||
|
||||
m_bindings['a'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 1);
|
||||
m_bindings['z'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -1);
|
||||
if (strcasecmp(control->variable()->get_string("key_layout").c_str(), "azerty") == 0) {
|
||||
m_bindings['q'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 1);
|
||||
m_bindings['w'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -1);
|
||||
m_bindings['Q'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 1);
|
||||
m_bindings['W'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -1);
|
||||
|
||||
} else {
|
||||
m_bindings['a'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 1);
|
||||
m_bindings['z'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -1);
|
||||
m_bindings['A'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 1);
|
||||
m_bindings['Z'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -1);
|
||||
}
|
||||
|
||||
m_bindings['s'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 5);
|
||||
m_bindings['x'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -5);
|
||||
m_bindings['d'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 50);
|
||||
m_bindings['c'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -50);
|
||||
|
||||
m_bindings['A'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 1);
|
||||
m_bindings['Z'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -1);
|
||||
m_bindings['S'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 5);
|
||||
m_bindings['X'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -5);
|
||||
|
||||
m_bindings['d'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), 50);
|
||||
m_bindings['c'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_up_throttle), -50);
|
||||
m_bindings['D'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 50);
|
||||
m_bindings['C'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -50);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user