From 662d24e7eb56e769cac4de98c03330c7d33330fc Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Mon, 5 May 2025 02:28:52 +0700 Subject: [PATCH] fix(plugins/settings): remove GC option, don't register hidden sections, only register when needed --- src/plugins/settings/SettingsConstants.ts | 5 -- .../CallGarbageCollectorSetting.tsx | 16 ------ .../definitions/RevengeFontsSetting.tsx | 3 +- .../definitions/RevengePluginsSetting.tsx | 3 +- .../definitions/RevengeThemesSetting.tsx | 3 +- src/plugins/settings/index.ts | 55 +++---------------- src/plugins/settings/register.ts | 40 ++++++++++++++ .../screens/RevengeDeveloperSettingScreen.tsx | 2 +- .../screens/RevengePluginsSettingScreen.tsx | 2 +- 9 files changed, 53 insertions(+), 76 deletions(-) delete mode 100644 src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx create mode 100644 src/plugins/settings/register.ts diff --git a/src/plugins/settings/SettingsConstants.ts b/src/plugins/settings/SettingsConstants.ts index a9f4d7e..8cba260 100644 --- a/src/plugins/settings/SettingsConstants.ts +++ b/src/plugins/settings/SettingsConstants.ts @@ -14,10 +14,7 @@ export const MobileSetting = { REACT_NATIVE_VERSION: 'REACT_NATIVE_VERSION', HERMES_VERSION: 'HERMES_VERSION', - CALL_GARBAGE_COLLECTOR: 'CALL_GARBAGE_COLLECTOR', EVALUATE_JAVASCRIPT: 'EVALUATE_JAVASCRIPT', - EVALUATE_JAVASCRIPT_INSPECT_DEPTH: 'EVALUATE_JAVASCRIPT_INSPECT_DEPTH', - EVALUATE_JAVASCRIPT_AWAIT_RESULT: 'EVALUATE_JAVASCRIPT_AWAIT_RESULT', REVENGE_NOT_IMPLEMENTED: 'REVENGE_NOT_IMPLEMENTED', } as const @@ -29,5 +26,3 @@ export const UserSettingsSections = { [MobileSetting.REVENGE_FONTS]: 'Revenge Fonts', [MobileSetting.REVENGE_DEVELOPER]: 'Revenge Developer', } as const - -export const AlwaysHidden = () => false diff --git a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx deleted file mode 100644 index 84e06fe..0000000 --- a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { React } from '@revenge-mod/react' - -import AssetIcon from '../components/icons/AssetIcon' - -import type { SettingsItem } from '@revenge-mod/discord/ui/settings' - -const CallGarbageCollectorSetting: SettingsItem = { - parent: null, - IconComponent: () => , - title: () => 'Call Garbage Collector', - useDescription: () => 'Call the garbage collector manually.', - onPress: gc, - type: 'pressable', -} - -export default CallGarbageCollectorSetting diff --git a/src/plugins/settings/definitions/RevengeFontsSetting.tsx b/src/plugins/settings/definitions/RevengeFontsSetting.tsx index df57ebd..ec4dbad 100644 --- a/src/plugins/settings/definitions/RevengeFontsSetting.tsx +++ b/src/plugins/settings/definitions/RevengeFontsSetting.tsx @@ -1,4 +1,4 @@ -import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' import AssetIcon from '../components/icons/AssetIcon' import type { SettingsItem } from '@revenge-mod/discord/ui/settings' @@ -8,7 +8,6 @@ const RevengeFontsSetting: SettingsItem = { type: 'route', IconComponent: () => , title: () => 'Fonts', - usePredicate: AlwaysHidden, screen: { route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS], getComponent: () => require('../screens/RevengePluginsSettingScreen').default, diff --git a/src/plugins/settings/definitions/RevengePluginsSetting.tsx b/src/plugins/settings/definitions/RevengePluginsSetting.tsx index 9fe6335..bb88c35 100644 --- a/src/plugins/settings/definitions/RevengePluginsSetting.tsx +++ b/src/plugins/settings/definitions/RevengePluginsSetting.tsx @@ -1,6 +1,6 @@ import { getEnabledPluginsCount } from '@revenge-mod/plugins/_' -import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' import AssetIcon from '../components/icons/AssetIcon' import type { SettingsItem } from '@revenge-mod/discord/ui/settings' @@ -11,7 +11,6 @@ const RevengePluginsSetting: SettingsItem = { IconComponent: () => , title: () => 'Plugins', useTrailing: () => `${getEnabledPluginsCount()} enabled`, - usePredicate: AlwaysHidden, screen: { route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS], getComponent: () => require('../screens/RevengePluginsSettingScreen').default, diff --git a/src/plugins/settings/definitions/RevengeThemesSetting.tsx b/src/plugins/settings/definitions/RevengeThemesSetting.tsx index 3740231..6c98778 100644 --- a/src/plugins/settings/definitions/RevengeThemesSetting.tsx +++ b/src/plugins/settings/definitions/RevengeThemesSetting.tsx @@ -1,4 +1,4 @@ -import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' import AssetIcon from '../components/icons/AssetIcon' import type { SettingsItem } from '@revenge-mod/discord/ui/settings' @@ -8,7 +8,6 @@ const RevengeThemesSetting: SettingsItem = { type: 'route', IconComponent: () => , title: () => 'Themes', - usePredicate: AlwaysHidden, screen: { route: UserSettingsSections[MobileSetting.REVENGE_THEMES], getComponent: () => require('../screens/RevengeThemesSettingScreen').default, diff --git a/src/plugins/settings/index.ts b/src/plugins/settings/index.ts index db7ea26..256d1c8 100644 --- a/src/plugins/settings/index.ts +++ b/src/plugins/settings/index.ts @@ -4,30 +4,13 @@ import { InternalPluginFlags, registerPlugin } from '@revenge-mod/plugins/_' import { waitForModules } from '@revenge-mod/modules/finders' import { byName, byProps } from '@revenge-mod/modules/finders/filters' -import { registerSettingsItem, registerSettingsSection, type SettingsItem } from '@revenge-mod/discord/ui/settings' import { _suiData } from '@revenge-mod/discord/_/ui/settings' import { after } from '@revenge-mod/patcher' -import { MobileSetting } from './SettingsConstants' - -import RevengeSetting from './definitions/RevengeSetting' -import RevengePluginsSetting from './definitions/RevengePluginsSetting' -import RevengeThemesSetting from './definitions/RevengeThemesSetting' -import RevengeFontsSetting from './definitions/RevengeFontsSetting' -import RevengeDeveloperSetting from './definitions/RevengeDeveloperSetting' -import ReactVersionSetting from './definitions/ReactVersionSetting' -import ReactNativeVersionSetting from './definitions/ReactNativeVersionSetting' -import RevengeVersionSetting from './definitions/RevengeVersionSetting' -import HermesVersionSetting from './definitions/HermesVersionSetting' -import CallGarbageCollectorSetting from './definitions/CallGarbageCollectorSetting' -import RevengeNotImplementedSetting from './definitions/RevengeNotImplementedSetting' -import EvaluateJavaScriptSetting from './definitions/EvaluateJavaScriptSetting' - +import type { SettingsItem } from '@revenge-mod/discord/ui/settings' import type { FC } from 'react' -export let pluginApi: PluginApi - registerPlugin( { id: 'revenge.settings', @@ -40,36 +23,11 @@ registerPlugin( start(api) { pluginApi = api - for (const [key, setting] of [ - [MobileSetting.REVENGE, RevengeSetting], - [MobileSetting.REVENGE_PLUGINS, RevengePluginsSetting], - [MobileSetting.REVENGE_THEMES, RevengeThemesSetting], - [MobileSetting.REVENGE_FONTS, RevengeFontsSetting], - [MobileSetting.REVENGE_DEVELOPER, RevengeDeveloperSetting], - [MobileSetting.REVENGE_VERSION, RevengeVersionSetting], - [MobileSetting.REACT_VERSION, ReactVersionSetting], - [MobileSetting.REACT_NATIVE_VERSION, ReactNativeVersionSetting], - [MobileSetting.HERMES_VERSION, HermesVersionSetting], - [MobileSetting.CALL_GARBAGE_COLLECTOR, CallGarbageCollectorSetting], - [MobileSetting.EVALUATE_JAVASCRIPT, EvaluateJavaScriptSetting], - [MobileSetting.REVENGE_NOT_IMPLEMENTED, RevengeNotImplementedSetting], - ] as Array<[string, SettingsItem]>) - registerSettingsItem(key, setting) - - registerSettingsSection('REVENGE', { - label: 'Revenge', - settings: [ - MobileSetting.REVENGE, - MobileSetting.REVENGE_PLUGINS, - MobileSetting.REVENGE_THEMES, - MobileSetting.REVENGE_FONTS, - MobileSetting.REVENGE_DEVELOPER, - ], - }) - const unsubForRendererConfig = waitForModules(byProps('SETTING_RENDERER_CONFIG'), (_, exports) => { unsubForRendererConfig() + require('./register') + const SettingRendererConfig = exports as { SETTING_RENDERER_CONFIG: Record } @@ -86,10 +44,10 @@ registerPlugin( }) }) - const unsub = waitForModules( + const unsubForSettingsOverviewScreen = waitForModules( byName('SettingsOverviewScreen'), (_, exports) => { - unsub() + unsubForSettingsOverviewScreen() after(exports as { default: FC }, 'default', tree => { const sections = (tree as Extract).props.sections as Array<{ @@ -127,3 +85,6 @@ registerPlugin( PluginFlags.Enabled, InternalPluginFlags.Internal | InternalPluginFlags.Essential, ) + +// Expose to EvaluateJavaScriptSetting +export let pluginApi: PluginApi diff --git a/src/plugins/settings/register.ts b/src/plugins/settings/register.ts new file mode 100644 index 0000000..28c5dd8 --- /dev/null +++ b/src/plugins/settings/register.ts @@ -0,0 +1,40 @@ +import { registerSettingsItems, registerSettingsSection } from '@revenge-mod/discord/ui/settings' + +import { MobileSetting } from './SettingsConstants' + +import RevengeSetting from './definitions/RevengeSetting' +// import RevengePluginsSetting from './definitions/RevengePluginsSetting' +// import RevengeThemesSetting from './definitions/RevengeThemesSetting' +// import RevengeFontsSetting from './definitions/RevengeFontsSetting' +import RevengeDeveloperSetting from './definitions/RevengeDeveloperSetting' +import ReactVersionSetting from './definitions/ReactVersionSetting' +import ReactNativeVersionSetting from './definitions/ReactNativeVersionSetting' +import RevengeVersionSetting from './definitions/RevengeVersionSetting' +import HermesVersionSetting from './definitions/HermesVersionSetting' +import RevengeNotImplementedSetting from './definitions/RevengeNotImplementedSetting' +import EvaluateJavaScriptSetting from './definitions/EvaluateJavaScriptSetting' + +registerSettingsItems({ + [MobileSetting.REVENGE]: RevengeSetting, + // [MobileSetting.REVENGE_PLUGINS]: RevengePluginsSetting, + // [MobileSetting.REVENGE_THEMES]: RevengeThemesSetting, + // [MobileSetting.REVENGE_FONTS]: RevengeFontsSetting, + [MobileSetting.REVENGE_DEVELOPER]: RevengeDeveloperSetting, + [MobileSetting.REVENGE_VERSION]: RevengeVersionSetting, + [MobileSetting.REACT_VERSION]: ReactVersionSetting, + [MobileSetting.REACT_NATIVE_VERSION]: ReactNativeVersionSetting, + [MobileSetting.HERMES_VERSION]: HermesVersionSetting, + [MobileSetting.EVALUATE_JAVASCRIPT]: EvaluateJavaScriptSetting, + [MobileSetting.REVENGE_NOT_IMPLEMENTED]: RevengeNotImplementedSetting, +}) + +registerSettingsSection('REVENGE', { + label: 'Revenge', + settings: [ + MobileSetting.REVENGE, + // MobileSetting.REVENGE_PLUGINS, + // MobileSetting.REVENGE_THEMES, + // MobileSetting.REVENGE_FONTS, + MobileSetting.REVENGE_DEVELOPER, + ], +}) diff --git a/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx b/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx index 044e7ef..5e9a737 100644 --- a/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx +++ b/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx @@ -12,7 +12,7 @@ export default function RevengeDeveloperSettingScreen() { }, { label: 'Tools', - settings: [MobileSetting.EVALUATE_JAVASCRIPT, MobileSetting.CALL_GARBAGE_COLLECTOR], + settings: [MobileSetting.EVALUATE_JAVASCRIPT], }, ]} /> diff --git a/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx b/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx index ad2e7f2..e326f98 100644 --- a/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx +++ b/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx @@ -2,7 +2,7 @@ import { SettingListRenderer } from '@revenge-mod/discord/ui/settings' import { MobileSetting } from '../SettingsConstants' -export default function RevengeSettingScreen() { +export default function RevengePluginsSettingScreen() { return (