summaryrefslogtreecommitdiff
path: root/src/hooks/useLsfgHooks.ts
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-13 00:04:54 -0400
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-13 00:04:54 -0400
commit77494457e2a4f5c80c3a2f7acb054b12d918d8ad (patch)
treefad4c4dd2ce69a850b56078444427866dedce9fa /src/hooks/useLsfgHooks.ts
parent6cfcaa6c169cb8c898775eee276ff2497ab8f45c (diff)
downloaddecky-lsfg-vk-77494457e2a4f5c80c3a2f7acb054b12d918d8ad.tar.gz
decky-lsfg-vk-77494457e2a4f5c80c3a2f7acb054b12d918d8ad.zip
restructure for maintainability
Diffstat (limited to 'src/hooks/useLsfgHooks.ts')
-rw-r--r--src/hooks/useLsfgHooks.ts156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/hooks/useLsfgHooks.ts b/src/hooks/useLsfgHooks.ts
new file mode 100644
index 0000000..76acd33
--- /dev/null
+++ b/src/hooks/useLsfgHooks.ts
@@ -0,0 +1,156 @@
+import { useState, useEffect } from "react";
+import { toaster } from "@decky/api";
+import {
+ checkLsfgVkInstalled,
+ checkLosslessScalingDll,
+ getLsfgConfig,
+ updateLsfgConfig,
+ type ConfigUpdateResult
+} from "../api/lsfgApi";
+
+export function useInstallationStatus() {
+ const [isInstalled, setIsInstalled] = useState<boolean>(false);
+ const [installationStatus, setInstallationStatus] = useState<string>("");
+
+ const checkInstallation = async () => {
+ try {
+ const status = await checkLsfgVkInstalled();
+ setIsInstalled(status.installed);
+ if (status.installed) {
+ setInstallationStatus("lsfg-vk is installed");
+ } else {
+ setInstallationStatus("lsfg-vk is not installed");
+ }
+ return status.installed;
+ } catch (error) {
+ setInstallationStatus("Error checking installation status");
+ return false;
+ }
+ };
+
+ useEffect(() => {
+ checkInstallation();
+ }, []);
+
+ return {
+ isInstalled,
+ installationStatus,
+ setIsInstalled,
+ setInstallationStatus,
+ checkInstallation
+ };
+}
+
+export function useDllDetection() {
+ const [dllDetected, setDllDetected] = useState<boolean>(false);
+ const [dllDetectionStatus, setDllDetectionStatus] = useState<string>("");
+
+ const checkDllDetection = async () => {
+ try {
+ const result = await checkLosslessScalingDll();
+ setDllDetected(result.detected);
+ if (result.detected) {
+ setDllDetectionStatus(`Lossless Scaling App detected (${result.source})`);
+ } else {
+ setDllDetectionStatus(result.message || "Lossless Scaling App not detected");
+ }
+ } catch (error) {
+ setDllDetectionStatus("Error checking Lossless Scaling App");
+ }
+ };
+
+ useEffect(() => {
+ checkDllDetection();
+ }, []);
+
+ return {
+ dllDetected,
+ dllDetectionStatus
+ };
+}
+
+export function useLsfgConfig() {
+ const [enableLsfg, setEnableLsfg] = useState<boolean>(true);
+ const [multiplier, setMultiplier] = useState<number>(2);
+ const [flowScale, setFlowScale] = useState<number>(1.0);
+ const [hdr, setHdr] = useState<boolean>(false);
+ const [perfMode, setPerfMode] = useState<boolean>(false);
+ const [immediateMode, setImmediateMode] = useState<boolean>(false);
+
+ const loadLsfgConfig = async () => {
+ try {
+ const result = await getLsfgConfig();
+ if (result.success && result.config) {
+ setEnableLsfg(result.config.enable_lsfg);
+ setMultiplier(result.config.multiplier);
+ setFlowScale(result.config.flow_scale);
+ setHdr(result.config.hdr);
+ setPerfMode(result.config.perf_mode);
+ setImmediateMode(result.config.immediate_mode);
+ console.log("Loaded lsfg config:", result.config);
+ } else {
+ console.log("lsfg config not available, using defaults:", result.error);
+ }
+ } catch (error) {
+ console.error("Error loading lsfg config:", error);
+ }
+ };
+
+ const updateConfig = async (
+ newEnableLsfg: boolean,
+ newMultiplier: number,
+ newFlowScale: number,
+ newHdr: boolean,
+ newPerfMode: boolean,
+ newImmediateMode: boolean
+ ): Promise<ConfigUpdateResult> => {
+ try {
+ const result = await updateLsfgConfig(
+ newEnableLsfg,
+ newMultiplier,
+ newFlowScale,
+ newHdr,
+ newPerfMode,
+ newImmediateMode
+ );
+ if (!result.success) {
+ toaster.toast({
+ title: "Update Failed",
+ body: result.error || "Failed to update configuration"
+ });
+ }
+ return result;
+ } catch (error) {
+ toaster.toast({
+ title: "Update Failed",
+ body: `Error: ${error}`
+ });
+ return { success: false, error: String(error) };
+ }
+ };
+
+ useEffect(() => {
+ loadLsfgConfig();
+ }, []);
+
+ return {
+ config: {
+ enableLsfg,
+ multiplier,
+ flowScale,
+ hdr,
+ perfMode,
+ immediateMode
+ },
+ setters: {
+ setEnableLsfg,
+ setMultiplier,
+ setFlowScale,
+ setHdr,
+ setPerfMode,
+ setImmediateMode
+ },
+ loadLsfgConfig,
+ updateConfig
+ };
+}