cycle: A script to automate updates.
[dvddb] / set-dvd-ids
1 #! /usr/bin/perl
2
3 use autodie qw{:all};
4 use open ":utf8";
5 use strict;
6
7 use DBI;
8
9 BEGIN { binmode STDOUT, ":utf8"; }
10
11 my $ROOT = "/mnt/dvd/archive";
12 my $DB = DBI->connect("dbi:Pg:host=roadstar", "", "",
13 { AutoCommit => 0,
14 RaiseError => 1 });
15
16 my $st_query = $DB->prepare("SELECT s.name, d.set_id, d.disc, d.path
17 FROM dvd_disc AS d JOIN dvd_set AS s
18 ON d.set_id = s.id
19 WHERE d.disc_id IS NULL");
20 my $st_store = $DB->prepare("UPDATE dvd_disc SET disc_id = ?
21 WHERE set_id = ? AND disc = ?");
22
23 $st_query->execute;
24 DISC: for (;;) {
25 my @r = $st_query->fetchrow_array; last DISC unless @r;
26 my ($name, $set_id, $disc, $path) = @r;
27 open my $ph, "-|", "dvd-id", "-I", "--", "$ROOT/$path";
28 chomp (my $disc_id = <$ph>);
29 close $ph;
30 $st_store->execute($disc_id, $set_id, $disc);
31 print ";; $name $disc: $disc_id\n";
32 }
33
34 $DB->commit; $DB->disconnect;