Feat : handle infinite throbber
Some checks failed
release / build (push) Failing after 27s
release / verify-windows (push) Has been skipped

This commit is contained in:
jeanotx32
2026-08-13 14:26:26 -04:00
parent 00535d5e19
commit 830b27470c
5 changed files with 338 additions and 14 deletions

View File

@@ -458,6 +458,20 @@ export interface BrowserSettings {
* « Firefox est déjà ouvert ».
*/
profileDir: string;
/**
* Durée de blocage du lecteur au-delà de laquelle l'agent recharge la page.
* `0` désactive la reprise.
*
* Le lecteur se fige parfois sur son indicateur de chargement sans jamais
* repartir, le flux ne reprenant qu'après un rechargement manuel. Rien dans le
* statut du stream ne le signale : la plateforme le donne toujours public, et
* OBS continue d'enregistrer un écran d'attente.
*
* Le seuil se mesure au temps sans la moindre avancée de la lecture, pas à
* l'apparition d'un indicateur : c'est le blocage réel qui compte, et une
* mise en mémoire tampon de quelques secondes est normale sur un direct.
*/
stallTimeoutMs: number;
}
/**
@@ -496,6 +510,7 @@ export const DEFAULT_BROWSER_SETTINGS: BrowserSettings = {
onStop: 'blank',
remotePort: 9222,
profileDir: '',
stallTimeoutMs: 30_000,
};
export function normalizeBrowserSettings(raw: unknown): BrowserSettings {
@@ -503,6 +518,7 @@ export function normalizeBrowserSettings(raw: unknown): BrowserSettings {
const base = DEFAULT_BROWSER_SETTINGS;
const delay = Number(input.readyDelayMs);
const port = Number(input.remotePort);
const stall = Number(input.stallTimeoutMs);
return {
enabled: input.enabled === true,
@@ -526,6 +542,14 @@ export function normalizeBrowserSettings(raw: unknown): BrowserSettings {
? Math.min(Math.max(Math.round(port), 1024), 65_535)
: base.remotePort,
profileDir: typeof input.profileDir === 'string' ? input.profileDir.trim() : base.profileDir,
// Plancher à 10 s hors désactivation : en deçà, une mise en mémoire tampon
// ordinaire suffirait à déclencher un rechargement, et le remède serait pire
// que le mal. La borne haute laisse la place à un flux très instable.
stallTimeoutMs: Number.isFinite(stall)
? stall <= 0
? 0
: Math.min(Math.max(Math.round(stall), 10_000), 600_000)
: base.stallTimeoutMs,
};
}