www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 74e2d5a842ff591c18ede7114a95b2a4c9f3326d
parent b56dcf5fbe758782196c1c680b53d619e3ae13aa
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue, 23 May 2006 14:54:10 +0000

New methods:

Scholar.Folder.erase() -- deletes a folder and all descendent folders and items

Scholar.Folder._getDescendents() - returns an array of descendent folders and items (rows of 'id' and 'isFolder') ("private" for now--could be useful as public later)

Scholar.Folders.unload() - clear folder from internal cache (used by Scholar.Folder.erase())


Diffstat:
Mchrome/chromeFiles/content/scholar/data_access.js | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 88 insertions(+), 0 deletions(-)

diff --git a/chrome/chromeFiles/content/scholar/data_access.js b/chrome/chromeFiles/content/scholar/data_access.js @@ -1114,6 +1114,72 @@ Scholar.Folder.prototype.isEmpty = function(){ return !!parseInt(this._empty); } +/** +* Deletes a folder and all descendent folders and items +**/ +Scholar.Folder.prototype.erase = function(){ + Scholar.DB.beginTransaction(); + + var descendents = this._getDescendents(); + var folders = new Array(this._id); + + for(var i=0, len=descendents.length; i<len; i++){ + if (!descendents[i]['isFolder']){ + // Have items delete themselves + Scholar.Items.get(descendents[i]['id']).erase(); + } + else { + folders.push(descendents[i]['id']); + } + } + + Scholar.DB.query('DELETE FROM folders WHERE folderID IN (' + + folders.join() + ')'); + + Scholar.DB.query('DELETE FROM treeStructure WHERE id IN (' + + folders.join() + ') AND isFolder=1'); + + // Clear deleted folder from internal memory + Scholar.Folders.unload(folders); + + Scholar.DB.commitTransaction(); +} + + +/** +* Returns an array of descendent folders and items (rows of 'id' and 'isFolder') +**/ +Scholar.Folder.prototype._getDescendents = function(){ + var toReturn = new Array(); + + var children = Scholar.DB.query('SELECT id, isFolder FROM treeStructure ' + + 'WHERE parentFolderID=' + this._id); + + for(var i=0, len=children.length; i<len; i++){ + if (parseInt(children[i]['isFolder'])){ + toReturn.push({ + id: children[i]['id'], + isFolder: 1 + }); + + var descendents = + Scholar.Folders.get(children[i]['id'])._getDescendents(); + + for(var j=0, len=descendents.length; j<len; j++){ + toReturn.push(descendents[j]); + } + } + else { + toReturn.push({ + id: children[i]['id'], + isFolder: 0 + }); + } + } + + return toReturn; +} + /* * Primary interface for accessing Scholar folders @@ -1124,6 +1190,7 @@ Scholar.Folders = new function(){ this.get = get; this.reloadAll = reloadAll; + this.unload = unload; /* * Returns a Scholar.Folder object for a folderID @@ -1136,11 +1203,32 @@ Scholar.Folders = new function(){ } + /** + * Clears internal cache and reloads folder data from DB + **/ function reloadAll(){ _folders = new Array(); _load(); } + + /** + * Clear folder from internal cache (used by Scholar.Folder.erase()) + * + * Can be passed ids as individual parameters or as an array of ids, or both + **/ + function unload(){ + var ids = Scholar.flattenArguments(arguments); + + for(var i=0; i<ids.length; i++){ + delete _folders[ids[i]]; + } + } + + + /** + * Loads folder data from DB and adds to internal cache + **/ function _load(){ var sql = "SELECT folderID, folderName, parentFolderID, " + "(SELECT COUNT(*) FROM treeStructure WHERE "