summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rw-r--r--main.py109
1 files changed, 39 insertions, 70 deletions
diff --git a/main.py b/main.py
index 6f15132..fc714ba 100644
--- a/main.py
+++ b/main.py
@@ -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