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'));
}
}
?>
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`');
}
}
+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);
}
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);
}
// 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
// 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
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'])) {
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;
+ }
}
?>