diff --git a/frontend/src/index.ts b/frontend/src/index.ts index 8d67f175..212f81d0 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -2,32 +2,22 @@ interface Window { // Shut up TS SP_REACTDOM: any; + App: any; // TODO type BFinishedInitStageOne in @decky/ui } (async () => { - // Wait for main webpack chunks to definitely be loaded - console.time('[Decky:Boot] Waiting for main Webpack chunks...'); - while (!window.webpackChunksteamui || window.webpackChunksteamui.length < 5) { - await new Promise((r) => setTimeout(r, 10)); // Can't use DFL sleep here. - } - console.timeEnd('[Decky:Boot] Waiting for main Webpack chunks...'); + console.debug('[Decky:Boot] Frontend init'); + + console.time('[Decky:Boot] Waiting for SteamApp init stage 1 to finish...'); - // Wait for the React root to be mounted - console.time('[Decky:Boot] Waiting for React root mount...'); - let root; - while ( - // Does React root node exist? - !(root = document.getElementById('root')) || - // Does it have a child element? - !(root as any)[Object.keys(root).find((k) => k.startsWith('__reactContainer$')) as string].child - ) { - await new Promise((r) => setTimeout(r, 10)); // Can't use DFL sleep here. + while (!window.App?.BFinishedInitStageOne()) { + await new Promise((r) => setTimeout(r, 0)); // Can't use DFL sleep here. } - console.timeEnd('[Decky:Boot] Waiting for React root mount...'); + + console.timeEnd('[Decky:Boot] Waiting for SteamApp init stage 1 to finish...'); if (!window.SP_REACT) { console.debug('[Decky:Boot] Setting up Webpack & React globals...'); - await new Promise((r) => setTimeout(r, 500)); // Can't use DFL sleep here. // deliberate partial import const DFLWebpack = await import('@decky/ui/dist/webpack'); window.SP_REACT = DFLWebpack.findModule((m) => m.Component && m.PureComponent && m.useLayoutEffect);