Merge branch 'per-window-debug' into weechat
authorRalf Ertzinger <ralf@skytale.net>
Tue, 7 May 2013 18:14:58 +0000 (20:14 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Tue, 7 May 2013 18:14:58 +0000 (20:14 +0200)
libvideosite.pm
videosite-dl.pl
videosite-irssi.pl
videosite-weechat.pl
videosite/Base.pm

index 8791c64..f7f3d9d 100644 (file)
@@ -25,6 +25,7 @@ use strict;
 my @outputstack;
 my $outputprefix;
 my $debug = 0;
+my %debugwindows = ();
 my @grabbers;
 my @getters;
 my $getter;
@@ -113,19 +114,11 @@ my $videosite_commands = {
     },
 
     'debug' => sub {
-        $debug = 1;
-        foreach (@grabbers, @getters) {
-            $_->setdebug(1);
-        }
-        _io('Enabled debugging');
+        _cmd_debug(@_);
     },
 
     'nodebug' => sub {
-        $debug = 0;
-        foreach (@grabbers, @getters) {
-            $_->setdebug(0);
-        }
-        _io('Disabled debugging');
+        _cmd_nodebug(@_);
     },
 };
 
@@ -156,7 +149,7 @@ sub _io {
     #
     @text = map { defined($_)?$remote_api->{quote}->($_):'(undef)' } @text;
 
-    $outputstack[0]->(sprintf($format, @text));
+    $outputstack[0]->{ewpf}->(sprintf($format, @text));
 }
 
 #
