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

Unified Diff: ui/file_manager/gallery/js/gallery.js

Issue 853653004: Gallery: Add items to GalleryDataModel before loading their metadata. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed. Created 5 years, 8 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
« no previous file with comments | « ui/file_manager/gallery/css/gallery.css ('k') | ui/file_manager/gallery/js/gallery_data_model.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/file_manager/gallery/js/gallery.js
diff --git a/ui/file_manager/gallery/js/gallery.js b/ui/file_manager/gallery/js/gallery.js
index 545d867943401bc1bca70427463177406e94e1d3..fba9fc8f63ba4f1fc3aed692a76d0303c69644a1 100644
--- a/ui/file_manager/gallery/js/gallery.js
+++ b/ui/file_manager/gallery/js/gallery.js
@@ -291,11 +291,42 @@ Gallery.prototype.load = function(selectedEntries) {
/**
* Loads the content.
*
- * @param {!Array.<!Entry>} entries Array of entries.
- * @param {!Array.<!Entry>} selectedEntries Array of selected entries.
+ * @param {!Array.<!FileEntry>} entries Array of entries.
+ * @param {!Array.<!FileEntry>} selectedEntries Array of selected entries.
* @private
*/
Gallery.prototype.loadInternal_ = function(entries, selectedEntries) {
+ // Add the entries to data model.
+ var items = [];
+ for (var i = 0; i < entries.length; i++) {
+ var locationInfo = this.volumeManager_.getLocationInfo(entries[i]);
+ if (!locationInfo) // Skip the item, since gone.
+ return;
+ items.push(new Gallery.Item(
+ entries[i],
+ locationInfo,
+ null,
+ null,
+ true));
+ }
+ this.dataModel_.splice(0, this.dataModel_.length);
+ this.updateThumbnails_(); // Remove the caches.
+
+ GalleryDataModel.prototype.splice.apply(
+ this.dataModel_, [0, 0].concat(items));
+
+ // Apply the selection.
+ var selectedSet = {};
+ for (var i = 0; i < selectedEntries.length; i++) {
+ selectedSet[selectedEntries[i].toURL()] = true;
+ }
+ for (var i = 0; i < items.length; i++) {
+ if (!selectedSet[items[i].getEntry().toURL()])
+ continue;
+ this.selectionModel_.setIndexSelected(i, true);
+ }
+ this.onSelection_();
+
// Obtains max chank size.
var maxChunkSize = 20;
var volumeInfo = this.volumeManager_.getVolumeInfo(entries[0]);
@@ -306,38 +337,8 @@ Gallery.prototype.loadInternal_ = function(entries, selectedEntries) {
this.context_.readonlyDirName = volumeInfo.label;
}
- // Make loading list.
- var entrySet = {};
- for (var i = 0; i < entries.length; i++) {
- var entry = entries[i];
- entrySet[entry.toURL()] = {
- entry: entry,
- selected: false,
- index: i
- };
- }
- for (var i = 0; i < selectedEntries.length; i++) {
- var entry = selectedEntries[i];
- entrySet[entry.toURL()] = {
- entry: entry,
- selected: true,
- index: i
- };
- }
- var loadingList = [];
- for (var url in entrySet) {
- loadingList.push(entrySet[url]);
- }
- loadingList = loadingList.sort(function(a, b) {
- if (a.selected && !b.selected)
- return -1;
- else if (!a.selected && b.selected)
- return 1;
- else
- return a.index - b.index;
- });
-
- if (loadingList.length === 0) {
+ // If items are empty, stop initialization.
+ if (items.length === 0) {
this.dataModel_.splice(0, this.dataModel_.length);
return;
}
@@ -348,53 +349,30 @@ Gallery.prototype.loadInternal_ = function(entries, selectedEntries) {
var thumbnailModel = new ThumbnailModel(this.metadataModel_);
var loadChunk = function(firstChunk) {
// Extract chunk.
- var chunk = loadingList.splice(0, maxChunkSize);
+ var chunk = items.splice(0, maxChunkSize);
if (!chunk.length)
return;
var entries = chunk.map(function(chunkItem) {
- return chunkItem.entry;
+ return chunkItem.getEntry();
});
var metadataPromise = self.metadataModel_.get(
entries, Gallery.PREFETCH_PROPERTY_NAMES);
var thumbnailPromise = thumbnailModel.get(entries);
return Promise.all([metadataPromise, thumbnailPromise]).then(
function(metadataLists) {
- // Remove all the previous items if it's the first chunk.
- // Do it here because prevent a flicker between removing all the items
- // and adding new ones.
- if (firstChunk) {
- self.dataModel_.splice(0, self.dataModel_.length);
- self.updateThumbnails_(); // Remove the caches.
- }
-
// Add items to the model.
- var items = [];
chunk.forEach(function(chunkItem, index) {
- var locationInfo = self.volumeManager_.getLocationInfo(chunkItem.entry);
- if (!locationInfo) // Skip the item, since gone.
- return;
- items.push(new Gallery.Item(
- chunkItem.entry,
- locationInfo,
- metadataLists[0][index],
- metadataLists[1][index],
- /* original */ true));
+ chunkItem.setMetadataItem(metadataLists[0][index]);
+ chunkItem.setThumbnailMetadataItem(metadataLists[1][index]);
+
+ if (!firstChunk || self.initialized_) {
+ var event = new Event('content');
+ event.item = chunkItem;
+ event.oldEntry = chunkItem.getEntry();
+ event.thumbnailChanged = true;
+ self.dataModel_.dispatchEvent(event);
+ }
});
- self.dataModel_.push.apply(self.dataModel_, items);
-
- // Apply the selection.
- var selectionUpdated = false;
- for (var i = 0; i < chunk.length; i++) {
- if (!chunk[i].selected)
- continue;
- var index = self.dataModel_.indexOf(items[i]);
- if (index < 0)
- continue;
- self.selectionModel_.setIndexSelected(index, true);
- selectionUpdated = true;
- }
- if (selectionUpdated)
- self.onSelection_();
// Init modes after the first chunk is loaded.
if (firstChunk && !self.initialized_) {
@@ -673,9 +651,6 @@ Gallery.prototype.onSplice_ = function() {
* @private
*/
Gallery.prototype.onContentChange_ = function(event) {
- var index = this.dataModel_.indexOf(event.item);
- if (index !== this.selectionModel_.selectedIndex)
- console.error('Content changed for unselected item');
this.updateSelectionAndState_();
};
« no previous file with comments | « ui/file_manager/gallery/css/gallery.css ('k') | ui/file_manager/gallery/js/gallery_data_model.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698