Feat : Streamers page revamp
All checks were successful
release / build (push) Successful in 27s
release / verify-windows (push) Successful in 1m26s

This commit is contained in:
jeanotx32
2026-08-12 15:28:56 +02:00
parent d8846aac9a
commit 96b364bd66
15 changed files with 1625 additions and 131 deletions

View File

@@ -1,7 +1,7 @@
import type { StreamState, WatchTarget } from '@stream-control/shared';
import { DEFAULT_WATCH_SETTINGS, fetchStripchatStatus } from '@stream-control/shared';
import { config } from './config.ts';
import { targetsRepo } from './db.ts';
import { sessionsRepo, targetsRepo } from './db.ts';
import { hub } from './hub.ts';
import { notifyTargetLive } from './pushover.ts';
import { startTargetRecording } from './recorder.ts';
@@ -89,6 +89,14 @@ class Watchlist {
const changed = next !== target.state;
// Diffusion en cours : sans condition sur `changed`, car l'ouverture est
// idempotente. C'est ce qui rattrape un profil déjà en direct au démarrage
// du serveur — aucune transition ne se produira pour lui, et sa diffusion
// resterait sinon absente de la frise jusqu'à la suivante.
if (next === 'public') {
sessionsRepo.open(target.id, statusChangedAt ?? Date.now());
}
// Fin de diffusion : on fige le stream qui vient de se terminer. Son début
// est le statusChangedAt d'avant la transition, que la plateforme vient de
// remplacer par celui du nouveau statut.
@@ -97,6 +105,7 @@ class Watchlist {
if (changed && target.state === 'public') {
lastLiveStartedAt = target.statusChangedAt ?? target.stateSince;
lastLiveEndedAt = Date.now();
sessionsRepo.close(target.id, lastLiveEndedAt);
}
targetsRepo.updateState(target.id, {