diff --git a/plugins/unifi-protect/src/camera.ts b/plugins/unifi-protect/src/camera.ts index 865151195..1cda8453a 100644 --- a/plugins/unifi-protect/src/camera.ts +++ b/plugins/unifi-protect/src/camera.ts @@ -200,11 +200,17 @@ export class UnifiCamera extends ScryptedDeviceBase implements Notifier, Interco await input.promise; } const url = `https://${this.protect.getSetting('ip')}/proxy/protect/api/events/${detectionId}/thumbnail`; - const response = await this.protect.api.fetch(url); - if (!response) { - throw new Error('Event snapshot unavailable.'); - } - const data = await response.arrayBuffer(); + + const abort = new AbortController(); + const timeout = setTimeout(() => abort.abort('Unifi Protect Snapshot timed out after 10 seconds. Aborted.'), 10000); + const response = await this.protect.loginFetch(url, { + signal: abort.signal, + responseType: 'arraybuffer', + }); + clearTimeout(timeout); + if (!response) + throw new Error('event snapshot unavailable.'); + const data = Buffer.from(response.data); return this.createMediaObject(Buffer.from(data), 'image/jpeg'); } diff --git a/plugins/unifi-protect/src/main.ts b/plugins/unifi-protect/src/main.ts index b44d1b6e2..34322af24 100644 --- a/plugins/unifi-protect/src/main.ts +++ b/plugins/unifi-protect/src/main.ts @@ -186,7 +186,7 @@ export class UnifiProtect extends ScryptedDeviceBase implements Settings, Device let detections: ObjectDetectionResult[] = []; - if (payload.type === 'smartDetectZone') { + if (payload.type === 'smartDetectZone' || payload.type === 'smartDetectLine') { unifiCamera.resetDetectionTimeout(); detections = payload.smartDetectTypes.map(type => ({