#! /usr/bin/perl use autodie qw{:all}; use open ":utf8"; use strict; use DBI; use Getopt::Std; BEGIN { binmode STDOUT, ":utf8"; } (my $prog = $0) =~ s:^.*/::; sub HELP_MESSAGE ($;@) { my ($fh) = @_; print $fh "usage: $prog [-a]\n"; } my $ROOT = "/mnt/dvd/archive"; my $bogusp = 0; my %opt; getopts("ha", \%opt) or $bogusp = 1; if ($opt{"h"}) { HELP_MESSAGE \*STDOUT; exit 0; } @ARGV and $bogusp = 1; if ($bogusp) { HELP_MESSAGE \*STDERR; exit 2; } my $DB = DBI->connect("dbi:Pg:host=roadstar", "", "", { AutoCommit => 0, RaiseError => 1 }); my $search = $opt{"a"} ? "" : "WHERE d.disc_id IS NULL"; my $st_query = $DB->prepare ("SELECT s.name, d.set_id, d.disc, d.path FROM dvd_disc AS d JOIN dvd_set AS s ON d.set_id = s.id $search"); my $st_store = $DB->prepare ("UPDATE dvd_disc SET disc_id = ? WHERE set_id = ? AND disc = ?"); $st_query->execute; while (my @r = $st_query->fetchrow_array) { my ($name, $set_id, $disc, $path) = @r; open my $ph, "-|", "dvd-id", "-I", "--", "$ROOT/$path"; chomp (my $disc_id = <$ph>); close $ph; $st_store->execute($disc_id, $set_id, $disc); print ";; $name $disc: $disc_id\n"; } $DB->commit; $DB->disconnect;