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'}) && defined($self->{'XMLURL'})) {
- return undef;
- }
+ return bless($self, $class);
+}
- $self->{'__RPCClient'} = RPC::XML::Client->new($self->{'XMLURL'});
+# 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
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=',
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_RATES' => _format_number($_->[4]->value()),
+ 'ACTIVE' => $_->[5]->value(),
+ };
+ }
+
+ return \@ret;
}
sub errstr {