diff options
-rw-r--r-- | auto-server/auto_server.pl | 13 | ||||
-rw-r--r-- | feature-tests/getchan.pl | 165 | ||||
-rw-r--r-- | longify/longify-urls.pl | 21 |
3 files changed, 185 insertions, 14 deletions
diff --git a/auto-server/auto_server.pl b/auto-server/auto_server.pl index 447a131..c409e5d 100644 --- a/auto-server/auto_server.pl +++ b/auto-server/auto_server.pl @@ -104,8 +104,8 @@ sub haxy_print_hook { sub parse_channel_map { #my $data = Irssi::settings_get_str('joinplus_server_maps'); - unbind_completion(); my $data = retrieve_channels(); + unbind_completion(); my @items = split /\s+/, $data; if (@items % 2 == 0) { $channel_map = { @items }; # risky? @@ -209,13 +209,14 @@ sub do_channel_join { my $channel = $pending_joins->{$serv->{address}}; $channel = $pending_joins->{$serv->{tag}} unless $channel; + if ($channel) { + _debug_print ("attempting to join $channel"); - _debug_print ("attempting to join $channel"); + Irssi::server_find_tag($serv->{tag})->command("JOIN $channel"); - Irssi::server_find_tag($serv->{tag})->command("JOIN $channel"); - - delete $pending_joins->{$serv->{address}}; - delete $pending_joins->{$serv->{tag}}; + delete $pending_joins->{$serv->{address}}; + delete $pending_joins->{$serv->{tag}}; + } } diff --git a/feature-tests/getchan.pl b/feature-tests/getchan.pl new file mode 100644 index 0000000..7d4ee55 --- /dev/null +++ b/feature-tests/getchan.pl @@ -0,0 +1,165 @@ +=pod + +=head1 NAME + +template.pl + +=head1 DESCRIPTION + +A minimalist template useful for basing actual scripts on. + +=head1 INSTALLATION + +Copy into your F<~/.irssi/scripts/> directory and load with +C</SCRIPT LOAD F<filename>>. + +=head1 USAGE + +None, since it doesn't actually do anything. + +=head1 AUTHORS + +Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> + +=head1 LICENCE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=head1 BUGS + +=head1 TODO + +Use this template to make an actual script. + +=cut + +use strict; +use warnings; + +use Irssi; +use Irssi::Irc; +use Irssi::TextUI; + +use Data::Dumper; + +our $VERSION = '0.1'; +our %IRSSI = ( + authors => 'shabble', + contact => 'shabble+irssi@metavore.org', + name => '', + description => '', + license => 'MIT', + updated => '$DATE' + ); + + +my $line_format; +my $head_format; +my $foot_format; + +my $channels = {}; +my @errors; +my $state; + +sub get_format_string { + return Irssi::current_theme->get_format(@_); +} + + +sub get_channels { + # see here: https://github.com/shabble/irssi-docs/wiki/complete_themes + $line_format = get_format_string('fe-common/core', 'chansetup_line'); + $head_format = get_format_string('fe-common/core', 'chansetup_header'); + $foot_format = get_format_string('fe-common/core', 'chansetup_footer'); + + my $parse_line_format = "channel:\$0\tnet:\$1\tpass:\$2\tsettings:\$3"; + Irssi::command("^FORMAT chansetup_line $parse_line_format"); + Irssi::command("^FORMAT chansetup_header START"); + Irssi::command("^FORMAT chansetup_footer END"); + + $state = 0; + Irssi::signal_add_first('print text', 'sig_print_text'); + Irssi::command("CHANNEL LIST"); + Irssi::signal_remove('print text', 'sig_print_text'); + +} + +sub restore_formats { + Irssi::command("^FORMAT chansetup_line $line_format"); + Irssi::command("^FORMAT chansetup_header $head_format"); + if ($foot_format =~ m/^\s*$/) { + Irssi::command("^FORMAT -reset chansetup_footer"); + } else { + Irssi::command("^FORMAT chansetup_footer $foot_format"); + } +} + +sub sig_print_text { + my ($dest, $text, $stripped) = @_; + + my $entry = {}; + + if ($state == 0 && $text =~ m/START/) { + $state = 1; + } elsif ($state == 1) { + # TODO: might we get multiple lines at once? + if ($text =~ m/channel:([^\t]+)\tnet:([^\t]+)\tpass:([^\t]*)\tsettings:(.*)$/) { + $entry->{channel} = $1; + $entry->{network} = $2; + $entry->{password} = $3; + $entry->{settings} = $4; + + my $tag = "$2/$1"; + $channels->{$tag} = $entry; + + } elsif ($text =~ m/END/) { + $state = 0; + } else { + push @errors, "Failed to parse: '$text'"; + } + } + Irssi::signal_stop(); +} + +sub go { + eval { + get_channels(); + }; + if ($@) { + print "Error: $@. Reloading theme to restore format"; + Irssi::themes_reload(); + } else { + restore_formats(); + } + if (@errors) { + @errors = map { s/\t/ /g } @errors; + print Dumper(\@errors); + } + print Dumper($channels); +} + +Irssi::command_bind('getchan', \&go); +# in fe-common/core +# +# chansetup_not_found = "Channel {channel $0} not found"; +# chansetup_added = "Channel {channel $0} saved"; +# chansetup_removed = "Channel {channel $0} removed"; +# chansetup_header = "%#Channel Network Password Settings"; +# chansetup_line = "%#{channel $[15]0} %|$[10]1 $[10]2 $3"; +# chansetup_footer = ""; diff --git a/longify/longify-urls.pl b/longify/longify-urls.pl index 8b2691f..38e8ba8 100644 --- a/longify/longify-urls.pl +++ b/longify/longify-urls.pl @@ -87,6 +87,7 @@ use Data::Dumper; use IrssiX::Async qw(fork_off); use LWP::UserAgent; use URI; +use File::Spec; our $VERSION = '0.1'; our %IRSSI = ( @@ -106,7 +107,16 @@ my $domains; sub sig_public_message { - my ($server, $msg, @rest) = @_; + _handle_messages(@_); +} + +sub sig_private_message { + _handle_messages(@_); +} + +sub _handle_messages { + + my $msg = $_[1]; if ($flushing_message) { # don't interrupt it a second time. delete $pending_msg_params->{$flushing_message}; @@ -129,12 +139,6 @@ sub sig_public_message { Irssi::signal_stop; } -sub sig_private_message { - my ($server, $msg, $nick, $addr, $target) = @_; - -} - - sub expand_url { my ($url) = @_; fork_off $url, \&expand_url_request, \&expand_url_callback; @@ -235,7 +239,8 @@ sub match_uri { } sub cmd_reload { - my $filename = shift || Irssi::get_irssi_dir . '/longify-urls.list'; + my $filename = shift + || File::Spec->catfile(Irssi::get_irssi_dir, 'longify-urls.list'); $domains = {}; open my $fh, '<', $filename or die "Couldn't open file containing shorteners list $filename: $!"; |