homebridge-plugin-utils 1.28.0 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/eslint-rules.mjs +2 -0
- package/dist/ffmpeg/codecs.d.ts +6 -6
- package/dist/ffmpeg/codecs.js +32 -39
- package/dist/ffmpeg/codecs.js.map +1 -1
- package/dist/ffmpeg/options.d.ts +25 -1
- package/dist/ffmpeg/options.js +191 -110
- package/dist/ffmpeg/options.js.map +1 -1
- package/dist/ffmpeg/record.d.ts +6 -0
- package/dist/ffmpeg/record.js +21 -10
- package/dist/ffmpeg/record.js.map +1 -1
- package/dist/ui/webUi-featureoptions.mjs +188 -9
- package/package.json +4 -4
package/dist/ffmpeg/record.js
CHANGED
|
@@ -87,26 +87,28 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
87
87
|
this.isLivestream = !!fMp4Options.url;
|
|
88
88
|
this.isTimedOut = false;
|
|
89
89
|
fMp4Options.audioStream ??= 0;
|
|
90
|
+
fMp4Options.audioFilters ??= [];
|
|
90
91
|
fMp4Options.codec ??= "h264";
|
|
91
92
|
fMp4Options.enableAudio ??= true;
|
|
92
93
|
fMp4Options.fps ??= 30;
|
|
94
|
+
fMp4Options.hardwareDecoding ??= this.options.codecSupport.ffmpegVersion.startsWith("8.") ? this.options.config.hardwareDecoding : false;
|
|
93
95
|
fMp4Options.hardwareTranscoding ??= this.options.config.hardwareTranscoding;
|
|
94
96
|
fMp4Options.transcodeAudio ??= true;
|
|
97
|
+
fMp4Options.videoFilters ??= [];
|
|
95
98
|
fMp4Options.videoStream ??= 0;
|
|
96
99
|
// Configure our video parameters for our input:
|
|
97
100
|
//
|
|
98
101
|
// -hide_banner Suppress printing the startup banner in FFmpeg.
|
|
99
102
|
// -nostats Suppress printing progress reports while encoding in FFmpeg.
|
|
100
|
-
// -fflags flags Set the format flags to discard any corrupt packets rather than exit
|
|
101
|
-
// the decoding timestamp. Adjusting timestamps is a necessity if we want to ensure we keep audio and video in sync, especially when
|
|
102
|
-
// using hardware acceleration.
|
|
103
|
+
// -fflags flags Set the format flags to discard any corrupt packets rather than exit.
|
|
103
104
|
// -err_detect ignore_err Ignore decoding errors and continue rather than exit.
|
|
104
105
|
// -max_delay 500000 Set an upper limit on how much time FFmpeg can take in demuxing packets, in microseconds.
|
|
105
106
|
this.commandLineArgs = [
|
|
106
107
|
"-hide_banner",
|
|
107
108
|
"-nostats",
|
|
108
|
-
"-fflags", "+discardcorrupt
|
|
109
|
+
"-fflags", "+discardcorrupt",
|
|
109
110
|
"-err_detect", "ignore_err",
|
|
111
|
+
...this.options.videoDecoder(fMp4Options.codec),
|
|
110
112
|
"-max_delay", "500000"
|
|
111
113
|
];
|
|
112
114
|
if (this.isLivestream && fMp4Options.url) {
|
|
@@ -117,12 +119,11 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
117
119
|
}
|
|
118
120
|
else {
|
|
119
121
|
// -flags low_delay Tell FFmpeg to optimize for low delay / realtime decoding.
|
|
120
|
-
// -r fps Set the input frame rate for the video stream.
|
|
121
122
|
// -probesize number How many bytes should be analyzed for stream information.
|
|
122
123
|
// -f mp4 Tell FFmpeg that it should expect an MP4-encoded input stream.
|
|
123
124
|
// -i pipe:0 Use standard input to get video data.
|
|
124
125
|
// -ss Fast forward to where HKSV is expecting us to be for a recording event.
|
|
125
|
-
this.commandLineArgs.push("-flags", "low_delay", "-
|
|
126
|
+
this.commandLineArgs.push("-flags", "low_delay", "-probesize", (fMp4Options.probesize ?? 5000000).toString(), "-f", "mp4", "-i", "pipe:0", "-ss", (fMp4Options.timeshift ?? 0).toString() + "ms");
|
|
126
127
|
}
|
|
127
128
|
// Configure our recording options for the video stream:
|
|
128
129
|
//
|
|
@@ -130,7 +131,7 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
130
131
|
this.commandLineArgs.push("-map", "0:v:" + fMp4Options.videoStream.toString(), ...(this.isLivestream ? ["-codec:v", "copy"] : this.options.recordEncoder({
|
|
131
132
|
bitrate: recordingConfig.videoCodec.parameters.bitRate,
|
|
132
133
|
fps: recordingConfig.videoCodec.resolution[2],
|
|
133
|
-
hardwareDecoding:
|
|
134
|
+
hardwareDecoding: fMp4Options.hardwareDecoding,
|
|
134
135
|
hardwareTranscoding: fMp4Options.hardwareTranscoding,
|
|
135
136
|
height: recordingConfig.videoCodec.resolution[1],
|
|
136
137
|
idrInterval: HKSV_IDR_INTERVAL,
|
|
@@ -139,6 +140,10 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
139
140
|
profile: recordingConfig.videoCodec.parameters.profile,
|
|
140
141
|
width: recordingConfig.videoCodec.resolution[0]
|
|
141
142
|
})));
|
|
143
|
+
// Configure our video filters, if we have them.
|
|
144
|
+
if (fMp4Options.videoFilters.length) {
|
|
145
|
+
this.commandLineArgs.push("-filter:v", fMp4Options.videoFilters.join(", "));
|
|
146
|
+
}
|
|
142
147
|
// If we're livestreaming, emit fragments at one-second intervals.
|
|
143
148
|
if (this.isLivestream) {
|
|
144
149
|
// -frag_duration number Length of each fMP4 fragment, in microseconds.
|
|
@@ -146,14 +151,21 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
146
151
|
}
|
|
147
152
|
// -movflags flags In the generated fMP4 stream: set the default-base-is-moof flag in the header, write an initial empty MOOV box, start a new fragment
|
|
148
153
|
// at each keyframe, skip creating a segment index (SIDX) box in fragments, and skip writing the final MOOV trailer since it's unneeded.
|
|
154
|
+
// -flush_packets 1 Ensure we send each packet immediately after each packet.
|
|
149
155
|
// -reset_timestamps Reset timestamps at the beginning of each segment.
|
|
150
156
|
// -metadata Set the metadata to the name of the camera to distinguish between FFmpeg sessions.
|
|
151
|
-
this.commandLineArgs.push("-movflags", "default_base_moof+empty_moov+frag_keyframe+skip_sidx+skip_trailer", "-reset_timestamps", "1", "-metadata", "comment=" + this.options.name() + " " + (this.isLivestream ? "Livestream Buffer" : "HKSV Event"));
|
|
157
|
+
this.commandLineArgs.push("-movflags", "default_base_moof+empty_moov+frag_keyframe+skip_sidx+skip_trailer", "-flush_packets", "1", "-reset_timestamps", "1", "-metadata", "comment=" + this.options.name() + " " + (this.isLivestream ? "Livestream Buffer" : "HKSV Event"));
|
|
152
158
|
if (fMp4Options.enableAudio) {
|
|
153
159
|
// Configure the audio portion of the command line. Options we use are:
|
|
154
160
|
//
|
|
155
161
|
// -map 0:a:X? Selects the audio stream from the input, if it exists.
|
|
156
162
|
this.commandLineArgs.push("-map", "0:a:" + fMp4Options.audioStream.toString() + "?");
|
|
163
|
+
// Configure our audio filters, if we have them.
|
|
164
|
+
if (fMp4Options.audioFilters.length) {
|
|
165
|
+
this.commandLineArgs.push("-filter:a", fMp4Options.audioFilters.join(", "));
|
|
166
|
+
// Audio filters require transcoding. If the user's decided to filter, we enforce this requirement even if they wanted to copy the audio stream.
|
|
167
|
+
fMp4Options.transcodeAudio = true;
|
|
168
|
+
}
|
|
157
169
|
if (fMp4Options.transcodeAudio) {
|
|
158
170
|
// Configure the audio portion of the command line. Options we use are:
|
|
159
171
|
//
|
|
@@ -173,9 +185,8 @@ class FfmpegFMp4Process extends FfmpegProcess {
|
|
|
173
185
|
// Configure our video parameters for outputting our final stream:
|
|
174
186
|
//
|
|
175
187
|
// -f mp4 Tell ffmpeg that it should create an MP4-encoded output stream.
|
|
176
|
-
// -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
|
|
177
188
|
// pipe:1 Output the stream to standard output.
|
|
178
|
-
this.commandLineArgs.push("-f", "mp4", "
|
|
189
|
+
this.commandLineArgs.push("-f", "mp4", "pipe:1");
|
|
179
190
|
// Additional logging, but only if we're debugging.
|
|
180
191
|
if (isVerbose || this.isVerbose) {
|
|
181
192
|
this.commandLineArgs.unshift("-loglevel", "level+verbose");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -156,6 +156,9 @@ import { FeatureOptions} from "./featureoptions.js";
|
|
|
156
156
|
*/
|
|
157
157
|
export class webUiFeatureOptions {
|
|
158
158
|
|
|
159
|
+
// Map of category UI state indexed by context key (serial number or "global").
|
|
160
|
+
#categoryStates;
|
|
161
|
+
|
|
159
162
|
// Table containing the currently displayed feature options.
|
|
160
163
|
#configTable;
|
|
161
164
|
|
|
@@ -241,6 +244,7 @@ export class webUiFeatureOptions {
|
|
|
241
244
|
} = options;
|
|
242
245
|
|
|
243
246
|
// Initialize all our properties. We cache DOM elements for performance and maintain state for the current controller and device context.
|
|
247
|
+
this.#categoryStates = {};
|
|
244
248
|
this.#configTable = document.getElementById("configTable");
|
|
245
249
|
this.#controller = null;
|
|
246
250
|
this.#controllersContainer = document.getElementById("controllersContainer");
|
|
@@ -476,19 +480,18 @@ export class webUiFeatureOptions {
|
|
|
476
480
|
|
|
477
481
|
const isCollapsed = tbody.style.display === "none";
|
|
478
482
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
const arrow = table.querySelector(".arrow");
|
|
483
|
+
// Use the shared method to update the state.
|
|
484
|
+
this.#setCategoryState(table, !isCollapsed);
|
|
482
485
|
|
|
483
|
-
|
|
486
|
+
document.getElementById("toggleAllCategories")?.updateState?.();
|
|
484
487
|
|
|
485
|
-
|
|
486
|
-
|
|
488
|
+
// Save the state after toggling this category.
|
|
489
|
+
const currentContext = this.#getCurrentContextKey();
|
|
487
490
|
|
|
488
|
-
|
|
489
|
-
headerCell.setAttribute("aria-expanded", isCollapsed ? "true" : "false");
|
|
491
|
+
if(currentContext) {
|
|
490
492
|
|
|
491
|
-
|
|
493
|
+
this.#saveCategoryStates(currentContext);
|
|
494
|
+
}
|
|
492
495
|
}
|
|
493
496
|
|
|
494
497
|
return;
|
|
@@ -689,6 +692,35 @@ export class webUiFeatureOptions {
|
|
|
689
692
|
}
|
|
690
693
|
}
|
|
691
694
|
|
|
695
|
+
/**
|
|
696
|
+
* Set the expansion state of a category table.
|
|
697
|
+
*
|
|
698
|
+
* @param {HTMLTableElement} table - The category table element.
|
|
699
|
+
* @param {boolean} isCollapsed - True to collapse, false to expand.
|
|
700
|
+
* @private
|
|
701
|
+
*/
|
|
702
|
+
#setCategoryState(table, isCollapsed) {
|
|
703
|
+
|
|
704
|
+
const tbody = table.querySelector("tbody");
|
|
705
|
+
const arrow = table.querySelector(".arrow");
|
|
706
|
+
const headerCell = table.querySelector("thead th[role='button']");
|
|
707
|
+
|
|
708
|
+
if(tbody) {
|
|
709
|
+
|
|
710
|
+
tbody.style.display = isCollapsed ? "none" : "";
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
if(arrow) {
|
|
714
|
+
|
|
715
|
+
arrow.textContent = isCollapsed ? "\u25B6 " : "\u25BC ";
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
if(headerCell) {
|
|
719
|
+
|
|
720
|
+
headerCell.setAttribute("aria-expanded", isCollapsed ? "false" : "true");
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
|
|
692
724
|
/**
|
|
693
725
|
* Hide the feature options webUI and clean up all resources.
|
|
694
726
|
*
|
|
@@ -724,6 +756,13 @@ export class webUiFeatureOptions {
|
|
|
724
756
|
*/
|
|
725
757
|
#showGlobalOptions() {
|
|
726
758
|
|
|
759
|
+
// Save the current UI state before switching contexts.
|
|
760
|
+
const previousContext = this.#getCurrentContextKey();
|
|
761
|
+
|
|
762
|
+
if(previousContext && this.#configTable.querySelector("table[data-category]")) {
|
|
763
|
+
|
|
764
|
+
this.#saveCategoryStates(previousContext);
|
|
765
|
+
}
|
|
727
766
|
|
|
728
767
|
// Clear the devices container since global options don't have associated devices, but only when we have controllers defined.
|
|
729
768
|
if(this.#getControllers) {
|
|
@@ -748,6 +787,14 @@ export class webUiFeatureOptions {
|
|
|
748
787
|
*/
|
|
749
788
|
async #showControllerOptions(controllerSerial) {
|
|
750
789
|
|
|
790
|
+
// Save the current UI state before switching contexts.
|
|
791
|
+
const previousContext = this.#getCurrentContextKey();
|
|
792
|
+
|
|
793
|
+
if(previousContext && this.#configTable.querySelector("table[data-category]")) {
|
|
794
|
+
|
|
795
|
+
this.#saveCategoryStates(previousContext);
|
|
796
|
+
}
|
|
797
|
+
|
|
751
798
|
const entry = (await this.#getControllers())?.find(c => c.serialNumber === controllerSerial);
|
|
752
799
|
|
|
753
800
|
if(!entry) {
|
|
@@ -786,6 +833,23 @@ export class webUiFeatureOptions {
|
|
|
786
833
|
// Make sure we have the refreshed configuration. This ensures we're always working with the latest saved settings.
|
|
787
834
|
this.currentConfig = await homebridge.getPluginConfig();
|
|
788
835
|
|
|
836
|
+
// Load any persisted UI states from localStorage.
|
|
837
|
+
try {
|
|
838
|
+
|
|
839
|
+
const storageKey = "homebridge-" + (this.currentConfig[0]?.platform ?? "plugin") + "-category-states";
|
|
840
|
+
const stored = window.localStorage.getItem(storageKey);
|
|
841
|
+
|
|
842
|
+
if(stored) {
|
|
843
|
+
|
|
844
|
+
this.#categoryStates = JSON.parse(stored);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
// eslint-disable-next-line no-unused-vars
|
|
848
|
+
} catch(error) {
|
|
849
|
+
|
|
850
|
+
this.#categoryStates = {};
|
|
851
|
+
}
|
|
852
|
+
|
|
789
853
|
// Keep our revert snapshot aligned with whatever was *last saved* (not just first render).
|
|
790
854
|
// We compare to the current config and update the snapshot if it differs, so "Revert to Saved" reflects the latest saved state.
|
|
791
855
|
const loadedOptions = (this.currentConfig[0]?.options ?? []);
|
|
@@ -1279,6 +1343,15 @@ export class webUiFeatureOptions {
|
|
|
1279
1343
|
|
|
1280
1344
|
homebridge.showSpinner();
|
|
1281
1345
|
|
|
1346
|
+
// Retrieve our current context before we change the active link.
|
|
1347
|
+
const previousActive = this.#devicesContainer.querySelector(".nav-link.active[data-navigation='device']");
|
|
1348
|
+
|
|
1349
|
+
// Save the current category UI state before switching contexts.
|
|
1350
|
+
if(previousActive && (previousActive.name !== deviceId) && this.#configTable.querySelector("table[data-category]")) {
|
|
1351
|
+
|
|
1352
|
+
this.#saveCategoryStates(previousActive.name);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1282
1355
|
// Clean up event listeners from previous option displays. This ensures we don't accumulate listeners as users navigate between devices.
|
|
1283
1356
|
this.#cleanupOptionEventListeners();
|
|
1284
1357
|
|
|
@@ -1299,6 +1372,9 @@ export class webUiFeatureOptions {
|
|
|
1299
1372
|
// Create option tables for each category. Categories group related options together for better organization.
|
|
1300
1373
|
this.#createOptionTables(currentDevice);
|
|
1301
1374
|
|
|
1375
|
+
// Restore saved category UI state context for this device.
|
|
1376
|
+
this.#restoreCategoryStates(deviceId);
|
|
1377
|
+
|
|
1302
1378
|
// Set up search functionality if available. This includes debounced search and keyboard shortcuts.
|
|
1303
1379
|
this.#setupSearchFunctionality();
|
|
1304
1380
|
|
|
@@ -1807,6 +1883,14 @@ export class webUiFeatureOptions {
|
|
|
1807
1883
|
}
|
|
1808
1884
|
|
|
1809
1885
|
toggleBtn.updateState();
|
|
1886
|
+
|
|
1887
|
+
// Save the category UI state after toggling all categories.
|
|
1888
|
+
const currentContext = this.#getCurrentContextKey();
|
|
1889
|
+
|
|
1890
|
+
if(currentContext) {
|
|
1891
|
+
|
|
1892
|
+
this.#saveCategoryStates(currentContext);
|
|
1893
|
+
}
|
|
1810
1894
|
}
|
|
1811
1895
|
|
|
1812
1896
|
/**
|
|
@@ -1853,6 +1937,7 @@ export class webUiFeatureOptions {
|
|
|
1853
1937
|
// Create a unique id for the tbody so that the header can reference it for accessibility.
|
|
1854
1938
|
const tbodyId = "tbody-" + category.name.replace(/\s+/g, "-");
|
|
1855
1939
|
|
|
1940
|
+
// We default category tables to collapsed.
|
|
1856
1941
|
const tbody = this.#createElement("tbody", {
|
|
1857
1942
|
|
|
1858
1943
|
classList: [ "border", "category-border" ],
|
|
@@ -1933,6 +2018,7 @@ export class webUiFeatureOptions {
|
|
|
1933
2018
|
|
|
1934
2019
|
const scopeLabel = !currentDevice ? " (Global)" : (this.#ui.isController(currentDevice) ? " (Controller-specific)" : " (Device-specific)");
|
|
1935
2020
|
|
|
2021
|
+
// We default category tables to collapsed.
|
|
1936
2022
|
const th = this.#createElement("th", {
|
|
1937
2023
|
|
|
1938
2024
|
"aria-controls": tbodyId,
|
|
@@ -2202,6 +2288,98 @@ export class webUiFeatureOptions {
|
|
|
2202
2288
|
return label;
|
|
2203
2289
|
}
|
|
2204
2290
|
|
|
2291
|
+
/**
|
|
2292
|
+
* Save the current category UI state for the given context.
|
|
2293
|
+
*
|
|
2294
|
+
* @param {string} contextKey - The context identifier (device serial or "Global Options").
|
|
2295
|
+
* @private
|
|
2296
|
+
*/
|
|
2297
|
+
#saveCategoryStates(contextKey) {
|
|
2298
|
+
|
|
2299
|
+
const states = {};
|
|
2300
|
+
const tables = document.querySelectorAll("#configTable table[data-category]");
|
|
2301
|
+
|
|
2302
|
+
for(const table of tables) {
|
|
2303
|
+
|
|
2304
|
+
const categoryName = table.getAttribute("data-category");
|
|
2305
|
+
const tbody = table.querySelector("tbody");
|
|
2306
|
+
|
|
2307
|
+
if(tbody) {
|
|
2308
|
+
|
|
2309
|
+
// Store true if collapsed (display: none), false if expanded.
|
|
2310
|
+
states[categoryName] = tbody.style.display === "none";
|
|
2311
|
+
}
|
|
2312
|
+
}
|
|
2313
|
+
|
|
2314
|
+
this.#categoryStates[contextKey] = states;
|
|
2315
|
+
|
|
2316
|
+
// Finally, we persist to localStorage to remember user preferences.
|
|
2317
|
+
try {
|
|
2318
|
+
|
|
2319
|
+
const storageKey = "homebridge-" + (this.currentConfig[0]?.platform ?? "plugin") + "-category-states";
|
|
2320
|
+
|
|
2321
|
+
window.localStorage.setItem(storageKey, JSON.stringify(this.#categoryStates));
|
|
2322
|
+
|
|
2323
|
+
// eslint-disable-next-line no-empty, no-unused-vars
|
|
2324
|
+
} catch(error) {
|
|
2325
|
+
|
|
2326
|
+
}
|
|
2327
|
+
}
|
|
2328
|
+
|
|
2329
|
+
/**
|
|
2330
|
+
* Restore saved category UI state for the given context.
|
|
2331
|
+
*
|
|
2332
|
+
* @param {string} contextKey - The context identifier (device serial or "Global Options").
|
|
2333
|
+
* @private
|
|
2334
|
+
*/
|
|
2335
|
+
#restoreCategoryStates(contextKey) {
|
|
2336
|
+
|
|
2337
|
+
const savedStates = this.#categoryStates[contextKey];
|
|
2338
|
+
|
|
2339
|
+
if(!savedStates) {
|
|
2340
|
+
|
|
2341
|
+
return;
|
|
2342
|
+
}
|
|
2343
|
+
|
|
2344
|
+
const tables = document.querySelectorAll("#configTable table[data-category]");
|
|
2345
|
+
|
|
2346
|
+
for(const table of tables) {
|
|
2347
|
+
|
|
2348
|
+
const categoryName = table.getAttribute("data-category");
|
|
2349
|
+
|
|
2350
|
+
if(categoryName in savedStates) {
|
|
2351
|
+
|
|
2352
|
+
this.#setCategoryState(table, savedStates[categoryName]);
|
|
2353
|
+
}
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
// Update the toggle button state after restoring.
|
|
2357
|
+
document.getElementById("toggleAllCategories")?.updateState?.();
|
|
2358
|
+
}
|
|
2359
|
+
|
|
2360
|
+
/**
|
|
2361
|
+
* Get the current context key for UI state tracking.
|
|
2362
|
+
*
|
|
2363
|
+
* @returns {string} The context key for the current view.
|
|
2364
|
+
* @private
|
|
2365
|
+
*/
|
|
2366
|
+
#getCurrentContextKey() {
|
|
2367
|
+
|
|
2368
|
+
// Check devices first - if there's an active device, that's our context.
|
|
2369
|
+
const activeDevice = this.#devicesContainer.querySelector(".nav-link.active[data-navigation='device']");
|
|
2370
|
+
|
|
2371
|
+
if(activeDevice) {
|
|
2372
|
+
|
|
2373
|
+
return activeDevice.name;
|
|
2374
|
+
}
|
|
2375
|
+
|
|
2376
|
+
// No active device, so check for either the active controller or global context.
|
|
2377
|
+
const activeController = this.#controllersContainer.querySelector(".nav-link.active[data-navigation]");
|
|
2378
|
+
|
|
2379
|
+
// Default to our global options if we don't have a current controller.
|
|
2380
|
+
return (activeController?.name !== "Global Options") ? this.#devices[0].serialNumber : "Global Options";
|
|
2381
|
+
}
|
|
2382
|
+
|
|
2205
2383
|
/**
|
|
2206
2384
|
* Handle option state changes with full hierarchy and dependency management.
|
|
2207
2385
|
*
|
|
@@ -3509,6 +3687,7 @@ export class webUiFeatureOptions {
|
|
|
3509
3687
|
*/
|
|
3510
3688
|
cleanup() {
|
|
3511
3689
|
|
|
3690
|
+
this.#categoryStates = {};
|
|
3512
3691
|
this.#cleanupEventListeners();
|
|
3513
3692
|
this.#eventListeners.clear();
|
|
3514
3693
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-plugin-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.29.0",
|
|
4
4
|
"displayName": "Homebridge Plugin Utilities",
|
|
5
5
|
"description": "Opinionated utilities to provide common capabilities and create rich configuration webUI experiences for Homebridge plugins.",
|
|
6
6
|
"author": {
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
},
|
|
41
41
|
"main": "dist/index.js",
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@stylistic/eslint-plugin": "5.
|
|
43
|
+
"@stylistic/eslint-plugin": "5.3.1",
|
|
44
44
|
"@types/node": "24.3.0",
|
|
45
45
|
"eslint": "9.34.0",
|
|
46
46
|
"homebridge": "1.11.0",
|
|
47
47
|
"shx": "0.4.0",
|
|
48
|
-
"typedoc": "0.28.
|
|
48
|
+
"typedoc": "0.28.12",
|
|
49
49
|
"typedoc-plugin-markdown": "4.8.1",
|
|
50
50
|
"typescript": "5.9.2",
|
|
51
|
-
"typescript-eslint": "8.
|
|
51
|
+
"typescript-eslint": "8.41.0"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"mqtt": "5.14.0"
|