Moved downloading to main job loop, changed print values, so that . = no update, D = downloaded update, F = program failure, E = error downloading file, | = retry
This commit is contained in:
82
pcurse
82
pcurse
@ -3,6 +3,7 @@ use strict;
|
||||
no warnings 'all';
|
||||
use feature ':5.10';
|
||||
use IO::Tee;
|
||||
use Data::Dumper;
|
||||
use lib '.';
|
||||
use pcurse;
|
||||
|
||||
@ -47,7 +48,9 @@ if(defined($opts->{'add'})) {
|
||||
|
||||
my $pool = pcurse::init_pool($conf->{'workers'});
|
||||
my $worki = 0;
|
||||
print 'Checking for updates ';
|
||||
my %tounpack;
|
||||
my @errors;
|
||||
print 'Updating ';
|
||||
foreach my $addon(@{$addons}) {
|
||||
my $workid = $pool->job('check',$addon);
|
||||
$jobs{$workid}{'todo'} = 'check';
|
||||
@ -57,18 +60,23 @@ foreach my $addon(@{$addons}) {
|
||||
}
|
||||
while(scalar(keys %jobs)) {
|
||||
my $jobid;
|
||||
if(my @jres = $pool->result_any(\$jobid)) {
|
||||
if($jres[0] == 1) {
|
||||
my $a = $jres[1]; #Addon data structure
|
||||
my $i = $jobs{$jobid}{'i'}; #ID from @{$addons}
|
||||
my $v = $jres[1]->{'targetversion'}; #Version we're trying to fetch
|
||||
die "Not enough params: a: $a, i: $i, v: $v" unless(defined($a) && defined($i) && defined($v));
|
||||
my $nextjob = [ $i, $a, $v ];
|
||||
push(@toupd,$nextjob);
|
||||
} elsif($jres[1] eq 'No need to update') {
|
||||
if(my $jres = $pool->result_any(\$jobid)) {
|
||||
if($jres->{'did'} eq 'check') {
|
||||
if($jres->{'retval'} == 1) {
|
||||
my $addon = $jres->{'addon'}; #Addon data structure
|
||||
my $id = $jobs{$jobid}{'i'}; #ID from @{$addons}
|
||||
my $version = $jres->{'addon'}->{'targetversion'}; #Version we're trying to fetch
|
||||
die "Not enough params: addon: $addon, id: $id, version: $version" unless(defined($addon) && defined($id) && defined($version));
|
||||
my $workid = $pool->job('download', $addon->{'downloaduri'},$addon->{'fileid'});
|
||||
$jobs{$workid}{'todo'} = 'download';
|
||||
$jobs{$workid}{'job'} = [ $addon->{'downloaduri'},$addon->{'fileid'} ];
|
||||
$jobs{$workid}{'id'} = $id;
|
||||
$jobs{$workid}{'tv'} = $version;
|
||||
} elsif($jres->{'result'} eq 'No need to update') {
|
||||
print '.';
|
||||
} else {
|
||||
if(exists($jobs{$jobid}->{'retried'})) {
|
||||
say 'Error during check: '.$jres[1];
|
||||
push(@errors,'Error during check: '.$jres->{'addon'}->{'name'})
|
||||
} else {
|
||||
print '|';
|
||||
$jobs{$jobid}{'job'}->{'retried'} = 1;
|
||||
@ -78,51 +86,35 @@ while(scalar(keys %jobs)) {
|
||||
$jobs{$workid}{'i'} = $jobs{$jobid}{'i'};
|
||||
}
|
||||
}
|
||||
delete $jobs{$jobid};
|
||||
print '.';
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
||||
|
||||
print 'Downloading updates ' if(scalar(@toupd));
|
||||
foreach my $a(@toupd) {
|
||||
my $id = $a->[0];
|
||||
my $addon = $a->[1];
|
||||
my $version = $a->[2];
|
||||
my $workid = $pool->job('download',$addon->{'downloaduri'},$addon->{'fileid'});
|
||||
$jobs{$workid}{'todo'} = 'download';
|
||||
$jobs{$workid}{'job'} = [ $addon->{'downloaduri'},$addon->{'fileid'} ];
|
||||
$jobs{$workid}{'id'} = $id;
|
||||
$jobs{$workid}{'tv'} = $version;
|
||||
}
|
||||
|
||||
my %tounpack;
|
||||
while(scalar(keys %jobs)) {
|
||||
my $jobid;
|
||||
if(my @jres = $pool->result_any(\$jobid)) {
|
||||
if($jres[0]{'retval'} == 1) {
|
||||
my $ret = $jres[0]{'retval'};
|
||||
my $filename = $jres[0]{'filename'};
|
||||
my $file = $jres[0]{'filecontent'};
|
||||
} elsif($jres->{'did'} eq 'download') {
|
||||
if($jres->{'retval'} == 1) {
|
||||
my $ret = $jres->{'retval'};
|
||||
my $filename = $jres->{'filename'};
|
||||
my $file = $jres->{'filecontent'};
|
||||
my $version = $jobs{$jobid}{'tv'};
|
||||
if(defined($filename)) {
|
||||
$tounpack{$filename} = [ $jobs{$jobid}{'id'},$file,$version ];
|
||||
print 'D';
|
||||
} else {
|
||||
print 'F';
|
||||
my $ai = $jobs{$jobid}{'id'};
|
||||
my $an = $addons->[$ai]->{'name'};
|
||||
say 'Passed an empty filename? in update';
|
||||
push(@errors,'Passed an empty filename? in update '.$an)
|
||||
}
|
||||
} else {
|
||||
my $uri = shift;
|
||||
say 'Download failed for '.$uri;
|
||||
print 'E';
|
||||
my $uri = $jres->{'uri'};
|
||||
push(@errors, 'Download failed for '.$uri);
|
||||
}
|
||||
} else {
|
||||
print Dumper $jres;
|
||||
}
|
||||
delete $jobs{$jobid};
|
||||
print '.';
|
||||
}
|
||||
}
|
||||
|
||||
$pool->shutdown;
|
||||
print "\n" if(scalar(@toupd));
|
||||
print "\n";
|
||||
|
||||
say 'Unpacking updates ' if(scalar(keys %tounpack));
|
||||
foreach my $unpacking(keys %tounpack) {
|
||||
@ -137,6 +129,10 @@ foreach my $unpacking(keys %tounpack) {
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $err(@errors) {
|
||||
say $err;
|
||||
}
|
||||
|
||||
($ret,$msg) = pcurse::save_config($conf->{'addons'},$addons);
|
||||
print $msg."\n" unless($ret);
|
||||
close $lf;
|
||||
|
||||
12
pcurse.pm
12
pcurse.pm
@ -326,22 +326,22 @@ sub init_pool {
|
||||
$addon->{'downloaduri'} = $addon->{'host'}.$addon->{'uri'}.'/download/'.$fileid.'/file';
|
||||
}
|
||||
$addon->{'targetversion'} = $version;
|
||||
return (1,$addon);
|
||||
return { retval => 1, did => 'check', addon => $addon };
|
||||
}
|
||||
} else {
|
||||
return (0,'No need to update');
|
||||
return { retval => 0, did => 'check', result => 'No need to update', addon => $addon };
|
||||
}
|
||||
} else {
|
||||
return (0,'Could not find file id for '.$addon->{'name'});
|
||||
return { retval => 0, did => 'check', result => 'Could not find file id for '.$addon->{'name'} };
|
||||
}
|
||||
} elsif($todo eq 'download') {
|
||||
my $uri = shift;
|
||||
my $fileid = shift;
|
||||
my ($ret,$filename,$file) = pcurse::download_update($uri,$fileid);
|
||||
return { retval => $ret, filename => $filename, filecontent => $file } if($ret);
|
||||
return { retval => 0, filename => undef, filecontent => undef };
|
||||
return { retval => $ret, did => 'download', filename => $filename, filecontent => $file } if($ret);
|
||||
return { retval => 0, did => 'download', filename => undef, filecontent => undef, uri => $uri };
|
||||
} else {
|
||||
return (0,'Unknown task');
|
||||
return { retval => 0, result => 'Unknown task' };
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user