import { Component, OnInit, OnDestroy, Inject, EventEmitter } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { NGXLogger } from 'ngx-logger'; import { FileEventJson } from '@ucap-webmessenger/protocol-event'; import { DeviceType, FileUtil } from '@ucap-webmessenger/core'; import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native'; import { take } from 'rxjs/operators'; import { SnackBarService } from '@ucap-webmessenger/ui'; export interface FileViewerDialogData { fileInfo: FileEventJson; downloadUrl: string; userSeq: number; deviceType: DeviceType; token: string; } export interface FileViewerDialogResult {} @Component({ selector: 'app-layout-common-file-viewer', templateUrl: './file-viewer.dialog.component.html', styleUrls: ['./file-viewer.dialog.component.scss'] }) export class FileViewerDialogComponent implements OnInit, OnDestroy { fileInfo: FileEventJson; downloadUrl: string; userSeq: number; deviceType: DeviceType; token: string; constructor( public dialogRef: MatDialogRef< FileViewerDialogData, FileViewerDialogResult >, @Inject(MAT_DIALOG_DATA) public data: FileViewerDialogData, @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService, private snackBarService: SnackBarService, private logger: NGXLogger ) { this.fileInfo = data.fileInfo; this.downloadUrl = data.downloadUrl; this.userSeq = data.userSeq; this.deviceType = data.deviceType; this.token = data.token; } ngOnInit() {} ngOnDestroy(): void {} onDownload(blob: Blob): void { FileUtil.fromBlobToBuffer(blob) .then(buffer => { this.nativeService .saveFile(buffer, this.fileInfo.fileName) .pipe(take(1)) .subscribe(result => { if (!!result) { this.snackBarService.open( `파일이 경로[${result}]에 저장되었습니다.`, '', { duration: 3000, verticalPosition: 'bottom' } ); } else { this.snackBarService.open('파일 저장에 실패하였습니다.'); } }); }) .catch(reason => { this.logger.error('download', reason); }); } onClosedViewer(): void { this.dialogRef.close(); } }