From f93ee6fb8ff1a34d2a018f74aefd01691978a8ba Mon Sep 17 00:00:00 2001 From: nick-delirium Date: Fri, 14 Mar 2025 17:29:55 +0100 Subject: [PATCH] ui: fix filekey on prefetched sessions --- frontend/app/components/Session/WebPlayer.tsx | 2 +- .../app/components/shared/SessionItem/SessionItem.tsx | 1 + frontend/app/mstore/sessionStore.ts | 9 +++++---- frontend/app/player/common/types.ts | 2 +- frontend/app/player/web/MessageLoader.ts | 3 ++- frontend/app/player/web/WebPlayer.ts | 4 ++-- frontend/app/services/SessionService.ts | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/frontend/app/components/Session/WebPlayer.tsx b/frontend/app/components/Session/WebPlayer.tsx index e61ef30a9..d0fff842d 100644 --- a/frontend/app/components/Session/WebPlayer.tsx +++ b/frontend/app/components/Session/WebPlayer.tsx @@ -88,7 +88,7 @@ function WebPlayer(props: any) { ); if (usePrefetched) { if (mobData?.data) { - WebPlayerInst.preloadFirstFile(mobData?.data); + WebPlayerInst.preloadFirstFile(mobData?.data, mobData?.fileKey); } } setContextValue({ player: WebPlayerInst, store: PlayerStore }); diff --git a/frontend/app/components/shared/SessionItem/SessionItem.tsx b/frontend/app/components/shared/SessionItem/SessionItem.tsx index bf2a0356b..aad5fefa5 100644 --- a/frontend/app/components/shared/SessionItem/SessionItem.tsx +++ b/frontend/app/components/shared/SessionItem/SessionItem.tsx @@ -182,6 +182,7 @@ function SessionItem(props: RouteComponentProps & Props) { await sessionStore.getFirstMob(sessionId); setPrefetched(PREFETCH_STATE.fetched); } catch (e) { + setPrefetched(PREFETCH_STATE.none) console.error('Error while prefetching first mob', e); } }, [prefetchState, live, isAssist, isMobile, sessionStore, sessionId]); diff --git a/frontend/app/mstore/sessionStore.ts b/frontend/app/mstore/sessionStore.ts index bed34081f..e6c51c8e2 100644 --- a/frontend/app/mstore/sessionStore.ts +++ b/frontend/app/mstore/sessionStore.ts @@ -200,7 +200,7 @@ export default class SessionStore { userTimezone = ''; - prefetchedMobUrls: Record = + prefetchedMobUrls: Record = {}; prefetched: boolean = false; @@ -230,13 +230,13 @@ export default class SessionStore { }; getFirstMob = async (sessionId: string) => { - const { domURL } = await sessionService.getFirstMobUrl(sessionId); + const { domURL, fileKey } = await sessionService.getFirstMobUrl(sessionId); await loadFile(domURL[0], (data) => - this.setPrefetchedMobUrl(sessionId, data), + this.setPrefetchedMobUrl(sessionId, data, fileKey), ); }; - setPrefetchedMobUrl = (sessionId: string, fileData: Uint8Array) => { + setPrefetchedMobUrl = (sessionId: string, fileData: Uint8Array, fileKey?: string) => { const keys = Object.keys(this.prefetchedMobUrls); const toLimit = 10 - keys.length; if (toLimit < 0) { @@ -255,6 +255,7 @@ export default class SessionStore { : 0; this.prefetchedMobUrls[sessionId] = { data: fileData, + fileKey, entryNum: nextEntryNum, }; }; diff --git a/frontend/app/player/common/types.ts b/frontend/app/player/common/types.ts index 9f2b3ec4f..b607b353c 100644 --- a/frontend/app/player/common/types.ts +++ b/frontend/app/player/common/types.ts @@ -45,7 +45,7 @@ export interface SessionFilesInfo { devtoolsURL: string[]; /** deprecated */ mobsUrl: string[]; - fileKey: string | null; + fileKey?: string | null; events: Record[]; stackEvents: Record[]; frustrations: Record[]; diff --git a/frontend/app/player/web/MessageLoader.ts b/frontend/app/player/web/MessageLoader.ts index 5dec14ba8..790fa2619 100644 --- a/frontend/app/player/web/MessageLoader.ts +++ b/frontend/app/player/web/MessageLoader.ts @@ -224,7 +224,8 @@ export default class MessageLoader { preloaded = false; - async preloadFirstFile(data: Uint8Array) { + async preloadFirstFile(data: Uint8Array, fileKey?: string) { + this.session.fileKey = fileKey; this.mobParser = this.createNewParser(true, this.processMessages, 'p:dom'); try { diff --git a/frontend/app/player/web/WebPlayer.ts b/frontend/app/player/web/WebPlayer.ts index 21b1efa6f..2977f95e4 100644 --- a/frontend/app/player/web/WebPlayer.ts +++ b/frontend/app/player/web/WebPlayer.ts @@ -102,8 +102,8 @@ export default class WebPlayer extends Player { window.playerJumpToTime = this.jump.bind(this); } - preloadFirstFile(data: Uint8Array) { - void this.messageLoader.preloadFirstFile(data); + preloadFirstFile(data: Uint8Array, fileKey?: string) { + void this.messageLoader.preloadFirstFile(data, fileKey); } reinit(session: SessionFilesInfo) { diff --git a/frontend/app/services/SessionService.ts b/frontend/app/services/SessionService.ts index fe5e7788f..ef7d43243 100644 --- a/frontend/app/services/SessionService.ts +++ b/frontend/app/services/SessionService.ts @@ -45,7 +45,7 @@ export default class SettingsService { .catch((e) => Promise.reject(e)); } - getFirstMobUrl(sessionId: string): Promise<{ domURL: string[] }> { + getFirstMobUrl(sessionId: string): Promise<{ domURL: string[], fileKey?: string }> { return this.client .get(`/sessions/${sessionId}/first-mob`) .then((r) => r.json())