ui: fix filekey on prefetched sessions

This commit is contained in:
nick-delirium 2025-03-14 17:29:55 +01:00
parent 23820b7ea5
commit f93ee6fb8f
No known key found for this signature in database
GPG key ID: 93ABD695DF5FDBA0
7 changed files with 13 additions and 10 deletions

View file

@ -88,7 +88,7 @@ function WebPlayer(props: any) {
); );
if (usePrefetched) { if (usePrefetched) {
if (mobData?.data) { if (mobData?.data) {
WebPlayerInst.preloadFirstFile(mobData?.data); WebPlayerInst.preloadFirstFile(mobData?.data, mobData?.fileKey);
} }
} }
setContextValue({ player: WebPlayerInst, store: PlayerStore }); setContextValue({ player: WebPlayerInst, store: PlayerStore });

View file

@ -182,6 +182,7 @@ function SessionItem(props: RouteComponentProps & Props) {
await sessionStore.getFirstMob(sessionId); await sessionStore.getFirstMob(sessionId);
setPrefetched(PREFETCH_STATE.fetched); setPrefetched(PREFETCH_STATE.fetched);
} catch (e) { } catch (e) {
setPrefetched(PREFETCH_STATE.none)
console.error('Error while prefetching first mob', e); console.error('Error while prefetching first mob', e);
} }
}, [prefetchState, live, isAssist, isMobile, sessionStore, sessionId]); }, [prefetchState, live, isAssist, isMobile, sessionStore, sessionId]);

View file

@ -200,7 +200,7 @@ export default class SessionStore {
userTimezone = ''; userTimezone = '';
prefetchedMobUrls: Record<string, { data: Uint8Array; entryNum: number }> = prefetchedMobUrls: Record<string, { data: Uint8Array; entryNum: number, fileKey?: string }> =
{}; {};
prefetched: boolean = false; prefetched: boolean = false;
@ -230,13 +230,13 @@ export default class SessionStore {
}; };
getFirstMob = async (sessionId: string) => { getFirstMob = async (sessionId: string) => {
const { domURL } = await sessionService.getFirstMobUrl(sessionId); const { domURL, fileKey } = await sessionService.getFirstMobUrl(sessionId);
await loadFile(domURL[0], (data) => 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 keys = Object.keys(this.prefetchedMobUrls);
const toLimit = 10 - keys.length; const toLimit = 10 - keys.length;
if (toLimit < 0) { if (toLimit < 0) {
@ -255,6 +255,7 @@ export default class SessionStore {
: 0; : 0;
this.prefetchedMobUrls[sessionId] = { this.prefetchedMobUrls[sessionId] = {
data: fileData, data: fileData,
fileKey,
entryNum: nextEntryNum, entryNum: nextEntryNum,
}; };
}; };

View file

@ -45,7 +45,7 @@ export interface SessionFilesInfo {
devtoolsURL: string[]; devtoolsURL: string[];
/** deprecated */ /** deprecated */
mobsUrl: string[]; mobsUrl: string[];
fileKey: string | null; fileKey?: string | null;
events: Record<string, any>[]; events: Record<string, any>[];
stackEvents: Record<string, any>[]; stackEvents: Record<string, any>[];
frustrations: Record<string, any>[]; frustrations: Record<string, any>[];

View file

@ -224,7 +224,8 @@ export default class MessageLoader {
preloaded = false; 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'); this.mobParser = this.createNewParser(true, this.processMessages, 'p:dom');
try { try {

View file

@ -102,8 +102,8 @@ export default class WebPlayer extends Player {
window.playerJumpToTime = this.jump.bind(this); window.playerJumpToTime = this.jump.bind(this);
} }
preloadFirstFile(data: Uint8Array) { preloadFirstFile(data: Uint8Array, fileKey?: string) {
void this.messageLoader.preloadFirstFile(data); void this.messageLoader.preloadFirstFile(data, fileKey);
} }
reinit(session: SessionFilesInfo) { reinit(session: SessionFilesInfo) {

View file

@ -45,7 +45,7 @@ export default class SettingsService {
.catch((e) => Promise.reject(e)); .catch((e) => Promise.reject(e));
} }
getFirstMobUrl(sessionId: string): Promise<{ domURL: string[] }> { getFirstMobUrl(sessionId: string): Promise<{ domURL: string[], fileKey?: string }> {
return this.client return this.client
.get(`/sessions/${sessionId}/first-mob`) .get(`/sessions/${sessionId}/first-mob`)
.then((r) => r.json()) .then((r) => r.json())