Feat : Change quality
All checks were successful
release / build (push) Successful in 25s
release / verify-windows (push) Successful in 1m14s

This commit is contained in:
jeanotx32
2026-08-12 04:55:56 +02:00
parent ea8eeec129
commit d14369a914
6 changed files with 225 additions and 2 deletions

View File

@@ -336,6 +336,25 @@ export interface FullscreenSettings {
delayMs: number;
}
/**
* Sélection automatique de la meilleure qualité offerte par le lecteur Stripchat.
*
* Stripchat ne démarre pas toujours sur sa meilleure qualité disponible — la
* valeur active par défaut varie, et rien ne garantit qu'elle corresponde au
* maximum réellement proposé pour ce streamer. Chaque nouvelle page (donc
* chaque nouveau stream ouvert) repart de ce choix du site, pas du précédent.
*
* Couplé à la structure actuelle du lecteur Stripchat (`.player-resolution`,
* `.player-resolution-tooltip__button--resolution`) : n'a d'effet qu'en mode
* de pilotage WebDriver BiDi, et se limite à ne rien faire si le site change
* son balisage.
*/
export interface StreamQualitySettings {
enabled: boolean;
/** Délai après le chargement de la page, le temps que le lecteur s'initialise. */
delayMs: number;
}
export interface WatchSettings {
enabled: boolean;
provider: WatchProvider;
@@ -375,6 +394,7 @@ export interface WatchSettings {
*/
offlineStopDelayMs: number;
fullscreen: FullscreenSettings;
streamQuality: StreamQualitySettings;
}
/**
@@ -540,6 +560,10 @@ export const DEFAULT_WATCH_SETTINGS: WatchSettings = {
windowMatch: 'Stripchat',
delayMs: 4000,
},
streamQuality: {
enabled: true,
delayMs: 3000,
},
};
/** État courant de la surveillance, remonté avec le statut de l'agent. */
@@ -705,6 +729,8 @@ export const AGENT_EVENTS = [
'watch.failed',
'fullscreen.restored',
'fullscreen.failed',
'quality.selected',
'quality.failed',
'browser.opened',
'browser.closed',
'browser.imported',
@@ -917,6 +943,7 @@ export function normalizeWatchSettings(raw: unknown): WatchSettings {
const input = (raw ?? {}) as Partial<WatchSettings>;
const base = DEFAULT_WATCH_SETTINGS;
const fullscreen = (input.fullscreen ?? {}) as Partial<FullscreenSettings>;
const streamQuality = (input.streamQuality ?? {}) as Partial<StreamQualitySettings>;
const clamp = (value: unknown, fallback: number, min: number, max: number): number => {
const parsed = Number(value);
@@ -955,6 +982,10 @@ export function normalizeWatchSettings(raw: unknown): WatchSettings {
: base.fullscreen.windowMatch,
delayMs: clamp(fullscreen.delayMs, base.fullscreen.delayMs, 0, 120_000),
},
streamQuality: {
enabled: streamQuality.enabled !== false,
delayMs: clamp(streamQuality.delayMs, base.streamQuality.delayMs, 0, 120_000),
},
};
}