diff options
| author | xXJSONDeruloXx <danielhimebauch@gmail.com> | 2026-08-03 14:32:35 -0400 |
|---|---|---|
| committer | xXJSONDeruloXx <danielhimebauch@gmail.com> | 2026-08-03 14:32:35 -0400 |
| commit | e0681b06efdee3dcacb6ddfca515d947b802faff (patch) | |
| tree | 52c1cad716b92c784d2946d063cc36b34255ea5e /src | |
| parent | 8df4d48cd89d636940982e60bb51b688226e630c (diff) | |
| parent | b936baab13b026d4355844d94616a622753a7370 (diff) | |
| download | decky-lsfg-vk-e0681b06efdee3dcacb6ddfca515d947b802faff.tar.gz decky-lsfg-vk-e0681b06efdee3dcacb6ddfca515d947b802faff.zip | |
Merge main and normalize translation locale handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/ConfigurationSection.tsx | 11 | ||||
| -rw-r--r-- | src/components/Content.tsx | 2 | ||||
| -rw-r--r-- | src/components/UsageInstructions.tsx | 7 | ||||
| -rw-r--r-- | src/config/configSchema.ts | 118 | ||||
| -rw-r--r-- | src/hooks/useLsfgHooks.ts | 8 | ||||
| -rw-r--r-- | src/i18n/i18n.ts | 12 | ||||
| -rw-r--r-- | src/i18n/languages.json | 2 |
7 files changed, 27 insertions, 133 deletions
diff --git a/src/components/ConfigurationSection.tsx b/src/components/ConfigurationSection.tsx index c988f9f..a10aab2 100644 --- a/src/components/ConfigurationSection.tsx +++ b/src/components/ConfigurationSection.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from "react"; import { RiArrowDownSFill, RiArrowUpSFill } from "react-icons/ri"; import { ConfigurationData } from "../config/configSchema"; import { - FLOW_SCALE, PERFORMANCE_MODE, HDR_MODE, + FLOW_SCALE, NO_FP16, PERFORMANCE_MODE, HDR_MODE, EXPERIMENTAL_PRESENT_MODE, DXVK_FRAME_RATE, DISABLE_STEAMDECK_MODE, MANGOHUD_WORKAROUND, DISABLE_VKBASALT, FORCE_ENABLE_VKBASALT, ENABLE_WSI, ENABLE_ZINK } from "../config/generatedConfigSchema"; @@ -127,6 +127,15 @@ export function ConfigurationSection({ </PanelSectionRow> <PanelSectionRow> + <ToggleField + label="FP16 Acceleration" + description="Use FP16 shaders when supported" + checked={!config.no_fp16} + onChange={(value) => onConfigChange(NO_FP16, !value)} + /> + </PanelSectionRow> + + <PanelSectionRow> <SliderField label={`${t('CONFIG_BASE_FPS_CAP', 'Base FPS Cap')}${config.dxvk_frame_rate > 0 ? ` (${config.dxvk_frame_rate} FPS)` : ` (${t('CONFIG_BASE_FPS_CAP_OFF', 'Off')})`}`} description={t('CONFIG_BASE_FPS_CAP_DESC', 'Base framerate cap for DirectX games, before frame multiplier. (Requires game restart to apply)')} diff --git a/src/components/Content.tsx b/src/components/Content.tsx index c785a50..5988e79 100644 --- a/src/components/Content.tsx +++ b/src/components/Content.tsx @@ -144,7 +144,7 @@ export function Content() { </> )} - <UsageInstructions config={config} /> + <UsageInstructions /> <PanelSectionRow> <ButtonItem diff --git a/src/components/UsageInstructions.tsx b/src/components/UsageInstructions.tsx index 6d32506..36e31cf 100644 --- a/src/components/UsageInstructions.tsx +++ b/src/components/UsageInstructions.tsx @@ -1,12 +1,7 @@ import { PanelSectionRow } from "@decky/ui"; -import { ConfigurationData } from "../config/configSchema"; import t from '../i18n/i18n'; -interface UsageInstructionsProps { - config: ConfigurationData; -} - -export function UsageInstructions({ config: _config }: UsageInstructionsProps) { +export function UsageInstructions() { return ( <> <PanelSectionRow> diff --git a/src/config/configSchema.ts b/src/config/configSchema.ts index 6c6cf19..8b4fc1e 100644 --- a/src/config/configSchema.ts +++ b/src/config/configSchema.ts @@ -1,15 +1,3 @@ -/** - * Configuration schema and management for LSFG VK plugin - * - * This file re-exports auto-generated configuration constants from generatedConfigSchema.ts - * and provides the ConfigurationManager class for handling configuration operations. - */ - -import { callable } from "@decky/api"; -import type { ConfigurationData } from './generatedConfigSchema'; -import { getDefaults } from './generatedConfigSchema'; -import { updateLsfgConfig } from "../api/lsfgApi"; - export { ConfigFieldType, ConfigField, @@ -23,109 +11,3 @@ export { DISABLE_STEAMDECK_MODE, MANGOHUD_WORKAROUND, DISABLE_VKBASALT, FORCE_ENABLE_VKBASALT, ENABLE_WSI, ENABLE_ZINK } from './generatedConfigSchema'; - -/** - * Configuration management class - * Handles CRUD operations for plugin configuration - */ -export class ConfigurationManager { - private static instance: ConfigurationManager; - private _config: ConfigurationData | null = null; - - private getConfiguration = callable<[], { success: boolean; data?: ConfigurationData; error?: string }>("get_configuration"); - private resetConfiguration = callable<[], { success: boolean; data?: ConfigurationData; error?: string }>("reset_configuration"); - - private constructor() {} - - static getInstance(): ConfigurationManager { - if (!ConfigurationManager.instance) { - ConfigurationManager.instance = new ConfigurationManager(); - } - return ConfigurationManager.instance; - } - - /** - * Get default configuration values - */ - static getDefaults(): ConfigurationData { - return getDefaults(); - } - - /** - * Load configuration from backend - */ - async loadConfig(): Promise<ConfigurationData> { - try { - const result = await this.getConfiguration(); - if (result.success && result.data) { - this._config = result.data; - return this._config; - } else { - throw new Error(result.error || 'Failed to load configuration'); - } - } catch (error) { - console.error('Error loading configuration:', error); - throw error; - } - } - - /** - * Save configuration to backend - */ - async saveConfig(config: ConfigurationData): Promise<void> { - try { - const result = await updateLsfgConfig(config); - if (result.success) { - this._config = config; - } else { - throw new Error(result.error || 'Failed to save configuration'); - } - } catch (error) { - console.error('Error saving configuration:', error); - throw error; - } - } - - /** - * Update a single configuration field - */ - async updateField(fieldName: keyof ConfigurationData, value: any): Promise<void> { - if (!this._config) { - await this.loadConfig(); - } - - const updatedConfig = { - ...this._config!, - [fieldName]: value - }; - - await this.saveConfig(updatedConfig); - } - - /** - * Get current configuration (cached) - */ - getConfig(): ConfigurationData | null { - return this._config; - } - - /** - * Reset configuration to defaults - */ - async resetToDefaults(): Promise<ConfigurationData> { - try { - const result = await this.resetConfiguration(); - if (result.success && result.data) { - this._config = result.data; - return this._config; - } else { - throw new Error(result.error || 'Failed to reset configuration'); - } - } catch (error) { - console.error('Error resetting configuration:', error); - throw error; - } - } -} - -export const configManager = ConfigurationManager.getInstance(); diff --git a/src/hooks/useLsfgHooks.ts b/src/hooks/useLsfgHooks.ts index adc18ba..d9bbe3e 100644 --- a/src/hooks/useLsfgHooks.ts +++ b/src/hooks/useLsfgHooks.ts @@ -6,7 +6,7 @@ import { updateLsfgConfigFromObject, type ConfigUpdateResult } from "../api/lsfgApi"; -import { ConfigurationData, ConfigurationManager } from "../config/configSchema"; +import { ConfigurationData, getDefaults } from "../config/configSchema"; import { showErrorToast, ToastMessages } from "../utils/toastUtils"; export function useInstallationStatus() { @@ -71,7 +71,7 @@ export function useDllDetection() { } export function useLsfgConfig() { - const [config, setConfig] = useState<ConfigurationData>(() => ConfigurationManager.getDefaults()); + const [config, setConfig] = useState<ConfigurationData>(() => getDefaults()); const loadLsfgConfig = useCallback(async () => { try { @@ -80,11 +80,11 @@ export function useLsfgConfig() { setConfig(result.config); } else { console.log("lsfg config not available, using defaults:", result.error); - setConfig(ConfigurationManager.getDefaults()); + setConfig(getDefaults()); } } catch (error) { console.error("Error loading lsfg config:", error); - setConfig(ConfigurationManager.getDefaults()); + setConfig(getDefaults()); } }, []); diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 83ed3da..dc8de8b 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -2,6 +2,14 @@ // to generate for localhost/dev, run `build_i18n_json.sh` script import * as languages from "./languages.json"; +const steamLanguageMap: Record<string, string> = + languages.steam_language_map as Record<string, string>; + +const normalizeLanguage = (language: string): string => { + const normalized = language.trim().toLowerCase(); + return steamLanguageMap[normalized] ?? normalized; +}; + function getLangs() { const langs = languages.language_metadata; @@ -32,13 +40,13 @@ let cachedLang: string | undefined; export const getCurrentLanguage = (): string => { if (cachedLang) return cachedLang; - const lang = window.LocalizationManager.m_rgLocalesToUse[0]; + const lang = normalizeLanguage(window.LocalizationManager.m_rgLocalesToUse[0]); cachedLang = lang; return lang; }; export const getLanguageName = (lang?: string): string => { - const targetLang = lang || getCurrentLanguage(); + const targetLang = normalizeLanguage(lang || getCurrentLanguage()); return LANGS[targetLang]?.name || targetLang; }; diff --git a/src/i18n/languages.json b/src/i18n/languages.json index 004d71c..c1a49b8 100644 --- a/src/i18n/languages.json +++ b/src/i18n/languages.json @@ -348,4 +348,4 @@ "CLIPBOARD_COPY_LAUNCH": "Copy Launch Option", "CLIPBOARD_LSFG_FGMOD": "LSFG + DeckyFG" } -}
\ No newline at end of file +} |
