X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite.pl;h=737ba823a771edc3a4acabbef840ea86ddf8106c;hb=d4fae22c083e110d1c788a78196f85d1e39b116e;hp=d7a549fc7c4035cf181e26e70068515cc86a663e;hpb=0f78af364f409df12ad3008633a5dcdf3e90286f;p=videosite.git diff --git a/videosite.pl b/videosite.pl index d7a549f..737ba82 100644 --- a/videosite.pl +++ b/videosite.pl @@ -25,12 +25,14 @@ use File::Spec; use File::Temp qw(tempfile); use BettIrssi 101 qw(_bcb _bcs); use LWP::UserAgent; +use JSON -support_by_pp; my @grabbers; my @getters; my $getter; my $conf; -my $conffile = File::Spec->catfile(Irssi::get_irssi_dir(), 'videosite.xml'); +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); @@ -176,7 +178,7 @@ sub expand_url_shortener { 'shar\.es/[[:alnum:]]+', 'goo\.gl/[[:alnum:]]+', ); - my $ua = LWP::UserAgent->new(agent => 'Mozilla', max_redirect => 0); + my $ua = LWP::UserAgent->new(agent => 'Mozilla', max_redirect => 0, timeout => 5); my $i = 10; OUTER: while (($os ne $s) and ($i > 0)) { @@ -277,10 +279,9 @@ sub check_for_link { sub cmd_save { - eval { - my ($tempfile, $tempfn) = tempfile("videosite.xml.XXXXXX", dir => Irssi::get_irssi_dir()); - print $tempfile XML::Simple::XMLout($conf, KeepRoot => 1, KeyAttr => {'connector' => '+name', 'config' => 'module', 'option' => 'key'}); + 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); }; @@ -666,11 +667,25 @@ sub init_videosite { my $bindings = shift; my $p; - unless(-r $conffile && defined($conf = XML::Simple::XMLin($conffile, ForceArray => ['config', 'option', 'connectorlist'], KeepRoot => 1, KeyAttr => {'connector' => '+name', 'config' => 'module', 'option' => 'key'}))) { + if (-r $conffile) { + write_debug("Attempting JSON config load from %s", $conffile); + eval { + local $/; + open(CONF, '<', $conffile); + $conf = JSON->new->utf8->decode(); + 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->{$_};