332 |
values ( (select id from archive where dvd_nr =?), ?, ?, ?) |
values ( (select id from archive where dvd_nr =?), ?, ?, ?) |
333 |
}); |
}); |
334 |
|
|
335 |
foreach my $arc (@archives_to_burn) { |
my $copies = $Conf{BurnMultipleCopies} || 1; |
|
exit if ($arc eq ']quit['); |
|
336 |
|
|
337 |
my $dvd_nr = $1 if ($arc =~ m/DVD #(\d+)/); |
foreach my $copy_nr ( 1 .. $copies ) { |
|
die "BUG: can't find dvd_nr in $arc\n" unless ($dvd_nr); |
|
338 |
|
|
339 |
my $tmp_dir = "/$iso_dir/$dvd_nr"; |
foreach my $arc (@archives_to_burn) { |
340 |
|
exit if ($arc eq ']quit['); |
341 |
|
|
342 |
my $t = time(); |
my $dvd_nr = $1 if ($arc =~ m/DVD #(\d+)/); |
343 |
|
die "BUG: can't find dvd_nr in $arc\n" unless ($dvd_nr); |
344 |
|
|
345 |
print "Working on DVD #$dvd_nr in $tmp_dir\n"; |
my $tmp_dir = "/$iso_dir/$dvd_nr"; |
346 |
|
|
347 |
$sth_archive_backup_parts->execute($dvd_nr); |
my $t = time(); |
348 |
|
|
349 |
$sth_archive_backup_check->execute($dvd_nr); |
print "Working on DVD #$dvd_nr in $tmp_dir\n"; |
350 |
|
|
351 |
my ($parts_nr, $check_nr) = ($sth_archive_backup_parts->rows, $sth_archive_backup_check->fetchrow_array); |
$sth_archive_backup_parts->execute($dvd_nr); |
352 |
|
|
353 |
if ($parts_nr != $check_nr) { |
$sth_archive_backup_check->execute($dvd_nr); |
|
warn "ERROR: DVD #$dvd_nr is still not inconsistent state. Some backup parts are ", |
|
|
($parts_nr < $check_nr) ? "missing ($parts_nr < $check_nr)" : "extra ($parts_nr > $check_nr)", |
|
|
" you should re-create this DVD after BackupPC_incPartsUpdate finish\n"; |
|
|
delete_dvd( $dvd_nr ); |
|
|
next; |
|
|
} |
|
|
|
|
|
if ($sth_archive_backup_parts->rows == 0) { |
|
|
warn "ERROR: no backup parts found for $dvd_nr. You should re-create that DVD.\n"; |
|
|
next if delete_dvd( $dvd_nr ); |
|
|
} |
|
354 |
|
|
355 |
if ($prompt_for_delete) { |
my ($parts_nr, $check_nr) = ($sth_archive_backup_parts->rows, $sth_archive_backup_check->fetchrow_array); |
|
next if delete_dvd( $dvd_nr ); |
|
|
} |
|
356 |
|
|
357 |
my @volumes; |
if ($parts_nr != $check_nr) { |
358 |
my $v; # emtpy volume |
warn "ERROR: DVD #$dvd_nr is still not inconsistent state. Some backup parts are ", |
359 |
my $v_size = 0; |
($parts_nr < $check_nr) ? "missing ($parts_nr < $check_nr)" : "extra ($parts_nr > $check_nr)", |
360 |
|
" you should re-create this DVD after BackupPC_incPartsUpdate finish\n"; |
361 |
my $max_archive_size = $Conf{MaxArchiveSize} || die "no MaxArchiveSize"; |
delete_dvd( $dvd_nr ); |
362 |
while (my $row = $sth_archive_backup_parts->fetchrow_hashref) { |
next; |
|
if (($v->{size} || 0) + $row->{part_size} > $max_archive_size) { |
|
|
push @volumes, $v; |
|
|
$v = {}; |
|
363 |
} |
} |
364 |
$v->{size} += $row->{part_size}; |
|
365 |
# this part |
if ($sth_archive_backup_parts->rows == 0) { |
366 |
my $p = { |
warn "ERROR: no backup parts found for $dvd_nr. You should re-create that DVD.\n"; |
367 |
filename => BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'}), |
next if delete_dvd( $dvd_nr ); |
|
}; |
|
|
foreach my $fld (qw/part_nr md5/) { |
|
|
$p->{$fld} = $row->{$fld} || die "missing $fld in row!"; |
|
368 |
} |
} |
|
push @{ $v->{parts} }, $p; |
|
|
} |
|
|
push @volumes, $v if ($v); |
|
369 |
|
|
370 |
#warn "# volumes: ",Dumper(\@volumes),"\n"; |
if ($prompt_for_delete) { |
371 |
|
next if delete_dvd( $dvd_nr ); |
372 |
|
} |
373 |
|
|
374 |
my $volumes = $#volumes + 1; |
my @volumes; |
375 |
my $volume_nr = 1; |
my $v; # emtpy volume |
376 |
|
my $v_size = 0; |
377 |
|
|
378 |
|
my $max_archive_size = $Conf{MaxArchiveSize} || die "no MaxArchiveSize"; |
379 |
|
while (my $row = $sth_archive_backup_parts->fetchrow_hashref) { |
380 |
|
if (($v->{size} || 0) + $row->{part_size} > $max_archive_size) { |
381 |
|
push @volumes, $v; |
382 |
|
$v = {}; |
383 |
|
} |
384 |
|
$v->{size} += $row->{part_size}; |
385 |
|
# this part |
386 |
|
my $p = { |
387 |
|
filename => BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'}), |
388 |
|
}; |
389 |
|
foreach my $fld (qw/part_nr md5/) { |
390 |
|
$p->{$fld} = $row->{$fld} || die "missing $fld in row!"; |
391 |
|
} |
392 |
|
push @{ $v->{parts} }, $p; |
393 |
|
} |
394 |
|
push @volumes, $v if ($v); |
395 |
|
|
396 |
my $copies = $Conf{BurnMultipleCopies} || 1; |
#warn "# volumes: ",Dumper(\@volumes),"\n"; |
397 |
|
|
398 |
foreach my $copy_nr ( 1 .. $copies ) { |
my $volumes = $#volumes + 1; |
399 |
|
my $volume_nr = 1; |
400 |
|
|
401 |
foreach my $v (@volumes) { |
foreach my $v (@volumes) { |
402 |
|
|
490 |
rmtree($stage) || warn "can't remove stage directory $stage: $!"; |
rmtree($stage) || warn "can't remove stage directory $stage: $!"; |
491 |
|
|
492 |
} else { |
} else { |
493 |
print "ISO $iso_file allready exists\n"; |
$iso_size = (stat($iso_file))[7]; |
494 |
|
print "ISO $iso_file allready exists [$iso_size bytes]\n"; |
495 |
} |
} |
496 |
|
|
497 |
print "\nREADY TO BURN MEDIA $disk_name copy $copy_nr\n\nPlease insert blank media and press ENTER\n\n"; |
print "\nREADY TO BURN MEDIA $disk_name copy $copy_nr\n\nPlease insert blank media and press ENTER\n\n"; |
511 |
$sth_archive_burned->execute($dvd_nr, $iso_size, $volume_nr, $copy_nr); |
$sth_archive_burned->execute($dvd_nr, $iso_size, $volume_nr, $copy_nr); |
512 |
|
|
513 |
print "Media burn for $disk_name copy $copy_nr recorded\n"; |
print "Media burn for $disk_name copy $copy_nr recorded\n"; |
514 |
|
|
515 |
|
$volume_nr++; |
516 |
} |
} |
517 |
|
|
|
$volume_nr++; |
|
518 |
} |
} |
519 |
|
|
520 |
SKIP: |
SKIP: |