@@ -206,8 +199,18 @@ sub _init_config_item {
 # Print a message if debug is enabled
 #
 sub _debug {
+    my @data = @_;
+
+    $data[0] = "DEBUG: " . $data[0];
+
+    # Check for global debug
     if ($debug) {
-        _io(@_);
+        _io(@data);
+    } else {
+        # Check if current window is in the per-window-debug list
+        if (exists($debugwindows{$outputstack[0]->{window}})) {
+            _io(@data);
+        }
     }
 }
 
@@ -253,12 +256,12 @@ sub _ploader {
             push(@g, $g);
             $g->register_api({
                 io => \&_io,
+                io_debug => \&_debug,
                 connectors => sub { return _connectorlist('active-connectors') },
                 config_get => \&_config_get,
                 config_set => \&_config_set,
                 config_has => \&_config_has,
             });
-            $g->setdebug($debug);
         } else {
             _io('%s has wrong type (got %s, expected %s)', $p, $g->{'TYPE'}, $type);
             delete($INC{$p});
@@ -523,6 +526,8 @@ sub _expand_url_shortener {
 # Save the config to durable storage
 #
 sub _cmd_save {
+    my $event = shift;
+
     if ($remote_api->{config_save}->()) {
         _io("Config saved");
     } else {
@@ -534,6 +539,7 @@ sub _cmd_save {
 # Set a configuration element
 #
 sub _cmd_set {
+    my $event = shift;
     my $target = shift;
     my $key = shift;
     my $val = shift;
@@ -553,6 +559,7 @@ sub _cmd_set {
 # Enable a given module
 #
 sub _cmd_enable {
+    my $event = shift;
     my $target = shift;
     my $p;
 
@@ -569,6 +576,7 @@ sub _cmd_enable {
 # Disable given module
 #
 sub _cmd_disable {
+    my $event = shift;
     my $target = shift;
     my $p;
 
@@ -585,6 +593,7 @@ sub _cmd_disable {
 # Show settings for modules
 #
 sub _cmd_show {
+    my $event = shift;
     my $target = shift;
     my $p;
     my $e;
@@ -615,6 +624,7 @@ sub _cmd_show {
 # Show help for the commands
 #
 sub _cmd_help {
+    my $event = shift;
     my $target = shift;
     my $p;
 
@@ -649,6 +659,7 @@ EOT
 # Set the getter to use
 #
 sub _cmd_getter {
+    my $event = shift;
     my $target = shift;
     my $p;
 
@@ -671,6 +682,7 @@ sub _cmd_getter {
 # Show/set the working mode
 #
 sub _cmd_mode {
+    my $event = shift;
     my $mode = shift;
 
     if (defined($mode)) {
@@ -691,6 +703,7 @@ sub _cmd_mode {
 # Manage the connectors
 #
 sub _cmd_connector {
+    my $event = shift;
     my $subcmd = shift;
     my $c;
 
@@ -853,6 +866,49 @@ sub _cmd_connector {
 }
 
 #
+# Enable debug.
+# Global debug if the keyword "all" is given, or just for the
+# current window otherwise
+#
+sub _cmd_debug {
+    my $event = shift;
+    my $scope = shift;
+
+    if (defined($scope) and (lc($scope) eq 'all')) {
+        _io("Global debug enabled");
+        $debug = 1;
+    } else {
+        _io("Debug for this window enabled");
+        $debugwindows{$event->{window}} = 1;
+    }
+
+    _io("keys in debugwindows: %s", join(", ", keys(%debugwindows)));
+}
+
+#
+# Disable debug
+# Disable global debug if the keyword "all" is given (this will
+# also disable all per-window debugs) or just for the current
+# window
+#
+sub _cmd_nodebug {
+    my $event = shift;
+    my $scope = shift;
+
+    if (defined($scope) and (lc($scope) eq 'all')) {
+        $debug = 0;
+        %debugwindows = ();
+        _io("Global debug disabled");
+    } else {
+        delete($debugwindows{$event->{window}});
+        _io("Debug for this window disabled");
+    }
+
+    _io("keys in debugwindows: %s", join(", ", keys(%debugwindows)));
+}
+
+
+#
 # Return the list of loaded grabbers.
 # This is used by the test programs, and is not meant to be
 # used in general.
@@ -982,7 +1038,7 @@ sub register_api {
         $debug = $a->{_debug}->();
     }
 
-    @outputstack = ($remote_api->{'io'});
+    @outputstack = ({ewpf => $remote_api->{'io'}, window => ""});
 
     return 1;
 }
@@ -1008,7 +1064,7 @@ sub check_for_link {
         $mode = 'display';
     }
 
-    _push_output($event->{ewpf});
+    _push_output($event);
     $message = _expand_url_shortener($message);
 
     study($message);
@@ -1075,10 +1131,10 @@ sub handle_command {
     my $event = shift;
     my ($cmd, @params) = split(/\s+/, $event->{message});
 
-    _push_output($event->{ewpf});
+    _push_output($event);
 
     if (exists($videosite_commands->{$cmd})) {
-        $videosite_commands->{$cmd}->(@params);
+        $videosite_commands->{$cmd}->($event, @params);
     }
 
     _pop_output();
index 769ab43..1225b92 100755 (executable)
@@ -58,5 +58,6 @@ foreach (@ARGV) {
     libvideosite::check_for_link({
         message => $_,
         ewpf => sub { print @_, "\n" },
+        window => "",
     });
 }
index 1a773e9..2e5a0ec 100644 (file)
@@ -212,6 +212,7 @@ sub videosite_hook {
     my %event = (
         message => $cmdline,
         ewpf => sub { defined($witem)?$witem->print($_[0], MSGLEVEL_CLIENTCRAP):Irssi::print($_[0]) },
+        window => defined($witem)?$witem->{server}->{real_address} . "/" . $witem->{name}:"",
     );
 
     libvideosite::handle_command(\%event);
@@ -223,10 +224,11 @@ sub videosite_hook {
 #
 sub message_hook {
     my ($server, $msg, $nick, $userhost, $channel) = @_;
-    my $evitem = $server->window_item_find($channel);
+    my $witem = $server->window_item_find($channel);
     my %event = (
         message => $msg,
-        ewpf => sub { defined($evitem)?$evitem->print($_[0], MSGLEVEL_CLIENTCRAP):Irssi::print($_[0]) },
+        ewpf => sub { defined($witem)?$witem->print($_[0], MSGLEVEL_CLIENTCRAP):Irssi::print($_[0]) },
+        window => defined($witem)?$witem->{server}->{real_address} . "/" . $witem->{name}:"",
     );
 
     libvideosite::check_for_link(\%event);
index e093b30..4693df4 100644 (file)
@@ -78,6 +78,7 @@ sub videosite_hook {
     my %event = (
         message => $args,
         ewpf => sub { weechat::print($buffer, @_) },
+        window => $buffer,
     );
 
     libvideosite::handle_command(\%event);
@@ -94,6 +95,7 @@ sub message_hook {
     my %event = (
         message => $message,
         ewpf => sub { weechat::print($buffer, @_) },
+        window => $buffer
     );
 
     libvideosite::check_for_link(\%event);
index 415f961..437ef98 100644 (file)
@@ -10,10 +10,10 @@ use Data::Dumper;
 
 sub new {
     my $class = shift;
-    my $self = {'_DEBUG' => 0,
-                '_CONNECTOR' => undef,
+    my $self = {'_CONNECTOR' => undef,
                 _API => {
-                    io => sub { printf(@_) },
+                    io => sub { print(@_) },
+                    io_debug => sub { print(@_) },
                     connectors => sub { return ({ 'name' => 'direct',
                                                   'schemas' => {} }) },
                 },
@@ -40,8 +40,9 @@ sub debug {
     my $self = shift;
     my @data = @_;
 
-    $data[0] = "DEBUG: " . $data[0];
-    if ($self->{'_DEBUG'} != 0) {$self->error(@data)};
+    $data[0] = "("  . ref($self) . ") " . $data[0];
+
+    $self->{_API}->{io_debug}->(@data);
 }
 
 sub _getval {
@@ -148,12 +149,6 @@ sub gethelpstr {
     return $s;
 }
 
-sub setdebug {
-    my $self = shift;
-
-    $self->{'_DEBUG'} = shift;
-}
-
 sub ua {
     my $self = shift;
     my $ua;