Added config system
This commit is contained in:
21
pcurse
21
pcurse
@@ -6,24 +6,26 @@ use Data::Dumper;
|
|||||||
use pcurse;
|
use pcurse;
|
||||||
select(STDOUT);
|
select(STDOUT);
|
||||||
$| = 1;
|
$| = 1;
|
||||||
my $wowpath = '/mnt/Div/World of Warcraft/_retail_/Interface/AddOns/';
|
my $ret;
|
||||||
my $base_uri = 'http://www.curseforge.com';
|
my $msg;
|
||||||
my $addons_file = $ENV{'HOME'}.'/.pcurse/addons.json';
|
|
||||||
my %opts = pcurse::parse_arguments;
|
my %opts = pcurse::parse_arguments;
|
||||||
my $addons = pcurse::load_addons($addons_file);
|
$opts{'config'} = $ENV{'HOME'}.'/.pcurse/config.json' unless($opts{'config'});
|
||||||
|
my $conf = pcurse::load_config($opts{'config'});
|
||||||
|
$conf = pcurse::check_config($conf);
|
||||||
|
($ret,$msg) = pcurse::save_config($opts{'config'},$conf);
|
||||||
|
print $msg."\n" unless($ret);
|
||||||
|
my $addons = pcurse::load_addons($conf->{'addons'});
|
||||||
foreach my $addon(@{$addons}) {
|
foreach my $addon(@{$addons}) {
|
||||||
print 'Found '.$addon->{'name'}.'('.$addon->{'version'}.')';
|
print 'Found '.$addon->{'name'}.'('.$addon->{'version'}.')';
|
||||||
if(exists($addon->{'uri'})) {
|
if(exists($addon->{'uri'})) {
|
||||||
#print ' - at '.$addon->{'uri'};
|
my $html = pcurse::html_get($conf->{'baseuri'}.$addon->{'uri'});
|
||||||
my $html = pcurse::html_get($base_uri.$addon->{'uri'});
|
|
||||||
my $fileid = pcurse::get_latest_file_id($html,$addon->{'uri'});
|
my $fileid = pcurse::get_latest_file_id($html,$addon->{'uri'});
|
||||||
if($fileid) {
|
if($fileid) {
|
||||||
my $version = pcurse::get_product_version($html,$addon->{'uri'},$fileid);
|
my $version = pcurse::get_product_version($html,$addon->{'uri'},$fileid);
|
||||||
print ' - latest version is '.$version;
|
print ' - latest version is '.$version;
|
||||||
if($version && ($version ne $addon->{'version'})) {
|
if($version && ($version ne $addon->{'version'})) {
|
||||||
print ' - updating';
|
print ' - updating';
|
||||||
my $ret = 0;
|
my $ret = pcurse::update($conf->{'baseuri'}.$addon->{'uri'},$fileid,$conf->{'wowpath'});
|
||||||
#my $ret = pcurse::update($base_uri.$addon->{'uri'},$fileid,$wowpath);
|
|
||||||
if($ret) {
|
if($ret) {
|
||||||
print ' - done';
|
print ' - done';
|
||||||
$addon->{'version'} = $version;
|
$addon->{'version'} = $version;
|
||||||
@@ -31,12 +33,11 @@ foreach my $addon(@{$addons}) {
|
|||||||
print ' - failed';
|
print ' - failed';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
print 'Could not find product id for '.$addon->{'name'};
|
print 'Could not find product id for '.$addon->{'name'};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
my ($ret,$msg) = pcurse::save_addons($addons_file,$addons);
|
($ret,$msg) = pcurse::save_config($conf->{'addons'},$addons);
|
||||||
print $msg."\n" unless($ret);
|
print $msg."\n" unless($ret);
|
||||||
|
|||||||
56
pcurse.pm
56
pcurse.pm
@@ -11,10 +11,58 @@ sub parse_arguments {
|
|||||||
my %toret;
|
my %toret;
|
||||||
GetOptions (
|
GetOptions (
|
||||||
"verbose+" => \$toret{'verbose'},
|
"verbose+" => \$toret{'verbose'},
|
||||||
|
"wowpath=s" => \$toret{'wowpath'},
|
||||||
|
"baseuri=s" => \$toret{'baseuri'},
|
||||||
|
"config=s" => \$toret{'config'},
|
||||||
);
|
);
|
||||||
return %toret;
|
return %toret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub load_config {
|
||||||
|
my $file = shift;
|
||||||
|
my $toret;
|
||||||
|
unless(-e $file) {
|
||||||
|
my @p = split(/\//, $file);
|
||||||
|
my $file = pop(@p);
|
||||||
|
my $path = join('/', @p);
|
||||||
|
unless(-d $path) {
|
||||||
|
print 'Will create path: '.$path."\n";
|
||||||
|
system("mkdir","-p","$path");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$toret = pcurse::import_json($file);
|
||||||
|
}
|
||||||
|
$toret = pcurse::sane_defaults($toret);
|
||||||
|
foreach my $k(keys %{$toret}) {
|
||||||
|
print "k: $k, val: $toret->{$k}\n";
|
||||||
|
}
|
||||||
|
return $toret;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_config {
|
||||||
|
my $conf = shift;
|
||||||
|
unless($conf->{'wowpath'}) {
|
||||||
|
print 'Where is your addons installed? (complete path, including AddOns on the end): ';
|
||||||
|
while(my $line = <>) {
|
||||||
|
chomp($line);
|
||||||
|
if(-e $line) {
|
||||||
|
$conf->{'wowpath'} = $line;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
print 'You sure? Cannot read that path. Try again: ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub sane_defaults {
|
||||||
|
my $in = shift;
|
||||||
|
$in->{'baseuri'} = 'http://www.curseforge.com' unless(exists($in->{'baseuri'}));
|
||||||
|
$in->{'config'} = $ENV{'HOME'}.'/.pcurse/config.json' unless(exists($in->{'config'}));
|
||||||
|
$in->{'addons'} = $ENV{'HOME'}.'/.pcurse/addons.json' unless(exists($in->{'addons'}));
|
||||||
|
return $in;
|
||||||
|
}
|
||||||
|
|
||||||
sub load_addons {
|
sub load_addons {
|
||||||
my $addons_file = shift;
|
my $addons_file = shift;
|
||||||
unless(-e $addons_file) {
|
unless(-e $addons_file) {
|
||||||
@@ -43,15 +91,15 @@ sub load_addons {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub save_addons {
|
sub save_config {
|
||||||
my $json = JSON->new;
|
my $json = JSON->new;
|
||||||
my $addons_file = shift;
|
my $file = shift;
|
||||||
my $json_data = shift;
|
my $json_data = shift;
|
||||||
my $text = $json->pretty->encode($json_data);
|
my $text = $json->pretty->encode($json_data);
|
||||||
open my $fh, ">", $addons_file or return (0,'Could not open '.$addons_file.' for writing: '.$!);
|
open my $fh, ">", $file or return (0,'Could not open '.$file.' for writing: '.$!);
|
||||||
print $fh $text;
|
print $fh $text;
|
||||||
close $fh;
|
close $fh;
|
||||||
return (1,$addons_file.' saved successfully');
|
return (1,$file.' saved successfully');
|
||||||
}
|
}
|
||||||
|
|
||||||
sub import_json {
|
sub import_json {
|
||||||
|
|||||||
Reference in New Issue
Block a user