c7baf0062d13a0cd518f5542cb346522316f71f0
7 use Encode
qw{encode_utf8 decode_utf8
};
10 BEGIN { binmode STDOUT
, ":utf8"; }
12 my $ROOT = "/mnt/dvd/archive";
13 my $DB = DBI
->connect("dbi:Pg:host=roadstar", "", "",
20 if (/\.iso$/ && ! -l
&& -f
) {
21 my $fn = decode_utf8
$File::Find
::name
;
29 my $st_set = $DB->prepare("SELECT id, name, ndisc FROM dvd_set");
30 my $st_disc = $DB->prepare("SELECT disc, path FROM dvd_disc
36 my @r = $st_set->fetchrow_array; last SET
unless @r;
37 my ($id, $name, $ndisc) = @r;
40 $st_disc->execute($id);
42 my @r = $st_disc->fetchrow_array; last DISC
unless @r;
43 my ($disc, $path) = @r;
44 $disc == @path or die "bad disc sequence for `$name'";
47 @path == $ndisc or die "wrong number of discs for `$name'";
48 $set_path{$name} = \
@path; $set_id{$name} = $id;
51 for my $name (keys %set_path) {
53 for my $path (@
{$set_path{$name}}) {
54 if (defined $path && exists $iso{$path}) { delete $iso{$path}; }
57 ##if ($allp) { delete $set_path{$name}; }
60 my @iso = sort keys %iso;
61 for my $name (sort { $set_path{$a}[0] cmp $set_path{$b}[0] }
63 my $paths = $set_path{$name};
65 while (@iso && $iso[0] lt $paths->[0]) { push @unk, shift @iso; }
68 for my $path (@unk) { print "\t", $path, "\n"; }
70 printf "[#%d: %d] %s\n", $set_id{$name}, scalar @
$paths, $name;
72 for my $path (@
$paths) {
75 printf "\t!! (disc %d)\n", $i;
77 my $fn = "$ROOT/$path";
78 if (-f
$fn && ! -l
$fn) { print "\t" . $path . "\n"; }
79 else { print "\t!! ". $path . "\n"; }
86 for my $path (@iso) { print "\t", $path, "\n"; }