ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-FCP/eg/f7progress
Revision: 1.2
Committed: Sat Jun 5 14:49:57 2010 UTC (13 years, 11 months ago) by root
Branch: MAIN
CVS Tags: rel-0_4, rel-0_5, HEAD
Changes since 1.1: +1 -2 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/opt/bin/perl
2
3 # displays, via curses, progress messages by downloaded file
4
5 use common::sense;
6 use POSIX ();
7 use Curses;
8 use AnyEvent;
9 use AnyEvent::FCP;
10
11 my $cnt = 20;
12 my $log = 15;
13
14 initscr;
15 curs_set 0;
16
17 addstr 0, 0, "waiting for progress messages...";
18 refresh;
19
20 my %ID;
21 my $updater;
22 my @log;
23
24 sub updater {
25 undef $updater;
26
27 erase;
28
29 my @id = sort { $b->[1] <=> $a->[1] } values %ID;
30
31 delete $ID{(pop @id)->[0]}
32 while @id > $cnt;
33
34 my $y = 0;
35 for (@id) {
36 addstr $y++, 0, sprintf "%s %5d", $_->[2], AE::now - $_->[1];
37 }
38
39 $y++;
40
41 shift @log
42 while @log > $log;
43
44 addstr $y++, 0, $_
45 for @log;
46
47 refresh;
48 }
49
50 my $w = AE::timer 10, 10, \&updater;
51
52 my $fcp = new AnyEvent::FCP progress => sub {
53 my ($fcp, $type, $kv, $rdata) = @_;
54
55 delete $kv->{pkt_type};
56 (my $id = delete $kv->{identifier}) =~ s/^FProxy://;
57
58 if ($type eq "simple_progress") {
59 my $progress = sprintf "%5d / %5d, %3d%%", $kv->{succeeded}, $kv->{required}, 100 * $kv->{succeeded} / $kv->{required};
60 $progress = $kv->{finalized_total} eq "true" ? " $progress " : "($progress)";
61 my $progress = sprintf "%-60.60s %s", $id, $progress;
62 $ID{$id} = [$id, AE::now, $progress];
63
64 $updater ||= AE::idle \&updater;
65 } elsif ($type !~ /^(?:sending_to_network|persistent_get|persistent_request_modified)$/) {
66 my $line = sprintf "%s %-25.25s %-40.40s %-80.80s",
67 (POSIX::strftime "%H:%M:%S", localtime AE::now),
68 $type, $id, join " ", %$kv;
69 push @log, $line;
70 $updater ||= AE::idle \&updater;
71 }
72 };
73
74 $fcp->watch_global (1, 0);
75
76 AE::cv->recv;