Preserve native broadcast video and add patient shared stream startup
This commit is contained in:
+10
-1
@@ -4,6 +4,7 @@ const vm = require('node:vm');
|
||||
const assert = require('node:assert/strict');
|
||||
const listeners = {}, documentListeners = {}, elements = [];
|
||||
let clock = 0, interval, starts = 0, stops = 0, osd = 0, returned = 0, readyState = 0, remote = false, currentTime = 0, paused = false;
|
||||
let startupTimeoutSeconds;
|
||||
let phase = 'checking_stream', progressCalls = 0, languageQueries = [], progressDeferred;
|
||||
const catalogue = JSON.parse(fs.readFileSync(__dirname + '/Jellyfin.Plugin.Enigma2/Localization/startup-messages.json', 'utf8'));
|
||||
const video = { get readyState() { return readyState; }, get currentTime() { return currentTime; }, get paused() { return paused; }, currentSrc: 'stream' };
|
||||
@@ -29,7 +30,7 @@ const window = {
|
||||
ajax: async options => {
|
||||
if (options.url.startsWith('DecoderIntegration/StartupMessages')) {
|
||||
const language = new URLSearchParams(options.url.split('?')[1]).get('language'); languageQueries.push(language);
|
||||
return { Language: language.split('-')[0], Texts: catalogue[language.split('-')[0]] };
|
||||
return { Language: language.split('-')[0], Texts: catalogue[language.split('-')[0]], StartupTimeoutSeconds: startupTimeoutSeconds };
|
||||
}
|
||||
if (options.url.startsWith('DecoderIntegration/PlaybackProgress')) {
|
||||
++progressCalls; if (progressDeferred) return progressDeferred;
|
||||
@@ -112,6 +113,14 @@ const flush = async () => { for (let i = 0; i < 20; i++) await Promise.resolve()
|
||||
paused = false;
|
||||
listeners.keydown({ key: 'Escape', preventDefault() {}, stopImmediatePropagation() {} }); await flush();
|
||||
assert.equal(elements.length, 0); pending[2](); await flush();
|
||||
startupTimeoutSeconds = 135; clock = 0; currentTime = 0; readyState = 0;
|
||||
const stoppedBefore = stops; click(); await flush();
|
||||
clock = 90000; interval(); await flush();
|
||||
assert.equal(stops, stoppedBefore, 'configured metadata budget must survive the old web deadline');
|
||||
clock = 135001; interval(); await flush();
|
||||
assert.equal(stops, stoppedBefore + 1, 'configured web startup remains bounded');
|
||||
pending[3](); await flush();
|
||||
console.log('PASS provider startup budget extends web waiting without disabling timeout or cancellation');
|
||||
console.log('PASS per-device UI locale, real progress, first frame, later buffering and pause');
|
||||
console.log('PASS default channels, explicit programmes, one start, native OSD, Escape, late completion and startup timeout');
|
||||
})().catch(error => { console.error(error); process.exitCode = 1; });
|
||||
|
||||
Reference in New Issue
Block a user