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 (14 years 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

# User Rev Content
1 root 1.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 root 1.2 my $fcp = new AnyEvent::FCP progress => sub {
53 root 1.1 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;