| 1 | #! /usr/bin/perl |
| 2 | |
| 3 | use autodie qw{:all}; |
| 4 | use open ":utf8"; |
| 5 | use strict; |
| 6 | |
| 7 | use DBI; |
| 8 | use Getopt::Std; |
| 9 | |
| 10 | BEGIN { binmode STDOUT, ":utf8"; } |
| 11 | |
| 12 | (my $prog = $0) =~ s:^.*/::; |
| 13 | sub HELP_MESSAGE ($;@) { |
| 14 | my ($fh) = @_; |
| 15 | print $fh "usage: $prog [-a]\n"; |
| 16 | } |
| 17 | my $ROOT = "/mnt/dvd/archive"; |
| 18 | |
| 19 | my $bogusp = 0; |
| 20 | my %opt; |
| 21 | getopts("ha", \%opt) or $bogusp = 1; |
| 22 | if ($opt{"h"}) { HELP_MESSAGE \*STDOUT; exit 0; } |
| 23 | @ARGV and $bogusp = 1; |
| 24 | if ($bogusp) { HELP_MESSAGE \*STDERR; exit 2; } |
| 25 | |
| 26 | my $DB = DBI->connect("dbi:Pg:host=roadstar", "", "", |
| 27 | { AutoCommit => 0, |
| 28 | RaiseError => 1 }); |
| 29 | |
| 30 | my $search = $opt{"a"} ? "" : "WHERE d.disc_id IS NULL"; |
| 31 | my $st_query = $DB->prepare |
| 32 | ("SELECT s.name, d.set_id, d.disc, d.path |
| 33 | FROM dvd_disc AS d JOIN dvd_set AS s ON d.set_id = s.id |
| 34 | $search"); |
| 35 | my $st_store = $DB->prepare |
| 36 | ("UPDATE dvd_disc SET disc_id = ? WHERE set_id = ? AND disc = ?"); |
| 37 | |
| 38 | $st_query->execute; |
| 39 | while (my @r = $st_query->fetchrow_array) { |
| 40 | my ($name, $set_id, $disc, $path) = @r; |
| 41 | open my $ph, "-|", "dvd-id", "-I", "--", "$ROOT/$path"; |
| 42 | chomp (my $disc_id = <$ph>); |
| 43 | close $ph; |
| 44 | $st_store->execute($disc_id, $set_id, $disc); |
| 45 | print ";; $name $disc: $disc_id\n"; |
| 46 | } |
| 47 | |
| 48 | $DB->commit; $DB->disconnect; |