move RPC over HTTP calls to HTTPTalker.pm
authorChristian Garbs <mitch@cgarbs.de>
Fri, 26 Dec 2008 22:52:53 +0000 (23:52 +0100)
committerRalf Ertzinger <sun@lain.camperquake.de>
Sun, 28 Dec 2008 21:10:05 +0000 (22:10 +0100)
xmlrtorrent.pl
xmlrtorrent.pm
xmlrtorrent/Base.pm
xmlrtorrent/HTTPTalker.pm

index 9d5a77d..12367cb 100644 (file)
@@ -209,7 +209,7 @@ sub cmd_queue {
         $u = $torrentlist{$id}->{'URL'};
 
         write_debug('Sending %s to rtorrent', $u);
-        unless(defined($rtorrent->load_start($u))) {
+        unless(defined($rtorrent->load_start($talker, $u))) {
             write_irssi('%%RError sending URL %s: %s', $u, $rtorrent->errstr());
         } else {
             write_irssi('%s enqueued', $u);
@@ -244,7 +244,7 @@ sub cmd_remote {
     my $rqueue;
 
     if (('list' eq $subcmd) or !defined($subcmd)) {
-        unless(defined($rqueue = $rtorrent->download_list())) {
+        unless(defined($rqueue = $rtorrent->download_list($talker))) {
             write_irssi('Error getting list of downloads: %s', $rtorrent->errstr());
             return;
         }
@@ -293,26 +293,17 @@ sub cmd_set {
     my $target = shift;
     my $key = shift;
     my $val = shift;
+    my $p;
 
-    if ('global' eq $target) {
-        if(exists($PARAMS->{$key})) {
-            $conf->{'xmlrtorrent'}->{$key} = $val;
-            if ('XMLURL' eq $key) {
-                unless(defined($rtorrent = xmlrtorrent->new(
-                        'XMLURL' => $conf->{'xmlrtorrent'}->{'XMLURL'},
-                        'USERNAME' => $conf->{'xmlrtorrent'}->{'USERNAME'},
-                        'USERNAME' => $conf->{'xmlrtorrent'}->{'PASSWORD'}))) {
-                    write_irssi('Could not initialize XMLRPC instance');
-                    return;
-                }
-            }
-        } else {
-            write_irssi('Key %s does not exist', $key);
+    foreach $p (@talkers) {
+        if ($p->{'NAME'} eq $target) {
+            $p->setval($key, $val);
+            return;
         }
     }
+    write_irssi(undef, 'No such module');
 }
 
-
 sub cmd_show {
     my $target = shift;
     my $p;
@@ -468,10 +459,7 @@ sub init_xmlrtorrent {
     %torrentlist = map { my $a = substr($_, 1); ("$a" => $torrentlist{$_}) } keys(%torrentlist);
     $torrentindex = max(keys(%torrentlist)) + 1;
 
-    unless(defined($rtorrent = xmlrtorrent->new(
-            'XMLURL' => $conf->{'xmlrtorrent'}->{'XMLURL'},
-            'USERNAME' => $conf->{'xmlrtorrent'}->{'USERNAME'},
-            'USERNAME' => $conf->{'xmlrtorrent'}->{'PASSWORD'}))) {
+    unless(defined($rtorrent = xmlrtorrent->new())) {
         write_irssi('Could not initialize XMLRPC instance');
         return;
     }
index b1c41b9..d50d5ac 100644 (file)
@@ -1,33 +1,22 @@
 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;
-    }
-
-    $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'});
-    }
-
     return bless($self, $class);
 }
 
-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 +32,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=',
index 9ee8222..e85b517 100644 (file)
@@ -54,8 +54,6 @@ sub _prepare_parameters {
     my $self = shift;
     my $p;
 
-    $self->{'_CONFIG'} = {'option' => {'enabled' => {'content' => '1'}}};
-
     foreach $p (keys(%{$self->{'_PARAMS'}})) {
         $self->{'_CONFIG'}->{'option'}->{$p}->{'content'} = $self->{'_PARAMS'}->{$p}->[0];
     }
index bab2209..4eb6a8d 100644 (file)
@@ -8,7 +8,7 @@ use xmlrtorrent::TalkerBase;
 @ISA = qw(xmlrtorrent::TalkerBase);
 
 use Data::Dumper;
-
+use RPC::XML::Client;
 use strict;
 
 sub new {
@@ -17,6 +17,12 @@ sub new {
 
     $self->{'NAME'} = 'http';
     $self->{'DESC'} = 'talker using RPC over HTTP';
+    $self->{'_PARAMS'} = {
+       'XMLURL' => ['', 'URL of SCGI script'],
+       'USERNAME' => ['', 'username for RPC credentials (optional)'],
+       'PASSWORD' => ['', 'password for RPC credentials (optional)'],
+    };
+    $self->{'_LASTXMLURL'} = undef;
 
     bless($self, $class);
 
@@ -25,4 +31,26 @@ sub new {
     return $self;
 }
 
+sub send_request {
+    my $self = shift;
+    my @params = @_;
+
+    unless (exists($self->{'XMLURL'}) and defined($self->{'XMLURL'})) {
+       return 'http talker: XMLURL not set';
+    }
+
+    if ($self->{'XMLURL'} ne $self->{'_LASTXMLURL'}) {
+       $self->{'_LASTXMLURL'} = $self->{'XMLURL'};
+       $self->{'__RPCClient'} = RPC::XML::Client->new($self->{'XMLURL'});
+    }  
+    
+    if ((exists($self->{'USERNAME'}) and exists($self->{'PASSWORD'})) and
+       ($self->{'USERNAME'} ne '')) {
+       # mitch: let me guess, the realm must be configurable, too!
+       $self->{'__RPCClient'}->credentials('', $self->{'USERNAME'}, $self->{'PASSWORD'});
+    }
+
+    return $self->{'__RPCClient'}->send_request(@params);
+}
+
 1;