refactor download_list
[xmlrtorrent.git] / xmlrtorrent.pm
index d50d5ac..12ec405 100644 (file)
@@ -10,6 +10,35 @@ sub new {
     return bless($self, $class);
 }
 
+# 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;
+    }
+
+    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 {
     my $self = shift;
     my $talker = shift;
@@ -52,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_RATES' => _format_number($_->[4]->value()),
+           'ACTIVE'     => $_->[5]->value(),
+       };
+    }
+
+    return \@ret;
 }
 
 sub errstr {