create diskname in form "DVD_ID part/total_parts" (e.g. 66 1/3)
[BackupPC.git] / bin / BackupPC_burnArchiveCLI
index 2c442ed..5005889 100755 (executable)
@@ -21,13 +21,18 @@ my $bpc = BackupPC::Lib->new(undef, undef, 1) || die;
 my %Conf = $bpc->Conf();
 %BackupPC::SearchLib::Conf = %Conf;
 
-my $cdrecord = $Conf{CDRecordBin} || die "Need CDRecordBin in config.pl\n";
+my $conf_bin;
+
+$conf_bin->{'cdrecord'} = $Conf{CDRecordBin} || die "Need CDRecordBin in config.pl\n";
 my $cdr_opts = $Conf{CDRecordOpts} || die "Need CDRecordOpts in config.pl\n";
+$conf_bin->{'eject'} = $Conf{ejectBin} || die "Need ejectBin in config.pl\n";
+my $eject_opts = $Conf{ejectOpts} || die "Need ejectOpts in config.pl\n";
+$conf_bin->{'mkisofs'} = $Conf{mkisofsBin} || die "Need mkisofsBin in config.pl\n";
 
 
 my $bin;
-foreach my $c (qw/mkisofs eject/, $cdrecord) {
-       $bin->{$c} = which($c) || die "$0 needs $c, install it\n";
+foreach my $c (qw/cdrecord eject mkisofs/) {
+       $bin->{$c} = which($conf_bin->{$c}) || die "$0 needs $c ($conf_bin->{$c}), install it\n";
 }
 
 my $start_t = time();
@@ -67,11 +72,12 @@ sub curr_time {
 sub dumpArchive2XML($$$)
 {
        my ($dbh, $dvd_nr, $filename) = @_;
-       my %archive;    
-       my $output = new IO::File(">$filename");
+       my %archive;
+
+       my $output = new IO::File('> '.$filename.'.tmp');
        my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1);
 
-       print "Dumping file list for DVD $dvd_nr";
+       print "Dumping file list for DVD $dvd_nr, countdown:";
 
        $writer->pi('xml-stylesheet', 'href="archive.css" type="text/css"');
 
@@ -123,9 +129,18 @@ sub dumpArchive2XML($$$)
        my $sth_backups = $dbh->prepare( $backups_sql );
        $sth_backups->execute( $row_h->{'id'} );
 
+       my $total_backups = $sth_backups->rows;
+       my $curr_backup = 0;
+       my $last_pcnt = 0;
+
        while (my $row = $sth_backups->fetchrow_hashref()) {
 
-               print ".";
+               $curr_backup++;
+               my $pcnt = int(($curr_backup * 10) / $total_backups);
+               if ($pcnt > $last_pcnt) {
+                       print " ",(10 - $pcnt);
+                       $last_pcnt = $pcnt;
+               }
 
                my $sth_files = $dbh->prepare( $files_sql);
                $sth_files->execute($row->{'backup_id'});
@@ -151,6 +166,8 @@ sub dumpArchive2XML($$$)
        $writer->endTag("archive");
        $writer->end(); 
 
+       rename $filename.'.tmp', $filename || die "can't rename $filename: $!";
+
        print "\n";
 }
 
@@ -287,7 +304,7 @@ foreach my $arc (@archives_to_burn) {
                if ($parts > 1) {
                        # parts start with 0, so we have -1 here
                        $part_path = '.' . ($part_nr - 1);
-                       $disk_name .= '.' . $part_nr;
+                       $disk_name .= ' ' . $part_nr . '/' . $parts;
                }
 
                print "Processing part $part_nr/$parts\n";
@@ -336,10 +353,12 @@ foreach my $arc (@archives_to_burn) {
 
                        print "Running mkisofs now for $inc increments, disk $disk_name\n";
 
-                       my $cmd = $bin->{'mkisofs'} . qq{ -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V $disk_name -o $iso_file -path-list $list_file };
+                       my $cmd = $bin->{'mkisofs'} . qq{ -A BackupPC -gui -J -r -T --input-charset ISO-8859-2 -V "$disk_name" -o ${iso_file}.tmp -path-list $list_file };
 
                        system($cmd) == 0 or skip "can't run $cmd: $?";
 
+                       rename $iso_file.'.tmp', $iso_file || skip "can't rename $iso_file: $!";
+
                        $iso_size = (stat($iso_file))[7];
 
                        print "Created $iso_file [$iso_size bytes] in ", fmt_time(time() - $t), "\n";
@@ -354,11 +373,11 @@ foreach my $arc (@archives_to_burn) {
 
                        print "\nREADY TO BURN MEDIA $disk_name copy $copy_nr\n\nPlease insert blank media and press ENTER\n\n";
 
-                       system($bin->{'eject'}) == 0 or skip "can't run eject: $?";
+                       system($bin->{'eject'}.' '.$eject_opts) == 0 or skip "can't run eject: $?";
 
                        my $wait = <STDIN>;
 
-                       my $cmd = $bin->{$cdrecord} . ' ' . $cdr_opts . ' ' . $iso_file;
+                       my $cmd = $bin->{'cdrecord'} . ' ' . $cdr_opts . ' ' . $iso_file;
 
                        # FIXME
                        print "## $cmd\n";