Index: ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata_model.js |
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata_model.js b/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata_model.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..06302fe39bc7e2834cc4ce94ac53988965a774d8 |
--- /dev/null |
+++ b/ui/file_manager/file_manager/foreground/js/metadata/file_system_metadata_model.js |
@@ -0,0 +1,92 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * @param {!MetadataProviderCache} cache |
+ * @param {!FileSystemMetadataProvider} fileSystemMetadataProvider |
+ * @param {!ExternalMetadataProvider} externalMetadataProvider |
+ * @param {!VolumeManagerWrapper} volumeManager |
+ * @constructor |
+ * @struct |
+ */ |
+function FileSystemMetadataModel( |
+ cache, |
+ fileSystemMetadataProvider, |
+ externalMetadataProvider, |
+ volumeManager) { |
+ /** |
+ * @private {!MetadataProviderCache} |
+ * @const |
+ */ |
+ this.cache_ = cache; |
+ |
+ /** |
+ * @private {!FileSystemMetadataProvider} |
+ * @const |
+ */ |
+ this.fileSystemMetadataProvider_ = fileSystemMetadataProvider; |
+ |
+ /** |
+ * @private {!ExternalMetadataProvider} |
+ * @const |
+ */ |
+ this.externalMetadataProvider_ = externalMetadataProvider; |
+ |
+ /** |
+ * @private {!VolumeManagerWrapper} |
+ * @const |
+ */ |
+ this.volumeManager_ = volumeManager; |
+} |
+ |
+/** |
+ * Obtains metadata for entries. |
+ * @param {!Array<!FileEntry>} entries Entries. |
+ * @param {!Array<string>} names Metadata property names to be obtained. |
+ * @return {!Promise<!Array<!ExternalMetadata>>} |
+ */ |
+FileSystemMetadataModel.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); |
+ } |
+ } |
+ |
+ return Promise.all([ |
+ this.fileSystemMetadataProvider_.get(localEntries, names), |
+ this.externalMetadataProvider_.get(externalEntries, names) |
+ ]).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]; |
+ } |
+ return integratedResults; |
+ }); |
+}; |
+ |
+/** |
+ * Obtains metadata cache for entries. |
+ * @param {!Array<!FileEntry>} entries Entries. |
+ * @param {!Array<string>} names Metadata property names to be obtained. |
+ * @return {!Array<!FileSystemMetadata>} |
+ */ |
+FileSystemMetadataModel.prototype.getCache = function(entries, names) { |
+ return this.cache_.get(entries, names); |
+}; |