| 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; |