summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBogdan Gheorghe <gheorghe@ca.ibm.com>2013-11-08 14:16:39 -0500
committerBogdan Gheorghe <gheorghe@ca.ibm.com>2013-11-08 14:16:39 -0500
commitaf2ceea913da0eb8e3c4f98ae3ef685cf191b930 (patch)
tree2090e6c784cb8067b8cacb56e44fea5c9f5b02bd
parentd88967513813f0273e47300eebb3093bd2845717 (diff)
downloadorg.eclipse.orion.client-origin/gheorghe/defTreeUpdate.zip
org.eclipse.orion.client-origin/gheorghe/defTreeUpdate.tar.gz
org.eclipse.orion.client-origin/gheorghe/defTreeUpdate.tar.bz2
Wait for all outstanding fetchChildren to complete before performing a revealorigin/gheorghe/defTreeUpdate
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js28
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js4
2 files changed, 28 insertions, 4 deletions
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js b/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js
index a867286..8d68122 100644
--- a/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js
@@ -26,6 +26,7 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
this.idPrefix = idPrefix || "";
this.excludeFiles = !!excludeFiles;
this.excludeFolders = !!excludeFolders;
+ this.queue = [];
}
FileModel.prototype = new mExplorer.ExplorerModel();
@@ -33,6 +34,10 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
onItem(this.root);
};
+ FileModel.prototype.getPending = function(){
+ return Deferred.all(this.queue);
+ };
+
/*
Process the parent and children, doing any filtering or sorting that may be necessary.
*/
@@ -82,12 +87,19 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
onComplete([]);
} else if (parentItem.Location) {
var progress = this.registry.getService("orion.page.progress");
- progress.progress(this.fileClient.fetchChildren(parentItem.ChildrenLocation), "Fetching children of " + parentItem.Name).then(
+ var deferred = progress.progress(this.fileClient.fetchChildren(parentItem.ChildrenLocation), "Fetching children of " + parentItem.Name);
+ this.queue.push(deferred);
+ deferred.then(
function(children) {
if (self.destroyed) { return; }
onComplete(self.processParent(parentItem, children));
+ //remove deferred from queue
+ var index = self.queue.indexOf(deferred);
+ self.queue.splice(index, 1);
}
- );
+ , function() {
+ //error handler remove this deferred from queue
+ });
} else {
onComplete([]);
}
@@ -220,8 +232,12 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
});
},
create: function(modelEvent) {
+ var that = this;
// refresh the node
- this.changedItem(modelEvent.parent, true, modelEvent.newValue);
+ this.changedItem(modelEvent.parent, true, modelEvent.newValue).then(
+ function (event) {
+ that.modelEventDispatcher.dispatchEvent({type: "postCreate", newValue: modelEvent.newValue});
+ });
},
"delete": function(modelEvent) { //$NON-NLS-0$
// Handled by deleteMultiple
@@ -497,6 +513,7 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
var that = this;
var deferred = new Deferred();
parent.children = null;
+ this.model.queue.push(deferred);
this.model.getChildren(parent, function(children) {
//If a key board navigator is hooked up, we need to sync up the model
if(that.getNavHandler()){
@@ -504,6 +521,11 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/
}
that.myTree.refresh.bind(that.myTree)(parent, children, forceExpand);
deferred.resolve(children);
+ //remove deferred from queue
+ window.console.log("Model Size Before: " + that.queue.length);
+ var index = that.queue.indexOf(deferred);
+ that.queue.splice(index, 1);
+ window.console.log("Model Size After: " + that.queue.length);
});
return deferred;
};
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js
index 1374489..1018940 100644
--- a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js
@@ -55,7 +55,9 @@ define([
this.treeRoot = {}; // Needed by FileExplorer.prototype.loadResourceList
var _self = this;
this.editorInputListener = function(event) {
- _self.reveal(event.metadata, true);
+ if (_self.model) {
+ _self.model.getPending().then(function() {_self.reveal(event.metadata, true);});
+ }
};
this.editorInputManager.addEventListener("InputChanged", this.editorInputListener); //$NON-NLS-0$
var dispatcher = this.modelEventDispatcher;