Add a concept where an image can be a rendering of another, which means it is not...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 6 Jan 2016 23:27:52 +0000 (00:27 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 6 Jan 2016 23:27:52 +0000 (00:27 +0100)
perl/Sesse/pr0n/Image.pm
perl/Sesse/pr0n/Index.pm
sql/pr0n.sql
sql/upgrade-v3.11.sql [new file with mode: 0644]

index 4a7160381d03100391486bd9150ad2fe919eb2a3..f12a15891792ed1ba0e195e815c4c157df2d1b29 100644 (file)
@@ -42,10 +42,18 @@ sub handler {
        #} else {
        
        # Look it up in the database
-       my $ref = $dbh->selectrow_hashref('SELECT id,width,height FROM images WHERE event=? AND vhost=? AND filename=?',
+       my $ref = $dbh->selectrow_hashref('SELECT id,render_id,width,height FROM images WHERE event=? AND vhost=? AND filename=?',
                undef, $event, Sesse::pr0n::Common::get_server_name($r), $filename);
        return error($r, "Could not find $event/$filename", 404, "File not found") unless (defined($ref));
 
+       if (defined($xres) && defined($yres) && defined($ref->{'render_id'}) && !$infobox) {
+               # We have a render, we're not asked for the original, and we do not have infobox.
+               $ref = $dbh->selectrow_hashref('SELECT id,filename,width,height FROM images WHERE id=?', 
+                       undef, $ref->{'render_id'});
+               return error($r, "Could not find render of $event/$filename", 404, "File not found") unless (defined($ref));
+               $filename = $ref->{'filename'};
+       }
+
        $id = $ref->{'id'};
        $dbwidth = $ref->{'width'};
        $dbheight = $ref->{'height'};
index 3f9e52498e9be02a5338a611c75c5e960d2dbf3f..7d2ddf8227703ae74a51a066557c06b81f5bf55e 100644 (file)
@@ -63,8 +63,8 @@ sub handler {
                $where = ' AND event=' . $dbh->quote($event);
        }
        
-       # Any NEF files => default to processing
-       my $ref = $dbh->selectrow_hashref("SELECT * FROM images WHERE vhost=? $where AND ( LOWER(filename) LIKE '%.nef' OR LOWER(filename) LIKE '%.cr2' ) LIMIT 1",
+       # Any NEF files with no non-NEF renders => default to processing
+       my $ref = $dbh->selectrow_hashref("SELECT * FROM images WHERE vhost=? $where AND ( LOWER(filename) LIKE '%.nef' OR LOWER(filename) LIKE '%.cr2' ) AND render_id IS NULL LIMIT 1",
                undef, Sesse::pr0n::Common::get_server_name($r))
                and $defsettings{'xres'} = $defsettings{'yres'} = undef;
        
@@ -156,13 +156,13 @@ sub handler {
        # }
        
        # Count the number of selected images.
-       $ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE vhost=? $where AND selected=\'t\'", undef, Sesse::pr0n::Common::get_server_name($r));
+       $ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE vhost=? $where AND selected AND NOT is_render", undef, Sesse::pr0n::Common::get_server_name($r));
        my $num_selected = $ref->{'num_selected'};
 
        # Find all images related to this event.
        my $limit = (defined($start) && defined($num) && !$settings{'fullscreen'}) ? (" LIMIT $num OFFSET " . ($start-1)) : "";
 
-       my $q = $dbh->prepare("SELECT *, (date - INTERVAL '6 hours')::date AS day FROM images WHERE vhost=? $where ORDER BY (date - INTERVAL '6 hours')::date $datesort,takenby,date,filename $limit")
+       my $q = $dbh->prepare("SELECT *, (date - INTERVAL '6 hours')::date AS day FROM images WHERE vhost=? $where AND NOT is_render ORDER BY (date - INTERVAL '6 hours')::date $datesort,takenby,date,filename $limit")
                or return dberror($r, "prepare()");
        $q->execute(Sesse::pr0n::Common::get_server_name($r))
                or return dberror($r, "image enumeration");
@@ -225,6 +225,7 @@ sub handler {
                                        COUNT(*) AS num
                                FROM images
                                WHERE vhost=? $where
+                               AND NOT is_render
                                GROUP BY 1,2
                                ORDER BY 1,2")
                                or die "Couldn't prepare to find equipment: $!";
@@ -455,7 +456,7 @@ sub print_nextprev {
        return unless (defined($start) && defined($num));
 
        # determine total number
-       my $ref = $dbh->selectrow_hashref("SELECT count(*) AS num_images FROM images WHERE vhost=? $where",
+       my $ref = $dbh->selectrow_hashref("SELECT count(*) AS num_images FROM images WHERE vhost=? $where AND NOT is_render",
                undef, Sesse::pr0n::Common::get_server_name($r))
                or return dberror($r, "image enumeration");
        my $num_images = $ref->{'num_images'};
index f3f2087e6ce7b8d7db298c1d60841d4d655868a4..860fd475bf55fd9f2004bd535213907cacbb8b3e 100644 (file)
@@ -34,8 +34,16 @@ CREATE TABLE images (
     selected boolean DEFAULT false,
     model character varying,
     lens character varying,
+    is_render boolean NOT NULL DEFAULT false,  -- Is this a render of another picture? (If so, don't show it separately.)
+    render_id integer,  -- If not NULL, show this picture instead of ourselves for all JPEG-creation purposes.
 
-    FOREIGN KEY (vhost,event) REFERENCES events (vhost,event)
+    FOREIGN KEY (vhost,event) REFERENCES events (vhost,event),
+    FOREIGN KEY (vhost,event,render_id) REFERENCES images (vhost,event,id),
+
+    -- Redundant with the primary key, but the foreign key needs it.
+    UNIQUE (vhost,event,id),
+
+    CHECK (NOT (is_render AND (render_id IS NOT NULL)))
 );
 CREATE UNIQUE INDEX unique_filenames ON images USING btree (vhost, event, filename);
 
@@ -52,6 +60,8 @@ CREATE TABLE deleted_images (
     selected boolean,
     model character varying,
     lens character varying
+    is_render boolean NOT NULL,
+    render_id integer,
 );
 
 CREATE TABLE users (
diff --git a/sql/upgrade-v3.11.sql b/sql/upgrade-v3.11.sql
new file mode 100644 (file)
index 0000000..7996fea
--- /dev/null
@@ -0,0 +1,8 @@
+alter table images add column is_render boolean NOT NULL DEFAULT false;
+alter table images add column render_id integer;
+CREATE UNIQUE INDEX unique_id_for_render ON images USING btree (vhost, event, id);
+alter table images add foreign key (render_id,vhost,event) REFERENCES images (id,vhost,event);
+alter table images add check (NOT (is_render AND (render_id IS NOT NULL)));
+
+alter table deleted_images add column is_render boolean NOT NULL DEFAULT false;
+alter table deleted_images add column render_id integer;