$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);
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;
}
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;
%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;
}
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
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=',
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];
}
@ISA = qw(xmlrtorrent::TalkerBase);
use Data::Dumper;
-
+use RPC::XML::Client;
use strict;
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);
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;