From 29d94bf03e32a6169c6f4130becd953ab926c2a7 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 2 Dec 2020 19:28:26 +0200 Subject: [PATCH] upload retry --- .../src/app/upload/file-upload.service.ts | 35 ++++++++++--------- .../upload-status-overlay.component.ts | 5 +-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/apps/red-ui/src/app/upload/file-upload.service.ts b/apps/red-ui/src/app/upload/file-upload.service.ts index 80ccc5040..429a9fe4f 100644 --- a/apps/red-ui/src/app/upload/file-upload.service.ts +++ b/apps/red-ui/src/app/upload/file-upload.service.ts @@ -5,10 +5,6 @@ import { HttpEventType } from '@angular/common/http'; import { FileManagementControllerService } from '@redaction/red-ui-http'; import { interval, Subscription } from 'rxjs'; -export interface UploadFile { - fileUploadModel: FileUploadModel; -} - @Injectable({ providedIn: 'root' }) @@ -17,7 +13,7 @@ export class FileUploadService { files: FileUploadModel[] = []; activeUploads = 0; - private _pendingUploads: UploadFile[] = []; + private _pendingUploads: FileUploadModel[] = []; private _activeUploads: Subscription[] = []; constructor(private readonly _appStateService: AppStateService, private readonly _fileManagementControllerService: FileManagementControllerService) { @@ -27,9 +23,10 @@ export class FileUploadService { } scheduleUpload(item: FileUploadModel) { - this._pendingUploads.push({ - fileUploadModel: item - }); + item.progress = 0; + item.completed = false; + item.error = null; + this._pendingUploads.push(item); } uploadFiles(files: FileUploadModel[]) { @@ -59,10 +56,10 @@ export class FileUploadService { } } - private _createSubscription(uploadFile: UploadFile) { + private _createSubscription(uploadFile: FileUploadModel) { this.activeUploads++; const obs = this._fileManagementControllerService.uploadFileForm( - uploadFile.fileUploadModel.file, + uploadFile.file, this._appStateService.activeProject.project.projectId, 'events', true @@ -70,24 +67,28 @@ export class FileUploadService { const subscription = obs.subscribe( async (event) => { if (event.type === HttpEventType.UploadProgress) { - uploadFile.fileUploadModel.progress = Math.round((event.loaded / (event.total || event.loaded)) * 100); + uploadFile.progress = Math.round((event.loaded / (event.total || event.loaded)) * 100); } if (event.type === HttpEventType.Response) { if (event.status < 300) { - uploadFile.fileUploadModel.progress = 100; - uploadFile.fileUploadModel.completed = true; + uploadFile.progress = 100; + uploadFile.completed = true; } else { - uploadFile.fileUploadModel.completed = true; - uploadFile.fileUploadModel.error = event.body; + uploadFile.completed = true; + uploadFile.error = event.body; } this._removeUpload(subscription); await this._appStateService.reloadActiveProjectFiles(); } }, (error) => { - uploadFile.fileUploadModel.completed = true; - uploadFile.fileUploadModel.error = error; + uploadFile.completed = true; + uploadFile.error = error; this._removeUpload(subscription); + if (uploadFile.retryCount < 5) { + uploadFile.retryCount += 1; + this.scheduleUpload(uploadFile); + } } ); return subscription; diff --git a/apps/red-ui/src/app/upload/upload-status-dialog/upload-status-overlay.component.ts b/apps/red-ui/src/app/upload/upload-status-dialog/upload-status-overlay.component.ts index 28fc05782..871dd7822 100644 --- a/apps/red-ui/src/app/upload/upload-status-dialog/upload-status-overlay.component.ts +++ b/apps/red-ui/src/app/upload/upload-status-dialog/upload-status-overlay.component.ts @@ -36,11 +36,8 @@ export class UploadStatusOverlay implements OnInit { } uploadItem(item: FileUploadModel) { - item.progress = 0; - item.completed = false; - item.error = null; - this._changeDetectorRef.detectChanges(); this.uploadService.scheduleUpload(item); + this._changeDetectorRef.detectChanges(); } closeDialog() {