fix(jellyfin): fix discovery loop, device identity, tray state, and Disc

- Derive device identity from OS hostname; remove legacy configurable client/device fields
- Prevent discovery playback from reloading active item, misreporting pause state, and duplicate overlay restores
- Restart stale tray discovery sessions without re-login when server drops SubMiner cast target
- Sync tray discovery checkbox state on Linux after CLI/startup/remote-session changes
- Stop Discord presence falling back to stream URLs; prime title before tokenized stream loads
- Fix picker library discovery when log level is above info
- Fix config.example.jsonc trailing commas and array formatting
This commit is contained in:
2026-05-22 01:36:11 -07:00
parent 85d838ac96
commit 2f2dfa3e91
72 changed files with 2063 additions and 589 deletions
+13 -11
View File
@@ -1,5 +1,10 @@
import type { JellyfinStoredSession } from '../../core/services/jellyfin-token-store';
import type { ResolvedConfig } from '../../types';
import {
DEFAULT_JELLYFIN_CLIENT_NAME,
DEFAULT_JELLYFIN_CLIENT_VERSION,
createHostDerivedJellyfinDeviceId,
} from './jellyfin-device-identity';
type ResolvedJellyfinConfig = ResolvedConfig['jellyfin'];
type ResolvedJellyfinConfigWithSession = ResolvedJellyfinConfig & {
@@ -42,25 +47,22 @@ export function createGetResolvedJellyfinConfigHandler(deps: {
}
export function createGetJellyfinClientInfoHandler(deps: {
getResolvedJellyfinConfig: () => Partial<
Pick<ResolvedJellyfinConfig, 'clientName' | 'clientVersion' | 'deviceId'>
>;
getDefaultJellyfinConfig: () => Partial<
Pick<ResolvedJellyfinConfig, 'clientName' | 'clientVersion' | 'deviceId'>
>;
getResolvedJellyfinConfig: () => unknown;
getHostName?: () => string;
defaultClientName?: string;
defaultClientVersion?: string;
}) {
return (
config = deps.getResolvedJellyfinConfig(),
_config = deps.getResolvedJellyfinConfig(),
): {
clientName: string;
clientVersion: string;
deviceId: string;
} => {
const defaults = deps.getDefaultJellyfinConfig();
return {
clientName: config.clientName || defaults.clientName || '',
clientVersion: config.clientVersion || defaults.clientVersion || '',
deviceId: config.deviceId || defaults.deviceId || '',
clientName: deps.defaultClientName || DEFAULT_JELLYFIN_CLIENT_NAME,
clientVersion: deps.defaultClientVersion || DEFAULT_JELLYFIN_CLIENT_VERSION,
deviceId: createHostDerivedJellyfinDeviceId(deps.getHostName?.() || ''),
};
};
}