videosite-irssi: remove unneeded code
authorRalf Ertzinger <ralf@skytale.net>
Tue, 30 Apr 2013 14:38:26 +0000 (16:38 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Tue, 30 Apr 2013 14:38:26 +0000 (16:38 +0200)
videosite-irssi.pl

index f9d7828..c121257 100644 (file)
 use strict;
 use Irssi 20020324 qw (command_bind command_runsub signal_add_first signal_add_last);
 use vars qw($VERSION %IRSSI);
 use strict;
 use Irssi 20020324 qw (command_bind command_runsub signal_add_first signal_add_last);
 use vars qw($VERSION %IRSSI);
-use Data::Dumper;
 use File::Spec;
 use File::Spec;
-use File::Temp qw(tempfile);
-
-my @grabbers;
-my @getters;
-my $getter;
-my $conf;
-my $xmlconffile = File::Spec->catfile(Irssi::get_irssi_dir(), 'videosite.xml');
-my $conffile = File::Spec->catfile(Irssi::get_irssi_dir(), 'videosite.json');
-my $scriptdir = File::Spec->catfile(Irssi::get_irssi_dir(), 'scripts');
-my $plugindir = File::Spec->catfile($scriptdir, 'videosite');
-my @outputstack = (undef);
-
-# "message public", SERVER_REC, char *msg, char *nick, char *address, char *target
-signal_add_last(_bcs("message public" => sub {check_for_link(@_)}));
-# "message own_public", SERVER_REC, char *msg, char *target
-signal_add_last(_bcs("message own_public" => sub {check_for_link(@_)}));
-
-# "message private", SERVER_REC, char *msg, char *nick, char *address
-signal_add_last(_bcs("message private" => sub {check_for_link(@_)}));
-# "message own_private", SERVER_REC, char *msg, char *target, char *orig_target
-signal_add_last(_bcs("message own_private" => sub {check_for_link(@_)}));
-
-# "message irc action", SERVER_REC, char *msg, char *nick, char *address, char *target
-signal_add_last(_bcs("message irc action" => sub {check_for_link(@_)}));
-# "message irc own_action", SERVER_REC, char *msg, char *target
-signal_add_last(_bcs("message irc own_action" => sub {check_for_link(@_)}));
-
-# For tab completion
-# This does not use BettIrssi (yet)
-signal_add_first('complete word', \&sig_complete);
-
-sub push_output {
-    unshift(@outputstack, shift);
-}
-
-sub pop_output {
-    shift(@outputstack);
-
-    @outputstack = (undef) unless (@outputstack);
-}
-
-my $videosite_commands = {
-    'save' => sub {
-        cmd_save();
-    },
-
-    'set' => sub {
-        cmd_set(@_);
-    },
-    
-    'show' => sub {
-        cmd_show(@_);
-    },
-
-    'help' => sub {
-        cmd_help(@_);
-    },
-
-    'getter' => sub {
-        cmd_getter(@_);
-    },
-
-    'enable' => sub {
-        cmd_enable(@_);
-    },
-
-    'disable' => sub {
-        cmd_disable(@_);
-    },
-
-    'reload' => sub {
-        init_videosite(0);
-    },
-
-    'mode' => sub {
-        cmd_mode(@_);
-    },
-
-    'connector' => sub {
-        cmd_connector(@_);
-    },
-
-    'debug' => sub {
-        $debug = 1;
-        foreach (@grabbers, @getters) {
-            $_->setdebug(1);
-        }
-        write_irssi('Enabled debugging');
-    },
-
-    'nodebug' => sub {
-        $debug = 0;
-        foreach (@grabbers, @getters) {
-            $_->setdebug(0);
-        }
-        write_irssi('Disabled debugging');
-    },
-};
-
-sub write_irssi {
-    my @text = @_;
-    my $output = $outputstack[0];
-
-    my $format = "%%mvideosite: %%n" . shift(@text);
-
-    # escape % in parameters from irssi
-    s/%/%%/g foreach @text;
-
-    if (defined $output) {
-        $output->(sprintf($format, @text), MSGLEVEL_CLIENTCRAP);
-    } else {
-        Irssi::print(sprintf($format, @text));
-    }
-
-}
-
-sub write_debug {
-    if ($debug) {
-        write_irssi(@_);
-    }
-}
-
-sub expand_url_shortener {
-    my $s = shift;
-    my $os = '';
-    my @urlshortener = (
-        'is\.gd/[[:alnum:]]+',
-        'otf\.me/[[:alnum:]]+',
-        'hel\.me/[[:alnum:]]+',
-        '7ax\.de/[[:alnum:]]+',
-        'ow\.ly/[[:alnum:]]+',
-        'j\.mp/[[:alnum:]]+',
-        'bit\.ly/[[:alnum:]]+',
-        'tinyurl\.com/[[:alnum:]]+',
-        'pop\.is/[[:alnum:]]+',
-        'post\.ly/[[:alnum:]]+',
-        '1\.ly/[[:alnum:]]+',
-        '2\.ly/[[:alnum:]]+',
-        't\.co/[[:alnum:]]+',
-        'shar\.es/[[:alnum:]]+',
-        'goo\.gl/[[:alnum:]]+',
-        );
-    my $ua = LWP::UserAgent->new(agent => 'Mozilla', max_redirect => 0, timeout => 5);
-    my $i = 10;
-
-    OUTER: while (($os ne $s) and ($i > 0)) {
-        study($s);
-        $os = $s;
-        $i--;
-
-        foreach my $pattern (@urlshortener) {
-            my $p = "https?:\/\/" . $pattern;
-
-            write_debug("Matching %s against %s", $p, $s);
-            if ($s =~ m|($p)|) {
-                my $matched = $1;
-                my $res;
-
-                write_debug("Found %s", $matched);
-                $res = $ua->head($matched);
-                if ($res->is_redirect()) {
-                    my $new = $res->headers()->header("Location");
-
-                    write_debug("Replacing %s with %s", $matched, $new);
-                    $s =~ s/$matched/$new/;
-                    next OUTER;
-                } else {
-                    write_debug("Error resolving %s", $matched);
-                }
-            }
-        }
-    }
-
-    if ($i == 0) {
-        write_debug("Loop terminated by counter");
-    }
-
-    write_debug("Final string: %s", $s);
-
-    return $s;
-}
-
-sub connectorlist {
-    my @c;
-
-    foreach (@{$conf->{'videosite'}->{'connectorlist'}}) {
-        push(@c, $conf->{'videosite'}->{'connectors'}->{$_});
-    }
-
-    return @c;
-}
-
-
-sub check_for_link {
-    my $event = shift;
-    my $message = $event->message();
-    my $witem = $event->channel();
-    my $g;
-    my $m;
-    my $p;
-
-
-    # Look if we should ignore this line
-    if ($message =~ m,(?:\s|^)/nosave(?:\s|$),) {
-        return;
-    }
-
-    push_output($event->ewpf);
-    $message = expand_url_shortener($message);
-
-    study($message);
-
-    # Offer the message to all Grabbers in turn
-    GRABBER: foreach $g (@grabbers) {
-        ($m, $p) = $g->get($message);
-        while (defined($m)) {
-            write_debug('Metadata: %s', Dumper($m));
-            if ('download' eq ($conf->{'videosite'}->{'mode'})) {
-                write_irssi('%%R>>> %%NSaving %%Y%s%%N %%G%s', $m->{'SOURCE'}, $m->{'TITLE'});
-                unless($getter->get($m)) {
-                    write_irssi('%%R>>> FAILED');
-                }
-            } elsif ('display' eq ($conf->{'videosite'}->{'mode'})) {
-                write_irssi('%%M>>> %%NSaw %%Y%s%%N %%G%s', $m->{'SOURCE'}, $m->{'TITLE'});
-            } else {
-                write_irssi('%%R>>> Invalid operation mode');
-            }
-
-            # Remove the matched part from the message and try again (there may be
-            # more!)
-            $message =~ s/$p//;
-            study($message);
-            last GRABBER if ($message =~ /^\s*$/);
-
-            ($m, $p) = $g->get($message);
-        }
-    }
-
-    pop_output();
-}
-
-sub cmd_save {
-
-    eval {
-        my ($tempfile, $tempfn) = tempfile("videosite.json.XXXXXX", dir => Irssi::get_irssi_dir());
-        print $tempfile JSON->new->pretty->utf8->encode($conf);
-        close($tempfile);
-        rename($tempfn, $conffile);
-    };
-    if ($@) {
-        write_irssi('Could not save config to %s: %s', ($conffile, $@));
-    } else {
-        write_irssi('configuration saved to %s', $conffile);
-    }
-}
-
-sub cmd_set {
-    my $target = shift;
-    my $key = shift;
-    my $val = shift;
-    my $p;
-
-    foreach $p (@getters, @grabbers) {
-        if ($p->{'NAME'} eq $target) {
-            $p->setval($key, $val);
-            return;
-        }
-    }
-    write_irssi('No such module');
-}
-
-
-sub cmd_enable {
-    my $target = shift;
-    my $p;
-
-    foreach $p (@grabbers) {
-        if ($p->{'NAME'} eq $target) {
-            $p->enable();
-            return;
-        }
-    }
-    write_irssi('No such module');
-}
-
-
-sub cmd_disable {
-    my $target = shift;
-    my $p;
-
-    foreach $p (@grabbers) {
-        if ($p->{'NAME'} eq $target) {
-            $p->disable();
-            return;
-        }
-    }
-    write_irssi('No such module');
-}
-
-
-sub cmd_show {
-    my $target = shift;
-    my $p;
-    my $e;
-
-    if (defined($target)) {
-        foreach $p (@getters, @grabbers) {
-            if ($p->{'NAME'} eq $target) {
-                write_irssi($p->getconfstr());
-                return;
-            }
-        }
-        write_irssi('No such module');
-    } else {
-        write_irssi('Loaded grabbers (* denotes enabled modules):');
-        foreach $p (@grabbers) {
-            $e = $p->_getval('enabled');
-            write_irssi(' %s%s', $p->{'NAME'}, $e?'*':'');
-        };
-
-        write_irssi('Loaded getters:');
-        foreach $p (@getters) {
-            write_irssi(' %s', $p->{'NAME'});
-        };
-    }
-}
-
-sub cmd_help {
-    my $target = shift;
-    my $p;
-
-    if (defined($target)) {
-        foreach $p (@getters, @grabbers) {
-            if ($p->{'NAME'} eq $target) {
-                write_irssi($p->gethelpstr());
-                return;
-            }
-        }
-        write_irssi('No such module');
-    } else {
-        write_irssi(<<'EOT');
-Supported commands:
- save: save the current configuration
- help [modulename]: display this help, or module specific help
- show [modulename]: show loaded modules, or the current parameters of a module
- set modulename parameter value: set a module parameter to a new value
- getter [modulename]: display or set the getter to use
- enable [modulename]: enable the usage of this module (grabbers only)
- disable [modulename]: disable the usage of this module (grabbers only)
- reload: reload all modules (this is somewhat experimental)
- mode [modename]: display or set the operation mode (download/display)
- connector [subcommand]: manage connectors (proxies)
- debug: enable debugging messages
- nodebug: disable debugging messages
-EOT
-    }
-}
-
-sub cmd_getter {
-    my $target = shift;
-    my $p;
-
-    if (defined($target)) {
-        foreach $p (@getters) {
-            if ($p->{'NAME'} eq $target) {
-                $getter = $p;
-                $conf->{'videosite'}->{'getter'} = $target;
-                write_irssi("Getter changed to %s", $target);
-                return;
-            }
-        }
-        write_irssi('No such getter');
-    } else {
-        write_irssi('Current getter: %s', $conf->{'videosite'}->{'getter'});
-    }
-}
-
-sub cmd_mode {
-    my $mode = shift;
-
-    if (defined($mode)) {
-        $mode = lc($mode);
-        if (('download' eq $mode) or ('display' eq $mode)) {
-            $conf->{'videosite'}->{'mode'} = $mode;
-            write_irssi('Now using %s mode', $mode);
-        } else {
-            write_irssi('Invalid mode: %s', $mode);
-        }
-    } else {
-        write_irssi('Current mode: %s', $conf->{'videosite'}->{'mode'});
-    }
-}
-
-sub cmd_connector {
-    my $subcmd = shift;
-    my $connconf = $conf->{'videosite'}->{'connectors'};
-
-    unless(defined($subcmd)) {
-        $subcmd = "help";
-    }
-
-    $subcmd = lc($subcmd);
-
-    if ($subcmd eq 'list') {
-        write_irssi("Defined connectors");
-        foreach (keys(%{$connconf})) {
-            write_irssi($_);
-            my $schemas = $connconf->{$_}->{'schemas'};
-            if (scalar(keys(%{$schemas})) == 0) {
-                write_irssi(" No schemas defined");
-            } else {
-                foreach (keys(%{$schemas})) {
-                    write_irssi(' %s: %s', $_, $schemas->{$_});
-                }
-            }
-        }
-
-        write_irssi();
-        write_irssi("Selected connectors: %s", join(", ", @{$conf->{'videosite'}->{'connectorlist'}}));
-    } elsif ($subcmd eq 'add') {
-        my ($name) = @_;
-
-        unless(defined($name)) {
-            write_irssi("No name given");
-            return;
-        }
-
-        $name = lc($name);
-
-        if (exists($connconf->{$_})) {
-            write_irssi("Connector already exists");
-            return;
-        }
-
-        $connconf->{$name} = {'name' => $name, 'schemas' => {}};
-    } elsif ($subcmd eq 'del') {
-        my ($name) = @_;
-
-        unless(defined($name)) {
-            write_irssi("No name given");
-            return;
-        }
-
-        $name = lc($name);
-
-        unless (exists($connconf->{$name})) {
-            write_irssi("Connector does not exist");
-            return;
-        }
-
-        if (exists($connconf->{$name}->{'_immutable'})) {
-            write_irssi("Connector cannot be removed");
-            return;
-        }
-
-        delete($connconf->{$name});
-
-        # Remove from list of active connectors
-        $conf->{'videosite'}->{'connectorlist'} =
-            [ grep { $_ ne $name } @{$conf->{'videosite'}->{'connectorlist'}} ];
-
-        if (scalar(@{$conf->{'videosite'}->{'connectorlist'}}) == 0) {
-            write_irssi("List of selected connectors is empty, resetting to direct");
-            $conf->{'videosite'}->{'connectorlist'} = [ 'direct' ];
-        }
-    } elsif ($subcmd eq 'addschema') {
-        my ($conn, $schema, $proxy) = @_;
-
-        unless(defined($conn)) {
-            write_irssi("No connector name given");
-            return;
-        }
-
-        $conn = lc($conn);
-
-        if (exists($connconf->{$conn}->{'_immutable'})) {
-            write_irssi("Connector cannot be modified");
-            return;
-        }
-
-        unless(defined($schema)) {
-            write_irssi("No schema given");
-            return;
-        }
-
-        $schema = lc($schema);
-
-        unless(defined($proxy)) {
-            write_irssi("No proxy given");
-            return;
-        }
-
-        unless(exists($connconf->{$conn})) {
-            write_irssi("Connector does not exist");
-            return;
-        }
-
-        $connconf->{$conn}->{'schemas'}->{$schema} = $proxy;
-    } elsif ($subcmd eq 'delschema') {
-        my ($conn, $schema) = @_;
-
-        unless(defined($conn)) {
-            write_irssi("No connector name given");
-            return;
-        }
-
-        $conn = lc($conn);
-
-        if (exists($connconf->{$conn}->{'_immutable'})) {
-            write_irssi("Connector cannot be modified");
-            return;
-        }
-
-        unless(defined($schema)) {
-            write_irssi("No schema given");
-            return;
-        }
-
-        $schema = lc($schema);
-
-        unless(exists($connconf->{$conn})) {
-            write_irssi("Connector does not exist");
-            return;
-        }
-
-        delete($connconf->{$conn}->{'schemas'}->{$schema});
-    } elsif ($subcmd eq 'select') {
-        my @connlist = map { lc } @_;
-
-        if (scalar(@connlist) == 0) {
-            write_irssi("No connectors given");
-            return;
-        }
-
-        foreach (@connlist) {
-            unless(exists($connconf->{$_})) {
-                write_irssi("Connector %s does not exist", $_);
-                return;
-            }
-        }
-
-        $conf->{'videosite'}->{'connectorlist'} = [ @connlist ];
-    } else {
-        write_irssi("connector [list|add|del|addschema|delschema|help] <options>");
-        write_irssi(" help: Show this help");
-        write_irssi(" list: List the defined connectors");
-        write_irssi(" add <name>: Add a connector with name <name>");
-        write_irssi(" del <name>: Delete the connector with name <name>");
-        write_irssi(" addschema <name> <schema> <proxy>: Add proxy to connector for the given schema");
-        write_irssi(" delschema <name> <schema>: Remove the schema from the connector");
-        write_irssi(" select <name> [<name>...]: Select the connectors to use");
-    }
-}
-
-
-
-
-# save on unload
-sub sig_command_script_unload {
-    my $script = shift;
-    if ($script =~ /(.*\/)?videosite(\.pl)?$/) {
-        cmd_save();
-    }
-}
-
-sub ploader {
-
-    my $dir = shift;
-    my $pattern = shift;
-    my $type = shift;
-    my @list;
-    my $p;
-    my $g;
-    my @g = ();
-
-    opendir(D, $dir) || return ();
-    @list = grep {/$pattern/ && -f File::Spec->catfile($dir, $_) } readdir(D);
-    closedir(D);
-
-    foreach $p (@list) {
-        write_debug("Trying to load $p:");
-        $p =~ s/\.pm$//;
-        eval qq{ require videosite::$p; };
-        if ($@) {
-            write_irssi("Failed to load plugin: $@");
-            next;
-        }
-
-        $g = eval qq{ videosite::$p->new(); };
-        if ($@) {
-            write_irssi("Failed to instanciate: $@");
-            delete($INC{$p});
-            next;
-        }
-
-        write_debug("found $g->{'TYPE'} $g->{'NAME'}");
-        if ($type eq $g->{'TYPE'}) {
-            push(@g, $g);
-            $g->setio(\&write_irssi);
-            $g->setconn(\&connectorlist);
-        } else {
-            write_irssi('%s has wrong type (got %s, expected %s)', $p, $g->{'TYPE'}, $type);
-            delete($INC{$p});
-        }
-    }
-
-    write_debug("Loaded %d plugins", $#g+1);
-    
-    return @g;
-}
-
-sub _load_modules($) {
-
-    my $path = shift;
-
-    foreach (keys(%INC)) {
-        if ($INC{$_} =~ m|^$path|) {
-            write_debug("Removing %s from \$INC", $_);
-            delete($INC{$_});
-        }
-    }
-    @grabbers = ploader($path, '.*Grabber\.pm$', 'grabber');
-    @getters = ploader($path, '.*Getter\.pm$', 'getter');
-}
-
-
-sub init_videosite {
-
-    my $bindings = shift;
-    my $p;
-
-    if (-r $conffile) {
-        write_debug("Attempting JSON config load from %s", $conffile);
-        eval {
-            local $/;
-            open(CONF, '<', $conffile);
-            $conf = JSON->new->utf8->decode(<CONF>);
-            close(CONF);
-        };
-    } elsif (-r $xmlconffile) {
-        write_debug("Attempting XML config load from %s", $xmlconffile);
-        $conf = XML::Simple::XMLin($xmlconffile, ForceArray => ['config', 'option', 'connectorlist'], KeepRoot => 1, KeyAttr => {'connector' => '+name', 'config' => 'module', 'option' => 'key'});
-    }
-
-    unless(defined($conf)) {
-        # No config, start with an empty one
-        write_debug('No config found, using defaults');
-        $conf = { 'videosite' => { }};
-    }
-
-    foreach (keys(%{$PARAMS})) {
-        unless (exists($conf->{'videosite'}->{$_})) {
-            $conf->{'videosite'}->{$_} = $PARAMS->{$_};
-        }
-    }
-
-    # Make sure there is a connector called 'direct', which defines no
-    # proxies
-    unless (exists($conf->{'videosite'}->{'connectors'}->{'direct'})) {
-        $conf->{'videosite'}->{'connectors'}->{'direct'} = {
-                'name' => 'direct',
-                '_immutable' => '1',
-                'schemas' => {},
-        };
-    }
-
-    _load_modules($plugindir);
-
-    unless (defined(@grabbers) && defined(@getters)) {
-        write_irssi('No grabbers or no getters found, can not proceed.');
-        return;
-    }
-
-    $getter = $getters[0];
-    foreach $p (@getters) {
-        if ($conf->{'videosite'}->{'getter'} eq $p->{'NAME'}) {
-            $getter = $p;
-        }
-    }
-    write_debug('Selected %s as getter', $getter->{'NAME'});
-    $conf->{'videosite'}->{'getter'} = $getter->{'NAME'};
-
-    # Loop through all plugins and load the config
-    foreach $p (@grabbers, @getters) {
-        $conf->{'videosite'}->{'config'}->{$p->{'NAME'}} = $p->mergeconfig($conf->{'videosite'}->{'config'}->{$p->{'NAME'}});
-    }
-
-    if ($bindings) {
-
-        Irssi::signal_add_first('command script load', 'sig_command_script_unload');
-        Irssi::signal_add_first('command script unload', 'sig_command_script_unload');
-        Irssi::signal_add('setup saved', 'cmd_save');
-
-
-        Irssi::command_bind(_bcb('videosite' => \&cmdhandler));
-    }
-
-    write_irssi('initialized successfully');
-}
-
-sub sig_complete {
-    my ($complist, $window, $word, $linestart, $want_space) = @_;
-    my @matches;
-
-    if ($linestart !~ m|^/videosite\b|) {
-        return;
-    }
-
-    if ('/videosite' eq $linestart) {
-        # No command enterd so far. Produce a list of possible follow-ups
-        @matches = grep {/^$word/} keys (%{$videosite_commands});
-    } elsif ('/videosite set' eq $linestart) {
-        # 'set' command entered. Produce a list of modules
-        foreach (@grabbers, @getters) {
-            push(@matches, $_->{'NAME'}) if $_->{'NAME'} =~ m|^$word|;
-        };
-    } elsif ($linestart =~ m|^/videosite set (\w+)$|) {
-        my $module = $1;
-
-        foreach my $p (@getters, @grabbers) {
-            if ($p->{'NAME'} eq $module) {
-                @matches = $p->getparamlist($word);
-                last;
-            }
-        }
-    } elsif ($linestart =~ m|/videosite set (\w+) (\w+)$|) {
-        my $module = $1;
-        my $param = $2;
-
-        foreach my $p (@getters, @grabbers) {
-            if ($p->{'NAME'} eq $module) {
-                @matches = $p->getparamvalues($param, $word);
-                last;
-            }
-        }
-    }
-
-
-    push(@{$complist}, sort @matches);
-    ${$want_space} = 0;
-
-    Irssi::signal_stop();
-}
-
-# =================================
-# Reworked code below this line
-# =================================
 
 #
 # Initialize the config subsystem. Called by the core.
 
 #
 # Initialize the config subsystem. Called by the core.