richard-loafle ef007d0ab5 clipboard
2020-02-04 17:13:09 +09:00

65 lines
1.6 KiB
TypeScript

import { Observable, Subject } from 'rxjs';
import { share } from 'rxjs/operators';
import { FileUtil } from '@ucap-webmessenger/core';
export class FileUploadItem {
file: File;
uploadTime: number;
uploadingProgress$: Observable<number>;
private uploadingProgress: Subject<number>;
private uploadStartTime: number;
private constructor(file?: File) {
this.file = file;
}
static fromFiles(files: FileList): FileUploadItem[] {
const fileItems: FileUploadItem[] = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < files.length; i++) {
fileItems.push(new FileUploadItem(files[i]));
}
return fileItems;
}
static fromDataUrls(
fileNameAppend: string,
...dataUrls: string[]
): FileUploadItem[] {
const fileItems: FileUploadItem[] = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < dataUrls.length; i++) {
fileItems.push(
new FileUploadItem(
FileUtil.fromDataUrlToFile(fileNameAppend, dataUrls[i])
)
);
}
return fileItems;
}
static from(): FileUploadItem {
return new FileUploadItem();
}
uploadStart(): Subject<number> {
this.uploadStartTime = new Date().getTime();
this.uploadingProgress = new Subject<number>();
this.uploadingProgress$ = this.uploadingProgress
.asObservable()
.pipe(share());
return this.uploadingProgress;
}
uploadComplete() {
const endTime = new Date().getTime();
this.uploadTime = endTime - this.uploadStartTime;
this.uploadingProgress.complete();
}
}