Connect to F-Spot and randomly grab pictures based on a tag.
[picture-display.git] / display.pl
1 #!/usr/bin/perl -w
2
3 use DBI;
4
5 my $f_spot_db = "/home/andrew/.gnome2/f-spot/photos.db";
6
7
8 my ($dbh, $sth) = init();
9
10 while (1) {
11   print fetch_uri($sth) . "\n";
12   sleep 10;
13 }
14
15 finish($dbh, $sth);
16
17
18 sub fetch_uri {
19   my $sth = shift;
20
21   my $uri;
22   $sth->bind_columns(\$uri);
23   my $rc = $sth->execute()
24     || die "Failed to execute statement: $DBI::errstr\n";
25
26   $sth->fetch;
27
28   $sth->finish()
29     || die "Failed to finish statement: $DBI::errstr\n";;
30
31   return $uri;
32 }
33
34 sub init {
35   my $dbh = DBI->connect("dbi:SQLite:dbname=$f_spot_db","","")
36     || die "Failed to connect to $f_spot_db: $DBI::errstr\n";
37
38   my $sql = "
39 SELECT uri
40 FROM photos, photo_tags, tags
41   WHERE photos.id = photo_tags.photo_id
42   AND photo_tags.tag_id = tags.id
43   AND tags.name = 'Brooke'
44 ORDER BY random()
45 LIMIT 1
46 ";
47
48   my $sth = $dbh->prepare($sql)
49     || die "Failed to prepare statement: $DBI::errstr\n";
50
51   return ($dbh, $sth);
52 }
53
54 sub finish {
55   my ($dbh, $sth) = @_;
56
57   $dbh->disconnect();
58 }