Chromium Code Reviews| 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 86dd1bcf31765e46db276e483b716dfa88385787..6e67190cf80db123c3bf71b4442406032d2599dd 100644 |
| --- a/ui/file_manager/file_manager/background/js/media_scanner.js |
| +++ b/ui/file_manager/file_manager/background/js/media_scanner.js |
| @@ -33,54 +33,6 @@ importer.MediaScanner.prototype.addObserver; |
| importer.MediaScanner.prototype.removeObserver; |
| /** |
| - * Class representing the results of a scan operation. |
| - * |
| - * @interface |
| - */ |
| -importer.ScanResult = function() {}; |
| - |
| -/** |
| - * @return {boolean} true if scanning is complete. |
| - */ |
| -importer.ScanResult.prototype.isFinal; |
| - |
| -/** |
| - * @return {boolean} true if scanning is invalidated. |
| - */ |
| -importer.ScanResult.prototype.isInvalidated; |
| - |
| -/** |
| - * Returns all files entries discovered so far. The list will be |
| - * complete only after scanning has completed and {@code isFinal} |
| - * returns {@code true}. |
| - * |
| - * @return {!Array.<!FileEntry>} |
| - */ |
| -importer.ScanResult.prototype.getFileEntries; |
| - |
| -/** |
| - * Returns a promise that fires when scanning is complete. |
| - * |
| - * @return {!Promise.<!importer.ScanResult>} |
| - */ |
| -importer.ScanResult.prototype.whenFinal; |
| - |
| -/** |
| - * @return {!importer.ScanResult.Statistics} |
| - */ |
| -importer.ScanResult.prototype.getStatistics; |
| - |
| -/** |
| - * @typedef {{ |
| - * scanDuration: number, |
| - * newFileCount: number, |
| - * duplicateFileCount: number, |
| - * sizeBytes: number |
| - * }} |
| - */ |
| -importer.ScanResult.Statistics; |
| - |
| -/** |
| * Recursively scans through a list of given files and directories, and creates |
| * a list of media files. |
| * |
| @@ -89,14 +41,12 @@ importer.ScanResult.Statistics; |
| * @implements {importer.MediaScanner} |
| * |
| * @param {function(!FileEntry): !Promise.<string>} hashGenerator |
| - * @param {!importer.HistoryLoader} historyLoader |
| + * @param {function(!FileEntry, !importer.Destination): |
| + * !Promise<!importer.Disposition>} dispositionChecker |
| * @param {!importer.DirectoryWatcherFactory} watcherFactory |
| */ |
| -importer.DefaultMediaScanner = function( |
| - hashGenerator, historyLoader, watcherFactory) { |
| - |
| - /** @private {!importer.HistoryLoader} */ |
| - this.historyLoader_ = historyLoader; |
| +importer.DefaultMediaScanner = |
| + function(hashGenerator, dispositionChecker, watcherFactory) { |
| /** |
| * A little factory for DefaultScanResults which allows us to forgo |
| @@ -111,6 +61,13 @@ importer.DefaultMediaScanner = function( |
| this.observers_ = []; |
| /** |
| + * @param {!FileEntry} entry |
| + * @param {!importer.Destination} destination |
| + * @return {!Promise<!importer.Disposition>} |
| + */ |
| + this.getDisposition_ = dispositionChecker; |
| + |
| + /** |
| * @private {!importer.DirectoryWatcherFactory} |
| * @const |
| */ |
| @@ -258,17 +215,18 @@ importer.DefaultMediaScanner.prototype.scanDirectory_ = |
| */ |
| importer.DefaultMediaScanner.prototype.onFileEntryFound_ = |
| function(scan, entry) { |
| - return this.hasHistoryDuplicate_(entry) |
| + return this.getDisposition_(entry, importer.Destination.GOOGLE_DRIVE) |
| .then( |
| /** |
| - * @param {boolean} duplicate |
| + * @param {!importer.Disposition} disposition The disposition |
| + * of the entry. Either some sort of dupe, or an original. |
| * @return {!Promise} |
| * @this {importer.DefaultMediaScanner} |
| */ |
| - function(duplicate) { |
| - return duplicate ? |
| - this.onDuplicateFileFound_(scan, entry) : |
| - this.onUniqueFileFound_(scan, entry); |
| + function(disposition) { |
| + return disposition === importer.Disposition.ORIGINAL ? |
| + this.onUniqueFileFound_(scan, entry) : |
| + this.onDuplicateFileFound_(scan, entry, disposition); |
| }.bind(this)); |
| }; |
| @@ -306,44 +264,63 @@ importer.DefaultMediaScanner.prototype.onUniqueFileFound_ = |
| * |
| * @param {!importer.DefaultScanResult} scan |
| * @param {!FileEntry} entry |
| + * @param {!importer.Disposition} disposition |
| * @return {!Promise} |
| * @private |
| */ |
| importer.DefaultMediaScanner.prototype.onDuplicateFileFound_ = |
| - function(scan, entry) { |
| - scan.addDuplicateEntry(entry); |
| + function(scan, entry, disposition) { |
| + scan.addDuplicateEntry(entry, disposition); |
| return Promise.resolve(); |
| }; |
| /** |
| - * @param {!FileEntry} entry |
| - * @return {!Promise.<boolean>} True if there is a history-entry-duplicate |
| - * for the file. |
| - * @private |
| + * Class representing the results of a scan operation. |
| + * |
| + * @interface |
| */ |
| -importer.DefaultMediaScanner.prototype.hasHistoryDuplicate_ = function(entry) { |
| - return this.historyLoader_.getHistory() |
| - .then( |
| - /** |
| - * @param {!importer.ImportHistory} history |
| - * @return {!Promise} |
| - * @this {importer.DefaultMediaScanner} |
| - */ |
| - function(history) { |
| - return Promise.all([ |
| - history.wasCopied(entry, importer.Destination.GOOGLE_DRIVE), |
| - history.wasImported(entry, importer.Destination.GOOGLE_DRIVE) |
| - ]).then( |
| - /** |
| - * @param {!Array.<boolean>} results |
| - * @return {!Promise} |
| - * @this {importer.DefaultMediaScanner} |
| - */ |
| - function(results) { |
| - return results[0] || results[1]; |
| - }.bind(this)); |
| - }.bind(this)); |
| -}; |
| +importer.ScanResult = function() {}; |
| + |
| +/** |
| + * @return {boolean} true if scanning is complete. |
| + */ |
| +importer.ScanResult.prototype.isFinal; |
| + |
| +/** |
| + * @return {boolean} true if scanning is invalidated. |
| + */ |
| +importer.ScanResult.prototype.isInvalidated; |
| + |
| +/** |
| + * Returns all files entries discovered so far. The list will be |
| + * complete only after scanning has completed and {@code isFinal} |
| + * returns {@code true}. |
| + * |
| + * @return {!Array.<!FileEntry>} |
|
mtomasz
2015/03/05 04:36:53
nit: We recently switched to skipping the dot. Arr
Steve McKay
2015/03/05 21:39:03
Done.
FYI, this was just moved from another spot
|
| + */ |
| +importer.ScanResult.prototype.getFileEntries; |
| + |
| +/** |
| + * Returns a promise that fires when scanning is complete. |
| + * |
| + * @return {!Promise.<!importer.ScanResult>} |
| + */ |
| +importer.ScanResult.prototype.whenFinal; |
| + |
| +/** |
| + * @return {!importer.ScanResult.Statistics} |
| + */ |
| +importer.ScanResult.prototype.getStatistics; |
| + |
| +/** |
| + * @typedef {{ |
| + * scanDuration: number, |
| + * newFileCount: number, |
| + * duplicates: !Object<!importer.Disposition, number>, |
| + * sizeBytes: number |
| + * }} |
| + */ |
| +importer.ScanResult.Statistics; |
| /** |
| * Results of a scan operation. The object is "live" in that data can and |
| @@ -381,8 +358,8 @@ importer.DefaultScanResult = function(hashGenerator) { |
| /** @private {number} */ |
| this.totalBytes_ = 0; |
| - /** @private {number} */ |
| - this.duplicateFileCount_ = 0; |
| + /** @private {!Object<!importer.Disposition, number>} */ |
| + this.duplicates_ = {}; |
| /** |
| * The point in time when the scan was started. |
| @@ -469,7 +446,9 @@ importer.DefaultScanResult.prototype.addFileEntry = function(entry) { |
| this.lastScanActivity_ = new Date(); |
| if (hashcode in this.fileHashcodes_) { |
| - this.addDuplicateEntry(entry); |
| + this.addDuplicateEntry( |
| + entry, |
| + importer.Disposition.SCAN_DUPLICATE); |
| return false; |
| } |
| @@ -486,9 +465,14 @@ importer.DefaultScanResult.prototype.addFileEntry = function(entry) { |
| /** |
| * Logs the fact that a duplicate file entry was discovered during the scan. |
| * @param {!FileEntry} entry |
| + * @param {!importer.Disposition} disposition |
| */ |
| -importer.DefaultScanResult.prototype.addDuplicateEntry = function(entry) { |
| - this.duplicateFileCount_++; |
| +importer.DefaultScanResult.prototype.addDuplicateEntry = |
| + function(entry, disposition) { |
| + if (!(disposition in this.duplicates_)) { |
| + this.duplicates_[disposition] = 0; |
| + } |
| + this.duplicates_[disposition]++; |
| }; |
| /** @override */ |
| @@ -497,7 +481,7 @@ importer.DefaultScanResult.prototype.getStatistics = function() { |
| scanDuration: |
| this.lastScanActivity_.getTime() - this.scanStarted_.getTime(), |
| newFileCount: this.fileEntries_.length, |
| - duplicateFileCount: this.duplicateFileCount_, |
| + duplicates: this.duplicates_, |
| sizeBytes: this.totalBytes_ |
| }; |
| }; |