Fix : Stream Preview
This commit is contained in:
@@ -1206,17 +1206,26 @@ export interface StripchatStatus {
|
||||
*/
|
||||
statusChangedAt: number | null;
|
||||
/**
|
||||
* Vignette du flux (`previewUrlThumbBig`) — une image, pas un flux vidéo :
|
||||
* l'agent seul pilote un navigateur, le serveur n'a que cette API REST.
|
||||
* Absente si le modèle n'a jamais diffusé.
|
||||
* Image du flux — pas le flux lui-même : l'agent seul pilote un navigateur,
|
||||
* le serveur n'a que cette API REST.
|
||||
*
|
||||
* Reconstruite depuis `img.doppiocdn.net/thumbs/{snapshotTimestamp}/{id}` et
|
||||
* non lue telle quelle sur `previewUrlThumbBig` / `previewUrlThumbSmall` :
|
||||
* ces deux champs, malgré leur nom, pointent vers la photo de couverture du
|
||||
* profil — fixe, choisie par le modèle — et non vers une image de la
|
||||
* diffusion en cours. `img.doppiocdn.net` est la vraie vignette caméra,
|
||||
* confirmée en comparant les deux : contenu différent, cache CDN de 30 min
|
||||
* au lieu de 30 jours, `Last-Modified` à quelques secondes de la requête.
|
||||
*
|
||||
* Absente si le modèle n'a jamais diffusé (pas d'identifiant numérique ou
|
||||
* d'horodatage exploitable côté plateforme).
|
||||
*/
|
||||
previewUrl: string | null;
|
||||
/**
|
||||
* Horodatage de cette vignette côté plateforme, pour invalider le cache du
|
||||
* navigateur : l'URL, elle, ne change pas d'une image à l'autre — le CDN la
|
||||
* sert avec un `max-age` de 30 jours. Sans un paramètre qui varie à chaque
|
||||
* rafraîchissement, le navigateur garderait indéfiniment la toute première
|
||||
* image vue.
|
||||
* Horodatage de cette vignette côté plateforme — déjà encodé dans
|
||||
* `previewUrl`, donc sans utilité pour le cache : une nouvelle vignette porte
|
||||
* de toute façon une URL différente. Exposé pour l'affichage seulement
|
||||
* (« vignette vieille de X »).
|
||||
*/
|
||||
snapshotAt: number | null;
|
||||
}
|
||||
@@ -1254,10 +1263,10 @@ export async function fetchStripchatStatus(
|
||||
const payload = (await response.json()) as {
|
||||
user?: {
|
||||
user?: {
|
||||
id?: number;
|
||||
status?: string;
|
||||
avatarUrl?: string;
|
||||
statusChangedAt?: string;
|
||||
previewUrlThumbBig?: string;
|
||||
snapshotTimestamp?: number;
|
||||
};
|
||||
};
|
||||
@@ -1273,6 +1282,7 @@ export async function fetchStripchatStatus(
|
||||
: Number.NaN;
|
||||
// Secondes côté API, comme tous les timestamps Unix bruts de cette plateforme.
|
||||
const snapshotAt = Number(profile?.snapshotTimestamp) * 1000;
|
||||
const modelId = Number(profile?.id);
|
||||
|
||||
return {
|
||||
raw,
|
||||
@@ -1280,8 +1290,8 @@ export async function fetchStripchatStatus(
|
||||
avatarUrl: typeof profile?.avatarUrl === 'string' && profile.avatarUrl ? profile.avatarUrl : null,
|
||||
statusChangedAt: Number.isFinite(changedAt) ? changedAt : null,
|
||||
previewUrl:
|
||||
typeof profile?.previewUrlThumbBig === 'string' && profile.previewUrlThumbBig
|
||||
? profile.previewUrlThumbBig
|
||||
Number.isFinite(modelId) && modelId > 0 && Number.isFinite(snapshotAt) && snapshotAt > 0
|
||||
? `https://img.doppiocdn.net/thumbs/${Math.round(snapshotAt / 1000)}/${modelId}`
|
||||
: null,
|
||||
snapshotAt: Number.isFinite(snapshotAt) && snapshotAt > 0 ? snapshotAt : null,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user