better scanning model for gallery, more feedback to user while scanning
This commit is contained in:
parent
63d9c1a817
commit
07cf709eeb
4 changed files with 92 additions and 40 deletions
|
@ -37,39 +37,61 @@ function handleRemove($name) {
|
|||
OC_Gallery_Album::remove(OC_User::getUser(), $name);
|
||||
}
|
||||
|
||||
function handleGetThumbnails($albumname)
|
||||
{
|
||||
function handleGetThumbnails($albumname) {
|
||||
OC_JSON::checkLoggedIn();
|
||||
$photo = new OC_Image();
|
||||
$photo->loadFromFile(OC::$CONFIG_DATADIRECTORY.'/../gallery/'.$albumname.'.png');
|
||||
$photo->show();
|
||||
}
|
||||
|
||||
function handleGalleryScanning()
|
||||
{
|
||||
function handleGalleryScanning() {
|
||||
OC_JSON::checkLoggedIn();
|
||||
OC_Gallery_Scanner::cleanup();
|
||||
OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('/')));
|
||||
}
|
||||
|
||||
function handleFilescan() {
|
||||
OC_JSON::checkLoggedIn();
|
||||
$pathlist = OC_Gallery_Scanner::find_paths('/');
|
||||
sort($pathlist);
|
||||
OC_JSON::success(array('paths' => $pathlist));
|
||||
}
|
||||
|
||||
function handlePartialCreate($path) {
|
||||
OC_JSON::checkLoggedIn();
|
||||
if (empty($path)) OC_JSON::error(array('cause' => 'No path specified'));
|
||||
if (!OC_Filesystem::is_dir($path)) OC_JSON::error(array('cause' => 'Invalid path given'));
|
||||
|
||||
$album = OC_Gallery_Album::find(OC_User::getUser(), null, $path);
|
||||
$albums;
|
||||
OC_Gallery_Scanner::scanDir($path, $albums);
|
||||
OC_JSON::success(array('album_details' => $albums));
|
||||
}
|
||||
|
||||
if ($_GET['operation']) {
|
||||
switch($_GET['operation']) {
|
||||
case "rename":
|
||||
case 'rename':
|
||||
handleRename($_GET['oldname'], $_GET['newname']);
|
||||
OC_JSON::success(array('newname' => $_GET['newname']));
|
||||
break;
|
||||
case "remove":
|
||||
case 'remove':
|
||||
handleRemove($_GET['name']);
|
||||
OC_JSON::success();
|
||||
break;
|
||||
case "get_covers":
|
||||
case 'get_covers':
|
||||
handleGetThumbnails($_GET['albumname']);
|
||||
break;
|
||||
case "scan":
|
||||
case 'scan':
|
||||
handleGalleryScanning();
|
||||
break;
|
||||
case 'filescan':
|
||||
handleFilescan();
|
||||
break;
|
||||
case 'partial_create':
|
||||
handlePartialCreate($_GET['path']);
|
||||
break;
|
||||
default:
|
||||
OC_JSON::error(array('cause' => "Unknown operation"));
|
||||
OC_JSON::error(array('cause' => 'Unknown operation'));
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -4,10 +4,11 @@ $(document).ready(function() {
|
|||
if (r.status == 'success') {
|
||||
for (var i in r.albums) {
|
||||
var a = r.albums[i];
|
||||
Albums.add(a.name, a.numOfItems, a.bgPath);
|
||||
Albums.add(a.name, a.numOfItems);
|
||||
}
|
||||
var targetDiv = document.getElementById('gallery_list');
|
||||
if (targetDiv) {
|
||||
$(targetDiv).html('');
|
||||
Albums.display(targetDiv);
|
||||
} else {
|
||||
alert('Error occured: no such layer `gallery_list`');
|
||||
|
@ -30,14 +31,42 @@ function createNewAlbum() {
|
|||
}
|
||||
}
|
||||
|
||||
var albumCounter = 0;
|
||||
var totalAlbums = 0;
|
||||
|
||||
function scanForAlbums() {
|
||||
var albumCounter = 0;
|
||||
var totalAlbums = 0;
|
||||
$('#notification').text("Scanning directories");
|
||||
$("#notification").fadeIn();
|
||||
$("#notification").slideDown();
|
||||
$.getJSON('ajax/galleryOp.php?operation=scan', function(r) {
|
||||
$("#notification").fadeOut();
|
||||
$("#notification").slideUp();
|
||||
$.getJSON('ajax/galleryOp.php?operation=filescan', function(r) {
|
||||
|
||||
if (r.status == 'success') {
|
||||
window.location.reload(true);
|
||||
totalAlbums = r.paths.length;
|
||||
$('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
|
||||
for(var a in r.paths) {
|
||||
$.getJSON('ajax/galleryOp.php?operation=partial_create&path='+r.paths[a], function(r) {
|
||||
|
||||
if (r.status == 'success') {
|
||||
Albums.add(r.album_details.albumName, r.album_details.imagesCount);
|
||||
}
|
||||
|
||||
albumCounter++;
|
||||
$('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
|
||||
if (albumCounter == totalAlbums) {
|
||||
$("#notification").fadeOut();
|
||||
$("#notification").slideUp();
|
||||
var targetDiv = document.getElementById('gallery_list');
|
||||
if (targetDiv) {
|
||||
targetDiv.innerHTML = '';
|
||||
Albums.display(targetDiv);
|
||||
} else {
|
||||
alert('Error occured: no such layer `gallery_list`');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
alert('Error occured: ' + r.message);
|
||||
}
|
||||
|
@ -48,8 +77,8 @@ function galleryRemove(albumName) {
|
|||
if (confirm("Do you wan't to remove album " + albumName + "?")) {
|
||||
$.getJSON("ajax/galleryOp.php", {operation: "remove", name: albumName}, function(r) {
|
||||
if (r.status == "success") {
|
||||
$("#gallery_album_box[title='"+albumName+"']").remove();
|
||||
Albums.remove(albumName);
|
||||
$("#gallery_album_box[title='"+albumName+"']").remove();
|
||||
Albums.remove(albumName);
|
||||
} else {
|
||||
alert("Error: " + r.cause);
|
||||
}
|
||||
|
|
|
@ -12,13 +12,9 @@ Albums={
|
|||
// album with the same name wont be insered,
|
||||
// and false will be returned
|
||||
// true on success
|
||||
add: function(album_name, num, bgPath) {
|
||||
for (var a in Albums.albums) {
|
||||
if (a.name == album_name) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Albums.albums.push({name: album_name, numOfCovers: num, backgroundPath: bgPath});
|
||||
add: function(album_name, num) {
|
||||
if (Albums.albums[album_name] != undefined) return false;
|
||||
Albums.albums[album_name] = {name: album_name, numOfCovers: num};
|
||||
return true;
|
||||
},
|
||||
// remove element with given name
|
||||
|
@ -40,19 +36,7 @@ Albums={
|
|||
// return element which match given name
|
||||
// of undefined if such element do not exist
|
||||
find: function(name) {
|
||||
var i = -1, tmp = 0;
|
||||
for (var k in Albums.albums) {
|
||||
var a = Albums.albums[k];
|
||||
if (a.name == name) {
|
||||
i = tmp;
|
||||
break;
|
||||
}
|
||||
tmp++;
|
||||
}
|
||||
if (i != -1) {
|
||||
return Albums.albums[i];
|
||||
}
|
||||
return undefined;
|
||||
return Albums.albums[name];
|
||||
},
|
||||
// displays gallery in linear representation
|
||||
// on given element, and apply default styles for gallery
|
||||
|
|
|
@ -50,15 +50,14 @@ class OC_Gallery_Scanner {
|
|||
while (($filename = readdir($dh)) !== false) {
|
||||
$filepath = ($path[strlen($path)-1]=='/'?$path:$path.'/').$filename;
|
||||
if (substr($filename, 0, 1) == '.') continue;
|
||||
if (OC_Filesystem::is_dir($filepath)) {
|
||||
self::scanDir($filepath, $albums);
|
||||
} elseif (self::isPhoto($path.'/'.$filename)) {
|
||||
if (self::isPhoto($path.'/'.$filename)) {
|
||||
$current_album['images'][] = $filepath;
|
||||
}
|
||||
}
|
||||
}
|
||||
$current_album['imagesCount'] = count($current_album['images']);
|
||||
$albums[] = $current_album;
|
||||
$albums['imagesCount'] = $current_album['imagesCount'];
|
||||
$albums['albumName'] = $current_album['name'];
|
||||
|
||||
$result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
|
||||
if ($result->numRows() == 0 && count($current_album['images'])) {
|
||||
|
@ -92,5 +91,23 @@ class OC_Gallery_Scanner {
|
|||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static function find_paths($path) {
|
||||
$ret = array();
|
||||
$dirres;
|
||||
$addpath = FALSE;
|
||||
if (($dirres = OC_Filesystem::opendir($path)) == FALSE) return $ret;
|
||||
|
||||
while (($file = readdir($dirres)) != FALSE) {
|
||||
if ($file[0] == '.') continue;
|
||||
if (OC_Filesystem::is_dir($path.$file))
|
||||
$ret = array_merge($ret, self::find_paths($path.$file.'/'));
|
||||
if (self::isPhoto($path.$file)) $addpath = TRUE;
|
||||
}
|
||||
|
||||
if ($addpath) $ret[] = $path;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
Loading…
Reference in a new issue