mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-06-17 00:37:49 +00:00
fix: Adjust tabs and toaster hooks to work on react 18, also half-fix Valve Internal
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
Generated
+4
-4
@@ -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
@@ -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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
Reference in New Issue
Block a user