From 0a9ed38d9e5e3f67efc0ecdc0d549d67ccb86fb8 Mon Sep 17 00:00:00 2001 From: Christopher Lott Date: Thu, 7 May 2026 22:44:59 +0200 Subject: [PATCH] remove dead code across frontend and backend - Remove TS ConfigurationManager class in configSchema.ts (called non-existent backend methods; only getDefaults() was used, replaced with direct import) - Remove Python update_config method and create_config_from_args (unreachable since plugin.py routes through update_config_from_dict; also carried a duplicate @staticmethod that would crash at runtime) - Delete configuration_helpers_generated.py entirely (all three functions were unused) - Remove their generators from generate_python_boilerplate.py - Remove dead generated code from config_schema_generated.py (create_config_dict, get_function_parameters, TOML_FIELDS, SCRIPT_FIELDS) - Remove duplicate import in config_schema.py - Remove unused config prop from UsageInstructions component --- py_modules/lsfg_vk/config_schema.py | 11 -- py_modules/lsfg_vk/config_schema_generated.py | 45 +------ py_modules/lsfg_vk/configuration.py | 24 ---- .../configuration_helpers_generated.py | 22 ---- scripts/generate_python_boilerplate.py | 111 +--------------- src/components/Content.tsx | 2 +- src/components/UsageInstructions.tsx | 7 +- src/config/configSchema.ts | 118 ------------------ src/hooks/useLsfgHooks.ts | 8 +- 9 files changed, 10 insertions(+), 338 deletions(-) delete mode 100644 py_modules/lsfg_vk/configuration_helpers_generated.py diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index 4ab2dcb..3a82bbd 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -71,10 +71,6 @@ def get_toml_value(self, value: Union[bool, int, float, str]) -> Union[bool, int # Complete configuration schema (TOML + script-only fields) COMPLETE_CONFIG_SCHEMA = {**CONFIG_SCHEMA, **SCRIPT_ONLY_FIELDS} - -# Import auto-generated configuration components -from .config_schema_generated import ConfigurationData, get_script_parsing_logic, get_script_generation_logic - # Constants for profile management DEFAULT_PROFILE_NAME = "decky-lsfg-vk" GLOBAL_SECTION_FIELDS = {"dll", "no_fp16"} @@ -446,13 +442,6 @@ def merge_config_with_script(toml_config: ConfigurationData, script_values: Dict return cast(ConfigurationData, merged_config) - @staticmethod - @staticmethod - def create_config_from_args(**kwargs) -> ConfigurationData: - """Create configuration from keyword arguments - USES GENERATED CODE""" - from .config_schema_generated import create_config_dict - return create_config_dict(**kwargs) - @staticmethod def normalize_profile_name(profile_name: str) -> str: """Normalize profile name by converting spaces to dashes and trimming diff --git a/py_modules/lsfg_vk/config_schema_generated.py b/py_modules/lsfg_vk/config_schema_generated.py index 53e9693..b320a97 100644 --- a/py_modules/lsfg_vk/config_schema_generated.py +++ b/py_modules/lsfg_vk/config_schema_generated.py @@ -3,7 +3,7 @@ DO NOT EDIT THIS FILE MANUALLY - it will be overwritten on build """ -from typing import TypedDict, Dict, Any, Union, cast +from typing import TypedDict, Dict, Any, Union from enum import Enum import sys from pathlib import Path @@ -122,47 +122,4 @@ def generate_script_lines(config): return generate_script_lines -def get_function_parameters() -> str: - """Return function signature parameters""" - return """dll: str = "/games/Lossless Scaling/Lossless.dll", - no_fp16: bool = False, - multiplier: int = 1, - flow_scale: float = 0.8, - performance_mode: bool = False, - hdr_mode: bool = False, - experimental_present_mode: str = "fifo", - dxvk_frame_rate: int = 0, - enable_wow64: bool = False, - disable_steamdeck_mode: bool = False, - mangohud_workaround: bool = False, - disable_vkbasalt: bool = False, - force_enable_vkbasalt: bool = False, - enable_wsi: bool = False, - enable_zink: bool = False""" - - -def create_config_dict(**kwargs) -> ConfigurationData: - """Create configuration dictionary from keyword arguments""" - return cast(ConfigurationData, { - "dll": kwargs.get("dll"), - "no_fp16": kwargs.get("no_fp16"), - "multiplier": kwargs.get("multiplier"), - "flow_scale": kwargs.get("flow_scale"), - "performance_mode": kwargs.get("performance_mode"), - "hdr_mode": kwargs.get("hdr_mode"), - "experimental_present_mode": kwargs.get("experimental_present_mode"), - "dxvk_frame_rate": kwargs.get("dxvk_frame_rate"), - "enable_wow64": kwargs.get("enable_wow64"), - "disable_steamdeck_mode": kwargs.get("disable_steamdeck_mode"), - "mangohud_workaround": kwargs.get("mangohud_workaround"), - "disable_vkbasalt": kwargs.get("disable_vkbasalt"), - "force_enable_vkbasalt": kwargs.get("force_enable_vkbasalt"), - "enable_wsi": kwargs.get("enable_wsi"), - "enable_zink": kwargs.get("enable_zink"), - }) - - -# Field lists for dynamic operations -TOML_FIELDS = ['dll', 'no_fp16', 'multiplier', 'flow_scale', 'performance_mode', 'hdr_mode', 'experimental_present_mode'] -SCRIPT_FIELDS = ['dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi', 'enable_zink'] ALL_FIELDS = ['dll', 'no_fp16', 'multiplier', 'flow_scale', 'performance_mode', 'hdr_mode', 'experimental_present_mode', 'dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi', 'enable_zink'] diff --git a/py_modules/lsfg_vk/configuration.py b/py_modules/lsfg_vk/configuration.py index 74a3694..e479f43 100644 --- a/py_modules/lsfg_vk/configuration.py +++ b/py_modules/lsfg_vk/configuration.py @@ -8,7 +8,6 @@ from .base_service import BaseService from .config_schema import ConfigurationManager, CONFIG_SCHEMA, ProfileData, DEFAULT_PROFILE_NAME from .config_schema_generated import ConfigurationData, get_script_generation_logic -from .configuration_helpers_generated import log_configuration_update from .types import ConfigurationResponse, ProfilesResponse, ProfileResponse @@ -81,29 +80,6 @@ def update_config_from_dict(self, config: ConfigurationData) -> ConfigurationRes self.log.error(error_msg) return self._error_response(ConfigurationResponse, str(e), config=None) - def update_config(self, **kwargs) -> ConfigurationResponse: - """Update TOML configuration using generated schema - SIMPLIFIED WITH GENERATED CODE - - Args: - **kwargs: Configuration field values (see shared_config.py for available fields) - - Returns: - ConfigurationResponse with success status - """ - try: - config = ConfigurationManager.create_config_from_args(**kwargs) - - return self.update_config_from_dict(config) - - except (OSError, IOError) as e: - error_msg = f"Error updating lsfg config: {str(e)}" - self.log.error(error_msg) - return self._error_response(ConfigurationResponse, str(e), config=None) - except ValueError as e: - error_msg = f"Invalid configuration arguments: {str(e)}" - self.log.error(error_msg) - return self._error_response(ConfigurationResponse, str(e), config=None) - def update_lsfg_script(self, config: ConfigurationData) -> ConfigurationResponse: """Update the ~/lsfg launch script with current configuration diff --git a/py_modules/lsfg_vk/configuration_helpers_generated.py b/py_modules/lsfg_vk/configuration_helpers_generated.py deleted file mode 100644 index 1383174..0000000 --- a/py_modules/lsfg_vk/configuration_helpers_generated.py +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated configuration helper functions from shared_config.py -DO NOT EDIT THIS FILE MANUALLY - it will be overwritten on build -""" - -from typing import Dict, Any -from .config_schema_generated import ConfigurationData, ALL_FIELDS - - -def log_configuration_update(logger, config: ConfigurationData) -> None: - """Log configuration update with all field values""" - logger.info(f"Updated lsfg TOML configuration: dll={config['dll']}, no_fp16={config['no_fp16']}, multiplier={config['multiplier']}, flow_scale={config['flow_scale']}, performance_mode={config['performance_mode']}, hdr_mode={config['hdr_mode']}, experimental_present_mode={config['experimental_present_mode']}, dxvk_frame_rate={config['dxvk_frame_rate']}, enable_wow64={config['enable_wow64']}, disable_steamdeck_mode={config['disable_steamdeck_mode']}, mangohud_workaround={config['mangohud_workaround']}, disable_vkbasalt={config['disable_vkbasalt']}, force_enable_vkbasalt={config['force_enable_vkbasalt']}, enable_wsi={config['enable_wsi']}, enable_zink={config['enable_zink']}") - - -def get_config_field_names() -> list[str]: - """Get all configuration field names""" - return ALL_FIELDS.copy() - - -def extract_config_values(config: ConfigurationData) -> Dict[str, Any]: - """Extract configuration values as a dictionary""" - return {field: config[field] for field in ALL_FIELDS} diff --git a/scripts/generate_python_boilerplate.py b/scripts/generate_python_boilerplate.py index dc51dae..a03aa2b 100644 --- a/scripts/generate_python_boilerplate.py +++ b/scripts/generate_python_boilerplate.py @@ -56,38 +56,6 @@ def generate_typed_dict() -> str: return "\n".join(lines) -def generate_function_signature() -> str: - """Generate function signature for update_config and create_config_from_args""" - params = [] - - for field_name, field_def in CONFIG_SCHEMA_DEF.items(): - python_type = get_python_type(ConfigFieldType(field_def["fieldType"])) - default = field_def["default"] - - # Format default value - if isinstance(default, str): - default_str = f'"{default}"' - elif isinstance(default, bool): - default_str = str(default) - else: - default_str = str(default) - - params.append(f"{field_name}: {python_type} = {default_str}") - - return ",\n ".join(params) - - -def generate_config_dict_creation() -> str: - """Generate dictionary creation for create_config_from_args""" - lines = [" return cast(ConfigurationData, {"] - - for field_name in CONFIG_SCHEMA_DEF.keys(): - lines.append(f' "{field_name}": kwargs.get("{field_name}"),') - - lines.append(" })") - return "\n".join(lines) - - def generate_script_parsing() -> str: """Generate script content parsing logic""" lines = [] @@ -195,17 +163,6 @@ def generate_script_generation() -> str: return "\n".join(lines) -def generate_log_statement() -> str: - """Generate logging statement with all field values""" - field_parts = [] - - for field_name in CONFIG_SCHEMA_DEF.keys(): - field_parts.append(f"{field_name}={{{field_name}}}") - - log_format = ", ".join(field_parts) - return f' self.log.info(f"Updated lsfg TOML configuration: {log_format}")' - - def generate_complete_schema_file() -> str: """Generate complete config_schema_generated.py file""" @@ -221,7 +178,7 @@ def generate_complete_schema_file() -> str: 'DO NOT EDIT THIS FILE MANUALLY - it will be overwritten on build', '"""', '', - 'from typing import TypedDict, Dict, Any, Union, cast', + 'from typing import TypedDict, Dict, Any, Union', 'from enum import Enum', 'import sys', 'from pathlib import Path', @@ -267,19 +224,6 @@ def generate_complete_schema_file() -> str: ' return generate_script_lines', '', '', - 'def get_function_parameters() -> str:', - ' """Return function signature parameters"""', - f' return """{generate_function_signature()}"""', - '', - '', - 'def create_config_dict(**kwargs) -> ConfigurationData:', - ' """Create configuration dictionary from keyword arguments"""', - f'{generate_config_dict_creation().replace(" return cast(ConfigurationData, {", " return cast(ConfigurationData, {").replace(" })", " })")}', - '', - '', - '# Field lists for dynamic operations', - f'TOML_FIELDS = {[name for name, field in CONFIG_SCHEMA_DEF.items() if field.get("location") == "toml"]}', - f'SCRIPT_FIELDS = {[name for name, field in CONFIG_SCHEMA_DEF.items() if field.get("location") == "script"]}', f'ALL_FIELDS = {list(CONFIG_SCHEMA_DEF.keys())}', '' ] @@ -287,66 +231,17 @@ def generate_complete_schema_file() -> str: return '\n'.join(lines) -def generate_complete_configuration_helpers() -> str: - """Generate configuration_helpers_generated.py file""" - - # Generate the log format string using config parameter - log_parts = [] - for field_name in CONFIG_SCHEMA_DEF.keys(): - log_parts.append(f"{field_name}={{config['{field_name}']}}") - log_format = ", ".join(log_parts) - - lines = [ - '"""', - 'Auto-generated configuration helper functions from shared_config.py', - 'DO NOT EDIT THIS FILE MANUALLY - it will be overwritten on build', - '"""', - '', - 'from typing import Dict, Any', - 'from .config_schema_generated import ConfigurationData, ALL_FIELDS', - '', - '', - 'def log_configuration_update(logger, config: ConfigurationData) -> None:', - ' """Log configuration update with all field values"""', - f' logger.info(f"Updated lsfg TOML configuration: {log_format}")', - '', - '', - 'def get_config_field_names() -> list[str]:', - ' """Get all configuration field names"""', - ' return ALL_FIELDS.copy()', - '', - '', - 'def extract_config_values(config: ConfigurationData) -> Dict[str, Any]:', - ' """Extract configuration values as a dictionary"""', - ' return {field: config[field] for field in ALL_FIELDS}', - '' - ] - - return '\n'.join(lines) - - def main(): """Generate complete Python configuration files""" try: # Create generated files in py_modules/lsfg_vk/ target_dir = project_root / "py_modules" / "lsfg_vk" - + # Generate the complete schema file schema_content = generate_complete_schema_file() schema_file = target_dir / "config_schema_generated.py" schema_file.write_text(schema_content) - print(f"āœ… Generated {schema_file.relative_to(project_root)}") - - # Generate configuration helpers - helpers_content = generate_complete_configuration_helpers() - helpers_file = target_dir / "configuration_helpers_generated.py" - helpers_file.write_text(helpers_content) - print(f"āœ… Generated {helpers_file.relative_to(project_root)}") - - print(f"\nšŸŽÆ Ready-to-use files generated!") - print(" Import these in your main files:") - print(" - from .config_schema_generated import ConfigurationData, get_script_parsing_logic, etc.") - print(" - from .configuration_helpers_generated import log_configuration_update, etc.") + print(f"Generated {schema_file.relative_to(project_root)}") except Exception as e: print(f"āŒ Error generating Python files: {e}") diff --git a/src/components/Content.tsx b/src/components/Content.tsx index 3dc2696..3f94745 100644 --- a/src/components/Content.tsx +++ b/src/components/Content.tsx @@ -143,7 +143,7 @@ export function Content() { )} - + 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 { - 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 { - 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 { - 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 { - 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(() => ConfigurationManager.getDefaults()); + const [config, setConfig] = useState(() => 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()); } }, []);