Allow camera capabilities to be configured.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user