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 9c7e40fd596d852a83a6e5ce0aee6ec3b7e5ae1c..529a95e68bbccc220b47826253d124c6fba7066c 100644 |
--- a/ui/file_manager/file_manager/background/js/media_scanner.js |
+++ b/ui/file_manager/file_manager/background/js/media_scanner.js |
@@ -63,8 +63,13 @@ importer.ScanResult.prototype.whenFinished; |
* @constructor |
* @struct |
* @implements {importer.MediaScanner} |
+ * |
+ * @param {!importer.HistoryLoader} historyLoader |
*/ |
-importer.DefaultMediaScanner = function() {}; |
+importer.DefaultMediaScanner = function(historyLoader) { |
+ /** @private {!importer.HistoryLoader} */ |
+ this.historyLoader_ = historyLoader; |
+}; |
/** @override */ |
importer.DefaultMediaScanner.prototype.scan = function(entries) { |
@@ -72,8 +77,9 @@ importer.DefaultMediaScanner.prototype.scan = function(entries) { |
throw new Error('Cannot scan empty list of entries.'); |
} |
- var scanResult = new importer.DefaultScanResult(); |
+ var scanResult = new importer.DefaultScanResult(this.historyLoader_); |
var scanPromises = entries.map(this.scanEntry_.bind(this, scanResult)); |
+ |
Promise.all(scanPromises) |
.then(scanResult.resolveScan.bind(scanResult)) |
.catch(scanResult.rejectScan.bind(scanResult)); |
@@ -92,7 +98,7 @@ importer.DefaultMediaScanner.prototype.scan = function(entries) { |
importer.DefaultMediaScanner.prototype.scanEntry_ = |
function(result, entry) { |
return entry.isFile ? |
- result.addFileEntry(/** @type {!FileEntry} */ (entry)) : |
+ result.onFileEntryFound(/** @type {!FileEntry} */ (entry)) : |
this.scanDirectory_(result, /** @type {!DirectoryEntry} */ (entry)); |
}; |
@@ -116,7 +122,7 @@ importer.DefaultMediaScanner.prototype.scanDirectory_ = |
entry, |
/** @param {!FileEntry} fileEntry */ |
function(fileEntry) { |
- promises.push(result.addFileEntry(fileEntry)); |
+ promises.push(result.onFileEntryFound(fileEntry)); |
}) |
.then( |
/** @this {importer.DefaultScanResult} */ |
@@ -136,8 +142,13 @@ importer.DefaultMediaScanner.prototype.scanDirectory_ = |
* @constructor |
* @struct |
* @implements {importer.ScanResult} |
+ * |
+ * @param {!importer.HistoryLoader} historyLoader |
*/ |
-importer.DefaultScanResult = function() { |
+importer.DefaultScanResult = function(historyLoader) { |
+ /** @private {!importer.HistoryLoader} */ |
+ this.historyLoader_ = historyLoader; |
+ |
/** |
* List of file entries found while scanning. |
* @private {!Array.<!FileEntry>} |
@@ -170,7 +181,7 @@ importer.DefaultScanResult = function() { |
function(resolve, reject) { |
this.resolveScan = function() { |
resolve(this); |
- }; |
+ }.bind(this); |
this.rejectScan = reject; |
}.bind(this)); |
}; |
@@ -201,14 +212,48 @@ importer.DefaultScanResult.prototype.whenFinished = function() { |
* @param {!FileEntry} entry |
* @return {!Promise} Resolves once file entry has been processed |
* and is represented in results. |
- * @private |
*/ |
-importer.DefaultScanResult.prototype.addFileEntry = function(entry) { |
+importer.DefaultScanResult.prototype.onFileEntryFound = function(entry) { |
this.lastScanActivity_ = new Date(); |
if (!FileType.isImageOrVideo(entry)) { |
return Promise.resolve(); |
} |
+ |
+ return this.historyLoader_.getHistory() |
+ .then( |
+ /** |
+ * @param {!importer.ImportHistory} history |
+ * @return {!Promise} |
+ * @this {importer.DefaultScanResult} |
+ */ |
+ function(history) { |
+ return history.wasImported( |
+ entry, |
+ importer.Destination.GOOGLE_DRIVE) |
+ .then( |
+ /** |
+ * @param {boolean} imported |
+ * @return {!Promise} |
+ * @this {importer.DefaultScanResult} |
+ */ |
+ function(imported) { |
+ return imported ? |
+ Promise.resolve() : |
+ this.addFileEntry_(entry); |
+ }.bind(this)); |
+ }.bind(this)); |
+}; |
+ |
+/** |
+ * Adds a file to results. |
+ * |
+ * @param {!FileEntry} entry |
+ * @return {!Promise} Resolves once file entry has been processed |
+ * and is represented in results. |
+ * @private |
+ */ |
+importer.DefaultScanResult.prototype.addFileEntry_ = function(entry) { |
return new Promise( |
function(resolve, reject) { |
// TODO(smckay): Update to use MetadataCache. |