Feat : Handling idle state
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-11 23:31:26 +02:00
parent 2380196169
commit 242bbf1383
6 changed files with 108 additions and 11 deletions

View File

@@ -334,8 +334,12 @@ export interface WatchSettings {
username: string;
pollIntervalMs: number;
/**
* Statuts bruts de l'API considérés comme « pas de flux public ».
* Valeurs observées côté Stripchat : public, private, p2p, groupShow, idle.
* Statuts bruts de l'API considérés comme « pas de flux public, mais le
* streamer est toujours là ». Ils mettent l'enregistrement en pause sans le
* clore : le flux est censé revenir.
*
* Énumération relevée sur l'API Stripchat : `public`, `private`, `p2p`,
* `groupShow`, `virtualPrivate`, `ticketShow`, `idle`, `off`.
*/
privateStatuses: string[];
/**
@@ -417,7 +421,10 @@ export const DEFAULT_WATCH_SETTINGS: WatchSettings = {
provider: 'stripchat',
username: '',
pollIntervalMs: 10_000,
privateStatuses: ['private', 'p2p', 'groupShow', 'virtualPrivate', 'ticketShow'],
// `idle` est le « revient bientôt » : le modèle est connecté (isOnline) mais ne
// diffuse pas (isLive faux). Il relève de la pause, pas de la clôture — à la
// différence de `off`, qui est une déconnexion franche.
privateStatuses: ['private', 'p2p', 'groupShow', 'virtualPrivate', 'ticketShow', 'idle'],
confirmations: 2,
pauseOnPrivate: true,
resumeOnPublic: true,
@@ -861,7 +868,13 @@ export function stripchatProfileUrl(username: string): string {
*
* Le champ autoritatif est `user.user.status` sur
* `/api/front/v2/models/username/{pseudo}/cam`. Valeurs relevées en production :
* `public`, `private`, `p2p`, `groupShow`, `idle`.
* `public`, `private`, `p2p`, `groupShow`, `virtualPrivate`, `idle`, `off`.
*
* Deux champs voisins prêtent à confusion et ne doivent pas servir ici :
* - `offlineStatus` est le message d'absence libre du modèle. Il reste
* renseigné pendant qu'il diffuse : il ne dit rien de l'état courant.
* - `isLive` / `isOnline` distinguent `idle` (connecté, ne diffuse pas) de
* `off` (déconnecté), ce que `status` exprime déjà.
*
* Mutualisé entre l'agent (pause automatique) et le serveur (veille) : une seule
* définition de l'endpoint et du chemin du champ à maintenir.
@@ -928,6 +941,6 @@ export function mapStreamStatus(raw: string | undefined, privateStatuses: string
const value = raw.toLowerCase();
if (privateStatuses.some((status) => status.toLowerCase() === value)) return 'private';
if (value === 'public') return 'public';
// idle / off / offline / deleted : le modèle ne diffuse pas.
// off / offline / deleted / notFound : le modèle n'est plus là du tout.
return 'offline';
}