prismcast 1.7.0 → 1.8.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/dist/app.js +9 -8
- package/dist/app.js.map +1 -1
- package/dist/browser/login.js +11 -8
- package/dist/browser/login.js.map +1 -1
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.js +208 -22
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.js +10 -15
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/profiles.js +10 -10
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providers.js +30 -17
- package/dist/config/providers.js.map +1 -1
- package/dist/config/userChannels.d.ts +62 -9
- package/dist/config/userChannels.js +172 -44
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +2 -0
- package/dist/config/userConfig.js +29 -4
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.js +27 -39
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/discover.js +7 -15
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/native/index.d.ts +2 -2
- package/dist/native/index.js +14 -24
- package/dist/native/index.js.map +1 -1
- package/dist/native/proxy.d.ts +2 -2
- package/dist/native/proxy.js.map +1 -1
- package/dist/routes/assets.js +26 -48
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/channels.js +5 -11
- package/dist/routes/channels.js.map +1 -1
- package/dist/routes/components.d.ts +0 -8
- package/dist/routes/components.js +0 -19
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/index.d.ts +1 -1
- package/dist/routes/config/channels/index.js +1 -1
- package/dist/routes/config/channels/index.js.map +1 -1
- package/dist/routes/config/channels/routes.js +335 -35
- package/dist/routes/config/channels/routes.js.map +1 -1
- package/dist/routes/config/channels/table.d.ts +17 -2
- package/dist/routes/config/channels/table.js +270 -66
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/providers.js +7 -7
- package/dist/routes/config/providers.js.map +1 -1
- package/dist/routes/config/settings.js +57 -36
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/icons.d.ts +16 -0
- package/dist/routes/icons.js +44 -0
- package/dist/routes/icons.js.map +1 -0
- package/dist/routes/playlist.d.ts +6 -4
- package/dist/routes/playlist.js +68 -27
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.js +41 -2
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +185 -0
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.js +115 -41
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/shared.js +69 -23
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.js +6 -12
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +45 -4
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/routes/ui.d.ts +1 -1
- package/dist/routes/ui.js +1 -1
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/commands.js +3 -35
- package/dist/service/commands.js.map +1 -1
- package/dist/streaming/codec.d.ts +20 -0
- package/dist/streaming/codec.js +68 -0
- package/dist/streaming/codec.js.map +1 -0
- package/dist/streaming/fmp4Segmenter.d.ts +2 -2
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.js +11 -6
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.js +2 -2
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/preroll.d.ts +15 -14
- package/dist/streaming/preroll.js +31 -11
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/registry.d.ts +2 -2
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +2 -2
- package/dist/streaming/setup.js +5 -12
- package/dist/streaming/setup.js.map +1 -1
- package/dist/types/channels.d.ts +3 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/shared.d.ts +1 -1
- package/dist/types/streaming.d.ts +7 -15
- package/dist/types/streaming.js +5 -1
- package/dist/types/streaming.js.map +1 -1
- package/dist/upgrade/commands.js +1 -16
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/utils/cliOutput.d.ts +10 -0
- package/dist/utils/cliOutput.js +17 -0
- package/dist/utils/cliOutput.js.map +1 -0
- package/dist/utils/format.d.ts +14 -3
- package/dist/utils/format.js +24 -6
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/retry.js +2 -4
- package/dist/utils/retry.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* userChannels.ts: User channel file management for PrismCast.
|
|
4
|
+
*/
|
|
5
|
+
import { CHANNEL_IDENTITY_FIELDS, PREDEFINED_CHANNELS, PREDEFINED_TAGS } from "../channels/index.js";
|
|
6
|
+
import { LOG, containsNonPrintable, sanitizeString, stringifySorted } from "../utils/index.js";
|
|
2
7
|
import { buildProviderGroups, getAllProviderTags, getProviderSelections, getResolvedChannel, isChannelAvailableByProvider, isProviderVariant, resolveProviderKey, setEnabledProviders, setProviderSelections } from "./providers.js";
|
|
3
8
|
import { getChannelsFilePath, getDataDir } from "./paths.js";
|
|
4
9
|
import { loadUserConfig, saveUserConfig } from "./userConfig.js";
|
|
5
10
|
import { CONFIG } from "./index.js";
|
|
6
|
-
import { PREDEFINED_CHANNELS } from "../channels/index.js";
|
|
7
11
|
import fs from "node:fs";
|
|
8
12
|
const { promises: fsPromises } = fs;
|
|
9
13
|
/* The channels file path is resolved via the centralized paths module (config/paths.ts). The data directory is initialized at startup before channel loading.
|
|
@@ -22,6 +26,8 @@ export function getUserChannelsFilePath() {
|
|
|
22
26
|
let loadedUserChannels = {};
|
|
23
27
|
let userChannelsParseError = false;
|
|
24
28
|
let userChannelsParseErrorMessage;
|
|
29
|
+
// Module-level tag registry state. Tracks user-created tags and user-deleted predefined tags. The runtime vocabulary is computed by getActiveTagVocabulary().
|
|
30
|
+
let loadedTagRegistry = { deletedTags: [], tags: [] };
|
|
25
31
|
/**
|
|
26
32
|
* Returns whether the user channels file had a parse error.
|
|
27
33
|
* @returns True if the channels file exists but contains invalid JSON.
|
|
@@ -38,16 +44,17 @@ export function getChannelsParseErrorMessage() {
|
|
|
38
44
|
}
|
|
39
45
|
/**
|
|
40
46
|
* Loads user channels from the channels file. Returns an empty map if the file doesn't exist, and sets parseError if the file exists but contains invalid JSON.
|
|
41
|
-
* The file can contain
|
|
42
|
-
* @returns The loaded channels with parse status and
|
|
47
|
+
* The file can contain metadata keys (`providerSelections`, `tagRegistry`) which are extracted separately from channel data.
|
|
48
|
+
* @returns The loaded channels with parse status, provider selections, and tag registry.
|
|
43
49
|
*/
|
|
44
50
|
export async function loadUserChannels() {
|
|
45
51
|
try {
|
|
46
52
|
const content = await fsPromises.readFile(getChannelsFilePath(), "utf-8");
|
|
47
53
|
try {
|
|
48
54
|
const parsed = JSON.parse(content);
|
|
49
|
-
// Extract providerSelections
|
|
55
|
+
// Extract metadata keys (providerSelections, tagRegistry) — these are not channels, they're organizational state stored alongside channel data.
|
|
50
56
|
const providerSelections = {};
|
|
57
|
+
const tagRegistry = { deletedTags: [], tags: [] };
|
|
51
58
|
const channels = {};
|
|
52
59
|
for (const [key, value] of Object.entries(parsed)) {
|
|
53
60
|
if (key === "providerSelections") {
|
|
@@ -60,35 +67,47 @@ export async function loadUserChannels() {
|
|
|
60
67
|
}
|
|
61
68
|
}
|
|
62
69
|
}
|
|
70
|
+
else if (key === "tagRegistry") {
|
|
71
|
+
// Extract tag registry with defensive validation. Each field must be a string array — non-string elements are silently dropped.
|
|
72
|
+
if ((typeof value === "object") && (value !== null) && !Array.isArray(value)) {
|
|
73
|
+
const raw = value;
|
|
74
|
+
if (Array.isArray(raw.tags)) {
|
|
75
|
+
tagRegistry.tags = raw.tags.filter((t) => typeof t === "string").sort();
|
|
76
|
+
}
|
|
77
|
+
if (Array.isArray(raw.deletedTags)) {
|
|
78
|
+
tagRegistry.deletedTags = raw.deletedTags.filter((t) => typeof t === "string").sort();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
63
82
|
else if ((typeof value === "object") && (value !== null) && !Array.isArray(value)) {
|
|
64
83
|
// It's a channel definition or delta override.
|
|
65
84
|
channels[key] = value;
|
|
66
85
|
}
|
|
67
86
|
}
|
|
68
|
-
return { channels, parseError: false, providerSelections };
|
|
87
|
+
return { channels, parseError: false, providerSelections, tagRegistry };
|
|
69
88
|
}
|
|
70
89
|
catch (parseError) {
|
|
71
90
|
const message = (parseError instanceof Error) ? parseError.message : String(parseError);
|
|
72
91
|
LOG.warn("Invalid JSON in channels file %s: %s. Using predefined channels only.", getChannelsFilePath(), message);
|
|
73
|
-
return { channels: {}, parseError: true, parseErrorMessage: message, providerSelections: {} };
|
|
92
|
+
return { channels: {}, parseError: true, parseErrorMessage: message, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
95
|
catch (error) {
|
|
77
96
|
// File doesn't exist - this is normal, use predefined channels only.
|
|
78
97
|
if (error.code === "ENOENT") {
|
|
79
|
-
return { channels: {}, parseError: false, providerSelections: {} };
|
|
98
|
+
return { channels: {}, parseError: false, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
|
|
80
99
|
}
|
|
81
100
|
// Other read errors - log and use predefined channels.
|
|
82
101
|
LOG.warn("Failed to read channels file %s: %s. Using predefined channels only.", getChannelsFilePath(), (error instanceof Error) ? error.message : String(error));
|
|
83
|
-
return { channels: {}, parseError: false, providerSelections: {} };
|
|
102
|
+
return { channels: {}, parseError: false, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
|
|
84
103
|
}
|
|
85
104
|
}
|
|
86
105
|
/**
|
|
87
106
|
* Saves user channels to the channels file and updates the in-memory cache. Changes take effect immediately for new stream requests without requiring a server
|
|
88
|
-
* restart. Creates the data directory if it doesn't exist.
|
|
89
|
-
* normalized before saving: fields that match the predefined value or null-clear a field the predefined doesn't have are
|
|
90
|
-
* after normalization, the entry is removed entirely. This ensures that any code path that writes deltas (inline edit,
|
|
91
|
-
* produces clean channels.json output without each handler needing to optimize its own delta.
|
|
107
|
+
* restart. Creates the data directory if it doesn't exist. Metadata keys (provider selections, tag registry) are also saved if they have content. No-op deltas
|
|
108
|
+
* for predefined channel keys are normalized before saving: fields that match the predefined value or null-clear a field the predefined doesn't have are
|
|
109
|
+
* stripped. If the delta becomes empty after normalization, the entry is removed entirely. This ensures that any code path that writes deltas (inline edit,
|
|
110
|
+
* auto-number, browse modal, full edit) produces clean channels.json output without each handler needing to optimize its own delta.
|
|
92
111
|
* @param channels - The channels to save (full definitions or delta overrides).
|
|
93
112
|
* @throws If the file cannot be written.
|
|
94
113
|
*/
|
|
@@ -117,9 +136,13 @@ export async function saveUserChannels(channels) {
|
|
|
117
136
|
if ((value === null) && !(field in predefined)) {
|
|
118
137
|
continue;
|
|
119
138
|
}
|
|
120
|
-
// Skip values that match the predefined exactly — redundant copies.
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
// Skip values that match the predefined exactly — redundant copies. Array fields (like tags) use JSON.stringify for comparison since reference equality
|
|
140
|
+
// always fails for arrays. Tags arrays are always sorted and lowercase, making JSON.stringify deterministic.
|
|
141
|
+
if (value !== null) {
|
|
142
|
+
const predefinedValue = predefined[field];
|
|
143
|
+
if (Array.isArray(value) ? (JSON.stringify(value) === JSON.stringify(predefinedValue)) : (predefinedValue === value)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
123
146
|
}
|
|
124
147
|
cleaned[field] = value;
|
|
125
148
|
hasFields = true;
|
|
@@ -136,28 +159,22 @@ export async function saveUserChannels(channels) {
|
|
|
136
159
|
}
|
|
137
160
|
}
|
|
138
161
|
else {
|
|
139
|
-
|
|
162
|
+
// User channels: strip null fields. Null is a delta convention for predefined channels ("clear this field") and has no meaning on full Channel definitions —
|
|
163
|
+
// the Channel type uses T | undefined, never T | null. This allows callers to uniformly use null for "empty/clear" without needing to know the storage convention.
|
|
164
|
+
filtered[key] = Object.fromEntries(Object.entries(stored).filter(([, v]) => v !== null));
|
|
140
165
|
}
|
|
141
166
|
}
|
|
142
|
-
//
|
|
143
|
-
const sortedChannels = {};
|
|
144
|
-
const sortedKeys = Object.keys(filtered).sort();
|
|
145
|
-
for (const key of sortedKeys) {
|
|
146
|
-
sortedChannels[key] = filtered[key];
|
|
147
|
-
}
|
|
148
|
-
// Include provider selections if any exist.
|
|
167
|
+
// Include metadata keys (provider selections, tag registry) if they have content.
|
|
149
168
|
const selections = getProviderSelections();
|
|
169
|
+
const output = { ...filtered };
|
|
150
170
|
if (Object.keys(selections).length > 0) {
|
|
151
|
-
|
|
152
|
-
const sortedSelections = {};
|
|
153
|
-
const selectionKeys = Object.keys(selections).sort();
|
|
154
|
-
for (const key of selectionKeys) {
|
|
155
|
-
sortedSelections[key] = selections[key];
|
|
156
|
-
}
|
|
157
|
-
sortedChannels.providerSelections = sortedSelections;
|
|
171
|
+
output.providerSelections = selections;
|
|
158
172
|
}
|
|
159
|
-
|
|
160
|
-
|
|
173
|
+
if ((loadedTagRegistry.tags.length > 0) || (loadedTagRegistry.deletedTags.length > 0)) {
|
|
174
|
+
output.tagRegistry = loadedTagRegistry;
|
|
175
|
+
}
|
|
176
|
+
// Write channels with pretty formatting and sorted keys for consistent, diff-friendly output.
|
|
177
|
+
const content = stringifySorted(output);
|
|
161
178
|
await fsPromises.writeFile(getChannelsFilePath(), content + "\n", "utf-8");
|
|
162
179
|
// Update in-memory cache so changes take effect immediately for new stream requests.
|
|
163
180
|
loadedUserChannels = { ...filtered };
|
|
@@ -232,6 +249,7 @@ export async function initializeUserChannels() {
|
|
|
232
249
|
LOG.info("Migrated Fox provider references from foxcom to foxone.");
|
|
233
250
|
}
|
|
234
251
|
loadedUserChannels = result.channels;
|
|
252
|
+
loadedTagRegistry = result.tagRegistry;
|
|
235
253
|
userChannelsParseError = result.parseError;
|
|
236
254
|
userChannelsParseErrorMessage = result.parseErrorMessage;
|
|
237
255
|
// Load enabled providers from the configuration, validating that each tag is recognized. Invalid tags (e.g., from hand-edited config.json typos) are stripped
|
|
@@ -259,7 +277,6 @@ export async function initializeUserChannels() {
|
|
|
259
277
|
configResult.config.channels ??= {};
|
|
260
278
|
configResult.config.channels.setupCompleted = true;
|
|
261
279
|
await saveUserConfig(configResult.config);
|
|
262
|
-
LOG.info("Inferred Provider Setup as completed from existing configuration.");
|
|
263
280
|
}
|
|
264
281
|
}
|
|
265
282
|
// One-time migration: stamp canonicalKey on existing user channel variant entries that were created before explicit variant relationships were introduced.
|
|
@@ -286,6 +303,25 @@ export async function initializeUserChannels() {
|
|
|
286
303
|
await saveUserChannels(result.channels);
|
|
287
304
|
LOG.info("Migrated user channel variant entries with explicit canonical key declarations.");
|
|
288
305
|
}
|
|
306
|
+
// One-time migration: strip identity fields from user channel variant entries. Identity fields (name, stationId, tags, etc.) are resolved from the canonical
|
|
307
|
+
// at runtime via applyVariantInheritance, so storing them on variants is redundant. Older versions wrote these fields on variant creation. This migration
|
|
308
|
+
// cleans them up so channels.json only contains provider-specific fields on variant entries.
|
|
309
|
+
let variantFieldsMigrated = false;
|
|
310
|
+
for (const channel of Object.values(result.channels)) {
|
|
311
|
+
if (!channel.canonicalKey) {
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
for (const field of CHANNEL_IDENTITY_FIELDS) {
|
|
315
|
+
if (field in channel) {
|
|
316
|
+
Reflect.deleteProperty(channel, field);
|
|
317
|
+
variantFieldsMigrated = true;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (variantFieldsMigrated) {
|
|
322
|
+
await saveUserChannels(result.channels);
|
|
323
|
+
LOG.info("Stripped redundant identity fields from user channel variant entries.");
|
|
324
|
+
}
|
|
289
325
|
// Build the merged channels map and then build provider groups.
|
|
290
326
|
const mergedChannels = getMergedChannelMap();
|
|
291
327
|
buildProviderGroups(mergedChannels);
|
|
@@ -323,7 +359,11 @@ export async function initializeUserChannels() {
|
|
|
323
359
|
}
|
|
324
360
|
// Fields that users are allowed to override via delta. This allowlist prevents hand-edited channels.json from overriding fields like provider that are
|
|
325
361
|
// intentionally not user-editable. Matches the fields in the ChannelDelta interface.
|
|
326
|
-
|
|
362
|
+
// User-editable fields for predefined channel delta overrides. Derived from CHANNEL_IDENTITY_FIELDS (identity fields like name, stationId, tags) plus the
|
|
363
|
+
// provider-specific fields exposed in the edit form (channelSelector, profile, url). This derivation ensures that adding a new identity field to
|
|
364
|
+
// CHANNEL_IDENTITY_FIELDS automatically includes it in the delta allowlist.
|
|
365
|
+
const PROVIDER_SPECIFIC_EDITABLE_FIELDS = ["channelSelector", "profile", "url"];
|
|
366
|
+
const DELTA_ALLOWED_FIELDS = new Set([...CHANNEL_IDENTITY_FIELDS, ...PROVIDER_SPECIFIC_EDITABLE_FIELDS]);
|
|
327
367
|
/**
|
|
328
368
|
* Resolves a stored channel entry (full definition or delta) into a fully resolved Channel. For user-defined channels with no predefined equivalent, the stored
|
|
329
369
|
* entry is returned as-is (it must be a full Channel). For overrides of predefined channels, the predefined definition is used as a base and only allowlisted
|
|
@@ -340,7 +380,9 @@ export function resolveStoredChannel(key, stored) {
|
|
|
340
380
|
if (!predefined) {
|
|
341
381
|
return stored;
|
|
342
382
|
}
|
|
343
|
-
// Start with a copy of the predefined definition, then overlay allowlisted non-null delta fields.
|
|
383
|
+
// Start with a copy of the predefined definition, then overlay allowlisted non-null delta fields. The spread creates a shallow copy — reference-type fields
|
|
384
|
+
// (like tags) share the same array instance as PREDEFINED_CHANNELS. The defensive copy below ensures the returned Channel is fully independent so callers can
|
|
385
|
+
// safely modify it without corrupting the predefined source of truth.
|
|
344
386
|
const resolved = { ...predefined };
|
|
345
387
|
for (const [field, value] of Object.entries(stored)) {
|
|
346
388
|
if (!DELTA_ALLOWED_FIELDS.has(field)) {
|
|
@@ -355,6 +397,9 @@ export function resolveStoredChannel(key, stored) {
|
|
|
355
397
|
resolved[field] = value;
|
|
356
398
|
}
|
|
357
399
|
}
|
|
400
|
+
// Defensive copy of reference-type fields to break shared references with PREDEFINED_CHANNELS. The delta overlay above may have replaced tags entirely (if
|
|
401
|
+
// the delta included a tags array), but when no delta is present for tags, the spread leaves the predefined's array reference on the resolved object.
|
|
402
|
+
resolved.tags &&= resolved.tags.slice();
|
|
358
403
|
return resolved;
|
|
359
404
|
}
|
|
360
405
|
/**
|
|
@@ -434,8 +479,8 @@ export function getChannelListing() {
|
|
|
434
479
|
return listing;
|
|
435
480
|
}
|
|
436
481
|
/**
|
|
437
|
-
* Returns all available channels (predefined + user), with user channels taking precedence on key conflicts. Disabled predefined channels are excluded
|
|
438
|
-
*
|
|
482
|
+
* Returns all available channels (predefined + user), with user channels taking precedence on key conflicts. Disabled predefined channels are excluded. Built on
|
|
483
|
+
* top of getChannelListing() to ensure a single merging code path.
|
|
439
484
|
* @returns The merged channel map with disabled predefined channels filtered out.
|
|
440
485
|
*/
|
|
441
486
|
export function getAllChannels() {
|
|
@@ -454,6 +499,85 @@ export function getAllChannels() {
|
|
|
454
499
|
export function getUserChannels() {
|
|
455
500
|
return { ...loadedUserChannels };
|
|
456
501
|
}
|
|
502
|
+
// Tag Registry.
|
|
503
|
+
/**
|
|
504
|
+
* Returns the current tag registry state.
|
|
505
|
+
* @returns A copy of the tag registry with user-created tags and deleted predefined tags.
|
|
506
|
+
*/
|
|
507
|
+
export function getTagRegistry() {
|
|
508
|
+
return { deletedTags: [...loadedTagRegistry.deletedTags], tags: [...loadedTagRegistry.tags] };
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Updates the tag registry state in memory. Call saveUserChannels() after to persist the change.
|
|
512
|
+
* @param registry - The new tag registry state.
|
|
513
|
+
*/
|
|
514
|
+
export function setTagRegistry(registry) {
|
|
515
|
+
loadedTagRegistry = { deletedTags: registry.deletedTags.sort(), tags: registry.tags.sort() };
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Returns the active tag vocabulary: predefined tags minus user-deleted tags, plus user-created tags, sorted alphabetically. This is the single source of truth
|
|
519
|
+
* for which tags are visible, assignable, and queryable throughout the system. Tags not in this list are invisible to the UI and rejected by the ?tag= query
|
|
520
|
+
* parameter, even if they exist on channel definitions (vocabulary-as-lens model).
|
|
521
|
+
* @returns Sorted array of active tag strings.
|
|
522
|
+
*/
|
|
523
|
+
export function getActiveTagVocabulary() {
|
|
524
|
+
const deleted = new Set(loadedTagRegistry.deletedTags);
|
|
525
|
+
const active = PREDEFINED_TAGS.filter((tag) => !deleted.has(tag));
|
|
526
|
+
// Merge user tags, deduplicate (in case a user tag matches a non-deleted predefined tag), and sort.
|
|
527
|
+
const combined = new Set([...active, ...loadedTagRegistry.tags]);
|
|
528
|
+
return [...combined].sort();
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Returns a channel's effective tags — the intersection of the channel's assigned tags with the active vocabulary. Tags that exist on the channel but are not in
|
|
532
|
+
* the active vocabulary are filtered out, ensuring only assignable and queryable tags are visible in the UI and playlist responses.
|
|
533
|
+
* @param channel - The channel to get effective tags for.
|
|
534
|
+
* @returns Sorted array of effective tag strings, or empty array if the channel has no tags or none are in the active vocabulary.
|
|
535
|
+
*/
|
|
536
|
+
export function getChannelEffectiveTags(channel) {
|
|
537
|
+
if (!channel.tags || (channel.tags.length === 0)) {
|
|
538
|
+
return [];
|
|
539
|
+
}
|
|
540
|
+
const vocabulary = new Set(getActiveTagVocabulary());
|
|
541
|
+
return channel.tags.filter((tag) => vocabulary.has(tag));
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Applies a tag transformation across channels and persists the result. This is the single source of truth for batch tag mutations — delete, rename, and bulk
|
|
545
|
+
* toggle all route through this function. The caller provides a filter (which channels to transform) and a transform (how to modify each channel's tags). This
|
|
546
|
+
* function handles loading stored channel data, applying the transform, and saving. Delta normalization in saveUserChannels() handles predefined channel
|
|
547
|
+
* delta computation automatically — callers do not need to reason about deltas vs. full definitions.
|
|
548
|
+
* @param filter - Predicate selecting which listing entries to transform. Receives each ChannelListingEntry from getChannelListing().
|
|
549
|
+
* @param transform - Pure function mapping a channel's current resolved tags to its new tags. Receives the channel's current tags array (may be empty, ordering
|
|
550
|
+
* not guaranteed). Must return the desired tags array (may be empty to clear all tags). The returned array is sorted before storage.
|
|
551
|
+
* @returns Object with the affected channel keys and success status. On parse error, returns an error message and empty affected keys.
|
|
552
|
+
*/
|
|
553
|
+
export async function transformChannelTags(filter, transform) {
|
|
554
|
+
const result = await loadUserChannels();
|
|
555
|
+
if (result.parseError) {
|
|
556
|
+
return { affectedKeys: [], error: "Cannot update tags: channels file contains invalid JSON." };
|
|
557
|
+
}
|
|
558
|
+
const affectedKeys = [];
|
|
559
|
+
for (const entry of getChannelListing()) {
|
|
560
|
+
if (!filter(entry)) {
|
|
561
|
+
continue;
|
|
562
|
+
}
|
|
563
|
+
const currentTags = entry.channel.tags ?? [];
|
|
564
|
+
const newTags = transform(currentTags).sort();
|
|
565
|
+
// Skip channels where the transform produced no change.
|
|
566
|
+
if (JSON.stringify(newTags) === JSON.stringify(currentTags.slice().sort())) {
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
569
|
+
// Set the new tags on the stored entry. Callers use null uniformly for "clear/empty" — saveUserChannels() handles the storage conventions: delta normalization
|
|
570
|
+
// for predefined channels (comparing against raw definitions), null-stripping for user channels (null has no meaning on full Channel definitions).
|
|
571
|
+
const existing = result.channels[entry.key] ?? {};
|
|
572
|
+
existing.tags = (newTags.length > 0) ? newTags : null;
|
|
573
|
+
result.channels[entry.key] = existing;
|
|
574
|
+
affectedKeys.push(entry.key);
|
|
575
|
+
}
|
|
576
|
+
if (affectedKeys.length > 0) {
|
|
577
|
+
await saveUserChannels(result.channels);
|
|
578
|
+
}
|
|
579
|
+
return { affectedKeys };
|
|
580
|
+
}
|
|
457
581
|
/**
|
|
458
582
|
* Returns the predefined channel definition for a key.
|
|
459
583
|
* @param key - The channel key to look up.
|
|
@@ -554,19 +678,15 @@ export function isUserChannel(key) {
|
|
|
554
678
|
* re-enable. This is useful for users who don't want certain predefined channels cluttering their channel list.
|
|
555
679
|
*/
|
|
556
680
|
/**
|
|
557
|
-
* Checks if a predefined channel is disabled.
|
|
681
|
+
* Checks if a predefined channel is disabled. The disabled state is determined solely by the disabledPredefined list in config — the user's explicit visibility
|
|
682
|
+
* intent. Property overrides (HDHR toggle, name change, tag edits) stored as deltas in channels.json are orthogonal and do not affect the enabled/disabled state.
|
|
558
683
|
* @param key - The channel key to check.
|
|
559
684
|
* @returns True if the channel is predefined and disabled.
|
|
560
685
|
*/
|
|
561
686
|
export function isPredefinedChannelDisabled(key) {
|
|
562
|
-
// Only predefined channels can be disabled via this mechanism.
|
|
563
687
|
if (!isPredefinedChannel(key)) {
|
|
564
688
|
return false;
|
|
565
689
|
}
|
|
566
|
-
// If a user channel overrides this predefined channel, the predefined channel's disabled state is irrelevant.
|
|
567
|
-
if (isUserChannel(key)) {
|
|
568
|
-
return false;
|
|
569
|
-
}
|
|
570
690
|
return CONFIG.channels.disabledPredefined.includes(key);
|
|
571
691
|
}
|
|
572
692
|
/**
|
|
@@ -888,4 +1008,12 @@ export async function saveProviderSelections() {
|
|
|
888
1008
|
// Simply save the user channels — the saveUserChannels function includes provider selections automatically.
|
|
889
1009
|
await saveUserChannels(loadedUserChannels);
|
|
890
1010
|
}
|
|
1011
|
+
/**
|
|
1012
|
+
* Saves the current tag registry to the channels file. This triggers a full file save including all user channels.
|
|
1013
|
+
* @throws If the file cannot be written.
|
|
1014
|
+
*/
|
|
1015
|
+
export async function saveTagRegistry() {
|
|
1016
|
+
// Simply save the user channels — the saveUserChannels function includes the tag registry automatically.
|
|
1017
|
+
await saveUserChannels(loadedUserChannels);
|
|
1018
|
+
}
|
|
891
1019
|
//# sourceMappingURL=userChannels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userChannels.js","sourceRoot":"","sources":["../../src/config/userChannels.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"userChannels.js","sourceRoot":"","sources":["../../src/config/userChannels.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ export interface SettingMetadata {
|
|
|
16
16
|
max?: number;
|
|
17
17
|
min?: number;
|
|
18
18
|
path: string;
|
|
19
|
+
listItemsKey?: string;
|
|
19
20
|
type: "boolean" | "checkboxList" | "float" | "host" | "integer" | "path" | "port" | "string";
|
|
20
21
|
validValues?: string[];
|
|
21
22
|
unit?: string;
|
|
@@ -85,6 +86,7 @@ export interface UserServerConfig {
|
|
|
85
86
|
*/
|
|
86
87
|
export interface UserStreamingConfig {
|
|
87
88
|
audioBitsPerSecond?: number;
|
|
89
|
+
captureCodecs?: string[];
|
|
88
90
|
captureMode?: string;
|
|
89
91
|
frameRate?: number;
|
|
90
92
|
maxConcurrentStreams?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { LOG, stringifySorted } from "../utils/index.js";
|
|
1
2
|
import { getConfigFilePath, getDataDir } from "./paths.js";
|
|
2
|
-
import { LOG } from "../utils/index.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { getValidPresetIds } from "./presets.js";
|
|
5
5
|
const { promises: fsPromises } = fs;
|
|
@@ -36,6 +36,7 @@ export const CONFIG_METADATA = {
|
|
|
36
36
|
"enabled in the Channels tab provider filter are skipped at startup. Ensure you've logged into each provider before enabling.",
|
|
37
37
|
envVar: null,
|
|
38
38
|
label: "Channel Lineup Precaching",
|
|
39
|
+
listItemsKey: "providerModules",
|
|
39
40
|
path: "channels.precacheProviders",
|
|
40
41
|
type: "checkboxList"
|
|
41
42
|
}
|
|
@@ -370,6 +371,15 @@ export const CONFIG_METADATA = {
|
|
|
370
371
|
type: "string",
|
|
371
372
|
validValues: ["ffmpeg", "native"]
|
|
372
373
|
},
|
|
374
|
+
{
|
|
375
|
+
description: "Video codecs allowed for browser capture. H.264 is always available as the universal baseline. Additional codecs require GPU hardware " +
|
|
376
|
+
"encoding support - codecs without hardware support are shown as disabled.",
|
|
377
|
+
envVar: "CAPTURE_CODECS",
|
|
378
|
+
label: "Capture Codecs",
|
|
379
|
+
listItemsKey: "captureCodecs",
|
|
380
|
+
path: "streaming.captureCodecs",
|
|
381
|
+
type: "checkboxList"
|
|
382
|
+
},
|
|
373
383
|
{
|
|
374
384
|
description: "Video quality preset. Determines capture resolution. Bitrate and frame rate can be further customized.",
|
|
375
385
|
envVar: "QUALITY_PRESET",
|
|
@@ -496,8 +506,8 @@ export async function loadUserConfig() {
|
|
|
496
506
|
export async function saveUserConfig(config) {
|
|
497
507
|
// Ensure data directory exists.
|
|
498
508
|
await fsPromises.mkdir(getDataDir(), { recursive: true });
|
|
499
|
-
// Write config with pretty formatting for
|
|
500
|
-
const content =
|
|
509
|
+
// Write config with pretty formatting and sorted keys for consistent, diff-friendly output.
|
|
510
|
+
const content = stringifySorted(config);
|
|
501
511
|
await fsPromises.writeFile(getConfigFilePath(), content + "\n", "utf-8");
|
|
502
512
|
LOG.info("Configuration saved to %s.", getConfigFilePath());
|
|
503
513
|
}
|
|
@@ -587,6 +597,7 @@ export const DEFAULTS = {
|
|
|
587
597
|
},
|
|
588
598
|
streaming: {
|
|
589
599
|
audioBitsPerSecond: 256000,
|
|
600
|
+
captureCodecs: ["h264", "hevc"],
|
|
590
601
|
captureMode: "ffmpeg",
|
|
591
602
|
frameRate: 60,
|
|
592
603
|
maxConcurrentStreams: 10,
|
|
@@ -622,6 +633,10 @@ function parseEnvValue(value, type) {
|
|
|
622
633
|
case "host": {
|
|
623
634
|
return value;
|
|
624
635
|
}
|
|
636
|
+
case "checkboxList": {
|
|
637
|
+
// Accept comma-separated values (e.g., "h264,hevc").
|
|
638
|
+
return value.split(",").map((v) => v.trim()).filter((v) => v.length > 0);
|
|
639
|
+
}
|
|
625
640
|
case "path": {
|
|
626
641
|
// An empty path env var means "use default" — return null so the downstream code sees the same sentinel as an unset config field.
|
|
627
642
|
return (value.trim() === "") ? null : value;
|
|
@@ -704,6 +719,9 @@ export function mergeConfiguration(userConfig, cliOverrides) {
|
|
|
704
719
|
if (Array.isArray(userConfig.channels?.visibleColumns)) {
|
|
705
720
|
config.channels.visibleColumns = [...userConfig.channels.visibleColumns];
|
|
706
721
|
}
|
|
722
|
+
if (Array.isArray(userConfig.streaming?.captureCodecs)) {
|
|
723
|
+
config.streaming.captureCodecs = [...userConfig.streaming.captureCodecs];
|
|
724
|
+
}
|
|
707
725
|
if ((typeof userConfig.channels?.channelSortField === "string") && (userConfig.channels.channelSortField.length > 0)) {
|
|
708
726
|
config.channels.channelSortField = userConfig.channels.channelSortField;
|
|
709
727
|
}
|
|
@@ -760,7 +778,8 @@ const SETTINGS_TAB_SECTIONS = [
|
|
|
760
778
|
{
|
|
761
779
|
displayName: "Capture",
|
|
762
780
|
id: "capture",
|
|
763
|
-
paths: ["streaming.captureMode", "streaming.
|
|
781
|
+
paths: ["streaming.captureMode", "streaming.captureCodecs", "streaming.qualityPreset", "streaming.videoBitsPerSecond", "streaming.audioBitsPerSecond",
|
|
782
|
+
"streaming.frameRate"]
|
|
764
783
|
},
|
|
765
784
|
{
|
|
766
785
|
displayName: "HDHomeRun / Plex",
|
|
@@ -955,6 +974,12 @@ export function filterDefaults(config) {
|
|
|
955
974
|
if (Array.isArray(configVisibleColumns) && (configVisibleColumns.length > 0)) {
|
|
956
975
|
setNestedValue(filtered, "channels.visibleColumns", configVisibleColumns);
|
|
957
976
|
}
|
|
977
|
+
// Preserve captureCodecs when it differs from the default. The default includes all recognized codecs, so a shorter list means the user has disabled one.
|
|
978
|
+
const configCaptureCodecs = getNestedValue(config, "streaming.captureCodecs");
|
|
979
|
+
const defaultCaptureCodecs = getNestedValue(DEFAULTS, "streaming.captureCodecs");
|
|
980
|
+
if (Array.isArray(configCaptureCodecs) && (JSON.stringify(configCaptureCodecs.slice().sort()) !== JSON.stringify(defaultCaptureCodecs.slice().sort()))) {
|
|
981
|
+
setNestedValue(filtered, "streaming.captureCodecs", configCaptureCodecs);
|
|
982
|
+
}
|
|
958
983
|
const configSortField = getNestedValue(config, "channels.channelSortField");
|
|
959
984
|
if ((typeof configSortField === "string") && (configSortField !== "name")) {
|
|
960
985
|
setNestedValue(filtered, "channels.channelSortField", configSortField);
|