diff --git a/src/app/preload-webservice/index.ts b/src/app/preload-webservice/index.ts index ee4abda..37b3548 100644 --- a/src/app/preload-webservice/index.ts +++ b/src/app/preload-webservice/index.ts @@ -6,6 +6,7 @@ const debug = createDebug('app:preload-webservice'); import './znca-js-api.js'; import './quirks/splatnet2.js'; import './quirks/nooklink.js'; +import './quirks/splatnet3.js'; const style = window.document.createElement('style'); diff --git a/src/app/preload-webservice/quirks/splatnet3.ts b/src/app/preload-webservice/quirks/splatnet3.ts new file mode 100644 index 0000000..3a90000 --- /dev/null +++ b/src/app/preload-webservice/quirks/splatnet3.ts @@ -0,0 +1,28 @@ +import createDebug from 'debug'; +import { events, webservice } from '../ipc.js'; + +const debug = createDebug('app:preload-webservice:quirks:splatnet3'); + +const SPLATNET3_WEBSERVICE_ID = 4834290508791808; + +if (webservice.id === SPLATNET3_WEBSERVICE_ID) { + events.on('window:refresh', () => { + const pulltorefresh_container = document.querySelector('[class*=PullToRefresh_container]'); + debug('PullToRefresh container HTMLElement', pulltorefresh_container); + if (!pulltorefresh_container) return location.reload(); + + const keys = Object.keys(pulltorefresh_container) as (keyof typeof pulltorefresh_container)[]; + const react_fiber: any = pulltorefresh_container[keys.find(k => k.startsWith('__reactFiber$'))!]; + debug('PullToRefresh container React fiber', react_fiber); + if (!react_fiber) return location.reload(); + + try { + const props = react_fiber.return.return.memoizedProps; + debug('PullToRefresh root props', props); + props.onRefresh.call(null); + } catch (err) { + debug('Error triggering refresh, forcing full page reload', err); + location.reload(); + } + }); +}