Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(883)

Unified Diff: ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_item.js

Issue 869923004: Files.app: Add model classes to manage cache states of new MetadataCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_item.js
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_item.js b/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_item.js
new file mode 100644
index 0000000000000000000000000000000000000000..707d405fd29dca5946c4d51c0696c1b98e3c3e54
--- /dev/null
+++ b/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_item.js
@@ -0,0 +1,128 @@
+// 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.
+
+/**
+ * Cache of metadata for a FileEntry.
+ * @constructor
+ * @struct
+ */
+function MetadataCacheItem() {
+ /**
+ * Map of property name and MetadataCacheItemProperty.
+ * @private {!Object<string, !MetadataCacheItemProperty>}
+ * @const
+ */
+ this.properties_ = {};
+}
+
+/**
+ * Marks invalidated properies as loading and returns property names that are
+ * need to be loaded.
+ * @param {number} requestId
+ * @param {!Array<string>} names
+ * @return {!Array<string>} Load requested names.
+ */
+MetadataCacheItem.prototype.startRequests = function(requestId, names) {
+ var loadRequested = [];
+ for (var i = 0; i < names.length; i++) {
+ var name = names[i];
+ // Check if the property needs to be updated.
+ if (this.properties_[name] &&
+ this.properties_[name].state !==
+ MetadataCacheItemPropertyState.INVALIDATED) {
+ continue;
+ }
+ if (!this.properties_[name])
+ this.properties_[name] = new MetadataCacheItemProperty();
+ this.properties_[name].requestId = requestId;
+ this.properties_[name].state = MetadataCacheItemPropertyState.LOADING;
+ loadRequested.push(name);
+ }
+ return loadRequested;
+};
+
+/**
+ * Feeds the result of startRequests.
+ * @param {number} requestId Request ID passed when calling startRequests.
+ * @param {!Object} object Map of property name and value.
+ * @return {boolean} Whether at least one property is updated or not.
+ */
+MetadataCacheItem.prototype.storeProperties = function(requestId, object) {
+ var changed = false;
+ for (var name in object) {
+ if (!this.properties_[name])
+ this.properties_[name] = new MetadataCacheItemProperty();
+ if (requestId < this.properties_[name].requestId)
+ continue;
+ changed = true;
+ this.properties_[name].requestId = requestId;
+ this.properties_[name].value = object[name];
+ this.properties_[name].state = MetadataCacheItemPropertyState.FULFILLED;
+ }
+ return changed;
+};
+
+/**
+ * Marks the caches of all properties in the item as invalidates and forces to
+ * reload at the next time of startRequests.
+ * @param {number} requestId Request ID of the invalidation request. This must
+ * be larger than other requets ID passed to the item before.
+ */
+MetadataCacheItem.prototype.invalidate = function(requestId) {
+ for (var name in this.properties_) {
+ assert(this.properties_[name].requestId < requestId);
+ this.properties_[name].requestId = requestId;
+ this.properties_[name].state = MetadataCacheItemPropertyState.INVALIDATED;
+ }
+};
+
+/**
+ * Obtains property for entries and names.
+ * Note that it returns invalidated properties also.
+ * @param {!Array<string>} names
+ * @return {!Object}
+ */
+MetadataCacheItem.prototype.get = function(names) {
+ var result = {};
+ for (var i = 0; i < names.length; i++) {
+ var name = names[i];
+ if (this.properties_[name])
+ result[name] = this.properties_[name].value;
+ }
+ return result;
+};
+
+/**
+ * @enum {string}
+ */
+var MetadataCacheItemPropertyState = {
+ INVALIDATED: 'invalidated',
+ LOADING: 'loading',
+ FULFILLED: 'fulfilled'
+};
+
+/**
+ * Cache of metadata for a property.
+ * @constructor
+ * @struct
+ */
+function MetadataCacheItemProperty() {
+ /**
+ * Cached value of property.
+ * @public {*}
+ */
+ this.value = null;
+
+ /**
+ * Last request ID.
+ * @public {number}
+ */
+ this.requestId = -1;
+
+ /**
+ * Cache state of the property.
+ * @public {MetadataCacheItemPropertyState}
+ */
+ this.state = MetadataCacheItemPropertyState.INVALIDATED;
+}

Powered by Google App Engine
This is Rietveld 408576698