diff options
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 109 |
1 files changed, 39 insertions, 70 deletions
@@ -22,85 +22,57 @@ class Plugin: return {"status": "success", "output": result.stdout} except subprocess.CalledProcessError as e: return {"status": "error", "message": str(e), "output": e.output} + except Exception as e: + return {"status": "error", "message": f"Unexpected error: {str(e)}"} async def run_install_fgmod(self) -> dict: try: - assets_dir = Path(decky.DECKY_PLUGIN_DIR) / "assets" - downloads_dir = Path(decky.HOME) / "Downloads" + defaults_dir = Path(decky.DECKY_PLUGIN_DIR) / "assets" + fgmod_dir = Path(decky.HOME) / "fgmod" + + if not defaults_dir.exists(): + decky.logger.error(f"Defaults directory not found: {defaults_dir}") + return {"status": "error", "message": f"Defaults directory not found: {defaults_dir}"} - if not assets_dir.exists(): - decky.logger.error(f"Assets directory not found: {assets_dir}") - return { - "status": "error", - "message": f"Assets directory not found: {assets_dir}" - } + fgmod_dir.mkdir(parents=True, exist_ok=True) - downloads_dir.mkdir(parents=True, exist_ok=True) + files_to_copy = [ + "amd_fidelityfx_dx12.dll", "dlssg_to_fsr3_amd_is_better.dll", "libxess.dll", + "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini", + "d3dcompiler_47.dll", "dxgi.dll", "nvapi64.dll", + "DisableNvidiaSignatureChecks.reg", "dxvk.conf", "_nvngx.dll", + "dlss-enabler.dll", "fakenvapi.ini", "nvngx.ini", + "dlss-enabler-upscaler.dll", "fgmod", "nvngx-wrapper.dll", + "dlssg_to_fsr3_amd_is_better-3.0.dll", "fgmod-uninstaller.sh", "RestoreNvidiaSignatureChecks.reg" + ] - files_to_copy = ["prepare.sh", "fgmod.sh", "fgmod-uninstaller.sh"] for file_name in files_to_copy: - src = assets_dir / file_name + src = defaults_dir / file_name + dest = fgmod_dir / file_name if not src.exists(): decky.logger.error(f"Required file missing: {src}") - return { - "status": "error", - "message": f"Required file missing: {file_name}" - } - - dest = downloads_dir / file_name + return {"status": "error", "message": f"Required file missing: {file_name}"} dest.write_bytes(src.read_bytes()) dest.chmod(0o755) - prepare_script = downloads_dir / "prepare.sh" - process = subprocess.run( - ["/bin/bash", str(prepare_script)], - capture_output=True, - text=True, - timeout=300 - ) + # Ensure the uninstaller script is executable + uninstaller_script = fgmod_dir / "fgmod-uninstaller.sh" + uninstaller_script.chmod(0o755) - fgmod_path = Path(decky.HOME) / "fgmod" - fgmod_path.mkdir(parents=True, exist_ok=True) - - decky.logger.info(f"Script output:\n{process.stdout}") - decky.logger.error(f"Script errors:\n{process.stderr}") - - if "All done!" not in process.stdout: - decky.logger.error("Installation did not complete successfully") - return { - "status": "error", - "message": process.stdout + process.stderr - } - - return { - "status": "success", - "output": "You can now replace DLSS with FSR Frame Gen!" - } - - except subprocess.TimeoutExpired: - decky.logger.error("Installation script timed out") - return { - "status": "error", - "message": "Installation timed out" - } - except subprocess.CalledProcessError as e: - decky.logger.error(f"Script error: {e.stderr}") - return { - "status": "error", - "message": e.stderr - } + # Verify all files exist in fgmod directory + missing_files = [file for file in files_to_copy if not (fgmod_dir / file).exists()] + if missing_files: + return {"status": "error", "message": f"Missing files: {', '.join(missing_files)}"} + + return {"status": "success", "output": "You can now replace DLSS with FSR Frame Gen!"} except Exception as e: - decky.logger.error(f"Unexpected error: {str(e)}") - return { - "status": "error", - "message": str(e) - } + return {"status": "error", "message": f"Unexpected error: {str(e)}"} async def check_fgmod_path(self) -> dict: - path = Path(decky.HOME) / "fgmod" + fgmod_dir = Path(decky.HOME) / "fgmod" required_files = [ "amd_fidelityfx_dx12.dll", "dlssg_to_fsr3_amd_is_better.dll", "libxess.dll", - "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini", "licenses", + "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini", "d3dcompiler_47.dll", "dxgi.dll", "nvapi64.dll", "DisableNvidiaSignatureChecks.reg", "dxvk.conf", "_nvngx.dll", "dlss-enabler.dll", "fakenvapi.ini", "nvngx.ini", @@ -108,19 +80,16 @@ class Plugin: "dlssg_to_fsr3_amd_is_better-3.0.dll", "fgmod-uninstaller.sh", "RestoreNvidiaSignatureChecks.reg" ] - if path.exists(): - for file_name in required_files: - if not path.joinpath(file_name).exists(): - return {"exists": False} - return {"exists": True} - else: + if not fgmod_dir.exists(): return {"exists": False} - # New method to list installed Steam games + missing_files = [file for file in required_files if not (fgmod_dir / file).exists()] + return {"exists": not missing_files, "missing_files": missing_files} + async def list_installed_games(self) -> dict: try: steam_root = Path(decky.HOME) / ".steam" / "steam" - library_file = Path(steam_root) / "steamapps" / "libraryfolders.vdf" + library_file = steam_root / "steamapps" / "libraryfolders.vdf" if not library_file.exists(): return {"status": "error", "message": "libraryfolders.vdf not found"} @@ -156,4 +125,4 @@ class Plugin: return {"status": "success", "games": filtered_games} except Exception as e: - return {"status": "error", "message": str(e)} + return {"status": "error", "message": str(e)}
\ No newline at end of file |
