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 $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
- WHERE d.disc_id IS NULL");
-my $st_store = $DB->prepare("UPDATE dvd_disc SET disc_id = ?
- WHERE set_id = ? AND disc = ?");
+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;
-DISC: for (;;) {
- my @r = $st_query->fetchrow_array; last DISC unless @r;
+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>);