fix: Shows informative error on UI when file upload limit is reached (#2961)

This commit is contained in:
Antonella Sgarlatta
2025-12-18 09:49:27 -03:00
committed by GitHub
parent 5d1f6ca963
commit 844b7a7a2b
5 changed files with 19 additions and 8 deletions

View File

@@ -134,7 +134,7 @@ export class FetchRequestHandler implements RequestHandlerInterface {
response.data.error = { response.data.error = {
message: ErrorMessage.RateLimited, message: ErrorMessage.RateLimited,
} }
} else { } else if (!response.data.error.message) {
response.data.error.message = ErrorMessage.RateLimited response.data.error.message = ErrorMessage.RateLimited
} }
} }

View File

@@ -26,7 +26,7 @@ export interface FilesApiInterface {
encryptedBytes: Uint8Array, encryptedBytes: Uint8Array,
): Promise<boolean> ): Promise<boolean>
closeUploadSession(valetToken: string, ownershipType: FileOwnershipType): Promise<boolean> closeUploadSession(valetToken: string, ownershipType: FileOwnershipType): Promise<boolean | ClientDisplayableError>
downloadFile(params: DownloadFileParams): Promise<ClientDisplayableError | undefined> downloadFile(params: DownloadFileParams): Promise<ClientDisplayableError | undefined>

View File

@@ -227,7 +227,11 @@ export class FileService extends AbstractService implements FilesClientInterface
vault && vault.isSharedVaultListing() ? 'shared-vault' : 'user', vault && vault.isSharedVaultListing() ? 'shared-vault' : 'user',
) )
if (isErrorResponse(uploadSessionStarted) || !uploadSessionStarted.data.uploadId) { if (isErrorResponse(uploadSessionStarted)) {
return ClientDisplayableError.FromNetworkError(uploadSessionStarted)
}
if (!uploadSessionStarted.data.uploadId) {
return new ClientDisplayableError('Could not start upload session') return new ClientDisplayableError('Could not start upload session')
} }
@@ -259,6 +263,10 @@ export class FileService extends AbstractService implements FilesClientInterface
operation.vault && operation.vault.isSharedVaultListing() ? 'shared-vault' : 'user', operation.vault && operation.vault.isSharedVaultListing() ? 'shared-vault' : 'user',
) )
if (uploadSessionClosed instanceof ClientDisplayableError) {
return uploadSessionClosed
}
if (!uploadSessionClosed) { if (!uploadSessionClosed) {
return new ClientDisplayableError('Could not close upload session') return new ClientDisplayableError('Could not close upload session')
} }

View File

@@ -821,7 +821,10 @@ export class LegacyApiService
return response.data.success return response.data.success
} }
public async closeUploadSession(valetToken: string, ownershipType: FileOwnershipType): Promise<boolean> { public async closeUploadSession(
valetToken: string,
ownershipType: FileOwnershipType,
): Promise<boolean | ClientDisplayableError> {
const url = joinPaths( const url = joinPaths(
this.getFilesHost(), this.getFilesHost(),
ownershipType === 'user' ? Paths.v1.closeUploadSession : Paths.v1.closeSharedVaultUploadSession, ownershipType === 'user' ? Paths.v1.closeUploadSession : Paths.v1.closeSharedVaultUploadSession,
@@ -835,7 +838,7 @@ export class LegacyApiService
}) })
if (isErrorResponse(response)) { if (isErrorResponse(response)) {
return false return ClientDisplayableError.FromNetworkError(response)
} }
return response.data.success return response.data.success

View File

@@ -524,9 +524,9 @@ export class FilesController extends AbstractViewController<FilesControllerEvent
if (operation instanceof ClientDisplayableError) { if (operation instanceof ClientDisplayableError) {
addToast({ addToast({
type: ToastType.Error, type: ToastType.Error,
message: 'Unable to start upload session', message: operation.text,
}) })
throw new Error('Unable to start upload session') return undefined
} }
const initialProgress = operation.getProgress().percentComplete const initialProgress = operation.getProgress().percentComplete
@@ -595,7 +595,7 @@ export class FilesController extends AbstractViewController<FilesControllerEvent
type: ToastType.Error, type: ToastType.Error,
message: uploadedFile.text, message: uploadedFile.text,
}) })
throw new Error(uploadedFile.text) return undefined
} }
if (onUploadFinish) { if (onUploadFinish) {