fix: Adjust tabs and toaster hooks to work on react 18, also half-fix Valve Internal

This commit is contained in:
AAGaming
2023-12-12 22:21:25 -05:00
parent 91186da979
commit 80a00a0d35
6 changed files with 52 additions and 35 deletions
+1 -1
View File
@@ -44,7 +44,7 @@
} }
}, },
"dependencies": { "dependencies": {
"decky-frontend-lib": "3.23.1", "decky-frontend-lib": "3.24.1",
"filesize": "^10.0.7", "filesize": "^10.0.7",
"i18next": "^23.2.1", "i18next": "^23.2.1",
"i18next-http-backend": "^2.2.1", "i18next-http-backend": "^2.2.1",
+4 -4
View File
@@ -6,8 +6,8 @@ settings:
dependencies: dependencies:
decky-frontend-lib: decky-frontend-lib:
specifier: 3.23.1 specifier: 3.24.1
version: 3.23.1 version: 3.24.1
filesize: filesize:
specifier: ^10.0.7 specifier: ^10.0.7
version: 10.0.7 version: 10.0.7
@@ -1482,8 +1482,8 @@ packages:
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.2
/decky-frontend-lib@3.23.1: /decky-frontend-lib@3.24.1:
resolution: {integrity: sha512-6JKtSCjk5liJ+xBqOPZvPSp1HdkaQ+j/I19bGSk+cWuxSrodyduduXKJE4p4GJ/+KgFdn0yg/8tRi+DSqmBvdw==} resolution: {integrity: sha512-VGxLTPetxx/pQVC+t8odTHrwQAh7uy4bO2Od2gGWSTfmUUoxtAcEtiXGyE9mKsoD6t7QNHrGvgXn78sf2i/IeQ==}
dev: false dev: false
/decode-named-character-reference@1.0.2: /decode-named-character-reference@1.0.2:
+28 -20
View File
@@ -9,32 +9,40 @@ const logger = new Logger('DeveloperMode');
let removeSettingsObserver: () => void = () => {}; let removeSettingsObserver: () => void = () => {};
export async function setShowValveInternal(show: boolean) { declare global {
let settingsMod: any; interface Window {
while (!settingsMod) { settingsStore: any;
settingsMod = findModuleChild((m) => {
if (typeof m !== 'object') return undefined;
for (let prop in m) {
if (typeof m[prop]?.settings?.bIsValveEmail !== 'undefined') return m[prop];
}
});
if (!settingsMod) {
logger.debug('[ValveInternal] waiting for settingsMod');
await sleep(1000);
}
} }
}
export async function setShowValveInternal(show: boolean) {
if (show) { if (show) {
removeSettingsObserver = settingsMod[ const mobx =
Object.getOwnPropertySymbols(settingsMod).find((x) => x.toString() == 'Symbol(mobx administration)') as any window.settingsStore[
].observe((e: any) => { Object.getOwnPropertySymbols(window.settingsStore).find(
e.newValue.bIsValveEmail = true; (x) => x.toString() == 'Symbol(mobx administration)',
}); ) as any
settingsMod.m_Settings.bIsValveEmail = true; ];
if (mobx.observe_) {
// New style, currently broken
logger.log('Valve internal not yet supported on this build.');
// removeSettingsObserver = mobx.observe_(mobx, [(e: any) => {
// console.log("got e", e)
// e.newValue.bIsValveEmail = true;
// }]);
} else if (mobx.observe) {
// Old style
removeSettingsObserver = mobx.observe((e: any) => {
e.newValue.bIsValveEmail = true;
});
}
window.settingsStore.m_Settings.bIsValveEmail = true;
logger.log('Enabled Valve Internal menu'); logger.log('Enabled Valve Internal menu');
} else { } else {
removeSettingsObserver(); removeSettingsObserver();
settingsMod.m_Settings.bIsValveEmail = false; window.settingsStore.m_Settings.bIsValveEmail = false;
logger.log('Disabled Valve Internal menu'); logger.log('Disabled Valve Internal menu');
} }
} }
+2 -2
View File
@@ -1,5 +1,5 @@
// TabsHook for versions before the Desktop merge // TabsHook for versions before the Desktop merge
import { Patch, afterPatch, sleep } from 'decky-frontend-lib'; import { Patch, afterPatch, getReactRoot, sleep } from 'decky-frontend-lib';
import { memo } from 'react'; import { memo } from 'react';
import NewTabsHook from './tabs-hook'; import NewTabsHook from './tabs-hook';
@@ -35,7 +35,7 @@ class TabsHook extends NewTabsHook {
init() { init() {
const self = this; const self = this;
const tree = (document.getElementById('root') as any)._reactRootContainer._internalRoot.current; const tree = getReactRoot(document.getElementById('root') as any);
let scrollRoot: any; let scrollRoot: any;
async function findScrollRoot(currentNode: any, iters: number): Promise<any> { async function findScrollRoot(currentNode: any, iters: number): Promise<any> {
if (iters >= 30) { if (iters >= 30) {
+4 -4
View File
@@ -1,5 +1,5 @@
// TabsHook for versions after the Desktop merge // TabsHook for versions after the Desktop merge
import { Patch, QuickAccessTab, afterPatch, findInReactTree, sleep } from 'decky-frontend-lib'; import { Patch, QuickAccessTab, afterPatch, findInReactTree, getReactRoot, sleep } from 'decky-frontend-lib';
import { QuickAccessVisibleStateProvider } from './components/QuickAccessVisibleState'; import { QuickAccessVisibleStateProvider } from './components/QuickAccessVisibleState';
import Logger from './logger'; import Logger from './logger';
@@ -32,11 +32,11 @@ class TabsHook extends Logger {
} }
init() { init() {
const tree = (document.getElementById('root') as any)._reactRootContainer._internalRoot.current; const tree = getReactRoot(document.getElementById('root') as any);
let qAMRoot: any; let qAMRoot: any;
const findQAMRoot = (currentNode: any, iters: number): any => { const findQAMRoot = (currentNode: any, iters: number): any => {
if (iters >= 65) { if (iters >= 80) {
// currently 45 // currently 67
return null; return null;
} }
if ( if (
+13 -4
View File
@@ -1,4 +1,13 @@
import { Module, Patch, ToastData, afterPatch, findInReactTree, findModuleChild, sleep } from 'decky-frontend-lib'; import {
Module,
Patch,
ToastData,
afterPatch,
findInReactTree,
findModuleChild,
getReactRoot,
sleep,
} from 'decky-frontend-lib';
import { ReactNode } from 'react'; import { ReactNode } from 'react';
import Toast from './components/Toast'; import Toast from './components/Toast';
@@ -38,10 +47,10 @@ class Toaster extends Logger {
// </DeckyToasterStateContextProvider> // </DeckyToasterStateContextProvider>
// )); // ));
let instance: any; let instance: any;
const tree = (document.getElementById('root') as any)._reactRootContainer._internalRoot.current; const tree = getReactRoot(document.getElementById('root') as any);
const findToasterRoot = (currentNode: any, iters: number): any => { const findToasterRoot = (currentNode: any, iters: number): any => {
if (iters >= 65) { if (iters >= 80) {
// currently 65 // currently 66
return null; return null;
} }
if ( if (