1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
import { useState, useEffect, useCallback } from "react";
import {
checkLsfgVkInstalled,
checkLosslessScalingDll,
getLsfgConfig,
updateLsfgConfigFromObject,
type ConfigUpdateResult
} from "../api/lsfgApi";
import { ConfigurationData, ConfigurationManager } from "../config/configSchema";
import { showErrorToast, ToastMessages } from "../utils/toastUtils";
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 Installed");
} else {
setInstallationStatus("lsfg-vk Not Installed");
}
return status.installed;
} catch (error) {
setInstallationStatus("lsfg-vk Not Installed");
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 Installed");
} else {
setDllDetectionStatus("Lossless Scaling Not Installed");
}
} catch (error) {
setDllDetectionStatus("Lossless Scaling Not Installed");
}
};
useEffect(() => {
checkDllDetection();
}, []);
return {
dllDetected,
dllDetectionStatus
};
}
export function useLsfgConfig() {
// Use centralized configuration for initial state
const [config, setConfig] = useState<ConfigurationData>(() => ConfigurationManager.getDefaults());
const loadLsfgConfig = useCallback(async () => {
try {
const result = await getLsfgConfig();
if (result.success && result.config) {
setConfig(result.config);
} else {
console.log("lsfg config not available, using defaults:", result.error);
setConfig(ConfigurationManager.getDefaults());
}
} catch (error) {
console.error("Error loading lsfg config:", error);
setConfig(ConfigurationManager.getDefaults());
}
}, []);
const updateConfig = useCallback(async (newConfig: ConfigurationData): Promise<ConfigUpdateResult> => {
try {
const result = await updateLsfgConfigFromObject(newConfig);
if (result.success) {
setConfig(newConfig);
} else {
showErrorToast(
ToastMessages.CONFIG_UPDATE_ERROR.title,
result.error || ToastMessages.CONFIG_UPDATE_ERROR.body
);
}
return result;
} catch (error) {
showErrorToast(ToastMessages.CONFIG_UPDATE_ERROR.title, String(error));
return { success: false, error: String(error) };
}
}, []);
const updateField = useCallback(async (fieldName: keyof ConfigurationData, value: boolean | number | string): Promise<ConfigUpdateResult> => {
const newConfig = { ...config, [fieldName]: value };
return updateConfig(newConfig);
}, [config, updateConfig]);
useEffect(() => {
loadLsfgConfig();
}, []); // Empty dependency array to prevent infinite loop
return {
config,
setConfig,
loadLsfgConfig,
updateConfig,
updateField
};
}
|