fix(jellyfin): show overlay, inject plugin, and fix stats title on playb

- Show visible overlay automatically during Jellyfin playback so subtitleStyle applies
- Inject bundled mpv plugin on auto-launch so keybindings work without overlay focus
- Group Jellyfin playback stats under item metadata (jellyfin://host/item/id) instead of stream URLs so episodes merge with matching local titles
- Mark ffsubsync unavailable in subsync modal for remote media paths
- Drain queued second-instance commands even when onReady throws
This commit is contained in:
2026-05-21 22:26:59 -07:00
parent da3c971ee6
commit 47e78ff698
49 changed files with 975 additions and 105 deletions
@@ -361,3 +361,38 @@ test('manual prerelease update check uses prerelease release and launcher channe
'restart-dialog',
]);
});
test('manual update check keeps current prerelease builds on configured stable channel', async () => {
const { deps, calls } = createDeps({
getCurrentVersion: () => '0.15.0-beta.3',
checkAppUpdate: async (channel) => {
calls.push(`app:${channel}`);
return { available: false, version: '0.15.0-beta.3' };
},
fetchLatestStableRelease: async (channel) => {
calls.push(`fetch:${channel}`);
return {
tag_name: 'v0.14.0',
prerelease: false,
draft: false,
assets: [],
};
},
showNoUpdateDialog: async (version) => {
calls.push(`no-update:${version}`);
},
showUpdateAvailableDialog: async () => {
throw new Error('unexpected update dialog');
},
});
const service = createUpdateService(deps);
const result = await service.checkForUpdates({ source: 'manual' });
assert.equal(result.status, 'up-to-date');
assert.deepEqual(calls, [
'app:stable',
'fetch:stable',
'no-update:0.15.0-beta.3',
]);
});