mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-07-10 22:22:14 +00:00
84c3b039c3
* initial fixes: everything working except toasts and patch notes * tabshook changes, disable toaster for now * prettier * oops * implement custom toaster because I am tired of Valve's shit also fix QAM not injecting sometimes * remove extra logging * add findSP, fix patch notes, fix vscode screwup * fix patch notes * show error when plugin frontends fail to load * add get_tab_lambda * add css and has_element helpers to Tab * small modals fixup * Don't forceUpdate QuickAccess on stable * add routes prop used to get tabs component * add more dev utils to DFL global
97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
import {
|
|
ReactRouter,
|
|
Router,
|
|
fakeRenderComponent,
|
|
findInReactTree,
|
|
findInTree,
|
|
findModule,
|
|
findModuleChild,
|
|
gamepadDialogClasses,
|
|
gamepadSliderClasses,
|
|
playSectionClasses,
|
|
quickAccessControlsClasses,
|
|
quickAccessMenuClasses,
|
|
scrollClasses,
|
|
scrollPanelClasses,
|
|
sleep,
|
|
staticClasses,
|
|
updaterFieldClasses,
|
|
} from 'decky-frontend-lib';
|
|
import { FaReact } from 'react-icons/fa';
|
|
|
|
import Logger from './logger';
|
|
import { getSetting } from './utils/settings';
|
|
|
|
const logger = new Logger('DeveloperMode');
|
|
|
|
let removeSettingsObserver: () => void = () => {};
|
|
|
|
export function setShowValveInternal(show: boolean) {
|
|
const 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 (show) {
|
|
removeSettingsObserver = settingsMod[
|
|
Object.getOwnPropertySymbols(settingsMod).find((x) => x.toString() == 'Symbol(mobx administration)') as any
|
|
].observe((e: any) => {
|
|
e.newValue.bIsValveEmail = true;
|
|
});
|
|
settingsMod.m_Settings.bIsValveEmail = true;
|
|
logger.log('Enabled Valve Internal menu');
|
|
} else {
|
|
removeSettingsObserver();
|
|
settingsMod.m_Settings.bIsValveEmail = false;
|
|
logger.log('Disabled Valve Internal menu');
|
|
}
|
|
}
|
|
|
|
export async function setShouldConnectToReactDevTools(enable: boolean) {
|
|
window.DeckyPluginLoader.toaster.toast({
|
|
title: (enable ? 'Enabling' : 'Disabling') + ' React DevTools',
|
|
body: 'Reloading in 5 seconds',
|
|
icon: <FaReact />,
|
|
});
|
|
await sleep(5000);
|
|
return enable
|
|
? window.DeckyPluginLoader.callServerMethod('enable_rdt')
|
|
: window.DeckyPluginLoader.callServerMethod('disable_rdt');
|
|
}
|
|
|
|
export async function startup() {
|
|
const isValveInternalEnabled = await getSetting('developer.valve_internal', false);
|
|
const isRDTEnabled = await getSetting('developer.rdt.enabled', false);
|
|
|
|
if (isValveInternalEnabled) setShowValveInternal(isValveInternalEnabled);
|
|
|
|
if ((isRDTEnabled && !window.deckyHasConnectedRDT) || (!isRDTEnabled && window.deckyHasConnectedRDT))
|
|
setShouldConnectToReactDevTools(isRDTEnabled);
|
|
|
|
logger.log('Exposing decky-frontend-lib APIs as DFL');
|
|
window.DFL = {
|
|
findModuleChild,
|
|
findModule,
|
|
ReactUtils: {
|
|
fakeRenderComponent,
|
|
findInReactTree,
|
|
findInTree,
|
|
},
|
|
Router,
|
|
ReactRouter,
|
|
classes: {
|
|
scrollClasses,
|
|
staticClasses,
|
|
playSectionClasses,
|
|
scrollPanelClasses,
|
|
updaterFieldClasses,
|
|
gamepadDialogClasses,
|
|
gamepadSliderClasses,
|
|
quickAccessMenuClasses,
|
|
quickAccessControlsClasses,
|
|
},
|
|
};
|
|
}
|