summaryrefslogtreecommitdiffstats
path: root/scripts/connectcmd.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/connectcmd.pl165
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');