]> git.donarmstrong.com Git - deb_pkgs/libapache-gallery-perl.git/blobdiff - lib/Apache/Gallery.pm
Add support for thumbonly to the Debian package
[deb_pkgs/libapache-gallery-perl.git] / lib / Apache / Gallery.pm
index e02bee91b384403cd8e4bc10334d4df3a7ed2c6e..88a03b4b71d1576ea12c6d94ee250879777711f2 100644 (file)
@@ -121,10 +121,11 @@ sub handler {
        # Let Apache serve icons without us modifying the request
        if ($r->uri =~ m/^\/icons/i) {
            if ($r->uri =~ m/^\/icons\/gallery\/([^\/]+$)/i) {
-               $filename = "/usr/share/libapache-gallery-perl/icons/$filename";
-               $r->filename($filename);
-           }
-           return $::MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
+            $filename = "/usr/share/libapache-gallery-perl/icons/$1";
+            return send_file($r,$filename);
+           } else {
+            return $::MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
+        }
        }
        # Lookup the file in the cache and scale the image if the cached
        # image does not exist
@@ -148,32 +149,8 @@ sub handler {
                my $file = cache_dir($r, 0);
                $file =~ s/\.cache//;
 
-               my $subr = $r->lookup_file($file);
-               $r->content_type($subr->content_type());
+        return send_file($r,$file);
 
-               if ($::MP2) {
-                       my $fileinfo = stat($file);
-
-                       my $nonce = md5_base64($fileinfo->ino.$fileinfo->mtime);
-                       if ($r->headers_in->{"If-None-Match"} eq $nonce) {
-                               return Apache2::Const::HTTP_NOT_MODIFIED();
-                       }
-
-                       if ($r->headers_in->{"If-Modified-Since"} && str2time($r->headers_in->{"If-Modified-Since"}) < $fileinfo->mtime) {
-                               return Apache2::Const::HTTP_NOT_MODIFIED();
-                       }
-
-                       $r->headers_out->{"Content-Length"} = $fileinfo->size; 
-                       $r->headers_out->{"Last-Modified-Date"} = time2str($fileinfo->mtime); 
-                       $r->headers_out->{"ETag"} = $nonce;
-                       $r->sendfile($file);
-                       return Apache2::Const::OK();
-               }
-               else {
-                       $r->path_info('');
-                       $r->filename($file);
-                       return Apache::Constants::DECLINED();
-               }
                
        }
 
@@ -187,10 +164,9 @@ sub handler {
 
        my $doc_pattern = $r->dir_config('GalleryDocFile');
        unless ($doc_pattern) {
-               $doc_pattern = '\.(mpe?g|avi|mov|asf|wmv|doc|mp3|ogg|pdf|rtf|wav|dlt|txt|html?|csv|eps)$'
+               $doc_pattern = '\.(mpe?g|avi|mov|asf|wmv|doc|mp3|mp4|ogg|pdf|rtf|wav|dlt|txt|html?|csv|eps)$'
        }
-       my $img_pattern = $r->dir_config('GalleryImgFile');
-       unless ($img_pattern) {
+       my $img_pattern = $r->dir_config('GalleryImgFile')      unless ($img_pattern) {
                $img_pattern = '\.(jpe?g|png|tiff?|ppm)$'
        }
 
@@ -564,6 +540,20 @@ sub handler {
                                return $::MP2 ? Apache2::Const::FORBIDDEN() : Apache::Constants::FORBIDDEN();
                        }
                }
+        if (defined $ENV{QUERY_STRING} && $ENV{QUERY_STRING} eq 'thumbonly' &&
+            $r->dir_config('GalleryAllowThumbonly') &&
+            -f $filename) {
+
+            my ($width, $height, $type) = imgsize($filename);
+            my @filetypes = qw(JPG TIF PNG PPM GIF);
+            if (grep $type eq $_, @filetypes) {
+                my ($thumbnailwidth, $thumbnailheight) = get_thumbnailsize($r, $width, $height);
+                my $imageinfo = get_imageinfo($r, $filename, $type, $width, $height);
+                my $cached = get_scaled_picture_name($filename, $thumbnailwidth, $thumbnailheight);
+                $r->headers_out->set(Location => uri_escape(".cache/$cached", $escape_rule));
+                return $::MP2 ? Apache2::Const::REDIRECT() : Apache::Constants::REDIRECT();
+            }
+        }
        
                # Create cache dir if not existing
                my @tmp = split (/\//, $filename);
@@ -852,6 +842,35 @@ sub handler {
 
 }
 
+sub send_file {
+    my ($r,$file) = @_;
+    my $subr = $r->lookup_file($file);
+    $r->content_type($subr->content_type());
+    if ($::MP2) {
+        my $fileinfo = stat($file);
+
+        my $nonce = md5_base64($fileinfo->ino.$fileinfo->mtime);
+        if ($r->headers_in->{"If-None-Match"} eq $nonce) {
+            return Apache2::Const::HTTP_NOT_MODIFIED();
+        }
+
+        if ($r->headers_in->{"If-Modified-Since"} && str2time($r->headers_in->{"If-Modified-Since"}) < $fileinfo->mtime) {
+            return Apache2::Const::HTTP_NOT_MODIFIED();
+        }
+
+        $r->headers_out->{"Content-Length"} = $fileinfo->size; 
+        $r->headers_out->{"Last-Modified-Date"} = time2str($fileinfo->mtime); 
+        $r->headers_out->{"ETag"} = $nonce;
+        $r->sendfile($file);
+        return Apache2::Const::OK();
+    }
+    else {
+        $r->path_info('');
+        $r->filename($file);
+        return Apache::Constants::DECLINED();
+    }
+}
+
 sub cache_dir {
 
        my ($r, $strip_filename) = @_;
@@ -1754,6 +1773,14 @@ resizing or putting the CopyrightImage on it.
 
 Set to 1 or 0, default is 0
 
+=item B<GalleryAllowThumbOnly>
+
+If true, B<GalleryAllowThumbOnly> allows fooimg.jpg?thumbonly urls
+to output the thumbnail of the image. This is useful when including
+images in a blog (or similar).
+
+Defaults to '0' (false).
+
 =item B<GallerySlideshowIntervals>
 
 With this option you can configure which intervals can be selected for
@@ -1833,7 +1860,7 @@ Pattern matching the files you want Apache::Gallery to view in the index
 as normal files. All other filetypes will still be served by Apache::Gallery
 but are not visible in the index.
 
-The default is '\.(mpe?g|avi|mov|asf|wmv|doc|mp3|ogg|pdf|rtf|wav|dlt|txt|html?|csv|eps)$'
+The default is '\.(mpe?g|avi|mov|asf|wmv|doc|mp3|mp4|ogg|pdf|rtf|wav|dlt|txt|html?|csv|eps)$'
 
 =item B<GalleryTTFDir>