diff options
Diffstat (limited to 'scripts/connectcmd.pl')
-rw-r--r-- | scripts/connectcmd.pl | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/scripts/connectcmd.pl b/scripts/connectcmd.pl new file mode 100644 index 0000000..9b5bf38 --- /dev/null +++ b/scripts/connectcmd.pl @@ -0,0 +1,165 @@ +use strict; +use Irssi 20020101.0250 (); + +use vars qw($VERSION %IRSSI); +$VERSION = "0.2"; +%IRSSI = ( + authors => "Ian Peters", + contact => "itp\@ximian.com", + name => "Connect Command", + description => "run arbitrary shell commands while [dis]connecting to a server", + license => "Public Domain", + url => "http://irssi.org/", + changed => "2017-03-18" +); + +my %preconn_actions; +my %postconn_actions; +my %disconn_actions; + +sub load_actions { + my $fi; + + open $fi, '<', "$ENV{HOME}/.irssi/connectcmd_actions"; + + while (<$fi>) { + my @lines = split "\n"; + foreach my $line (@lines) { + my ($server, $type, $action) = split ":", $line; + if ($type eq "preconn") { + $preconn_actions{$server} = $action; + } elsif ($type eq "postconn") { + $postconn_actions{$server} = $action; + } elsif ($type eq "disconn") { + $disconn_actions{$server} = $action; + } + } + } + + close $fi; +} + +sub save_actions { + my $fa; + open $fa, q{>}, "$ENV{HOME}/.irssi/connectcmd_actions"; + + foreach my $server (keys %preconn_actions) { + print $fa "$server:preconn:$preconn_actions{$server}\n"; + } + foreach my $server (keys %postconn_actions) { + print $fa "$server:postconn:$postconn_actions{$server}\n"; + } + foreach my $server (keys %disconn_actions) { + print $fa "$server:disconn:$disconn_actions{$server}\n"; + } + + close $fa; +} + +sub sig_server_looking { + my ($server) = @_; + + if (my $action = $preconn_actions{$server->{'address'}}) { + system ($action); + } +} + +sub sig_server_connected { + my ($server) = @_; + + if (my $action = $postconn_actions{$server->{'address'}}) { + system ($action); + } +} + +sub sig_server_disconnected { + my ($server) = @_; + + if (my $action = $disconn_actions{$server->{'address'}}) { + system ($action); + } +} + +sub cmd_connectcmd { + my ($data, $server, $witem) = @_; + + #my ($op, $type, $server, $action) = split " ", $data; + $data =~ m/^(\S*)\s+(\S*)\s+(\S*)\s+(.*)$/; + my $op=$1; + my $type=$2; + my $server=$3; + my $action=$4; + + $op = lc $op; + + if (!$op) { + Irssi::print ("No operation given"); + } elsif ($op eq "add") { + if (!$type) { + Irssi::print ("Type not specified [preconn|postconn|disconn]"); + } elsif (!$server) { + Irssi::print ("Server not specified"); + } elsif (!$action) { + Irssi::print ("Action not specified"); + } else { + if ($type eq "preconn") { + $preconn_actions{$server} = $action; + Irssi::print ("Added preconnect action of $action on $server"); + save_actions; + } elsif ($type eq "postconn") { + $postconn_actions{$server} = $action; + Irssi::print ("Added postconnect action of $action on $server"); + save_actions; + } elsif ($type eq "disconn") { + $disconn_actions{$server} = $action; + Irssi::print ("Added disconnect action of $action on $server"); + save_actions; + } else { + Irssi::print ("Unrecognized trigger $type [preconn|postconn|disconn]"); + } + } + } elsif ($op eq "remove") { + if (!$type) { + Irssi::print ("Type not specified [preconn|postconn|disconn]"); + } elsif (!$server) { + Irssi::print ("Server not specified"); + } else { + if ($type eq "preconn") { + delete ($preconn_actions{$server}); + Irssi::print ("Removed preconnect action on $server"); + save_actions; + } elsif ($type eq "postconn") { + delete ($postconn_actions{$server}); + Irssi::print ("Removed postconnect action on $server"); + save_actions; + } elsif ($type eq "disconn") { + delete ($disconn_actions{$server}); + Irssi::print ("Removed disconnect action on $server"); + save_actions; + } else { + Irssi::print ("Unrecognized trigger $type [preconn|postconn|disconn]"); + } + } + } elsif ($op eq "list") { + Irssi::print ("Preconnect Actions:"); + foreach my $server (keys %preconn_actions) { + Irssi::print ("$server $preconn_actions{$server}"); + } + Irssi::print ("Postconnect Actions:"); + foreach my $server (keys %postconn_actions) { + Irssi::print ("$server $postconn_actions{$server}"); + } + Irssi::print ("Disconnect Actions:"); + foreach my $server (keys %disconn_actions) { + Irssi::print ("$server $disconn_actions{$server}"); + } + } +} + +load_actions(); + +Irssi::command_bind ('connectcmd', 'cmd_connectcmd'); + +Irssi::signal_add ('server looking', 'sig_server_looking'); +Irssi::signal_add ('server connected', 'sig_server_connected'); +Irssi::signal_add ('server disconnected', 'sig_server_disconnected'); |