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

Unified Diff: ui/file_manager/file_manager/background/js/media_scanner.js

Issue 1174653002: Show progress bar during scanning. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Normalize statics object naming. Created 5 years, 6 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
« no previous file with comments | « no previous file | ui/file_manager/file_manager/background/js/media_scanner_unittest.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/file_manager/file_manager/background/js/media_scanner.js
diff --git a/ui/file_manager/file_manager/background/js/media_scanner.js b/ui/file_manager/file_manager/background/js/media_scanner.js
index 365da20a2c94821c79f412b5be1a4bf363c43075..3aedbb4c2c335364e419d559ccb86c608fb49892 100644
--- a/ui/file_manager/file_manager/background/js/media_scanner.js
+++ b/ui/file_manager/file_manager/background/js/media_scanner.js
@@ -147,6 +147,7 @@ importer.DefaultMediaScanner.prototype.scanFiles = function(entries) {
this.notify_(importer.ScanEvent.INVALIDATED, scan);
}.bind(this));
+ scan.setCandidateCount(entries.length);
var scanPromises = entries.map(this.onUniqueFileFound_.bind(this, scan));
Promise.all(scanPromises)
@@ -178,6 +179,7 @@ importer.DefaultMediaScanner.SCAN_BATCH_SIZE = 1;
*/
importer.DefaultMediaScanner.prototype.scanMediaFiles_ =
function(scan, entries) {
+ scan.setCandidateCount(entries.length);
var handleFileEntry = this.onFileEntryFound_.bind(this, scan);
/**
@@ -274,6 +276,7 @@ importer.DefaultMediaScanner.prototype.crawlDirectory_ =
*/
importer.DefaultMediaScanner.prototype.onFileEntryFound_ =
function(scan, entry) {
+
return this.getDisposition_(entry, importer.Destination.GOOGLE_DRIVE)
.then(
/**
@@ -300,7 +303,9 @@ importer.DefaultMediaScanner.prototype.onFileEntryFound_ =
importer.DefaultMediaScanner.prototype.onUniqueFileFound_ =
function(scan, entry) {
+ scan.onCandidatesProcessed(1);
if (!importer.isEligibleType(entry)) {
+ this.notify_(importer.ScanEvent.UPDATED, scan);
return Promise.resolve();
}
@@ -329,7 +334,9 @@ importer.DefaultMediaScanner.prototype.onUniqueFileFound_ =
*/
importer.DefaultMediaScanner.prototype.onDuplicateFileFound_ =
function(scan, entry, disposition) {
+ scan.onCandidatesProcessed(1);
scan.addDuplicateEntry(entry, disposition);
+ this.notify_(importer.ScanEvent.UPDATED, scan);
return Promise.resolve();
};
@@ -358,6 +365,19 @@ importer.ScanResult.prototype.cancel;
importer.ScanResult.prototype.canceled;
/**
+ * @param {number} count Sets the total number of candidate entries
+ * that were checked while scanning. Used when determining
+ * total progress.
+ */
+importer.ScanResult.prototype.setCandidateCount;
+
+/**
+ * Event method called when a candidate has been processed.
+ * @param {number} count
+ */
+importer.ScanResult.prototype.onCandidatesProcessed;
+
+/**
* Returns all files entries discovered so far. The list will be
* complete only after scanning has completed and {@code isFinal}
* returns {@code true}.
@@ -399,7 +419,13 @@ importer.ScanResult.prototype.getStatistics;
* scanDuration: number,
* newFileCount: number,
* duplicates: !Object<!importer.Disposition, number>,
- * sizeBytes: number
+ * sizeBytes: number,
+ * candidates: {
+ * total: number,
+ * processed: number,
+ * }
Dan Beam 2015/06/10 20:37:30 ,
+ * scannedFiles: number,
+ * progress: number
* }}
*/
importer.ScanResult.Statistics;
@@ -428,6 +454,12 @@ importer.DefaultScanResult = function(hashGenerator) {
/** @private {function(!FileEntry): !Promise.<string>} */
this.createHashcode_ = hashGenerator;
+ /** @private {number} */
+ this.candidateCount_ = 0;
+
+ /** @private {number} */
+ this.candidatesProcessed_ = 0;
+
/**
* List of file entries found while scanning.
* @private {!Array<!FileEntry>}
@@ -499,6 +531,16 @@ importer.DefaultScanResult.prototype.isFinal = function() {
};
/** @override */
+importer.DefaultScanResult.prototype.setCandidateCount = function(count) {
+ this.candidateCount_ = count;
+};
+
+/** @override */
+importer.DefaultScanResult.prototype.onCandidatesProcessed = function(count) {
+ this.candidatesProcessed_ = this.candidatesProcessed_ + count;
+};
+
+/** @override */
importer.DefaultScanResult.prototype.getFileEntries = function() {
return this.fileEntries_;
};
@@ -595,11 +637,35 @@ importer.DefaultScanResult.prototype.getStatistics = function() {
this.lastScanActivity_.getTime() - this.scanStarted_.getTime(),
newFileCount: this.fileEntries_.length,
duplicates: this.duplicateStats_,
- sizeBytes: this.totalBytes_
+ sizeBytes: this.totalBytes_,
+ candidates: {
+ total: this.candidateCount_,
+ processed: this.candidatesProcessed_
+ },
+ progress: this.calculateProgress_()
};
};
/**
+ * @return {number} Progress as an integer from 0-100.
+ * @private
+ */
+importer.DefaultScanResult.prototype.calculateProgress_ = function() {
+ var progress = (this.candidateCount_ > 0) ?
+ Math.floor(this.candidatesProcessed_ / this.candidateCount_ * 100) :
+ 0;
+
+ // In case candate count was off, or any other mischief has happened,
+ // we want to ensure progress never exceeds 100.
+ if (progress > 100) {
+ console.warn('Progress exceeded 100.');
+ progress = 100;
+ }
+
+ return progress;
+};
+
+/**
* Watcher for directories.
* @interface
*/
« no previous file with comments | « no previous file | ui/file_manager/file_manager/background/js/media_scanner_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698