Feat : added and tweaked state machine
This commit is contained in:
@@ -346,6 +346,21 @@ export interface WatchSettings {
|
||||
confirmations: number;
|
||||
pauseOnPrivate: boolean;
|
||||
resumeOnPublic: boolean;
|
||||
/**
|
||||
* Clore l'enregistrement quand le flux passe hors-ligne (statut brut « off »,
|
||||
* « idle »…), une fois le délai ci-dessous écoulé.
|
||||
*
|
||||
* Le passage hors-ligne met de toute façon l'enregistrement en pause : l'écran
|
||||
* d'attente n'a rien à faire dans le fichier. Ce réglage ne décide que de la
|
||||
* clôture définitive.
|
||||
*/
|
||||
stopOnOffline: boolean;
|
||||
/**
|
||||
* Temps hors-ligne toléré avant de clore. Une coupure brève ne doit pas
|
||||
* découper le fichier en deux ; une vraie fin de diffusion, si. Le compte à
|
||||
* rebours est annulé dès que le flux revient, public ou privé.
|
||||
*/
|
||||
offlineStopDelayMs: number;
|
||||
fullscreen: FullscreenSettings;
|
||||
}
|
||||
|
||||
@@ -406,6 +421,8 @@ export const DEFAULT_WATCH_SETTINGS: WatchSettings = {
|
||||
confirmations: 2,
|
||||
pauseOnPrivate: true,
|
||||
resumeOnPublic: true,
|
||||
stopOnOffline: true,
|
||||
offlineStopDelayMs: 3_600_000,
|
||||
fullscreen: {
|
||||
enabled: true,
|
||||
key: 'f',
|
||||
@@ -428,6 +445,10 @@ export interface WatchState {
|
||||
lastError?: string;
|
||||
/** Vrai si c'est la surveillance — et non l'opérateur — qui a mis en pause. */
|
||||
autoPaused: boolean;
|
||||
/** Depuis quand le flux est hors-ligne, absent s'il ne l'est pas. */
|
||||
offlineSince?: number;
|
||||
/** Échéance de la clôture automatique, absente si aucun compte à rebours ne court. */
|
||||
stopScheduledAt?: number;
|
||||
/** Lectures « privé » accumulées, en attente du seuil de confirmation. */
|
||||
pendingConfirmations: number;
|
||||
}
|
||||
@@ -702,6 +723,12 @@ export interface WatchTarget {
|
||||
/** Agent qui enregistrera ce streamer, s'il est assigné. */
|
||||
agentId: string | null;
|
||||
notify: boolean;
|
||||
/**
|
||||
* Lancer l'enregistrement sans intervention dès que ce profil est en direct
|
||||
* depuis assez longtemps. Exige un agent assigné, et un seul profil en
|
||||
* automatisme par agent : une VM n'enregistre qu'un flux à la fois.
|
||||
*/
|
||||
autoRecord: boolean;
|
||||
state: StreamState;
|
||||
rawStatus: string | null;
|
||||
/** Depuis quand l'état est stable, selon nos propres observations. */
|
||||
@@ -782,6 +809,9 @@ export function normalizeWatchSettings(raw: unknown): WatchSettings {
|
||||
confirmations: clamp(input.confirmations, base.confirmations, 1, 10),
|
||||
pauseOnPrivate: input.pauseOnPrivate !== false,
|
||||
resumeOnPublic: input.resumeOnPublic !== false,
|
||||
stopOnOffline: input.stopOnOffline !== false,
|
||||
// Plafond à 24 h : au-delà, l'enregistrement mobiliserait une VM pour rien.
|
||||
offlineStopDelayMs: clamp(input.offlineStopDelayMs, base.offlineStopDelayMs, 0, 86_400_000),
|
||||
fullscreen: {
|
||||
enabled: fullscreen.enabled !== false,
|
||||
key:
|
||||
|
||||
Reference in New Issue
Block a user