refactor: Convert protected methods to private (#2358)

This commit is contained in:
Dermot Duffy
2026-02-19 20:47:59 -08:00
committed by GitHub
parent 529500ed94
commit 0a67df9a25
122 changed files with 815 additions and 829 deletions
+5 -5
View File
@@ -3,10 +3,10 @@ import { DateRange, MemoryRangeSet } from './range';
import { RecordingSegment } from './types';
class MemoryRangedCache<Data> {
protected _ranges: MemoryRangeSet = new MemoryRangeSet();
protected _data: Data[] = [];
protected _timeFunc: (data: Data) => number;
protected _idFunc: (data: Data) => string;
private _ranges: MemoryRangeSet = new MemoryRangeSet();
private _data: Data[] = [];
private _timeFunc: (data: Data) => number;
private _idFunc: (data: Data) => string;
constructor(timeFunc: (data: Data) => number, idFunc: (data: Data) => string) {
this._timeFunc = timeFunc;
@@ -60,7 +60,7 @@ class MemoryRangedCache<Data> {
}
export class RecordingSegmentsCache {
protected _segments: Map<string, MemoryRangedCache<RecordingSegment>> = new Map();
private _segments: Map<string, MemoryRangedCache<RecordingSegment>> = new Map();
public add(cameraID: string, range: DateRange, segments: RecordingSegment[]) {
let cameraSegmentCache: MemoryRangedCache<RecordingSegment> | undefined =
+1 -1
View File
@@ -28,7 +28,7 @@ export class Capabilities {
}
}
protected _disable(capability: CapabilityKey): void {
private _disable(capability: CapabilityKey): void {
delete this._capabilities[capability];
}
+2 -2
View File
@@ -19,8 +19,8 @@ interface CameraManagerEngineFactoryOptions {
}
export class CameraManagerEngineFactory {
protected _entityRegistryManager: EntityRegistryManager;
protected _deviceRegistryManager: DeviceRegistryManager;
private _entityRegistryManager: EntityRegistryManager;
private _deviceRegistryManager: DeviceRegistryManager;
constructor(
entityRegistryManager: EntityRegistryManager,
+10 -10
View File
@@ -106,7 +106,7 @@ export class FrigateCamera extends Camera {
return true;
}
protected async _initializeConfig(
private async _initializeConfig(
hass: HomeAssistant,
entityRegistryManager: EntityRegistryManager,
): Promise<void> {
@@ -193,7 +193,7 @@ export class FrigateCamera extends Camera {
};
}
protected _getFrigateCameraNameFromEntity(entity: Entity): string | null {
private _getFrigateCameraNameFromEntity(entity: Entity): string | null {
if (
entity.platform === 'frigate' &&
entity.unique_id &&
@@ -244,7 +244,7 @@ export class FrigateCamera extends Camera {
});
}
protected _getJSMPEGEndpoint(): Endpoint | null {
private _getJSMPEGEndpoint(): Endpoint | null {
if (!this._config.frigate.camera_name) {
return null;
}
@@ -301,7 +301,7 @@ export class FrigateCamera extends Camera {
return { endpoint: cameraURL };
}
protected async _getPTZCapabilities(
private async _getPTZCapabilities(
hass: HomeAssistant,
cameraConfig: CameraConfig,
): Promise<PTZCapabilities | null> {
@@ -352,7 +352,7 @@ export class FrigateCamera extends Camera {
* @param cameraConfig The camera config in question.
* @returns The entity id of the motion sensor or null.
*/
protected _getMotionSensor(
private _getMotionSensor(
cameraConfig: CameraConfig,
entities: Entity[],
): string | null {
@@ -376,7 +376,7 @@ export class FrigateCamera extends Camera {
* @param cameraConfig The camera config in question.
* @returns The entity id of the occupancy sensor or null.
*/
protected _getOccupancySensor(
private _getOccupancySensor(
cameraConfig: CameraConfig,
entities: Entity[],
): string[] | null {
@@ -419,7 +419,7 @@ export class FrigateCamera extends Camera {
return null;
}
protected async _subscribeToEvents(
private async _subscribeToEvents(
hass: HomeAssistant,
frigateEventWatcher: FrigateWatcherSubscriptionInterface<FrigateEventChange>,
): Promise<void> {
@@ -441,7 +441,7 @@ export class FrigateCamera extends Camera {
this._onDestroy(() => frigateEventWatcher.unsubscribe(request));
}
protected _frigateEventHandler = (ev: FrigateEventChange): void => {
private _frigateEventHandler = (ev: FrigateEventChange): void => {
const snapshotChange =
(!ev.before.has_snapshot && ev.after.has_snapshot) ||
ev.before.snapshot?.frame_time !== ev.after.snapshot?.frame_time;
@@ -487,7 +487,7 @@ export class FrigateCamera extends Camera {
});
};
protected async _subscribeToReviews(
private async _subscribeToReviews(
hass: HomeAssistant,
frigateReviewWatcher: FrigateWatcherSubscriptionInterface<FrigateReviewChange>,
): Promise<void> {
@@ -512,7 +512,7 @@ export class FrigateCamera extends Camera {
this._onDestroy(() => frigateReviewWatcher.unsubscribe(request));
}
protected _frigateReviewHandler = (review: FrigateReviewChange): void => {
private _frigateReviewHandler = (review: FrigateReviewChange): void => {
const config = this.getConfig();
const cameraID = this._config.id;
+16 -16
View File
@@ -120,14 +120,14 @@ export class FrigateCameraManagerEngine
extends GenericCameraManagerEngine
implements CameraManagerEngine
{
protected _entityRegistryManager: EntityRegistryManager;
protected _frigateEventWatcher: FrigateEventWatcher;
protected _frigateReviewWatcher: FrigateReviewWatcher;
protected _recordingSegmentsCache: RecordingSegmentsCache;
protected _requestCache: CameraManagerRequestCache;
private _entityRegistryManager: EntityRegistryManager;
private _frigateEventWatcher: FrigateEventWatcher;
private _frigateReviewWatcher: FrigateReviewWatcher;
private _recordingSegmentsCache: RecordingSegmentsCache;
private _requestCache: CameraManagerRequestCache;
// Garbage collect segments at most once an hour.
protected _throttledSegmentGarbageCollector = throttle(
private _throttledSegmentGarbageCollector = throttle(
this._garbageCollectSegments.bind(this),
60 * 60 * 1000,
{ leading: false, trailing: true },
@@ -272,17 +272,17 @@ export class FrigateCameraManagerEngine
* If all cameras have identical zones/labels config, creates a single batch query.
* Otherwise fans out to per-camera queries.
*/
protected _generateBatchableQuery(
private _generateBatchableQuery(
store: CameraManagerReadOnlyConfigStore,
cameraIDs: Set<string>,
query: PartialEventQuery & { type: QueryType.Event },
): EventQuery[] | null;
protected _generateBatchableQuery(
private _generateBatchableQuery(
store: CameraManagerReadOnlyConfigStore,
cameraIDs: Set<string>,
query: PartialReviewQuery & { type: QueryType.Review },
): ReviewQuery[] | null;
protected _generateBatchableQuery(
private _generateBatchableQuery(
store: CameraManagerReadOnlyConfigStore,
cameraIDs: Set<string>,
query: (PartialEventQuery | PartialReviewQuery) & {
@@ -368,7 +368,7 @@ export class FrigateCameraManagerEngine
);
}
protected _buildInstanceToCameraIDMapFromQuery(
private _buildInstanceToCameraIDMapFromQuery(
store: CameraManagerReadOnlyConfigStore,
cameraIDs: Set<string>,
): Map<string, Set<string>> {
@@ -386,7 +386,7 @@ export class FrigateCameraManagerEngine
return output;
}
protected _getFrigateCameraNamesForCameraIDs(
private _getFrigateCameraNamesForCameraIDs(
store: CameraManagerReadOnlyConfigStore,
cameraIDs: Set<string>,
): Set<string> {
@@ -725,7 +725,7 @@ export class FrigateCameraManagerEngine
return output.size ? output : null;
}
protected _getCameraIDMatch(
private _getCameraIDMatch(
store: CameraManagerReadOnlyConfigStore,
query: CameraQuery,
instanceID: string,
@@ -927,7 +927,7 @@ export class FrigateCameraManagerEngine
return null;
}
protected _getQueryableCameraConfig(
private _getQueryableCameraConfig(
store: CameraManagerReadOnlyConfigStore,
cameraID: string,
): CameraConfig | null {
@@ -938,7 +938,7 @@ export class FrigateCameraManagerEngine
return cameraConfig;
}
protected _splitSubLabels(input: string): string[] {
private _splitSubLabels(input: string): string[] {
// A note on Frigate sub_labels: As of Frigate v0.12 sub_labels is a string
// (not an array) per event, but may contain comma-separated values (e.g.
// double-take (https://github.com/jakowenko/double-take) identifying two
@@ -1058,7 +1058,7 @@ export class FrigateCameraManagerEngine
* Garbage collect recording segments that no longer feature in the recordings
* returned by the Frigate backend.
*/
protected async _garbageCollectSegments(
private async _garbageCollectSegments(
hass: HomeAssistant,
store: CameraManagerReadOnlyConfigStore,
): Promise<void> {
@@ -1113,7 +1113,7 @@ export class FrigateCameraManagerEngine
* @param segments An array of segments dataset items. Must be sorted from oldest to youngest.
* @returns
*/
protected _getSeekTimeInSegments(
private _getSeekTimeInSegments(
startTime: Date,
targetTime: Date,
segments: RecordingSegment[],
+12 -12
View File
@@ -25,10 +25,10 @@ import {
} from './util';
export class FrigateEventViewMedia extends ViewMedia implements EventViewMedia {
protected _event: FrigateEvent;
protected _contentID: string;
protected _thumbnail: string;
protected _subLabels: string[] | null;
private _event: FrigateEvent;
private _contentID: string;
private _thumbnail: string;
private _subLabels: string[] | null;
constructor(
mediaType: ViewMediaType,
@@ -107,10 +107,10 @@ export class FrigateEventViewMedia extends ViewMedia implements EventViewMedia {
}
export class FrigateRecordingViewMedia extends ViewMedia implements RecordingViewMedia {
protected _recording: FrigateRecording;
protected _id: string;
protected _contentID: string;
protected _title: string;
private _recording: FrigateRecording;
private _id: string;
private _contentID: string;
private _title: string;
constructor(
mediaType: ViewMediaType,
@@ -156,10 +156,10 @@ export class FrigateRecordingViewMedia extends ViewMedia implements RecordingVie
}
export class FrigateReviewViewMedia extends ViewMedia implements ReviewViewMedia {
protected _review: FrigateReview;
protected _contentID: string;
protected _thumbnail: string | null;
protected _title: string;
private _review: FrigateReview;
private _contentID: string;
private _thumbnail: string | null;
private _title: string;
constructor(
cameraID: string,
+10 -10
View File
@@ -129,10 +129,10 @@ interface ExtendedMediaQueryResult<T extends MediaQuery> {
}
export class CameraManager {
protected _api: CardCameraAPI;
protected _engineFactory: CameraManagerEngineFactory;
protected _store: CameraManagerStore;
protected _requestLimit = new PQueue();
private _api: CardCameraAPI;
private _engineFactory: CameraManagerEngineFactory;
private _store: CameraManagerStore;
private _requestLimit = new PQueue();
constructor(
api: CardCameraAPI,
@@ -185,7 +185,7 @@ export class CameraManager {
await this._store.reset();
}
protected async _getEnginesForCameras(
private async _getEnginesForCameras(
camerasConfig: CameraConfig[],
): Promise<Map<CameraConfig, CameraManagerEngine>> {
const output: Map<CameraConfig, CameraManagerEngine> = new Map();
@@ -228,7 +228,7 @@ export class CameraManager {
return output;
}
protected async _initializeCameras(camerasConfig: CameraConfig[]): Promise<void> {
private async _initializeCameras(camerasConfig: CameraConfig[]): Promise<void> {
const initializationStartTime = new Date();
const hass = this._api.getHASSManager().getHASS();
@@ -364,7 +364,7 @@ export class CameraManager {
});
}
protected _generateDefaultQueries<PQT extends PartialCameraQuery>(
private _generateDefaultQueries<PQT extends PartialCameraQuery>(
cameraIDs: string | Set<string>,
partialQuery: PQT,
): PartialQueryConcreteType<PQT>[] | null {
@@ -481,7 +481,7 @@ export class CameraManager {
* properties (other than cameraIDs). This preserves multi-camera batching for
* engines like Frigate that support querying multiple cameras at once.
*/
protected _mergeCompatibleQueries<T extends CameraQuery>(queries: T[]): T[] {
private _mergeCompatibleQueries<T extends CameraQuery>(queries: T[]): T[] {
if (queries.length <= 1) {
return queries;
}
@@ -720,7 +720,7 @@ export class CameraManager {
);
}
protected async _handleQuery<QT extends CameraQuery>(
private async _handleQuery<QT extends CameraQuery>(
query: QT | QT[],
engineOptions?: EngineOptions,
): Promise<Map<QT, QueryReturnType<QT>>> {
@@ -821,7 +821,7 @@ export class CameraManager {
return results;
}
protected _convertQueryResultsToMedia<QT extends CameraQuery>(
private _convertQueryResultsToMedia<QT extends CameraQuery>(
results: ResultsMap<QT>,
): ViewMedia[] {
const mediaArray: ViewMedia[] = [];
@@ -60,8 +60,8 @@ const MOTIONEYE_REPL_SUBSTITUTIONS: Record<string, string> = {
const MOTIONEYE_REPL_REGEXP = new RegExp(/(%Y|%m|%d|%H|%M|%S)/g);
export class MotionEyeCameraManagerEngine extends BrowseMediaCameraManagerEngine {
protected _directoryCache = new BrowseMediaCache<BrowseMediaMetadata>();
protected _fileCache = new BrowseMediaCache<BrowseMediaMetadata>();
private _directoryCache = new BrowseMediaCache<BrowseMediaMetadata>();
private _fileCache = new BrowseMediaCache<BrowseMediaMetadata>();
public getEngineType(): Engine {
return Engine.MotionEye;
@@ -81,7 +81,7 @@ export class MotionEyeCameraManagerEngine extends BrowseMediaCameraManagerEngine
});
}
protected _convertMotionEyeTimeFormatToDateFNS(part: string): string {
private _convertMotionEyeTimeFormatToDateFNS(part: string): string {
return part.replace(
MOTIONEYE_REPL_REGEXP,
(_, key) => MOTIONEYE_REPL_SUBSTITUTIONS[key],
@@ -89,7 +89,7 @@ export class MotionEyeCameraManagerEngine extends BrowseMediaCameraManagerEngine
}
// Get metadata for a MotionEye media file.
protected _motionEyeMetadataGeneratorFile(
private _motionEyeMetadataGeneratorFile(
cameraID: string,
dateFormat: string | null,
media: BrowseMedia,
@@ -112,7 +112,7 @@ export class MotionEyeCameraManagerEngine extends BrowseMediaCameraManagerEngine
}
// Get metadata for a MotionEye media directory.
protected _motionEyeMetadataGeneratorDirectory(
private _motionEyeMetadataGeneratorDirectory(
cameraID: string,
dateFormat: string | null,
media: BrowseMedia,
@@ -134,7 +134,7 @@ export class MotionEyeCameraManagerEngine extends BrowseMediaCameraManagerEngine
}
// Get media directories that match a given criteria.
protected async _getMatchingDirectories(
private async _getMatchingDirectories(
hass: HomeAssistant,
store: CameraManagerReadOnlyConfigStore,
cameraID: string,
+3 -3
View File
@@ -15,7 +15,7 @@ interface MemoryRangeSetInterface<T> {
}
export class MemoryRangeSet implements MemoryRangeSetInterface<DateRange> {
protected _ranges: DateRange[];
private _ranges: DateRange[];
constructor(ranges?: DateRange[]) {
this._ranges = ranges ?? [];
@@ -44,7 +44,7 @@ export interface ExpiringRange<T extends Date | number> extends Range<T> {
export class ExpiringMemoryRangeSet
implements MemoryRangeSetInterface<ExpiringRange<Date>>
{
protected _ranges: ExpiringRange<Date>[];
private _ranges: ExpiringRange<Date>[];
constructor(ranges?: ExpiringRange<Date>[]) {
this._ranges = ranges ?? [];
@@ -63,7 +63,7 @@ export class ExpiringMemoryRangeSet
this._expireOldRanges();
}
protected _expireOldRanges(): void {
private _expireOldRanges(): void {
const now = new Date();
this._ranges = this._ranges.filter((range) => now < range.expires);
}
+9 -9
View File
@@ -41,16 +41,16 @@ type PTZEntity = keyof PTZEntities;
export class ReolinkCamera extends EntityCamera {
// The HostID identifying the camera or NVR.
protected _reolinkHostID: string | null = null;
private _reolinkHostID: string | null = null;
// For NVRs, the Camera UID.
protected _reolinkCameraUID: string | null = null;
private _reolinkCameraUID: string | null = null;
// The channel number as used by the Reolink integration.
protected _reolinkChannel: number | null = null;
private _reolinkChannel: number | null = null;
// Entities used for PTZ control.
protected _ptzEntities: PTZEntities | null = null;
private _ptzEntities: PTZEntities | null = null;
/**
* Reolink cameras require additional options not present in the base class
@@ -62,7 +62,7 @@ export class ReolinkCamera extends EntityCamera {
return super.initialize(options);
}
protected async _getChannelFromConfigurationURL(
private async _getChannelFromConfigurationURL(
hass: HomeAssistant,
deviceRegistryManager: DeviceRegistryManager,
): Promise<number | null> {
@@ -84,7 +84,7 @@ export class ReolinkCamera extends EntityCamera {
}
}
protected async _initializeChannel(
private async _initializeChannel(
hass: HomeAssistant,
deviceRegistryManager: DeviceRegistryManager,
): Promise<void> {
@@ -169,7 +169,7 @@ export class ReolinkCamera extends EntityCamera {
};
}
protected _entitiesToCapabilities(
private _entitiesToCapabilities(
hass: HomeAssistant,
ptzEntities: PTZEntities,
): PTZCapabilities | null {
@@ -203,7 +203,7 @@ export class ReolinkCamera extends EntityCamera {
return Object.keys(reolinkPTZCapabilities).length ? reolinkPTZCapabilities : null;
}
protected async _getPTZEntities(
private async _getPTZEntities(
hass: HomeAssistant,
entityRegistry: EntityRegistryManager,
): Promise<PTZEntities | null> {
@@ -264,7 +264,7 @@ export class ReolinkCamera extends EntityCamera {
return this._reolinkChannel;
}
protected _getPTZEntityUniqueIDPrefix(): string {
private _getPTZEntityUniqueIDPrefix(): string {
return `${this._reolinkHostID}_${this._reolinkCameraUID ?? this._reolinkChannel}_`;
}
+7 -7
View File
@@ -53,9 +53,9 @@ export class ReolinkQueryResultsClassifier {
}
export class ReolinkCameraManagerEngine extends BrowseMediaCameraManagerEngine {
protected _camerasCache = new BrowseMediaCache<BrowseMediaReolinkCameraMetadata>();
protected _cache = new BrowseMediaCache<BrowseMediaMetadata>();
protected _deviceRegistryManager: DeviceRegistryManager;
private _camerasCache = new BrowseMediaCache<BrowseMediaReolinkCameraMetadata>();
private _cache = new BrowseMediaCache<BrowseMediaMetadata>();
private _deviceRegistryManager: DeviceRegistryManager;
public constructor(
entityRegistryManager: EntityRegistryManager,
@@ -81,7 +81,7 @@ export class ReolinkCameraManagerEngine extends BrowseMediaCameraManagerEngine {
return Engine.Reolink;
}
protected _reolinkFileMetadataGenerator(
private _reolinkFileMetadataGenerator(
cameraID: string,
media: BrowseMedia,
parent?: RichBrowseMedia<BrowseMediaMetadata>,
@@ -133,7 +133,7 @@ export class ReolinkCameraManagerEngine extends BrowseMediaCameraManagerEngine {
};
}
protected _reolinkDirectoryMetadataGenerator(
private _reolinkDirectoryMetadataGenerator(
cameraID: string,
media: BrowseMedia,
): BrowseMediaMetadata | null {
@@ -149,7 +149,7 @@ export class ReolinkCameraManagerEngine extends BrowseMediaCameraManagerEngine {
: null;
}
protected _reolinkCameraMetadataGenerator(
private _reolinkCameraMetadataGenerator(
media: BrowseMedia,
): BrowseMediaReolinkCameraMetadata | null {
// Example: "media-source://reolink/CAM|01J8XHYTNH77WE3C654K03KX1F|0"
@@ -179,7 +179,7 @@ export class ReolinkCameraManagerEngine extends BrowseMediaCameraManagerEngine {
});
}
protected async _getMatchingDirectories(
private async _getMatchingDirectories(
hass: HomeAssistant,
camera: ReolinkCamera,
matchOptions?: {
+2 -2
View File
@@ -38,8 +38,8 @@ export interface CameraManagerReadOnlyConfigStore {
}
export class CameraManagerStore implements CameraManagerReadOnlyConfigStore {
protected _cameras: Map<string, Camera> = new Map();
protected _enginesByType: Map<Engine, CameraManagerEngine> = new Map();
private _cameras: Map<string, Camera> = new Map();
private _enginesByType: Map<Engine, CameraManagerEngine> = new Map();
public addCamera(camera: Camera): void {
this._cameras.set(camera.getID(), camera);
+3 -3
View File
@@ -17,7 +17,7 @@ interface PTZEntities {
type PTZEntity = keyof PTZEntities;
export class TPLinkCamera extends EntityCamera {
protected _ptzEntities: PTZEntities | null = null;
private _ptzEntities: PTZEntities | null = null;
protected async _initialize(
options: TPLinkCameraInitializationOptions,
@@ -45,7 +45,7 @@ export class TPLinkCamera extends EntityCamera {
};
}
protected async _getPTZEntities(
private async _getPTZEntities(
hass: HomeAssistant,
entityRegistry: EntityRegistryManager,
): Promise<PTZEntities | null> {
@@ -82,7 +82,7 @@ export class TPLinkCamera extends EntityCamera {
return Object.keys(ptzEntities).length ? ptzEntities : null;
}
protected _entitiesToCapabilities(ptzEntities: PTZEntities): PTZCapabilities {
private _entitiesToCapabilities(ptzEntities: PTZEntities): PTZCapabilities {
const tplinkPTZCapabilities: PTZCapabilities = {};
// TPLink buttons perform relative movements (no stop button needed)
for (const key of Object.keys(ptzEntities) as PTZEntity[]) {
+1 -1
View File
@@ -8,7 +8,7 @@ import { CameraEventCallback, CameraManagerCameraMetadata, Engine } from '../typ
import { TPLinkCamera } from './camera';
export class TPLinkCameraManagerEngine extends GenericCameraManagerEngine {
protected _entityRegistryManager: EntityRegistryManager;
private _entityRegistryManager: EntityRegistryManager;
constructor(
entityRegistryManager: EntityRegistryManager,