homebridge-loxone-proxy
Version:
Homebridge Dynamic Platform Plugin which exposes a Loxone System to Homekit.
75 lines • 3.48 kB
JavaScript
"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