--- trunk/bin/BackupPC_burnArchiveCLI 2005/10/12 13:14:06 187 +++ trunk/bin/BackupPC_burnArchiveCLI 2005/10/12 16:49:02 188 @@ -55,6 +55,89 @@ return strftime($t_fmt,localtime()); } +sub dumpArchive2XML($$$) +{ + my ($dbh, $dvd_nr, $filename) = @_; + my %archive; + my $output = new IO::File(">$filename"); + my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1); + + my $files_sql = q{ + SELECT + files.path AS path, + files.date AS date, + files.type AS type, + files.size AS size + FROM files, backups, shares + WHERE files.backupnum=backups.num AND + files.shareid=shares.id AND + shares.hostid=backups.hostid AND + backups.id=? + }; + + my $backups_sql = q{ + SELECT + backups.id AS backup_id, + hosts.name AS host, + backups.num AS num, + backups.date AS date, + shares.name AS share, + backups.size AS backup_size, + backups.inc_size AS compress_size + FROM backups, archive_backup, hosts, shares + WHERE archive_backup.backup_id = backups.id + AND hosts.id=backups.hostid + AND shares.id=backups.shareid + AND archive_backup.archive_id = ? + }; + + my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?"); + $sth->execute($dvd_nr); + my $row = $sth->fetchrow_hashref(); + + my $row_h; + foreach my $hide (qw/id note/) { + $row_h->{$hide} = $row->{$hide} || die "no $hide"; + delete $row->{$hide}; + } + + $writer->startTag("archive", %{$row}); + + $writer->startTag("note"); + $writer->characters( $row_h->{'note'} ); + $writer->endTag("note"); + + my $sth_backups = $dbh->prepare( $backups_sql ); + $sth_backups->execute( $row_h->{'id'} ); + + while (my $row = $sth_backups->fetchrow_hashref()) { + + my $sth_files = $dbh->prepare( $files_sql); + $sth_files->execute($row->{'backup_id'}); + + delete($row->{'backup_id'}); + + $writer->startTag( "backup", %{$row} ); + + while (my $row = $sth_files->fetchrow_hashref()) { + # convert filetype to string + $row->{'type'} = BackupPC::Attrib::fileType2Text(undef, $row->{'type'}); + my $path = $row->{'path'}; delete $row->{'path'}; + + $writer->startTag("file", %{$row}); + $writer->characters( $path ); + $writer->endTag("file"); + } + $writer->endTag("backup"); + } + + $writer->endTag("archive"); + $writer->end(); + +} + + + #----- main my $sth = $dbh->prepare( qq{ @@ -162,9 +245,10 @@ print "Working on DVD #$dvd_nr in $tmp_dir\n"; - my $list_file = my $iso_file = "${iso_dir}/${dvd_nr}"; + my $list_file = my $iso_file = my $xml_file = "${iso_dir}/${dvd_nr}"; $list_file .= '.list'; $iso_file .= '.iso'; + $xml_file .= '.xml'; if (-e $iso_file) { print "ISO $iso_file allready exists\n"; @@ -187,6 +271,9 @@ # FIXME add file list in xml and txt and note file + dumpArchive2XML($dbh, $dvd_nr, $xml_file); + print $list "$xml_file\n"; + close($list); print "Running mkisofs now for $inc increments...\n";