fix(plugins/settings): remove GC option, don't register hidden sections, only register when needed

This commit is contained in:
PalmDevs 2025-05-05 02:28:52 +07:00
parent f3d3c6b646
commit 662d24e7eb
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
9 changed files with 53 additions and 76 deletions

View file

@ -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

View file

@ -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: () => <AssetIcon name="FireIcon" />,
title: () => 'Call Garbage Collector',
useDescription: () => 'Call the garbage collector manually.',
onPress: gc,
type: 'pressable',
}
export default CallGarbageCollectorSetting

View file

@ -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: () => <AssetIcon name="TextIcon" />,
title: () => 'Fonts',
usePredicate: AlwaysHidden,
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS],
getComponent: () => require('../screens/RevengePluginsSettingScreen').default,

View file

@ -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: () => <AssetIcon name="PuzzlePieceIcon" />,
title: () => 'Plugins',
useTrailing: () => `${getEnabledPluginsCount()} enabled`,
usePredicate: AlwaysHidden,
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS],
getComponent: () => require('../screens/RevengePluginsSettingScreen').default,

View file

@ -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: () => <AssetIcon name="PaintPaletteIcon" />,
title: () => 'Themes',
usePredicate: AlwaysHidden,
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_THEMES],
getComponent: () => require('../screens/RevengeThemesSettingScreen').default,

View file

@ -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<string, SettingsItem>
}
@ -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<typeof tree, { props: unknown }>).props.sections as Array<{
@ -127,3 +85,6 @@ registerPlugin(
PluginFlags.Enabled,
InternalPluginFlags.Internal | InternalPluginFlags.Essential,
)
// Expose to EvaluateJavaScriptSetting
export let pluginApi: PluginApi

View file

@ -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,
],
})

View file

@ -12,7 +12,7 @@ export default function RevengeDeveloperSettingScreen() {
},
{
label: 'Tools',
settings: [MobileSetting.EVALUATE_JAVASCRIPT, MobileSetting.CALL_GARBAGE_COLLECTOR],
settings: [MobileSetting.EVALUATE_JAVASCRIPT],
},
]}
/>

View file

@ -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 (
<SettingListRenderer.SettingsList
sections={[