Merge branch 'plugin' into domainsocket
[xmlrtorrent.git] / xmlrtorrent.pl
index 53dd4e6..7adc01f 100644 (file)
@@ -94,12 +94,15 @@ sub write_irssi {
     my @text = @_;
     my $output = $outputstack[0];
 
-    $text[0] = '%%mxmlrtorrent: %%n' . $text[0];
+    my $format = '%%mxmlrtorrent: %%n' . shift(@text);
+
+    # escape % in parameters from irssi
+    @text = grep { s/%/%%/g } @text;
 
     if (defined($output) and ref($output)) {
-        $output->print(sprintf(shift(@text), @text), MSGLEVEL_CLIENTCRAP);
+        $output->print(sprintf($format, @text), MSGLEVEL_CLIENTCRAP);
     } else {
-        Irssi::print(sprintf(shift(@text), @text));
+        Irssi::print(sprintf($format, @text));
     }
 
 }
@@ -125,7 +128,6 @@ sub check_for_link {
     my $message = ($parammessage == -1) ? '' : $signal->[$parammessage];
     my $nick = ($paramnick == -1)?defined($server)?$server->{'nick'}:'':$signal->[$paramnick];
     my $g;
-    my $m;
     my $p;
 
     my $witem;
@@ -134,27 +136,19 @@ sub check_for_link {
     } else {
         $witem = Irssi::window_item_find($target);
     }
-
+    
     # Look if we should ignore this line
     if ($message =~ m,(?:\s|^)/nosave(?:\s|$),) {
         return;
     }
-
+       
     push_output($witem);
 
     # Look if there is a torrent link in there
-    $message =~ m,(http://\S*\.(?:torrent|penis)),;
-    $m = $1;
-    while (defined($m)) {
-        write_debug('Torrent-URL: %s', $m);
-        $torrentlist{$torrentindex++} = {'CHANNEL' => $target, 'NICK' => $nick, 'URL' => $m};
-
-        # Remove the matched part from the message and try again (there may be
-        # more!)
-        $message =~ s/$m//;
-
-        $message =~ m|(http://.*\.torrent)|;
-        $m = $1;
+       
+    while ($message =~ m,(http://\S*\.(?:torrent|penis)),g) {
+        write_debug('Torrent-URL: %s', $1);
+        $torrentlist{$torrentindex++} = {'CHANNEL' => $target, 'NICK' => $nick, 'URL' => $1};
     }
 
     pop_output();