From: Ralf Ertzinger Date: Tue, 7 May 2013 18:14:58 +0000 (+0200) Subject: Merge branch 'per-window-debug' into weechat X-Git-Url: https://git.camperquake.de/gitweb.cgi?p=videosite.git;a=commitdiff_plain;h=513fff57bcf5c5724ea25fc69831b97f8f0bc0cc;hp=edcf9a8b4edfbb1ea337640092f48ab2c7a78722 Merge branch 'per-window-debug' into weechat --- diff --git a/libvideosite.pm b/libvideosite.pm index 8791c64..f7f3d9d 100644 --- a/libvideosite.pm +++ b/libvideosite.pm @@ -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(); diff --git a/videosite-dl.pl b/videosite-dl.pl index 769ab43..1225b92 100755 --- a/videosite-dl.pl +++ b/videosite-dl.pl @@ -58,5 +58,6 @@ foreach (@ARGV) { libvideosite::check_for_link({ message => $_, ewpf => sub { print @_, "\n" }, + window => "", }); } diff --git a/videosite-irssi.pl b/videosite-irssi.pl index 1a773e9..2e5a0ec 100644 --- a/videosite-irssi.pl +++ b/videosite-irssi.pl @@ -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); diff --git a/videosite-weechat.pl b/videosite-weechat.pl index e093b30..4693df4 100644 --- a/videosite-weechat.pl +++ b/videosite-weechat.pl @@ -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); diff --git a/videosite/Base.pm b/videosite/Base.pm index 415f961..437ef98 100644 --- a/videosite/Base.pm +++ b/videosite/Base.pm @@ -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;