Playlist support, other randomness.
[dvddb] / set-dvd-ids
index 699751e..e4476fd 100755 (executable)
@@ -5,24 +5,38 @@ 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 $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>);