From dddcd66ead1aa5d528180d96a95ed876eaaa6093 Mon Sep 17 00:00:00 2001 From: Bartek Przybylski Date: Wed, 11 Jan 2012 22:06:23 +0100 Subject: [PATCH] using new image backend, moving ajax calls to one file, using generated thumnails to speedup covers loading --- apps/gallery/ajax/galleryOp.php | 29 ++++++++- apps/gallery/ajax/getCovers.php | 99 ----------------------------- apps/gallery/ajax/scanForAlbums.php | 31 --------- apps/gallery/css/styles.css | 2 +- apps/gallery/js/album_cover.js | 2 +- apps/gallery/js/albums.js | 2 +- 6 files changed, 29 insertions(+), 136 deletions(-) delete mode 100644 apps/gallery/ajax/getCovers.php delete mode 100644 apps/gallery/ajax/scanForAlbums.php diff --git a/apps/gallery/ajax/galleryOp.php b/apps/gallery/ajax/galleryOp.php index 3d1ed1f33c..5686c0faa7 100644 --- a/apps/gallery/ajax/galleryOp.php +++ b/apps/gallery/ajax/galleryOp.php @@ -23,17 +23,34 @@ require_once('../../../lib/base.php'); require_once(OC::$CLASSPATH['OC_Gallery_Album']); -OC_JSON::checkLoggedIn(); +require_once(OC::$CLASSPATH['OC_Gallery_Scanner']); OC_JSON::checkAppEnabled('gallery'); function handleRename($oldname, $newname) { + OC_JSON::checkLoggedIn(); OC_Gallery_Album::rename($oldname, $newname, OC_User::getUser()); } function handleRemove($name) { + OC_JSON::checkLoggedIn(); OC_Gallery_Album::remove(OC_User::getUser(), $name); } +function handleGetThumbnails($albumname) +{ + OC_JSON::checkLoggedIn(); + $photo = new OC_Image(); + $photo->loadFromFile(OC::$CONFIG_DATADIRECTORY.'/../gallery/'.$albumname.'.png'); + $photo->show(); +} + +function handleGalleryScanning() +{ + OC_JSON::checkLoggedIn(); + OC_Gallery_Scanner::cleanup(); + OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('/'))); +} + if ($_GET['operation']) { switch($_GET['operation']) { case "rename": @@ -43,8 +60,14 @@ if ($_GET['operation']) { case "remove": handleRemove($_GET['name']); OC_JSON::success(); - break; - default: + break; + case "get_covers": + handleGetThumbnails($_GET['albumname']); + break; + case "scan": + handleGalleryScanning(); + break; + default: OC_JSON::error(array('cause' => "Unknown operation")); } } diff --git a/apps/gallery/ajax/getCovers.php b/apps/gallery/ajax/getCovers.php deleted file mode 100644 index 4db73d0fbf..0000000000 --- a/apps/gallery/ajax/getCovers.php +++ /dev/null @@ -1,99 +0,0 @@ -. -* -*/ - -require_once('../../../lib/base.php'); -OC_JSON::checkLoggedIn(); -OC_JSON::checkAppEnabled('gallery'); - -function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $shift) { - //getting the image dimensions - list($width_orig, $height_orig) = getimagesize($imgSrc); - switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) { - case "jpeg": - case "jpg": - case "tiff": - $myImage = imagecreatefromjpeg($imgSrc); - break; - case "png": - $myImage = imagecreatefrompng($imgSrc); - break; - default: - exit(); - } - if(!$myImage) exit(); - $ratio_orig = $width_orig/$height_orig; - - if ($thumbnail_width/$thumbnail_height > $ratio_orig) { - $new_height = $thumbnail_width/$ratio_orig; - $new_width = $thumbnail_width; - } else { - $new_width = $thumbnail_height*$ratio_orig; - $new_height = $thumbnail_height; - } - - $x_mid = $new_width/2; //horizontal middle - $y_mid = $new_height/2; //vertical middle - - $process = imagecreatetruecolor(round($new_width), round($new_height)); - - imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig); - imagecopyresampled($tgtImg, $process, $shift, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height); - - imagedestroy($process); - imagedestroy($myImage); -} - -$box_size = 200; -$album_name= $_GET['album_name']; - -$result = OC_Gallery_Photo::findForAlbum(OC_User::getUser(), $album_name); - -$numOfItems = min($result->numRows(),10); - -if ($numOfItems){ - $targetImg = imagecreatetruecolor($numOfItems*$box_size, $box_size); -} -else{ - $targetImg = imagecreatetruecolor($box_size, $box_size); -} -$counter = 0; -while (($i = $result->fetchRow()) && $counter < $numOfItems) { - $imagePath = OC_Filesystem::getLocalFile($i['file_path']); - if(file_exists($imagePath)) - { - CroppedThumbnail($imagePath, $box_size, $box_size, $targetImg, $counter*$box_size); - $counter++; - } -} - -header('Content-Type: image/png'); - -$offset = 3600 * 24; -// calc the string in GMT not localtime and add the offset -header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"); -header('Cache-Control: max-age='.$offset.', must-revalidate'); -header('Pragma: public'); - -imagepng($targetImg); -imagedestroy($targetImg); -?> diff --git a/apps/gallery/ajax/scanForAlbums.php b/apps/gallery/ajax/scanForAlbums.php deleted file mode 100644 index b8ed639d9d..0000000000 --- a/apps/gallery/ajax/scanForAlbums.php +++ /dev/null @@ -1,31 +0,0 @@ -. -* -*/ - -require_once('../../../lib/base.php'); -OC_JSON::checkLoggedIn(); -OC_JSON::checkAppEnabled('gallery'); - -OC_Gallery_Scanner::cleanUp(); -OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('/'))); - -?> diff --git a/apps/gallery/css/styles.css b/apps/gallery/css/styles.css index cc343ba0d0..b253eeef22 100644 --- a/apps/gallery/css/styles.css +++ b/apps/gallery/css/styles.css @@ -1,5 +1,5 @@ div#gallery_list { margin: 90pt 20pt; } -div#gallery_list.leftcontent { padding-top: 15px; margin: 0; text-align: center; } +div#gallery_list.leftcontent { padding-top: 15pt; margin: 0; height: 80%; text-align: center; overflow: scroll; } div#gallery_album_box { width: 200px; text-align: center; border: 0; display: inline-block; margin: 5pt; vertical-align: top; padding: 10px; border: solid 1px black; position: relative; overflow: hidden; color: #999; } div#gallery_album_box:hover { color: black; } .leftcontent div#gallery_album_box { margin: 5px; } diff --git a/apps/gallery/js/album_cover.js b/apps/gallery/js/album_cover.js index f6cb2da310..84a89c5a91 100644 --- a/apps/gallery/js/album_cover.js +++ b/apps/gallery/js/album_cover.js @@ -33,7 +33,7 @@ function createNewAlbum() { function scanForAlbums() { $("#notification").fadeIn(); $("#notification").slideDown(); - $.getJSON('ajax/scanForAlbums.php', function(r) { + $.getJSON('ajax/galleryOp.php?operation=scan', function(r) { $("#notification").fadeOut(); $("#notification").slideUp(); if (r.status == 'success') { diff --git a/apps/gallery/js/albums.js b/apps/gallery/js/albums.js index ae7d1fac50..2fb1ac89ba 100644 --- a/apps/gallery/js/albums.js +++ b/apps/gallery/js/albums.js @@ -63,7 +63,7 @@ Albums={ var local = $(displayTemplate.replace(/\*NAME\*/g, a.name)); $("#gallery_album_cover", local).css('background-repeat', 'no-repeat'); $("#gallery_album_cover", local).css('background-position', '0'); - $("#gallery_album_cover", local).css('background-image','url("ajax/getCovers.php?album_name='+a.name+'")'); + $("#gallery_album_cover", local).css('background-image','url("ajax/galleryOp.php?operation=get_covers&albumname='+a.name+'")'); local.mouseover(function(e) { $("#gallery_control_overlay", this).css('visibility','visible'); });