From 58be7bbed0e4ba7be83d0bd3093bcc69571a2a0c Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Mon, 12 Jan 2009 21:35:04 +0100 Subject: [PATCH] - Remove xmlrtorrent.pm, refactor to $talker methods --- xmlrtorrent.pl | 56 +++++++++++++------- xmlrtorrent.pm | 106 -------------------------------------- xmlrtorrent/RTorrentTalkerBase.pm | 81 +++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 124 deletions(-) delete mode 100644 xmlrtorrent.pm create mode 100644 xmlrtorrent/RTorrentTalkerBase.pm diff --git a/xmlrtorrent.pl b/xmlrtorrent.pl index 4f63ba7..397d72c 100644 --- a/xmlrtorrent.pl +++ b/xmlrtorrent.pl @@ -11,7 +11,6 @@ use XML::Simple; use Data::Dumper; use File::Spec; use List::Util qw(max); -use xmlrtorrent; my @talkers; my $talker; @@ -21,7 +20,6 @@ my $scriptdir = File::Spec->catfile(Irssi::get_irssi_dir(), 'scripts'); my $plugindir = File::Spec->catfile($scriptdir, 'xmlrtorrent'); my %torrentlist = (); my $torrentindex = 1; -my $rtorrent; my @outputstack = (undef); @@ -90,6 +88,33 @@ my $xmlrtorrent_commands = { }, }; +# 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]; @@ -171,8 +196,8 @@ sub cmd_queue { $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}); @@ -206,8 +231,8 @@ sub cmd_remote { 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; } @@ -217,13 +242,13 @@ sub cmd_remote { } 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'})); } } } @@ -441,11 +466,6 @@ sub init_xmlrtorrent { %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'); diff --git a/xmlrtorrent.pm b/xmlrtorrent.pm deleted file mode 100644 index a33919f..0000000 --- a/xmlrtorrent.pm +++ /dev/null @@ -1,106 +0,0 @@ -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; diff --git a/xmlrtorrent/RTorrentTalkerBase.pm b/xmlrtorrent/RTorrentTalkerBase.pm new file mode 100644 index 0000000..3f451da --- /dev/null +++ b/xmlrtorrent/RTorrentTalkerBase.pm @@ -0,0 +1,81 @@ +# Talker for RTorrent +# +# (c) 2008 by Ralf Ertzinger +# 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; -- 1.8.3.1