X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite-irssi.pl;h=f1c9b1d4c3fb4c825d2f7fc7aa49e03228d2cd68;hb=4937bfb6d9da16f92e2d5bd4cd983d25f417da45;hp=50658f421d4cc631b6e374303ad81ebea99c858e;hpb=7a64be0b7d7aa67bbd1b1e7338abdb5147dbb0e2;p=videosite.git diff --git a/videosite-irssi.pl b/videosite-irssi.pl index 50658f4..f1c9b1d 100644 --- a/videosite-irssi.pl +++ b/videosite-irssi.pl @@ -7,6 +7,23 @@ use Irssi 20020324 qw (command_bind command_runsub signal_add_first signal_add_l use vars qw($VERSION %IRSSI); use File::Spec; use Module::Load; +use XML::Simple; +use JSON -support_by_pp; + +# +# List of foreground colors. This list is not complete, it just +# contains the colors needed by videosite. +# +# The % are doubled because these are used in sprintf. +# +my %foreground_colors = ( + 'magenta' => '%%m', + '*magenta' => '%%M', + '*yellow' => '%%Y', + '*green' => '%%G', + '*red' => '%%R', + 'default' => '%%n', +); # # Initialize the config subsystem. Called by the core. @@ -33,6 +50,7 @@ sub config_init { # Try to find old config files and load them. if (-r $conffile) { + Irssi::print("Converting configuration from videosite.json. This will happen only once."); eval { local $/; open(CONF, '<', $conffile); @@ -40,7 +58,11 @@ sub config_init { close(CONF); }; } elsif (-r $xmlconffile) { + Irssi::print("Converting configuration from videosite.xml. This will happen only once."); $conf = XML::Simple::XMLin($xmlconffile, ForceArray => ['config', 'option', 'connectorlist'], KeepRoot => 1, KeyAttr => {'connector' => '+name', 'config' => 'module', 'option' => 'key'}); + } else { + # No old config files around. Just exit. + return; } # @@ -77,7 +99,7 @@ sub config_init { # Copy the "basic" settings. foreach (qw(getter mode)) { - config_set(['getter'], $conf->{videosite}->{$_}); + config_set([$_], $conf->{videosite}->{$_}); } # Copy the per-getter/setter settings @@ -104,7 +126,7 @@ sub config_init { } } } - config_set(['active-connectors'], join(",", @{$conf->{connectorlist}})); + config_set(['active-connectors'], join(",", @{$conf->{videosite}->{connectorlist}})); config_set(['defined-connectors'], join(",", @connectors)); config_set(['config-version'], '2'); } @@ -118,10 +140,10 @@ sub config_get { my $val; - Irssi::settings_add_str('videosite', $item, "\0"); + Irssi::settings_add_str('videosite', $item, "\1"); $val = Irssi::settings_get_str($item); - return ($val ne "\0")?$val:undef; + return ($val ne "\1")?$val:undef; } # @@ -131,8 +153,8 @@ sub config_has { my $path = shift; my $item = join('.', 'videosite', @{$path}); - Irssi::settings_add_str('videosite', $item, "\0"); - return Irssi::settings_get_str($item) ne "\0"; + Irssi::settings_add_str('videosite', $item, "\1"); + return Irssi::settings_get_str($item) ne "\1"; } # @@ -143,7 +165,7 @@ sub config_set { my $value = shift; my $item = join('.', 'videosite', @{$path}); - Irssi::settings_add_str('videosite', $item, "\0"); + Irssi::settings_add_str('videosite', $item, "\1"); Irssi::settings_set_str($item, $value); } @@ -160,12 +182,15 @@ sub config_del { # # Return a color code. Called by the core # +# Does not handle background colors yet. +# sub colorpair { my ($fg, $bg) = @_; - Irssi::print(sprintf("Asked to convert (%s,%s) into irssi color codes", $fg, $bg)); + $fg = exists($foreground_colors{$fg})?$foreground_colors{$fg}:''; + $bg = ''; - return ''; + return $fg . $bg; } # @@ -175,7 +200,7 @@ sub videosite_hook { my ($cmdline, $server, $witem) = @_; my %event = ( message => $cmdline, - ewpf => sub { defined($evitem)?$evitem->print(@_):Irssi::print(@_) }, + ewpf => sub { defined($witem)?$witem->print($_[0]):Irssi::print($_[0]) }, ); libvideosite::handle_command(\%event); @@ -190,7 +215,7 @@ sub message_hook { my $evitem = $server->window_item_find($channel); my %event = ( message => $msg, - ewpf => sub { defined($evitem)?$evitem->print(@_):Irssi::print(@_) }, + ewpf => sub { defined($evitem)?$evitem->print($_[0]):Irssi::print($_[0]) }, ); libvideosite::check_for_link(\%event); @@ -198,7 +223,7 @@ sub message_hook { sub videosite_reset { unless(libvideosite::register_api({ - io => sub { Irssi::print(@_) }, + io => sub { Irssi::print($_[0]) }, config_init => \&config_init, config_get => \&config_get, config_set => \&config_set,