Insert tags into the tags table on upload/other update.
authorSteinar H. Gunderson <sesse@debian.org>
Wed, 25 Jul 2007 13:48:34 +0000 (15:48 +0200)
committerSteinar H. Gunderson <sesse@debian.org>
Wed, 25 Jul 2007 13:48:34 +0000 (15:48 +0200)
perl/Sesse/pr0n/Common.pm
sql/pr0n.sql
sql/upgrade-v2.50.sql

index d73df38a381788ff31b090f708d43f5b20f9d566..b9a651cb5261e6b0981c015772387121d8907300 100644 (file)
@@ -195,7 +195,9 @@ sub update_image_info {
        my ($r, $id, $width, $height) = @_;
 
        # Also find the date taken if appropriate (from the EXIF tag etc.)
-       my $info = Image::ExifTool::ImageInfo(get_disk_location($r, $id));
+       my $exiftool = Image::ExifTool->new;
+       $exiftool->ExtractInfo(get_disk_location($r, $id));
+       my $info = $exiftool->GetInfo();
        my $datetime = undef;
                        
        if (defined($info->{'DateTimeOriginal'})) {
@@ -212,6 +214,7 @@ sub update_image_info {
                         undef, $width, $height, $datetime, $id)
                        or die "Couldn't update width/height in SQL: $!";
 
+               # EXIF information
                $dbh->do('DELETE FROM exif_info WHERE image=?',
                        undef, $id)
                        or die "Couldn't delete old EXIF information in SQL: $!";
@@ -225,6 +228,20 @@ sub update_image_info {
                                or die "Couldn't insert EXIF information in database: $!";
                }
 
+               # Tags
+               my @tags = $exiftool->GetValue('Keywords', 'ValueConv');
+               $dbh->do('DELETE FROM tags WHERE image=?',
+                       undef, $id)
+                       or die "Couldn't delete old tag information in SQL: $!";
+
+               my $q = $dbh->prepare('INSERT INTO tags (image,tag) VALUES (?,?)')
+                       or die "Couldn't prepare inserting tag information: $!";
+
+               for my $tag (@tags) {
+                       $q->execute($id, guess_charset($tag))
+                               or die "Couldn't insert tag information in database: $!";
+               }
+
                # update the last_picture cache as well (this should of course be done
                # via a trigger, but this is less complicated :-) )
                $dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?) WHERE (vhost,event)=(SELECT vhost,event FROM images WHERE id=?)',
index cddf386bf9d366275a77ff0ae1be6a21d261e83f..0bca09ae79eb41c16ad6231f1c2bc06416171962 100644 (file)
@@ -98,4 +98,5 @@ GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE images TO pr0n;
 GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE shadow_files TO pr0n;
 GRANT SELECT ON TABLE users TO pr0n;
 GRANT SELECT,INSERT,DELETE ON TABLE exif_info TO pr0n;
+GRANT SELECT,INSERT,DELETE ON TABLE tags TO pr0n;
 GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE last_picture_cache TO pr0n;
index d2440ae64011acbc4395ef73df60616eb6256787..ad63bdff3b6ec4ead8bc5f57cfe3207b531d9510 100644 (file)
@@ -15,3 +15,4 @@ CREATE TABLE tags (
 );
 CREATE INDEX tags_tag ON tags ( tag );
 
+GRANT SELECT,INSERT,DELETE ON TABLE tags TO pr0n;