Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4433)

Unified Diff: chrome/browser/resources/file_manager/js/directory_contents.js

Issue 10634020: [FileManager] Do drive search incrementally (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/file_manager/js/directory_contents.js
diff --git a/chrome/browser/resources/file_manager/js/directory_contents.js b/chrome/browser/resources/file_manager/js/directory_contents.js
index 79f5a60766dcf79335651c70027359eb21f94607..59b668728c6ab8ef9ed4305d4b9165d20efd5276 100644
--- a/chrome/browser/resources/file_manager/js/directory_contents.js
+++ b/chrome/browser/resources/file_manager/js/directory_contents.js
@@ -354,6 +354,18 @@ DirectoryContentsBasic.prototype.createDirectory = function(
onSuccess.bind(this), errorCallback);
};
+/**
+ * Delay to be used for gdata search scan.
+ * The goal is to reduce the number of server requests when user is typing the
+ * query.
+ */
+DirectoryContentsGDataSearch.SCAN_DELAY = 200;
+
+/**
+ * Number of results at which we stop the search.
+ * Note that max number of shown results is MAX_RESULTS + search feed size.
+ */
+DirectoryContentsGDataSearch.MAX_RESULTS = 999;
/**
* @constructor
@@ -366,6 +378,9 @@ function DirectoryContentsGDataSearch(context, dirEntry, query) {
DirectoryContents.call(this, context);
this.query_ = query;
this.directoryEntry_ = dirEntry;
+ this.nextFeed_ = '';
+ this.done_ = false;
+ this.fetchedResultsNum_ = 0;
}
/**
@@ -407,8 +422,9 @@ DirectoryContentsGDataSearch.prototype.getPath = function() {
* Start directory scan.
*/
DirectoryContentsGDataSearch.prototype.scan = function() {
- chrome.fileBrowserPrivate.searchGData(this.query_,
- this.onNewEntries.bind(this));
+ // Let's give another search a chance to cancel us before we begin.
+ setTimeout(this.readNextChunk.bind(this),
+ DirectoryContentsGDataSearch.SCAN_DELAY);
};
/**
@@ -416,7 +432,33 @@ DirectoryContentsGDataSearch.prototype.scan = function() {
* it means we're done.
*/
DirectoryContentsGDataSearch.prototype.readNextChunk = function() {
- this.onCompleted();
+ if (this.scanCancelled_)
+ return;
+
+ if (this.done_) {
+ this.onCompleted();
+ return;
+ }
+
+ var searchCallback = (function(entries, nextFeed) {
+ // TODO(tbarzic): Improve error handling.
+ if (!entries) {
+ console.log('Drive search encountered an error');
+ this.onCompleted();
+ return;
+ }
+ this.nextFeed_ = nextFeed;
+ this.fetchedResultsNum_ += entries.length;
+ if (this.fetchedResultsNum_ >= DirectoryContentsGDataSearch.MAX_RESULTS)
+ this.nextFeed_ = '';
+
+ this.done_ = (this.nextFeed_ == '');
+ this.onNewEntries(entries);
+ }).bind(this);
+
+ chrome.fileBrowserPrivate.searchGData(this.query_,
+ this.nextFeed_,
+ searchCallback);
};
« no previous file with comments | « chrome/browser/chromeos/gdata/mock_gdata_file_system.h ('k') | chrome/browser/resources/file_manager/js/directory_model.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698