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

Side by Side Diff: chrome/browser/resources/file_manager/js/file_manager.js

Issue 10399105: [File Manager] Refresh GDrive thumbnails if they became stale (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 8 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * FileManager constructor. 6 * FileManager constructor.
7 * 7 *
8 * FileManager objects encapsulate the functionality of the file selector 8 * FileManager objects encapsulate the functionality of the file selector
9 * dialogs, as well as the full screen file manager application (though the 9 * dialogs, as well as the full screen file manager application (though the
10 * latter is not yet implemented). 10 * latter is not yet implemented).
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 'modificationTime'; 430 'modificationTime';
431 var sortDirection = 431 var sortDirection =
432 window.localStorage['sort-direction-' + this.dialogType_] || 'desc'; 432 window.localStorage['sort-direction-' + this.dialogType_] || 'desc';
433 this.directoryModel_.sortFileList(sortField, sortDirection); 433 this.directoryModel_.sortFileList(sortField, sortDirection);
434 434
435 this.refocus(); 435 this.refocus();
436 436
437 this.metadataProvider_ = 437 this.metadataProvider_ =
438 new MetadataProvider(this.filesystem_.root.toURL()); 438 new MetadataProvider(this.filesystem_.root.toURL());
439 439
440 // Holds the directories known to contain files with stale metadata
441 // as URL to bool map.
442 this.directoriesWithStaleMetadata_ = {};
443
440 // PyAuto tests monitor this state by polling this variable 444 // PyAuto tests monitor this state by polling this variable
441 this.__defineGetter__('workerInitialized_', function() { 445 this.__defineGetter__('workerInitialized_', function() {
442 return self.getMetadataProvider().isInitialized(); 446 return self.getMetadataProvider().isInitialized();
443 }); 447 });
444 448
445 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) 449 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE)
446 this.initDataTransferOperations_(); 450 this.initDataTransferOperations_();
447 451
448 this.table_.endBatchUpdates(); 452 this.table_.endBatchUpdates();
449 this.grid_.endBatchUpdates(); 453 this.grid_.endBatchUpdates();
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 fractionX = 1; 1671 fractionX = 1;
1668 } 1672 }
1669 1673
1670 style.width = percent(fractionX); 1674 style.width = percent(fractionX);
1671 style.height = percent(fractionY); 1675 style.height = percent(fractionY);
1672 style.left = percent((1 - fractionX) / 2); 1676 style.left = percent((1 - fractionX) / 2);
1673 style.top = percent((1 - fractionY) / 2); 1677 style.top = percent((1 - fractionY) / 2);
1674 }; 1678 };
1675 1679
1676 /** 1680 /**
1681 * Ask the GData service to re-fetch the metadata for the current directory.
1682 */
1683 FileManager.prototype.requestMetadataRefresh = function() {
1684 if (!this.isOnGData())
1685 return;
1686 // TODO(kaznacheev) This does not really work with GData search.
1687 var url = this.getCurrentDirectoryURL();
1688 // Skip if the current directory is now being refreshed.
1689 if (this.directoriesWithStaleMetadata_[url])
1690 return;
1691
1692 this.directoriesWithStaleMetadata_[url] = true;
1693 chrome.fileBrowserPrivate.requestDirectoryRefresh(url);
1694 };
1695
1696 /**
1677 * Create a box containing a centered thumbnail image. 1697 * Create a box containing a centered thumbnail image.
1678 * 1698 *
1679 * @param {Entry} entry Entry which thumbnail is generating for. 1699 * @param {Entry} entry Entry which thumbnail is generating for.
1680 * @param {boolean} True if fill, false if fit. 1700 * @param {boolean} True if fill, false if fit.
1681 * @param {function(HTMLElement)} opt_imageLoadCallback Callback called when 1701 * @param {function(HTMLElement)} opt_imageLoadCallback Callback called when
1682 * the image has been loaded before inserting 1702 * the image has been loaded before inserting
1683 * it into the DOM. 1703 * it into the DOM.
1684 * @return {HTMLDivElement} Thumbnal box. 1704 * @return {HTMLDivElement} Thumbnal box.
1685 */ 1705 */
1686 FileManager.prototype.renderThumbnailBox_ = function(entry, fill, 1706 FileManager.prototype.renderThumbnailBox_ = function(entry, fill,
(...skipping 13 matching lines...) Expand all
1700 self.centerImage_(img.style, img.width, img.height, fill); 1720 self.centerImage_(img.style, img.width, img.height, fill);
1701 if (opt_imageLoadCallback) 1721 if (opt_imageLoadCallback)
1702 opt_imageLoadCallback(img, transform); 1722 opt_imageLoadCallback(img, transform);
1703 box.appendChild(img); 1723 box.appendChild(img);
1704 }; 1724 };
1705 img.onerror = function() { 1725 img.onerror = function() {
1706 // Use the default icon if we could not fetch the correct one. 1726 // Use the default icon if we could not fetch the correct one.
1707 img.src = FileType.getPreviewArt(iconType); 1727 img.src = FileType.getPreviewArt(iconType);
1708 transform = null; 1728 transform = null;
1709 util.applyTransform(box, transform); 1729 util.applyTransform(box, transform);
1730
1731 var cached = self.thumbnailUrlCache_[entry.fullPath];
1732 if (!cached.failed) {
1733 cached.failed = true;
1734 self.requestMetadataRefresh();
1735 // Failing to fetch a thumbnail likely means that the thumbnail URL
1736 // is now stale. Request a refresh of the current directory, to get
1737 // the new thumbnail URLs. Once the directory is refreshed, we'll get
1738 // notified via onFileChanged event.
1739 self.requestMetadataRefresh();
1740 }
1710 }; 1741 };
1711 img.src = url; 1742 img.src = url;
1712 util.applyTransform(box, transform); 1743 util.applyTransform(box, transform);
1713 } 1744 }
1714 1745
1715 // TODO(dgozman): move to new metadata cache. 1746 // TODO(dgozman): move to new metadata cache.
1716 var cached = this.thumbnailUrlCache_[entry.fullPath]; 1747 var cached = this.thumbnailUrlCache_[entry.fullPath];
1717 if (cached) 1748 // Don't reuse the cached URL if we are now retrying.
1749 if (cached && !cached.failed)
1718 onThumbnailURL(cached.iconType, cached.url, cached.transform); 1750 onThumbnailURL(cached.iconType, cached.url, cached.transform);
1719 else 1751 else {
1752 if (cached && cached.failed) {
1753 delete cached.failed;
1754 this.metadataProvider_.reset(entry.toURL()); // Clear the cache.
1755 }
1720 this.getThumbnailURL(entry, onThumbnailURL); 1756 this.getThumbnailURL(entry, onThumbnailURL);
1757 }
1721 1758
1722 return box; 1759 return box;
1723 }; 1760 };
1724 1761
1725 FileManager.prototype.decorateThumbnail_ = function(li, entry) { 1762 FileManager.prototype.decorateThumbnail_ = function(li, entry) {
1726 li.className = 'thumbnail-item'; 1763 li.className = 'thumbnail-item';
1727 1764
1728 if (this.showCheckboxes_) 1765 if (this.showCheckboxes_)
1729 li.appendChild(this.renderSelectionCheckbox_(entry)); 1766 li.appendChild(this.renderSelectionCheckbox_(entry));
1730 1767
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after
3674 if (!result) { 3711 if (!result) {
3675 console.log('Failed to remove file watch'); 3712 console.log('Failed to remove file watch');
3676 } 3713 }
3677 }); 3714 });
3678 this.watchedDirectoryUrl_ = null; 3715 this.watchedDirectoryUrl_ = null;
3679 } 3716 }
3680 }; 3717 };
3681 3718
3682 FileManager.prototype.onFileChanged_ = function(event) { 3719 FileManager.prototype.onFileChanged_ = function(event) {
3683 // We receive a lot of events even in folders we are not interested in. 3720 // We receive a lot of events even in folders we are not interested in.
3684 if (encodeURI(event.fileUrl) == this.getSearchOrCurrentDirectoryURL()) 3721 if (encodeURI(event.fileUrl) == this.getSearchOrCurrentDirectoryURL()) {
3722 // This event is not necessarily caused by the metadata refresh
3723 // completion. We clear the map knowing that if the metadata is still
3724 // stale then a new re-fetch will be requested.
3725 delete this.directoriesWithStaleMetadata_[
3726 this.getSearchOrCurrentDirectoryURL()];
3685 this.directoryModel_.rescanLater(); 3727 this.directoryModel_.rescanLater();
3728 }
3686 }; 3729 };
3687 3730
3688 FileManager.prototype.initiateRename_ = function() { 3731 FileManager.prototype.initiateRename_ = function() {
3689 var item = this.currentList_.ensureLeadItemExists(); 3732 var item = this.currentList_.ensureLeadItemExists();
3690 if (!item) 3733 if (!item)
3691 return; 3734 return;
3692 var label = item.querySelector('.filename-label'); 3735 var label = item.querySelector('.filename-label');
3693 var input = this.renameInput_; 3736 var input = this.renameInput_;
3694 3737
3695 input.value = label.textContent; 3738 input.value = label.textContent;
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
4655 4698
4656 function closeBanner() { 4699 function closeBanner() {
4657 self.cleanupGDataWelcome_(); 4700 self.cleanupGDataWelcome_();
4658 // Stop showing the welcome banner. 4701 // Stop showing the welcome banner.
4659 localStorage[WELCOME_HEADER_COUNTER_KEY] = WELCOME_HEADER_COUNTER_LIMIT; 4702 localStorage[WELCOME_HEADER_COUNTER_KEY] = WELCOME_HEADER_COUNTER_LIMIT;
4660 } 4703 }
4661 4704
4662 return maybeShowBanner; 4705 return maybeShowBanner;
4663 }; 4706 };
4664 })(); 4707 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698