use Data::Dumper;
use File::Spec;
use List::Util qw(max);
-use xmlrtorrent;
my @talkers;
my $talker;
my $plugindir = File::Spec->catfile($scriptdir, 'xmlrtorrent');
my %torrentlist = ();
my $torrentindex = 1;
-my $rtorrent;
my @outputstack = (undef);
},
};
+# 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 write_irssi {
my @text = @_;
my $output = $outputstack[0];
$u = $torrentlist{$id}->{'URL'};
write_debug('Sending %s to rtorrent', $u);
- unless(defined($rtorrent->load_start($talker, $u))) {
- write_irssi('%%RError sending URL %s: %s', $u, $rtorrent->errstr());
+ unless(defined($talker->load_start($u))) {
+ write_irssi('%%RError sending URL %s: %s', $u, $talker->errstr());
} else {
write_irssi('%s enqueued', $u);
delete($torrentlist{$id});
my $rqueue;
if (('list' eq $subcmd) or !defined($subcmd)) {
- unless(defined($rqueue = $rtorrent->download_list($talker))) {
- write_irssi('Error getting list of downloads: %s', $rtorrent->errstr());
+ unless(defined($rqueue = $talker->download_list())) {
+ write_irssi('Error getting list of downloads: %s', $talker->errstr());
return;
}
} else {
foreach (@{$rqueue}) {
write_irssi(' %s%s: %sB/%sB done (%d%%), %sB/s up, %sB/s down',
- $_->{'ACTIVE'}?'*':' ',
- $_->{'NAME'},
- $_->{'BYTES_DONE'},
- $_->{'SIZE_BYTES'},
- $_->{'BYTES_DONE'}*100/$_->{'SIZE_BYTES'},
- $_->{'UP_RATE'},
- $_->{'DOWN_RATE'});
+ $_->{'ACTIVE'}?'*':' ',
+ $_->{'NAME'},
+ format_number($_->{'BYTES_DONE'}),
+ format_number($_->{'SIZE_BYTES'}),
+ $_->{'BYTES_DONE'}*100/$_->{'SIZE_BYTES'},
+ format_number($_->{'UP_RATE'}),
+ format_number($_->{'DOWN_RATE'}));
}
}
}
%torrentlist = map { my $a = substr($_, 1); ("$a" => $torrentlist{$_}) } keys(%torrentlist);
$torrentindex = max(keys(%torrentlist)) + 1;
- unless(defined($rtorrent = xmlrtorrent->new())) {
- write_irssi('Could not initialize XMLRPC instance');
- return;
- }
-
if ($bindings) {
Irssi::signal_add_first('command script load', 'sig_command_script_unload');
+++ /dev/null
-package xmlrtorrent;
-
-use strict;
-use Data::Dumper;
-
-sub new {
- my $class = shift;
- my $self = {@_};
-
- 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;
- my $URL = shift;
- my $res;
-
- $res = $talker->send_request('load_start', $URL);
- unless(ref($res)) {
- $self->{'__ERROR'} = $res;
- return undef
- }
-
- if ($res->is_fault()) {
- $self->{'__ERROR'} = $res->value()->{'faultString'};
- return undef;
- }
-
- return 1;
-}
-
-sub download_list {
- my $self = shift;
- my $talker = shift;
- my $res;
-
- $res = $talker->send_request('d.multicall', '',
- 'd.get_name=',
- 'd.get_size_bytes=',
- 'd.get_bytes_done=',
- 'd.get_up_rate=',
- 'd.get_down_rate=',
- 'd.is_active=');
- unless(ref($res)) {
- $self->{'__ERROR'} = $res;
- return undef
- }
-
- if ($res->is_fault()) {
- $self->{'__ERROR'} = $res->value()->{'faultString'};
- return undef;
- }
-
- 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 {
- my $self = shift;
-
- return $self->{'__ERROR'};
-}
-
-1;
--- /dev/null
+# Talker for RTorrent
+#
+# (c) 2008 by Ralf Ertzinger <ralf@camperquake.de>
+# licensed under GNU GPL v2
+
+package xmlrtorrent::RTorrentTalkerBase;
+use xmlrtorrent::TalkerBase;
+@ISA = qw(xmlrtorrent::TalkerBase);
+
+use Data::Dumper;
+use strict;
+
+sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new();
+
+ bless($self, $class);
+
+ $self->_prepare_parameters();
+
+ return $self;
+}
+
+sub load_start {
+ my $self = shift;
+ my $url = shift;
+ my $res;
+
+ $res = $self->send_request('load_start', $url);
+ unless(ref($res)) {
+ $self->{'__ERROR'} = $res;
+ return undef;
+ }
+
+ if ($res->is_fault()) {
+ $self->{'__ERROR'} = $res->value()->{'faultString'};
+ return undef;
+ }
+
+ return 1;
+}
+
+sub download_list {
+ my $self = shift;
+ my $talker = shift;
+ my $res;
+
+ $res = $talker->send_request('d.multicall', '',
+ 'd.get_name=',
+ 'd.get_size_bytes=',
+ 'd.get_bytes_done=',
+ 'd.get_up_rate=',
+ 'd.get_down_rate=',
+ 'd.is_active=');
+ unless(ref($res)) {
+ $self->{'__ERROR'} = $res;
+ return undef
+ }
+
+ if ($res->is_fault()) {
+ $self->{'__ERROR'} = $res->value()->{'faultString'};
+ return undef;
+ }
+
+ my @ret = ();
+ foreach (@{$res->value()}) {
+ push @ret,
+ {
+ 'NAME' => $_->[0]->value(),
+ 'SIZE_BYTES' => $_->[1]->value(),
+ 'BYTES_DONE' => $_->[2]->value(),
+ 'UP_RATE' => $_->[3]->value(),
+ 'DOWN_RATE' => $_->[4]->value(),
+ 'ACTIVE' => $_->[5]->value(),
+ };
+ }
+
+ return \@ret;
+}
+
+1;