]> mj.ucw.cz Git - gallery.git/blob - bin/gal-mj-digikam
3598573d2f4f026d7043fa08004857ccc0f940ab
[gallery.git] / bin / gal-mj-digikam
1 #!/usr/bin/perl
2
3 use common::sense;
4
5 use Cwd;
6 use DBI;
7 use Getopt::Long;
8
9 if (@ARGV && $ARGV[0] eq '--help') {
10         die <<AMEN ;
11 Usage: gal mj-digikam [<album>]
12 AMEN
13 }
14
15 my $photos_root = $ENV{HOME} . '/photos';
16
17 my $album = $ARGV[0];
18 if (!defined $album) {
19         my $cwd = getcwd;
20         $cwd =~ m{/photos/(.*)} or die "Cannot identify album from current directory, need to specify maunally.\n";
21         $album = $1;
22 }
23
24 if (! -f "gallery.cf") {
25         system 'gal', 'mj-init'; die if $?;
26 }
27
28 my $dbfile = "$photos_root/digikam4.db";
29 my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "") or die "Cannot access $dbfile\n";
30
31 my %alba = ();
32 for my $r (@{$dbh->selectall_arrayref(
33         'SELECT a.id AS id, r.label AS label, a.relativePath AS rpath FROM Albums a JOIN AlbumRoots r ON (r.id = a.albumRoot)',
34         { Slice => {} })}) {
35         my $name = $r->{label} . $r->{rpath};
36         # print "$name\n";
37         $alba{$name} = $r->{id};
38 }
39
40 my $album_id = $alba{$album} // die "Unknown album $album\n";
41 print "## Album $album: id=$album_id\n";
42
43 my ($tag_id) = $dbh->selectrow_array('SELECT id FROM Tags WHERE pid=0 AND name="web"');
44 $tag_id // die "Cannot find web tag\n";
45 print "## Tag ID: $tag_id\n";
46
47 my $res = $dbh->selectall_arrayref( <<AMEN, { Slice => {} },
48         SELECT
49                 i.name AS name,
50                 p.latitudeNumber AS lat,
51                 p.longitudeNumber AS lon,
52                 p.altitude AS alt
53         FROM Images i
54         JOIN ImageTags t ON (i.id = t.imageid)
55         LEFT JOIN ImagePositions p ON (i.id = p.imageid)
56         WHERE i.album=? AND t.tagid=?
57         ORDER BY i.modificationDate
58 AMEN
59         $album_id,
60         $tag_id,
61         );
62
63 open OUT, '|-', $ENV{GALLERY_ROOT} . '/bin/gal-scan' or die "Cannot feed gal scan\n";
64 for my $r (@$res) {
65         print OUT "$photos_root/$album/" . $r->{name}, "\n";
66         for my $k (qw(lat lon alt)) {
67                 print OUT "\t$k=", $r->{$k}, "\n" if defined $r->{$k};
68         }
69 }
70 close OUT;