upload retry

This commit is contained in:
Timo 2020-12-02 19:28:26 +02:00
parent 0435c719ed
commit 29d94bf03e
2 changed files with 19 additions and 21 deletions

View File

@ -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;

View File

@ -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() {