Index: ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata.js |
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata.js b/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata.js |
index de312ad0c7d1874553eb5387af452af1dcbd07ec..ec3e05a3775b3bb014e7b38ed1335619972c829e 100644 |
--- a/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata.js |
+++ b/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata.js |
@@ -6,6 +6,7 @@ |
* @param {!MetadataProviderCache} cache |
* @param {!FileSystemMetadataProvider} fileSystemMetadataProvider |
* @param {!ExternalMetadataProvider} externalMetadataProvider |
+ * @param {!ContentMetadataProvider} contentMetadataProvider |
* @param {!VolumeManagerWrapper} volumeManager |
* @constructor |
* @struct |
@@ -14,6 +15,7 @@ function FileSystemMetadata( |
cache, |
fileSystemMetadataProvider, |
externalMetadataProvider, |
+ contentMetadataProvider, |
volumeManager) { |
/** |
* @private {!MetadataProviderCache} |
@@ -34,6 +36,12 @@ function FileSystemMetadata( |
this.externalMetadataProvider_ = externalMetadataProvider; |
/** |
+ * @private {!ContentMetadataProvider} |
+ * @const |
+ */ |
+ this.contentMetadataProvider_ = contentMetadataProvider; |
+ |
+ /** |
* @private {!VolumeManagerWrapper} |
* @const |
*/ |
@@ -41,6 +49,20 @@ function FileSystemMetadata( |
} |
/** |
+ * @param {!MetadataProviderCache} cache |
+ * @param {!VolumeManagerWrapper} volumeManager |
+ * @return {!FileSystemMetadata} |
+ */ |
+FileSystemMetadata.create = function(cache, volumeManager) { |
+ return new FileSystemMetadata( |
+ cache, |
+ new FileSystemMetadataProvider(cache), |
+ new ExternalMetadataProvider(cache), |
+ new ContentMetadataProvider(cache), |
+ volumeManager); |
+}; |
+ |
+/** |
* Obtains metadata for entries. |
* @param {!Array<!Entry>} entries Entries. |
* @param {!Array<string>} names Metadata property names to be obtained. |
@@ -48,41 +70,57 @@ function FileSystemMetadata( |
*/ |
FileSystemMetadata.prototype.get = function(entries, names) { |
var localEntries = []; |
- var localEntryIndexes = []; |
var externalEntries = []; |
- var externalEntryIndexes = []; |
for (var i = 0; i < entries.length; i++) { |
var volumeInfo = this.volumeManager_.getVolumeInfo(entries[i]); |
if (volumeInfo && |
(volumeInfo.volumeType === VolumeManagerCommon.VolumeType.DRIVE || |
volumeInfo.volumeType === VolumeManagerCommon.VolumeType.PROVIDED)) { |
externalEntries.push(entries[i]); |
- externalEntryIndexes.push(i); |
} else { |
localEntries.push(entries[i]); |
- localEntryIndexes.push(i); |
} |
} |
- // Correct property names that are valid for fileSystemMetadataProvider. |
- var fileSystemPropertyNames = names.filter(function(name) { |
- return FileSystemMetadataProvider.PROPERTY_NAMES.indexOf(name) !== -1; |
- }); |
- |
+ var fileSystemPropertyNames = []; |
+ var externalPropertyNames = []; |
+ var contentPropertyNames = []; |
+ for (var i = 0; i < names.length; i++) { |
+ var validName = false; |
+ if (FileSystemMetadataProvider.PROPERTY_NAMES.indexOf(names[i]) !== -1) { |
+ fileSystemPropertyNames.push(names[i]); |
+ validName = true; |
+ } |
+ if (ExternalMetadataProvider.PROPERTY_NAMES.indexOf(names[i]) !== -1) { |
+ externalPropertyNames.push(names[i]); |
+ validName = true; |
+ } |
+ if (ContentMetadataProvider.PROPERTY_NAMES.indexOf(names[i]) !== -1) { |
+ assert(!validName); |
+ contentPropertyNames.push(names[i]); |
+ validName = true; |
+ } |
+ assert(validName); |
+ } |
return Promise.all([ |
this.fileSystemMetadataProvider_.get(localEntries, fileSystemPropertyNames), |
- this.externalMetadataProvider_.get(externalEntries, names) |
+ this.externalMetadataProvider_.get(externalEntries, externalPropertyNames), |
+ this.contentMetadataProvider_.get(entries, contentPropertyNames) |
]).then(function(results) { |
- var integratedResults = []; |
- var localResults = results[0]; |
- for (var i = 0; i < localResults.length; i++) { |
- integratedResults[localEntryIndexes[i]] = localResults[i]; |
- } |
- var externalResults = results[1]; |
- for (var i = 0; i < externalResults.length; i++) { |
- integratedResults[externalEntryIndexes[i]] = externalResults[i]; |
+ var integratedResults = {}; |
+ for (var i = 0; i < 3; i++) { |
+ var entryList = [localEntries, externalEntries, entries][i]; |
+ for (var j = 0; j < entryList.length; j++) { |
+ var url = entryList[j].toURL(); |
+ integratedResults[url] = integratedResults[url] || new MetadataItem(); |
+ for (var name in results[i][j]) { |
+ integratedResults[url][name] = results[i][j][name]; |
+ } |
+ } |
} |
- return integratedResults; |
+ return entries.map(function(entry) { |
+ return integratedResults[entry.toURL()]; |
+ }); |
}); |
}; |