Feat : open link on current firefox session
All checks were successful
release / build (push) Successful in 44s
release / verify-windows (push) Successful in 1m19s

This commit is contained in:
jeanotx32
2026-08-12 00:40:20 +02:00
parent 55bb55ae55
commit 6ad8429cf1
6 changed files with 176 additions and 22 deletions

View File

@@ -379,20 +379,36 @@ export interface BrowserSettings {
enabled: boolean;
/** Exécutable du navigateur. */
command: string;
/** Arguments placés avant l'URL. */
/**
* Arguments placés avant l'URL. Vide par défaut, et ce n'est pas un oubli :
* `--new-window` créerait une fenêtre neuve à chaque capture, avec un nouvel
* identifiant X11 — la source « capture de fenêtre » d'OBS perdrait sa cible
* et il faudrait la repointer à la main. Sans argument, Firefox confie l'URL à
* la fenêtre déjà ouverte, qu'OBS continue de capturer.
*/
args: string[];
/** Délai avant l'envoi du plein écran, le temps que le lecteur démarre. */
readyDelayMs: number;
/** Fermer la fenêtre quand l'enregistrement s'arrête. */
closeOnStop: boolean;
/**
* Sort de la fenêtre à l'arrêt de l'enregistrement.
*
* `blank` charge une page vide : la fenêtre survit, donc la source OBS aussi,
* et le lecteur cesse de décoder la vidéo. `close` ferme la fenêtre — c'est
* précisément ce qui casse la capture OBS. `keep` ne touche à rien et laisse
* le flux tourner.
*/
onStop: BrowserStopAction;
}
export const BROWSER_STOP_ACTIONS = ['blank', 'keep', 'close'] as const;
export type BrowserStopAction = (typeof BROWSER_STOP_ACTIONS)[number];
export const DEFAULT_BROWSER_SETTINGS: BrowserSettings = {
enabled: false,
command: 'firefox',
args: ['--new-window'],
args: [],
readyDelayMs: 8000,
closeOnStop: true,
onStop: 'blank',
};
export function normalizeBrowserSettings(raw: unknown): BrowserSettings {
@@ -412,10 +428,21 @@ export function normalizeBrowserSettings(raw: unknown): BrowserSettings {
readyDelayMs: Number.isFinite(delay)
? Math.min(Math.max(Math.round(delay), 0), 120_000)
: base.readyDelayMs,
closeOnStop: input.closeOnStop !== false,
onStop: readStopAction(raw),
};
}
/** Lit le sort de la fenêtre, en acceptant l'ancien booléen `closeOnStop`. */
function readStopAction(raw: unknown): BrowserStopAction {
const input = (raw ?? {}) as Partial<BrowserSettings> & { closeOnStop?: boolean };
if ((BROWSER_STOP_ACTIONS as readonly string[]).includes(input.onStop as string)) {
return input.onStop as BrowserStopAction;
}
// Configuration écrite avant l'introduction du choix à trois valeurs.
if (typeof input.closeOnStop === 'boolean') return input.closeOnStop ? 'close' : 'keep';
return DEFAULT_BROWSER_SETTINGS.onStop;
}
export const DEFAULT_WATCH_SETTINGS: WatchSettings = {
enabled: false,
provider: 'stripchat',