11 |
use Term::Menus; |
use Term::Menus; |
12 |
use File::Which; |
use File::Which; |
13 |
use File::Path; |
use File::Path; |
14 |
|
use Filesys::Df; |
15 |
|
|
16 |
use Data::Dumper; |
use Data::Dumper; |
17 |
|
|
194 |
|
|
195 |
$sth->execute(); |
$sth->execute(); |
196 |
|
|
197 |
|
sub fmt_mb($) { |
198 |
|
my $s = shift; |
199 |
|
die "missing size" unless defined($s); |
200 |
|
$s /= (1024*1024); |
201 |
|
return sprintf("%.2f Mb", $s); |
202 |
|
} |
203 |
|
|
204 |
sub fmt_archive($) { |
sub fmt_archive($) { |
205 |
my $row = shift || die; |
my $row = shift || die; |
206 |
|
|
207 |
$row->{'date'} =~ s/\.\d+$//; |
$row->{'date'} =~ s/\.\d+$//; |
208 |
$row->{'copies'} =~ s/^\s*0+\s*$/no/; |
$row->{'copies'} =~ s/^\s*0+\s*$/no/; |
|
$row->{'total_size'} /= (1024*1024); |
|
209 |
|
|
210 |
my $copies = 'copies'; |
my $copies = 'copies'; |
211 |
$copies = 'copy' if ($row->{'copies'} == 1); |
$copies = 'copy' if ($row->{'copies'} == 1); |
212 |
|
|
213 |
return |
return |
214 |
sprintf("%d by %s on %s, %s %s [%.2f Mb]", |
sprintf("%d by %s on %s, %s %s [%s]", |
215 |
$row->{'dvd_nr'}, |
$row->{'dvd_nr'}, |
216 |
$row->{'username'}, |
$row->{'username'}, |
217 |
$row->{'date'}, |
$row->{'date'}, |
218 |
$row->{'copies'}, $copies, |
$row->{'copies'}, $copies, |
219 |
$row->{'total_size'}, |
fmt_mb($row->{'total_size'}), |
220 |
); |
); |
221 |
} |
} |
222 |
|
|
389 |
$v = {}; |
$v = {}; |
390 |
} |
} |
391 |
$v->{size} += $row->{part_size}; |
$v->{size} += $row->{part_size}; |
392 |
|
$v_size += $row->{part_size}; |
393 |
|
|
394 |
# this part |
# this part |
395 |
my $p = { |
my $p = { |
396 |
filename => BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'}), |
filename => BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'}), |
402 |
} |
} |
403 |
push @volumes, $v if ($v); |
push @volumes, $v if ($v); |
404 |
|
|
405 |
#warn "# volumes: ",Dumper(\@volumes),"\n"; |
#warn "# volumes: ",Dumper(\@volumes)," total size: ", fmt_mb($v_size), "\n"; |
406 |
|
|
407 |
|
# check available disk space |
408 |
|
|
409 |
|
my $df = df($iso_dir)->{bavail} || die "can't get free space on $iso_dir"; |
410 |
|
$df *= 1024; # calulate space in bytes |
411 |
|
if ($df < $v_size) { |
412 |
|
warn "ABORTED: not enough disk space to create ISO ! [need ", fmt_mb($v_size), " have ", fmt_mb( $df ), " on $iso_dir]\n"; |
413 |
|
next; |
414 |
|
} |
415 |
|
|
416 |
my $volumes = $#volumes + 1; |
my $volumes = $#volumes + 1; |
417 |
my $volume_nr = 1; |
my $volume_nr = 1; |
430 |
$disk_name .= ' ' . $volume_nr . '/' . $volumes; |
$disk_name .= ' ' . $volume_nr . '/' . $volumes; |
431 |
} |
} |
432 |
|
|
433 |
print "Processing DVD #$dvd_nr, volume $volume_nr/$volumes\n"; |
print "Processing DVD #$dvd_nr, volume $volume_nr/$volumes [", fmt_mb($v->{size}), "]\n"; |
434 |
|
|
435 |
my $iso_file = my $xml_file = my $stage = |
my $iso_file = my $xml_file = my $stage = |
436 |
"${iso_dir}/${dvd_nr}"; |
"${iso_dir}/${dvd_nr}"; |
529 |
$sth_archive_burned->execute($dvd_nr, $iso_size, $volume_nr, $copy_nr); |
$sth_archive_burned->execute($dvd_nr, $iso_size, $volume_nr, $copy_nr); |
530 |
|
|
531 |
print "Media burn for $disk_name copy $copy_nr recorded\n"; |
print "Media burn for $disk_name copy $copy_nr recorded\n"; |
532 |
|
|
533 |
|
if ($copy_nr >= $copies) { |
534 |
|
print STDERR "erasing temporary files, have $copy_nr copies (> $copies)\n"; |
535 |
|
foreach my $f (( $xml_file, $iso_file )) { |
536 |
|
print STDERR "\t$f "; |
537 |
|
unlink $f || die "can't remove $f: $!"; |
538 |
|
print STDERR "removed\n"; |
539 |
|
} |
540 |
|
} |
541 |
|
|
542 |
$volume_nr++; |
$volume_nr++; |
543 |
} |
} |
544 |
|
|