Convert to use of a json style config file
authorRalf Ertzinger <ralf@skytale.net>
Mon, 4 Mar 2013 19:02:20 +0000 (20:02 +0100)
committerRalf Ertzinger <ralf@skytale.net>
Mon, 4 Mar 2013 19:02:20 +0000 (20:02 +0100)
videosite.pl

index 6ea4892..9998c61 100644 (file)
@@ -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(<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->{$_};