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