#!/usr/bin/perl use strict; use warnings; use Cwd; use DBI; my $photos_root = $ENV{HOME} . '/photos'; my $album = $ARGV[0]; if (!defined $album) { my $cwd = getcwd; $cwd =~ m{/photos/(.*)} or die "Cannot identify album from current directory, need to specify maunally.\n"; $album = $1; } if (! -f "gallery.cf") { system 'gal', 'mj-init'; die if $?; } my $dbfile = "$photos_root/digikam4.db"; my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "") or die "Cannot access $dbfile\n"; my %alba = (); for my $r (@{$dbh->selectall_arrayref( 'SELECT a.id AS id, r.label AS label, a.relativePath AS rpath FROM Albums a JOIN AlbumRoots r ON (r.id = a.albumRoot)', { Slice => {} })}) { my $name = $r->{label} . $r->{rpath}; # print "$name\n"; $alba{$name} = $r->{id}; } my $album_id = $alba{$album} // die "Unknown album $album\n"; print "## Album $album: id=$album_id\n"; my ($tag_id) = $dbh->selectrow_array('SELECT id FROM Tags WHERE pid=0 AND name="web"'); $tag_id // die "Cannot find web tag\n"; print "## Tag ID: $tag_id\n"; open OUT, '|-', $ENV{GALLERY_ROOT} . '/bin/gal-scan' or die "Cannot feed gal scan\n"; for my $r (@{$dbh->selectall_arrayref( 'SELECT i.name AS name FROM Images i JOIN ImageTags t ON (i.id = t.imageid) WHERE i.album=? AND t.tagid=? ORDER BY i.name', { Slice => {} }, $album_id, $tag_id)}) { print OUT "$photos_root/$album/" . $r->{name}, "\n"; } close OUT;