Allow camera capabilities to be configured.

This commit is contained in:
Dermot Duffy
2024-03-26 21:00:15 -07:00
parent 0c7260d95a
commit 95c44adcf1
63 changed files with 2308 additions and 1447 deletions
+60
View File
@@ -0,0 +1,60 @@
import {
CapabilitiesRaw,
CapabilityKey,
capabilityKeys,
PTZCapabilities,
} from '../types';
import { CapabilitySearchOptions } from './types';
export class Capabilities {
private _capabilities: CapabilitiesRaw;
constructor(
capabilities: CapabilitiesRaw,
options?: {
disable?: CapabilityKey[];
disableExcept?: CapabilityKey[];
},
) {
this._capabilities = capabilities;
for (const key of options?.disable ?? []) {
this._disable(key);
}
for (const key of capabilityKeys) {
if (options?.disableExcept?.length && !options.disableExcept.includes(key)) {
this._disable(key);
}
}
}
protected _disable(capability: CapabilityKey): void {
delete this._capabilities[capability];
}
public matches(capability: CapabilitySearchOptions): boolean {
let result = true;
if (typeof capability === 'string') {
result &&= this.has(capability);
}
if (typeof capability === 'object' && capability.allCapabilities) {
result &&= capability.allCapabilities.every((capability) => this.has(capability));
}
if (typeof capability === 'object' && capability.anyCapabilities) {
result &&= capability.anyCapabilities.some((capability) => this.has(capability));
}
return result;
}
public has(capability: CapabilityKey): boolean {
return !!this._capabilities[capability];
}
public getPTZCapabilities(): PTZCapabilities | null {
return this._capabilities.ptz ?? null;
}
public getRawCapabilities(): CapabilitiesRaw {
return this._capabilities;
}
}