client test update

This commit is contained in:
Arvid Norberg 2008-05-07 09:28:49 +00:00
parent 73ef60e5fa
commit 4f859ba778
1 changed files with 50 additions and 39 deletions

View File

@ -167,6 +167,8 @@ bool print_peer_rate = false;
bool print_fails = false; bool print_fails = false;
bool print_send_bufs = true; bool print_send_bufs = true;
int active_torrent = 0;
char const* esc(char const* code) char const* esc(char const* code)
{ {
#ifdef ANSI_TERMINAL_COLORS #ifdef ANSI_TERMINAL_COLORS
@ -217,38 +219,6 @@ std::string& to_string(float v, int width, int precision = 3)
return ret; return ret;
} }
std::string pos_to_string(float v, int width, int precision = 4)
{
std::stringstream s;
s.precision(precision);
s.flags(std::ios_base::right);
s.width(width);
s.fill(' ');
s << fabs(v);
return s.str();
}
std::string ratio(float a, float b)
{
std::stringstream s;
if (a > b)
{
if (b < 0.001f) s << " inf:1";
else s << pos_to_string(a/b, 4) << ":1";
}
else if (a < b)
{
if (a < 0.001f) s << " 1:inf";
else s << "1:" << pos_to_string(b/a, 4);
}
else
{
s << " 1:1";
}
return s.str();
}
std::string const& add_suffix(float val) std::string const& add_suffix(float val)
{ {
const char* prefix[] = {"kB", "MB", "GB", "TB"}; const char* prefix[] = {"kB", "MB", "GB", "TB"};
@ -992,8 +962,36 @@ int main(int ac, char* av[])
for (;;) for (;;)
{ {
char c; char c;
if (sleep_and_input(&c)) while (sleep_and_input(&c))
{ {
if (c == 27)
{
// escape code, read another character
#ifdef _WIN32
c = _getch();
#else
c = getc(stdin);
#endif
if (c != '[') break;
#ifdef _WIN32
c = _getch();
#else
c = getc(stdin);
#endif
if (c == 65)
{
// arrow up
--active_torrent;
if (active_torrent < 0) active_torrent = 0;
}
else if (c == 66)
{
// arrow down
++active_torrent;
if (active_torrent >= handles.size()) active_torrent = handles.size() - 1;
}
}
if (c == 'm') if (c == 'm')
{ {
std::cout << "saving peers for torrents" << std::endl; std::cout << "saving peers for torrents" << std::endl;
@ -1113,6 +1111,7 @@ int main(int ac, char* av[])
if (c == '6') print_fails = !print_fails; if (c == '6') print_fails = !print_fails;
if (c == '7') print_send_bufs = !print_send_bufs; if (c == '7') print_send_bufs = !print_send_bufs;
} }
if (c == 'q') break;
int terminal_width = 80; int terminal_width = 80;
@ -1202,9 +1201,11 @@ int main(int ac, char* av[])
session_status sess_stat = ses.status(); session_status sess_stat = ses.status();
int torrent_index = 0;
torrent_handle active_handle;
std::stringstream out; std::stringstream out;
for (handles_t::iterator i = handles.begin(); for (handles_t::iterator i = handles.begin();
i != handles.end();) i != handles.end(); ++torrent_index)
{ {
torrent_handle& h = i->second; torrent_handle& h = i->second;
if (!h.is_valid()) if (!h.is_valid())
@ -1217,7 +1218,8 @@ int main(int ac, char* av[])
++i; ++i;
} }
out << "- "; if (active_torrent == torrent_index) out << esc("7") << "* ";
else out << "- ";
if (h.is_paused()) out << esc("34"); if (h.is_paused()) out << esc("34");
else out << esc("37"); else out << esc("37");
out << std::setw(40) << std::setiosflags(std::ios::left); out << std::setw(40) << std::setiosflags(std::ios::left);
@ -1243,10 +1245,6 @@ int main(int ac, char* av[])
out << state_str[s.state]; out << state_str[s.state];
} }
if ((print_downloads && s.state != torrent_status::seeding)
|| print_peers)
h.get_peer_info(peers);
int seeds = 0; int seeds = 0;
int downloaders = 0; int downloaders = 0;
@ -1302,6 +1300,19 @@ int main(int ac, char* av[])
out << "tracker: " << esc("36") << s.current_tracker << esc("0") << "\n"; out << "tracker: " << esc("36") << s.current_tracker << esc("0") << "\n";
} }
if (torrent_index != active_torrent) continue;
active_handle = h;
}
if (active_handle.is_valid())
{
torrent_handle h = active_handle;
torrent_status s = h.status();
if ((print_downloads && s.state != torrent_status::seeding)
|| print_peers)
h.get_peer_info(peers);
if (print_peers && !peers.empty()) if (print_peers && !peers.empty())
print_peer_info(out, peers); print_peer_info(out, peers);