diff --git a/app/models/configured-addon.ts b/app/models/configured-addon.ts index 35fddb34b1d..1bfdece8f20 100644 --- a/app/models/configured-addon.ts +++ b/app/models/configured-addon.ts @@ -12,8 +12,6 @@ export enum ConnectedCapabilities { } export enum ConnectedOperationNames { - DownloadAsZip = 'download_as_zip', - CopyInto = 'copy_into', HasRevisions = 'has_revisions', ListRootItems = 'list_root_items', ListChildItems = 'list_child_items', diff --git a/app/models/external-service.ts b/app/models/external-service.ts index c388edf7200..4e407ec41b0 100644 --- a/app/models/external-service.ts +++ b/app/models/external-service.ts @@ -24,6 +24,8 @@ export enum ExternalServiceCapabilities { REGISTERING = 'REGISTERING', REGISTERING_PARTIAL = 'REGISTERING_PARTIAL', FILE_VERSIONS = 'FILE_VERSIONS', + DOWNLOAD_AS_ZIP = 'DOWNLOAD_AS_ZIP', + COPY_INTO = 'COPY_INTO', } export default class ExternalServiceModel extends Model { diff --git a/app/models/external-storage-service.ts b/app/models/external-storage-service.ts index ceee4945cf8..572696284ba 100644 --- a/app/models/external-storage-service.ts +++ b/app/models/external-storage-service.ts @@ -5,6 +5,7 @@ import ExternalServiceModel from './external-service'; export default class ExternalStorageServiceModel extends ExternalServiceModel { @attr('number') maxConcurrentDownloads!: number; @attr('number') maxUploadMb!: number; + @attr('string') wbKey!: string; } declare module 'ember-data/types/registries/model' { diff --git a/app/packages/files/service-file.ts b/app/packages/files/service-file.ts index b40f1e16b8c..cab620ba686 100644 --- a/app/packages/files/service-file.ts +++ b/app/packages/files/service-file.ts @@ -13,6 +13,7 @@ import { Permission } from 'ember-osf-web/models/osf-model'; import CurrentUserService from 'ember-osf-web/services/current-user'; import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception'; import humanFileSize from 'ember-osf-web/utils/human-file-size'; +import { ExternalServiceCapabilities } from 'ember-osf-web/models/external-service'; export enum FileSortKey { @@ -50,11 +51,11 @@ export default class ServiceFile { @tracked configuredStorageAddon: ConfiguredStorageAddonModel; @tracked totalFileCount = 0; @tracked waterButlerRevisions?: WaterButlerRevision[]; - userCanDownloadAsZip: boolean; + @tracked userCanDownloadAsZip: boolean; + @tracked canMoveToThisProvider: boolean; shouldShowTags = false; shouldShowRevisions: boolean; providerHandlesVersioning: boolean; - canMoveToThisProvider: boolean; parallelUploadsLimit = 2; currentUser: CurrentUserService; @@ -71,15 +72,22 @@ export default class ServiceFile { this.currentUser = currentUser; this.fileModel = fileModel; this.configuredStorageAddon = configuredStorageAddon; - this.userCanDownloadAsZip = configuredStorageAddon.connectedOperationNames - .includes(ConnectedOperationNames.DownloadAsZip); + this.userCanDownloadAsZip = false; + this.canMoveToThisProvider = false; + this.getSupportedFeatures(); this.providerHandlesVersioning = configuredStorageAddon.connectedOperationNames .includes(ConnectedOperationNames.HasRevisions); this.shouldShowRevisions = configuredStorageAddon.connectedOperationNames .includes(ConnectedOperationNames.HasRevisions); this.parallelUploadsLimit = configuredStorageAddon.concurrentUploads; - this.canMoveToThisProvider = configuredStorageAddon.connectedOperationNames - .includes(ConnectedOperationNames.CopyInto); + } + + async getSupportedFeatures() { + const externalStorageService = await this.configuredStorageAddon.externalStorageService; + this.userCanDownloadAsZip = externalStorageService.get('supportedFeatures') + .includes(ExternalServiceCapabilities.DOWNLOAD_AS_ZIP); + this.canMoveToThisProvider = externalStorageService.get('supportedFeatures') + .includes(ExternalServiceCapabilities.COPY_INTO); } get isFile() { diff --git a/app/packages/files/service-provider-file.ts b/app/packages/files/service-provider-file.ts index 57e6bc70ee3..3f234b0fb90 100644 --- a/app/packages/files/service-provider-file.ts +++ b/app/packages/files/service-provider-file.ts @@ -14,14 +14,15 @@ import { ErrorDocument } from 'osf-api'; import ConfiguredStorageAddonModel from 'ember-osf-web/models/configured-storage-addon'; import { ConnectedOperationNames, ConnectedCapabilities } from 'ember-osf-web/models/configured-addon'; import ServiceFile from 'ember-osf-web/packages/files/service-file'; +import { ExternalServiceCapabilities } from 'ember-osf-web/models/external-service'; export default class ServiceProviderFile { @tracked fileModel: FileProviderModel; @tracked configuredStorageAddon: ConfiguredStorageAddonModel; @tracked totalFileCount = 0; - userCanDownloadAsZip: boolean; + @tracked userCanDownloadAsZip: boolean; + @tracked canMoveToThisProvider: boolean; providerHandlesVersioning: boolean; - canMoveToThisProvider: boolean; parallelUploadsLimit = 2; currentUser: CurrentUserService; @@ -37,13 +38,20 @@ export default class ServiceProviderFile { this.currentUser = currentUser; this.fileModel = fileModel; this.configuredStorageAddon = configuredStorageAddon; - this.userCanDownloadAsZip = configuredStorageAddon.connectedOperationNames - .includes(ConnectedOperationNames.DownloadAsZip); + this.userCanDownloadAsZip = false; + this.canMoveToThisProvider = false; + this.getSupportedFeatures(); this.providerHandlesVersioning = configuredStorageAddon.connectedOperationNames .includes(ConnectedOperationNames.HasRevisions); this.parallelUploadsLimit = configuredStorageAddon.concurrentUploads; - this.canMoveToThisProvider = configuredStorageAddon.connectedOperationNames - .includes(ConnectedOperationNames.CopyInto); + } + + async getSupportedFeatures() { + const externalStorageService = await this.configuredStorageAddon.externalStorageService; + this.userCanDownloadAsZip = externalStorageService.get('supportedFeatures') + .includes(ExternalServiceCapabilities.DOWNLOAD_AS_ZIP); + this.canMoveToThisProvider = externalStorageService.get('supportedFeatures') + .includes(ExternalServiceCapabilities.COPY_INTO); } get id() { @@ -92,7 +100,7 @@ export default class ServiceProviderFile { } get name() { - return this.configuredStorageAddon.displayName; + return this.configuredStorageAddon.externalStorageService.get('wbKey'); } get iconLocation() {