| Index: ui/file_manager/file_manager/foreground/js/ui/file_table.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_table.js b/ui/file_manager/file_manager/foreground/js/ui/file_table.js
|
| index da69b3ceddc0ca12bbb167b0f2e8e82892770705..a83e5b9a1feaa52f203595ad296527422b6d4e78 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/ui/file_table.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/ui/file_table.js
|
| @@ -117,14 +117,14 @@ FileTableColumnModel.prototype.initializeColumnPos = function() {
|
| for (var i = 0; i < this.columns_.length; i++) {
|
| this.columnPos_[i + 1] = this.columns_[i].width + this.columnPos_[i];
|
| }
|
| -}
|
| +};
|
|
|
| /**
|
| * Destroy columnPos_ which is used in setWidthAndKeepTotal().
|
| */
|
| FileTableColumnModel.prototype.destroyColumnPos = function() {
|
| this.columnPos_ = null;
|
| -}
|
| +};
|
|
|
| /**
|
| * Sets the width of column with keeping the total width of table.
|
| @@ -241,33 +241,50 @@ FileTable.prototype.__proto__ = cr.ui.Table.prototype;
|
| * @param {!Element} self Table to decorate.
|
| * @param {MetadataCache} metadataCache To retrieve metadata.
|
| * @param {VolumeManagerWrapper} volumeManager To retrieve volume info.
|
| + * @param {!importer.HistoryLoader} historyLoader
|
| * @param {boolean} fullPage True if it's full page File Manager,
|
| * False if a file open/save dialog.
|
| */
|
| -FileTable.decorate = function(self, metadataCache, volumeManager, fullPage) {
|
| +FileTable.decorate =
|
| + function(self, metadataCache, volumeManager, historyLoader, fullPage) {
|
| cr.ui.Table.decorate(self);
|
| self.__proto__ = FileTable.prototype;
|
| self.metadataCache_ = metadataCache;
|
| self.volumeManager_ = volumeManager;
|
| + self.historyLoader_ = historyLoader;
|
| +
|
| + var nameColumn = new cr.ui.table.TableColumn(
|
| + 'name', str('NAME_COLUMN_LABEL'), fullPage ? 386 : 324);
|
| + nameColumn.renderFunction = self.renderName_.bind(self);
|
| +
|
| + var sizeColumn = new cr.ui.table.TableColumn(
|
| + 'size', str('SIZE_COLUMN_LABEL'), 110, true);
|
| + sizeColumn.renderFunction = self.renderSize_.bind(self);
|
| + sizeColumn.defaultOrder = 'desc';
|
| +
|
| + var statusColumn = new cr.ui.table.TableColumn(
|
| + 'status', str('STATUS_COLUMN_LABEL'), 50, true);
|
| + statusColumn.renderFunction = self.renderStatus_.bind(self);
|
| +
|
| + var typeColumn = new cr.ui.table.TableColumn(
|
| + 'type', str('TYPE_COLUMN_LABEL'), fullPage ? 110 : 110);
|
| + typeColumn.renderFunction = self.renderType_.bind(self);
|
| +
|
| + var modTimeColumn = new cr.ui.table.TableColumn(
|
| + 'modificationTime', str('DATE_COLUMN_LABEL'), fullPage ? 150 : 210);
|
| + modTimeColumn.renderFunction = self.renderDate_.bind(self);
|
| + modTimeColumn.defaultOrder = 'desc';
|
|
|
| var columns = [
|
| - new cr.ui.table.TableColumn('name', str('NAME_COLUMN_LABEL'),
|
| - fullPage ? 386 : 324),
|
| - new cr.ui.table.TableColumn('size', str('SIZE_COLUMN_LABEL'),
|
| - 110, true),
|
| - new cr.ui.table.TableColumn('type', str('TYPE_COLUMN_LABEL'),
|
| - fullPage ? 110 : 110),
|
| - new cr.ui.table.TableColumn('modificationTime',
|
| - str('DATE_COLUMN_LABEL'),
|
| - fullPage ? 150 : 210)
|
| + nameColumn,
|
| + sizeColumn,
|
| + typeColumn,
|
| + modTimeColumn
|
| ];
|
| -
|
| - columns[0].renderFunction = self.renderName_.bind(self);
|
| - columns[1].renderFunction = self.renderSize_.bind(self);
|
| - columns[1].defaultOrder = 'desc';
|
| - columns[2].renderFunction = self.renderType_.bind(self);
|
| - columns[3].renderFunction = self.renderDate_.bind(self);
|
| - columns[3].defaultOrder = 'desc';
|
| + // Display the status column only if cloud imports are enabled.
|
| + if (self.importEnabled) {
|
| + columns.splice(2, 0, statusColumn);
|
| + }
|
|
|
| var columnModel = new FileTableColumnModel(columns);
|
|
|
| @@ -517,6 +534,79 @@ FileTable.prototype.updateSize_ = function(div, entry) {
|
| };
|
|
|
| /**
|
| + * Render the Status column of the detail table.
|
| + *
|
| + * @param {Entry} entry The Entry object to render.
|
| + * @param {string} columnId The id of the column to be rendered.
|
| + * @param {cr.ui.Table} table The table doing the rendering.
|
| + * @return {!HTMLDivElement} Created element.
|
| + * @private
|
| + */
|
| +FileTable.prototype.renderStatus_ = function(entry, columnId, table) {
|
| + var div = /** @type {!HTMLDivElement} */ (
|
| + this.ownerDocument.createElement('div'));
|
| + div.className = 'status status-icon';
|
| + if (entry) {
|
| + this.updateStatus_(div, entry);
|
| + }
|
| +
|
| + return div;
|
| +};
|
| +
|
| +/**
|
| + * Returns the status of the entry w.r.t. the given import destination.
|
| + * @param {Entry} entry
|
| + * @param {!importer.Destination} destination
|
| + * @return {!Promise<string>} The import status - will be 'imported', 'copied',
|
| + * or 'unknown'.
|
| + */
|
| +FileTable.prototype.getImportStatus_ = function(entry, destination) {
|
| + if (!entry.isFile) {
|
| + // Our import history doesn't deal with directories.
|
| + // TODO(kenobi): May need to revisit this if the above assumption changes.
|
| + return Promise.resolve('unknown');
|
| + }
|
| + // For the compiler.
|
| + var fileEntry = /** @type {!FileEntry} */ (entry);
|
| +
|
| + return this.historyLoader_.getHistory()
|
| + .then(
|
| + /** @param {!importer.ImportHistory} history */
|
| + function(history) {
|
| + return Promise.all([
|
| + history.wasImported(fileEntry, destination),
|
| + history.wasCopied(fileEntry, destination)
|
| + ]);
|
| + })
|
| + .then(
|
| + /** @param {!Array<boolean>} status */
|
| + function(status) {
|
| + if (status[0]) {
|
| + return 'imported';
|
| + } else if (status[1]) {
|
| + return 'copied';
|
| + } else {
|
| + return 'unknown';
|
| + }
|
| + });
|
| +};
|
| +
|
| +/**
|
| + * Render the status icon of the detail table.
|
| + *
|
| + * @param {HTMLDivElement} div
|
| + * @param {Entry} entry The Entry object to render.
|
| + * @private
|
| + */
|
| +FileTable.prototype.updateStatus_ = function(div, entry) {
|
| + this.getImportStatus_(entry, importer.Destination.GOOGLE_DRIVE).then(
|
| + /** @param {string} status */
|
| + function(status) {
|
| + div.setAttribute('file-status-icon', status);
|
| + });
|
| +};
|
| +
|
| +/**
|
| * Render the Type column of the detail table.
|
| *
|
| * @param {Entry} entry The Entry object to render.
|
| @@ -602,6 +692,8 @@ FileTable.prototype.updateFileMetadata = function(item, entry) {
|
| /** @type {!HTMLDivElement} */ (item.querySelector('.date')), entry);
|
| this.updateSize_(
|
| /** @type {!HTMLDivElement} */ (item.querySelector('.size')), entry);
|
| + this.updateStatus_(
|
| + /** @type {!HTMLDivElement} */ (item.querySelector('.status')), entry);
|
| };
|
|
|
| /**
|
| @@ -634,6 +726,10 @@ FileTable.prototype.updateListItemsMetadata = function(type, entries) {
|
| var props = this.metadataCache_.getCached(entry, 'external');
|
| filelist.updateListItemExternalProps(listItem, props);
|
| });
|
| + } else if (type === 'import-history') {
|
| + forEachCell('.table-row-cell > .status', function(item, entry, unused) {
|
| + this.updateStatus_(item, entry);
|
| + });
|
| }
|
| };
|
|
|
|
|