UNPKG

homebridge-loxone-proxy

Version:

Homebridge Dynamic Platform Plugin which exposes a Loxone System to Homekit.

75 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CameraService = void 0; const StreamingDelegate_1 = require("../hksv/StreamingDelegate"); const http_1 = require("http"); const https_1 = require("https"); class CameraService { constructor(platform, accessory, streamUrl, snapshotUrl, base64auth, twoWayAudioTemplateVars, twoWayAudioContext) { this.platform = platform; this.accessory = accessory; this.streamUrl = streamUrl; this.snapshotUrl = snapshotUrl; this.base64auth = base64auth; this.twoWayAudioTemplateVars = twoWayAudioTemplateVars; this.twoWayAudioContext = twoWayAudioContext; this.setupService(); } setupService() { this.streamingDelegate = new StreamingDelegate_1.streamingDelegate(this.platform, this.streamUrl, this.base64auth, this.accessory.displayName, this.snapshotUrl, this.twoWayAudioTemplateVars, this.twoWayAudioContext); this.accessory.configureController(this.streamingDelegate.controller); } async getSnapshot(useCache = true) { return this.streamingDelegate.getSnapshot(useCache); } async getSnapshotSize() { const url = this.snapshotUrl; if (!url) { return null; } return new Promise((resolve) => { const headers = {}; if (this.base64auth) { headers.Authorization = `Basic ${this.base64auth}`; } const requestFn = url.startsWith('https://') ? https_1.get : http_1.get; const request = requestFn(url, { timeout: 3000, headers, }, (response) => { var _a; response.destroy(); if (!response.statusCode || response.statusCode < 200 || response.statusCode >= 300) { this.platform.log.debug(`[${this.accessory.displayName}] SnapshotSize status ${(_a = response.statusCode) !== null && _a !== void 0 ? _a : 'unknown'}.`); return resolve(null); } const contentLengthHeader = response.headers['content-length']; const header = Array.isArray(contentLengthHeader) ? contentLengthHeader[0] : contentLengthHeader; if (!header) { this.platform.log.debug(`[${this.accessory.displayName}] No Content-Length header present.`); return resolve(null); } const size = Number(header); if (Number.isFinite(size) && size > 0) { this.platform.log.debug(`[${this.accessory.displayName}] Content-Length: ${size} bytes`); return resolve(size); } this.platform.log.debug(`[${this.accessory.displayName}] Invalid Content-Length header: ${header}`); resolve(null); }); request.on('error', (err) => { this.platform.log.debug(`[${this.accessory.displayName}] SnapshotSize error: ${err.message}`); resolve(null); }); request.on('timeout', () => { this.platform.log.debug(`[${this.accessory.displayName}] SnapshotSize timeout`); request.destroy(); resolve(null); }); }); } } exports.CameraService = CameraService; //# sourceMappingURL=Camera.js.map