upload retry
This commit is contained in:
parent
0435c719ed
commit
29d94bf03e
@ -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;
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user