- Reindent
[xmlrtorrent.git] / xmlrtorrent.pm
index b1c41b9..a33919f 100644 (file)
@@ -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 {