]> git.sesse.net Git - pr0n/blobdiff - perl/Sesse/pr0n/Index.pm
Trim the EXIF values; seems like the Pentax K10D sometimes adds extra spaces
[pr0n] / perl / Sesse / pr0n / Index.pm
index c073a76086ec70a33e74d9b38a8c62f70dd0eef6..5a635d4c190aac8a5fff7e9fc3a05c1ae4aa25b8 100644 (file)
@@ -23,7 +23,7 @@ sub handler {
        }
 
        # Internal? (Ugly?) 
-       if ($r->get_server_name =~ /internal/) {
+       if ($r->get_server_name =~ /internal/ || $r->get_server_name =~ /skoyen\.bilder\.knatten\.com/) {
                my $user = Sesse::pr0n::Common::check_access($r);
                if (!defined($user)) {
                        return Apache2::Const::OK;
@@ -34,8 +34,8 @@ sub handler {
        my %defsettings = (
                thumbxres => 80,
                thumbyres => 64,
-               xres => undef,
-               yres => undef,
+               xres => -1,
+               yres => -1,
                start => 1,
                num => -1,
                all => 1,
@@ -45,6 +45,11 @@ sub handler {
                fullscreen => 0,
        );
        
+       # Any NEF files => default to processing
+       my $ref = $dbh->selectrow_hashref('SELECT * FROM images WHERE event=? AND LOWER(filename) LIKE \'%.nef\' LIMIT 1',
+               undef, $event)
+               and $defsettings{'xres'} = $defsettings{'yres'} = undef;
+       
        # Reduce the front page load when in overload mode.
        if (Sesse::pr0n::Overload::is_in_overload($r)) {
                $defsettings{'num'} = 100;
@@ -77,12 +82,18 @@ sub handler {
                $num = undef;
        }
 
-       my $ref = $dbh->selectrow_hashref('SELECT * FROM events WHERE id=? AND vhost=?',
+       $ref = $dbh->selectrow_hashref('SELECT name,date,EXTRACT(EPOCH FROM last_update) AS last_update FROM events WHERE id=? AND vhost=?',
                undef, $event, $r->get_server_name)
                or error($r, "Could not find event $event", 404, "File not found");
 
-       my $name = $ref->{'name'};
-       my $date = $ref->{'date'};
+       my $date = HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'date'}));
+       my $name = HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'name'}));
+       $r->set_last_modified($ref->{'last_update'});
+                               
+       # If the client can use cache, do so
+       if ((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
+               return $rc;
+       }
        
        # Count the number of selected images.
        $ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE event=? AND selected=\'t\'", undef, $event);
@@ -107,7 +118,7 @@ sub handler {
                $r->content_type("text/html; charset=utf-8");
                Sesse::pr0n::Templates::print_template($r, "fullscreen-header", { title => "$name [$event]" });
                while (my $ref = $q->fetchrow_hashref()) {
-                       $r->print("        \"" . $ref->{'filename'} . "\",\n");
+                       $r->print("        \"" . $infobox . $ref->{'filename'} . "\",\n");
                }
 
                my %settings_no_fullscreen = %settings;
@@ -123,7 +134,8 @@ sub handler {
                        vhost => $r->get_server_name,
                        event => $event,
                        start => $settings{'start'} - 1,
-                       returnurl => $returnurl
+                       returnurl => $returnurl,
+                       sel => $settings{'sel'},
                });
        } else {
                Sesse::pr0n::Common::header($r, "$name [$event]");
@@ -139,6 +151,58 @@ sub handler {
                print_infobox($r, $event, \%settings, \%defsettings);
                print_nextprev($r, $event, \%settings, \%defsettings);
                print_selected($r, $event, \%settings, \%defsettings) if ($num_selected > 0);
+               print_fullscreen($r, $event, \%settings, \%defsettings);
+               
+               # Find the equipment used
+               my $eq = $dbh->prepare('
+                       SELECT 
+                               TRIM(model.value) AS model,
+                               coalesce(TRIM(lens_spec.value), TRIM(lens.value)) AS lens,
+                               COUNT(*) AS num
+                       FROM images i
+                               LEFT JOIN exif_info model ON i.id=model.image
+                               LEFT JOIN ( SELECT * FROM exif_info WHERE tag=\'Lens\' ) lens ON i.id=lens.image
+                               LEFT JOIN ( SELECT * FROM exif_info WHERE tag=\'LensSpec\') lens_spec ON i.id=lens_spec.image
+                       WHERE event=? AND model.tag=\'Model\'
+                       GROUP BY 1,2
+                       ORDER BY 1,2')
+                       or die "Couldn't prepare to find equipment: $!";
+               $eq->execute($event)
+                       or die "Couldn't find equipment: $!";
+
+               my @equipment = ();
+               my %cameras_seen = ();
+               while (my $ref = $eq->fetchrow_hashref) {
+                       if (!defined($ref->{'lens'}) && exists($cameras_seen{$ref->{'model'}})) {
+                               #
+                               # Some compact cameras seem to add lens info sometimes and not at other
+                               # times; if we have seen a camera with at least one specific lens earlier,
+                               # just combine entries without a lens with the previous one.
+                               #
+                               $equipment[$#equipment]->{'num'} += $ref->{'num'};
+                               next;
+                       }
+                       push @equipment, $ref;
+                       $cameras_seen{$ref->{'model'}} = 1;
+               }
+               $eq->finish;
+
+               if (scalar @equipment > 0) {
+                       Sesse::pr0n::Templates::print_template($r, "equipment-start");
+                       for my $e (@equipment) {
+                               my $eqspec = $e->{'model'};
+                               $eqspec .= ', ' . $e->{'lens'} if (defined($e->{'lens'}));
+
+                               # This isn't correct for all languages. Fix if we ever need to care. :-)
+                               if ($e->{'num'} == 1) {
+                                       Sesse::pr0n::Templates::print_template($r, "equipment-item-singular", { eqspec => $eqspec });
+                               } else {
+                                       Sesse::pr0n::Templates::print_template($r, "equipment-item", { eqspec => $eqspec, num => $e->{'num'} });
+                               }
+                       }
+                       Sesse::pr0n::Templates::print_template($r, "equipment-end");
+               }
+
 
                my $toclose = 0;
                my $lastupl = "";
@@ -146,6 +210,7 @@ sub handler {
                # Print out all thumbnails
                if ($rot == 1) {
                        $r->print("    <form method=\"post\" action=\"/rotate\">\n");
+                       $r->print("      <input type=\"hidden\" name=\"event\" value=\"$event\" />\n");
                
                        while (my $ref = $q->fetchrow_hashref()) {
                                my $imgsz = "";
@@ -167,7 +232,7 @@ sub handler {
                                }
 
                                my $filename = $ref->{'filename'};
-                               my $uri = $filename;
+                               my $uri = $infobox . $filename;
                                if (defined($xres) && defined($yres) && $xres != -1) {
                                        $uri = "${xres}x$yres/$infobox$filename";
                                } elsif (defined($xres) && $xres == -1) {
@@ -210,7 +275,7 @@ sub handler {
                                }
 
                                my $filename = $ref->{'filename'};
-                               my $uri = $filename;
+                               my $uri = $infobox . $filename;
                                if (defined($xres) && defined($yres) && $xres != -1) {
                                        $uri = "${xres}x$yres/$infobox$filename";
                                } elsif (defined($xres) && $xres == -1) {
@@ -248,7 +313,7 @@ sub handler {
                                }
 
                                my $filename = $ref->{'filename'};
-                               my $uri = $filename;
+                               my $uri = $infobox . $filename;
                                if (defined($xres) && defined($yres) && $xres != -1) {
                                        $uri = "${xres}x$yres/$infobox$filename";
                                } elsif (defined($xres) && $xres == -1) {
@@ -435,7 +500,8 @@ sub print_nextprev {
                my %newsettings = %$settings;
                $newsettings{'start'} = $newstart;
                chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'prevpage'));
-               Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)\n", "/$event/", \%newsettings, $defsettings);
+               chomp (my $accesskey = Sesse::pr0n::Templates::fetch_template($r, 'prevaccesskey'));
+               Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)\n", "/$event/", \%newsettings, $defsettings, $accesskey);
        }
 
        # This
@@ -453,7 +519,8 @@ sub print_nextprev {
                my %newsettings = %$settings;
                $newsettings{'start'} = $newstart;
                chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'nextpage'));
-               Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)", "/$event/", \%newsettings, $defsettings);
+               chomp (my $accesskey = Sesse::pr0n::Templates::fetch_template($r, 'nextaccesskey'));
+               Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)", "/$event/", \%newsettings, $defsettings, $accesskey);
        }
 
        $r->print("    </p>\n");
@@ -488,6 +555,19 @@ sub print_selected {
        
        $r->print('</p>');
 }
+
+sub print_fullscreen {
+       my ($r, $event, $settings, $defsettings) = @_;
+
+       chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'fullscreen'));
+
+       my %newsettings = %$settings;
+       $newsettings{'fullscreen'} = 1;
+
+        $r->print("    <p>");
+       Sesse::pr0n::Common::print_link($r, $title, "/$event/", \%newsettings, $defsettings);
+       $r->print("</p>\n");
+}
        
 1;