| 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()];
|
| + });
|
| });
|
| };
|
|
|
|
|