Feat : page streamer
This commit is contained in:
@@ -55,6 +55,8 @@ class Watchlist {
|
||||
let next: StreamState;
|
||||
let raw: string | null = null;
|
||||
let error: string | null = null;
|
||||
let avatarUrl = target.avatarUrl;
|
||||
let statusChangedAt = target.statusChangedAt;
|
||||
|
||||
try {
|
||||
const result = await fetchStripchatStatus(
|
||||
@@ -63,6 +65,9 @@ class Watchlist {
|
||||
);
|
||||
next = result.state;
|
||||
raw = result.raw;
|
||||
// On conserve la dernière valeur connue si la plateforme ne la renvoie pas.
|
||||
avatarUrl = result.avatarUrl ?? target.avatarUrl;
|
||||
statusChangedAt = result.statusChangedAt ?? target.statusChangedAt;
|
||||
} catch (err) {
|
||||
// Une sonde en échec ne change pas l'état connu : on garde le dernier
|
||||
// verdict fiable plutôt que d'annoncer un faux passage hors-ligne.
|
||||
@@ -71,11 +76,26 @@ class Watchlist {
|
||||
}
|
||||
|
||||
const changed = next !== target.state;
|
||||
|
||||
// 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.
|
||||
let lastLiveStartedAt = target.lastLiveStartedAt;
|
||||
let lastLiveEndedAt = target.lastLiveEndedAt;
|
||||
if (changed && target.state === 'public') {
|
||||
lastLiveStartedAt = target.statusChangedAt ?? target.stateSince;
|
||||
lastLiveEndedAt = Date.now();
|
||||
}
|
||||
|
||||
targetsRepo.updateState(target.id, {
|
||||
state: next,
|
||||
rawStatus: raw ?? target.rawStatus,
|
||||
stateSince: changed ? Date.now() : target.stateSince,
|
||||
lastError: error,
|
||||
avatarUrl,
|
||||
statusChangedAt,
|
||||
lastLiveStartedAt,
|
||||
lastLiveEndedAt,
|
||||
});
|
||||
|
||||
const updated = targetsRepo.get(target.id);
|
||||
|
||||
Reference in New Issue
Block a user