summaryrefslogtreecommitdiff
path: root/src/services/configuration_service.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/configuration_service.py')
-rw-r--r--src/services/configuration_service.py164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/services/configuration_service.py b/src/services/configuration_service.py
new file mode 100644
index 0000000..a4975c5
--- /dev/null
+++ b/src/services/configuration_service.py
@@ -0,0 +1,164 @@
+import os
+from typing import Dict, Any
+import decky
+
+
+class ConfigurationService:
+ """Service for managing lsfg script configuration"""
+
+ def __init__(self):
+ self.user_home = os.path.expanduser("~")
+ self.lsfg_script_path = os.path.join(self.user_home, "lsfg")
+
+ async def get_config(self) -> Dict[str, Any]:
+ """Read current lsfg script configuration"""
+ try:
+ if not os.path.exists(self.lsfg_script_path):
+ return {
+ "success": False,
+ "error": "lsfg script not found"
+ }
+
+ with open(self.lsfg_script_path, 'r') as f:
+ content = f.read()
+
+ # Parse the script content to extract current values
+ config = {
+ "enable_lsfg": False,
+ "multiplier": 2,
+ "flow_scale": 1.0,
+ "hdr": False,
+ "perf_mode": False,
+ "immediate_mode": False
+ }
+
+ lines = content.split('\n')
+ for line in lines:
+ line = line.strip()
+
+ # Handle ENABLE_LSFG - check if it's commented out or not
+ if line.startswith('export ENABLE_LSFG='):
+ try:
+ value = line.split('=')[1].strip()
+ config["enable_lsfg"] = value == '1'
+ except:
+ pass
+ elif line.startswith('# export ENABLE_LSFG='):
+ config["enable_lsfg"] = False
+
+ # Handle LSFG_MULTIPLIER
+ elif line.startswith('export LSFG_MULTIPLIER='):
+ try:
+ value = line.split('=')[1].strip()
+ config["multiplier"] = int(value)
+ except:
+ pass
+
+ # Handle LSFG_FLOW_SCALE
+ elif line.startswith('export LSFG_FLOW_SCALE='):
+ try:
+ value = line.split('=')[1].strip()
+ config["flow_scale"] = float(value)
+ except:
+ pass
+
+ # Handle LSFG_HDR - check if it's commented out or not
+ elif line.startswith('export LSFG_HDR='):
+ try:
+ value = line.split('=')[1].strip()
+ config["hdr"] = value == '1'
+ except:
+ pass
+ elif line.startswith('# export LSFG_HDR='):
+ config["hdr"] = False
+
+ # Handle LSFG_PERF_MODE - check if it's commented out or not
+ elif line.startswith('export LSFG_PERF_MODE='):
+ try:
+ value = line.split('=')[1].strip()
+ config["perf_mode"] = value == '1'
+ except:
+ pass
+ elif line.startswith('# export LSFG_PERF_MODE='):
+ config["perf_mode"] = False
+
+ # Handle MESA_VK_WSI_PRESENT_MODE - check if it's commented out or not
+ elif line.startswith('export MESA_VK_WSI_PRESENT_MODE='):
+ try:
+ value = line.split('=')[1].strip()
+ # Remove any comments after the value
+ value = value.split('#')[0].strip()
+ config["immediate_mode"] = value == 'immediate'
+ except:
+ pass
+ elif line.startswith('# export MESA_VK_WSI_PRESENT_MODE='):
+ config["immediate_mode"] = False
+
+ decky.logger.info(f"Parsed lsfg config: {config}")
+
+ return {
+ "success": True,
+ "config": config
+ }
+
+ except Exception as e:
+ decky.logger.error(f"Error reading lsfg config: {str(e)}")
+ return {
+ "success": False,
+ "error": str(e)
+ }
+
+ async def update_config(self, enable_lsfg: bool, multiplier: int, flow_scale: float,
+ hdr: bool, perf_mode: bool, immediate_mode: bool) -> Dict[str, Any]:
+ """Update lsfg script configuration"""
+ try:
+ # Create script content based on parameters
+ script_content = "#!/bin/bash\n\n"
+
+ if enable_lsfg:
+ script_content += "export ENABLE_LSFG=1\n"
+ else:
+ script_content += "# export ENABLE_LSFG=1\n"
+
+ script_content += f"export LSFG_MULTIPLIER={multiplier}\n"
+ script_content += f"export LSFG_FLOW_SCALE={flow_scale}\n"
+
+ if hdr:
+ script_content += "export LSFG_HDR=1\n"
+ else:
+ script_content += "# export LSFG_HDR=1\n"
+
+ if perf_mode:
+ script_content += "export LSFG_PERF_MODE=1\n"
+ else:
+ script_content += "# export LSFG_PERF_MODE=1\n"
+
+ if immediate_mode:
+ script_content += "export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync\n"
+ else:
+ script_content += "# export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync\n"
+
+ # Add the exec line to allow the script to execute passed commands
+ script_content += "\n# Execute the passed command with the environment variables set\n"
+ script_content += "exec \"$@\"\n"
+
+ # Write the updated script
+ with open(self.lsfg_script_path, 'w') as f:
+ f.write(script_content)
+
+ # Make sure it's executable
+ os.chmod(self.lsfg_script_path, 0o755)
+
+ decky.logger.info(f"Updated lsfg script configuration: enable={enable_lsfg}, multiplier={multiplier}, flow_scale={flow_scale}, hdr={hdr}, perf_mode={perf_mode}, immediate_mode={immediate_mode}")
+
+ return {
+ "success": True,
+ "message": "lsfg configuration updated successfully"
+ }
+
+ except Exception as e:
+ decky.logger.error(f"Error updating lsfg config: {str(e)}")
+ return {
+ "success": False,
+ "error": str(e)
+ }