X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=xmlrtorrent.pm;h=a33919ff539b32ff4e4d3600be7c11ac905faa77;hb=ba42ec7d8992f8baea148b4241964eeba3d7d3b7;hp=b1c41b90de7f3feb03cc3fad100b55bc5d80d133;hpb=6cfd0a2c87ccb3ce8f49f1b122b1eab7ab3bc1b8;p=xmlrtorrent.git diff --git a/xmlrtorrent.pm b/xmlrtorrent.pm index b1c41b9..a33919f 100644 --- a/xmlrtorrent.pm +++ b/xmlrtorrent.pm @@ -1,33 +1,51 @@ package xmlrtorrent; use strict; -use RPC::XML; -use RPC::XML::Client; use Data::Dumper; sub new { my $class = shift; my $self = {@_}; - unless(exists($self->{'XMLURL'}) and defined($self->{'XMLURL'})) { - return undef; - } + return bless($self, $class); +} - $self->{'__RPCClient'} = RPC::XML::Client->new($self->{'XMLURL'}); - if ((exists($self->{'USERNAME'}) and exists($self->{'PASSWORD'})) and - ($self->{'USERNAME'} ne '')) { - $self->{'__RPCClient'}->credentials('', $self->{'USERNAME'}, $self->{'PASSWORD'}); +# This is shamelessly stolen from pythons urlgrabber +sub _format_number { + my $number = shift; + my $SI = shift || 0; + my @symbols = ('', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'); + my $step = $SI?1000:1024; + my $thresh = 999; + my $depth = 0; + my $max_depth = $#symbols; + my $format; + + while (($number > $thresh) and ($depth < $max_depth)) { + $depth += 1; + $number /= $step; } - return bless($self, $class); + if ($number =~ /^[+-]?\d+$/) { + # Integer. + $format = '%i%s'; + } elsif ($number < 9.95) { + $format = '%.1f%s'; + } else { + $format = '%.0f%s'; + } + return sprintf($format, $number, $symbols[$depth]); } -sub load_start{ + + +sub load_start { my $self = shift; + my $talker = shift; my $URL = shift; my $res; - $res = $self->{'__RPCClient'}->send_request('load_start', $URL); + $res = $talker->send_request('load_start', $URL); unless(ref($res)) { $self->{'__ERROR'} = $res; return undef @@ -43,9 +61,10 @@ sub load_start{ sub download_list { my $self = shift; + my $talker = shift; my $res; - $res = $self->{'__RPCClient'}->send_request('d.multicall', '', + $res = $talker->send_request('d.multicall', '', 'd.get_name=', 'd.get_size_bytes=', 'd.get_bytes_done=', @@ -62,7 +81,20 @@ sub download_list { return undef; } - return $res->value(); + my @ret = (); + foreach (@{$res->value()}) { + push @ret, + { + 'NAME' => $_->[0]->value(), + 'SIZE_BYTES' => _format_number($_->[1]->value()), + 'BYTES_DONE' => _format_number($_->[2]->value()), + 'UP_RATE' => _format_number($_->[3]->value()), + 'DOWN_RATE' => _format_number($_->[4]->value()), + 'ACTIVE' => $_->[5]->value(), + }; + } + + return \@ret; } sub errstr {