From 5a7419bf1c83f7d38e5ad157da67ebbed850f609 Mon Sep 17 00:00:00 2001 From: Mo Date: Sun, 26 Mar 2023 15:54:59 -0500 Subject: [PATCH] fix: exception handling (#2277) --- packages/api/src/Domain/Http/HttpService.ts | 12 +++++++++++- .../Controllers/Moments/PhotoRecorder.ts | 18 +++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/api/src/Domain/Http/HttpService.ts b/packages/api/src/Domain/Http/HttpService.ts index e3606adc2..f33444a44 100644 --- a/packages/api/src/Domain/Http/HttpService.ts +++ b/packages/api/src/Domain/Http/HttpService.ts @@ -310,12 +310,22 @@ export class HttpService implements HttpServiceInterface { }, } } + + if (isString(errorResponse.data)) { + errorResponse.data = { + error: { + message: errorResponse.data, + }, + } + } + if (!errorResponse.data.error) { errorResponse.data.error = { message: 'Unknown error', } } - resolve(response as HttpErrorResponse) + + resolve(errorResponse) } } diff --git a/packages/web/src/javascripts/Controllers/Moments/PhotoRecorder.ts b/packages/web/src/javascripts/Controllers/Moments/PhotoRecorder.ts index 8eeb16a29..f50e2c8b5 100644 --- a/packages/web/src/javascripts/Controllers/Moments/PhotoRecorder.ts +++ b/packages/web/src/javascripts/Controllers/Moments/PhotoRecorder.ts @@ -3,10 +3,10 @@ export class PhotoRecorder { public devices!: MediaDeviceInfo[] public selectedDevice!: MediaDeviceInfo - private canvas!: HTMLCanvasElement + private canvas?: HTMLCanvasElement private width!: number private height!: number - private stream!: MediaStream + private stream?: MediaStream // eslint-disable-next-line @typescript-eslint/no-empty-function constructor() {} @@ -33,6 +33,10 @@ export class PhotoRecorder { public async initialize() { this.devices = (await navigator.mediaDevices.enumerateDevices()).filter((device) => device.kind === 'videoinput') + if (this.devices.length === 0) { + return + } + this.selectedDevice = this.devices[0] this.stream = await navigator.mediaDevices.getUserMedia({ @@ -66,6 +70,10 @@ export class PhotoRecorder { } public async takePhoto(fileName: string): Promise { + if (!this.canvas) { + return undefined + } + const context = this.canvas.getContext('2d') context?.drawImage(this.video, 0, 0, this.width, this.height) const dataUrl = this.canvas.toDataURL('image/png') @@ -83,6 +91,10 @@ export class PhotoRecorder { } public finish() { + if (!this.canvas || !this.video) { + return + } + this.video.pause() this.video.parentElement?.removeChild(this.video) @@ -91,7 +103,7 @@ export class PhotoRecorder { this.video.remove() this.canvas.remove() - this.stream.getTracks().forEach((track) => { + this.stream?.getTracks().forEach((track) => { track.stop() }) }