From 1cfec45c0c1cac8fdebca4313c3bcfb3a9f1ab07 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Mon, 4 Mar 2013 20:02:20 +0100 Subject: [PATCH] Convert to use of a json style config file --- videosite.pl | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/videosite.pl b/videosite.pl index 6ea4892..9998c61 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); @@ -277,10 +279,10 @@ sub check_for_link { sub cmd_save { - + print Dumper($conf); 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 +668,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->{$_}; -- 1.8.3.1