Skip to content

Commit

Permalink
Fix: add saving app settings periodically
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexIII committed Aug 26, 2024
1 parent 6b0faf4 commit 7b63e53
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 17 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@ Open-source alternative to AWCC*

OS: Windows 10/11.

Supported Dell G15 models: 5511, 5515, 5520, 5525, 5530.
Supported models
- Dell G15: 5511, 5515, 5520, 5525, 5530.
- Dell Alienware m16 R1

May also work on other Dell G15 notebooks.
May also work on other Dell G15 / Alienware laptops.

Please report if it worked / didn't work for you. Your feedback is highly appreciated.

_Big thanks to @T7imal, @cemkaya-mpi, @THSLP13 for testing and debugging._

_Thanks to @Dtwpurple, @WinterholdPrime for the compatibility reports._

## What it can do

- ✔️ Switch thermal mode between G-mode, Balanced and Custom
Expand Down
2 changes: 1 addition & 1 deletion installer-inno-config.iss
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Thermal Control Center"
#define MyAppVersion "1.5.3"
#define MyAppVersion "1.5.4"
#define MyAppPublisher "AlexIII"
#define MyAppURL "https://github.com/AlexIII/tcc-g15"
#define MyAppExeName "tcc-g15.exe"
Expand Down
2 changes: 1 addition & 1 deletion src/Backend/AWCCThermal.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class AWCCThermal:
def __init__(self, awcc: Optional[AWCCWmiWrapper] = None) -> None:
if awcc is None:
try:
awccClass = wmi.WMI(namespace="root\WMI").AWCCWmiMethodFunction
awccClass = wmi.WMI(namespace="root\\WMI").AWCCWmiMethodFunction
except Exception as ex:
print(ex)
raise NoAWCCWMIClass()
Expand Down
45 changes: 32 additions & 13 deletions src/GUI/AppGUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class SettingsKey(Enum):
CPUThresholdTemp = "app/fan/cpu/threshold_temp"
GPUFanSpeed = "app/fan/gpu/speed"
GPUThresholdTemp = "app/fan/gpu/threshold_temp"
FailSafeIsOnFlag = "app/failsafe_is_on_flag"
MinimizeOnCloseFlag = "app/minimize_on_close_flag"

def errorExit(message: str, message2: Optional[str] = None) -> None:
Expand All @@ -96,7 +97,7 @@ class TCC_GUI(QtWidgets.QWidget):
FAILSAFE_TRIGGER_DELAY_SEC = 8
FAILSAFE_RESET_AFTER_TEMP_IS_OK_FOR_SEC = 60
APP_NAME = "Thermal Control Center for Dell G15"
APP_VERSION = "1.5.3"
APP_VERSION = "1.5.4"
APP_DESCRIPTION = "This app is an open-source replacement for Alienware Control Center "
APP_URL = "github.com/AlexIII/tcc-g15"

Expand All @@ -109,6 +110,7 @@ class TCC_GUI(QtWidgets.QWidget):
_failsafeTempIsHighStartTs: Optional[int] = None # Time when the temp first registered to be high (without going lower than the threshold)
_failsafeTrippedPrevModeStr: Optional[str] = None # Mode (Custom, Balanced) before fail-safe tripped, as a string
_failsafeOn = True
_prevSavedSettingsValues: list = []

def __init__(self, awcc: AWCCThermal):
super().__init__()
Expand Down Expand Up @@ -211,18 +213,19 @@ def onLimitCPUChange():


# Fail-safe checkbox
_failsafeCB = QtWidgets.QCheckBox("Fail-safe")
_failsafeCB.setToolTip(f"Switch to G-mode (fans on max) when GPU temp reaches {self.FAILSAFE_GPU_TEMP}°C or CPU reaches {self.FAILSAFE_CPU_TEMP}°C")
self._failsafeCB = QtWidgets.QCheckBox("Fail-safe")
self._failsafeCB.setToolTip(f"Switch to G-mode (fans on max) when GPU temp reaches {self.FAILSAFE_GPU_TEMP}°C or CPU reaches {self.FAILSAFE_CPU_TEMP}°C")
def onFailsafeCB():
self._failsafeOn = _failsafeCB.isChecked()
self._failsafeOn = self._failsafeCB.isChecked()
self._failsafeTempIsHighTs = 0
self._failsafeTrippedPrevModeStr = None
self._failsafeTempIsHighStartTs = None
updFailsafeIndicator()
_failsafeCB.toggled.connect(onFailsafeCB)
_failsafeCB.setChecked(True)
self._failsafeCB.toggled.connect(onFailsafeCB)
self._failsafeCB.setChecked(self._failsafeOn)

failsafeBox = QtWidgets.QHBoxLayout()
failsafeBox.addWidget(_failsafeCB)
failsafeBox.addWidget(self._failsafeCB)
failsafeBox.addWidget(self._limitTempGPU)
failsafeBox.addWidget(self._limitTempCPU)
failsafeBox.addWidget(failsafeIndicator)
Expand All @@ -248,6 +251,8 @@ def updateFanSpeed():
return
setFanSpeed('GPU', self._thermalGPU.getSpeedSlider())
setFanSpeed('CPU', self._thermalCPU.getSpeedSlider())
self._thermalGPU.speedSliderChanged(updateFanSpeed)
self._thermalCPU.speedSliderChanged(updateFanSpeed)

def onModeChange(val: str):
self._thermalGPU.setSpeedDisabled(val != ThermalMode.Custom.value)
Expand Down Expand Up @@ -311,14 +316,14 @@ def updateAppState():
trayIcon.update((gpuTemp, cpuTemp))
tray.setIcon(trayIcon)

# Periodically save app settings
self._saveAppSettings()

self._loadAppSettings()

self._updateGaugesTask = QPeriodic(self, self.TEMP_UPD_PERIOD_MS, updateAppState)
updateAppState()
self._updateGaugesTask.start()

self._thermalGPU.speedSliderChanged(updateFanSpeed)
self._thermalCPU.speedSliderChanged(updateFanSpeed)

self._loadAppSettings()

def closeEvent(self, event):
minimizeOnClose = self.settings.value(SettingsKey.MinimizeOnCloseFlag.value)
Expand All @@ -339,7 +344,6 @@ def closeEvent(self, event):
# onExit() connected to systray_Exit
def onExit(self):
print("exit")
self._saveAppSettings()
# Set mode to Balanced before exit
self._updateGaugesTask.stop()
prevMode = self._modeSwitch.getChecked()
Expand All @@ -349,11 +353,24 @@ def onExit(self):
sys.exit(1)

def _saveAppSettings(self):
curValues = [
self._modeSwitch.getChecked(),
self._thermalCPU.getSpeedSlider(),
self._thermalGPU.getSpeedSlider(),
self.FAILSAFE_CPU_TEMP,
self.FAILSAFE_GPU_TEMP,
self._failsafeOn
]
if curValues == self._prevSavedSettingsValues:
return
self._prevSavedSettingsValues = curValues

self.settings.setValue(SettingsKey.Mode.value, self._modeSwitch.getChecked())
self.settings.setValue(SettingsKey.CPUFanSpeed.value, self._thermalCPU.getSpeedSlider())
self.settings.setValue(SettingsKey.GPUFanSpeed.value, self._thermalGPU.getSpeedSlider())
self.settings.setValue(SettingsKey.CPUThresholdTemp.value, self.FAILSAFE_CPU_TEMP)
self.settings.setValue(SettingsKey.GPUThresholdTemp.value, self.FAILSAFE_GPU_TEMP)
self.settings.setValue(SettingsKey.FailSafeIsOnFlag.value, self._failsafeOn)

def _loadAppSettings(self):
savedMode = self.settings.value(SettingsKey.Mode.value)
Expand All @@ -366,6 +383,8 @@ def _loadAppSettings(self):
if savedTemp is not None: self._limitTempCPU.setCurrentText(str(savedTemp))
savedTemp = self.settings.value(SettingsKey.GPUThresholdTemp.value)
if savedTemp is not None: self._limitTempGPU.setCurrentText(str(savedTemp))
savedFailsafe = self.settings.value(SettingsKey.FailSafeIsOnFlag.value)
if savedFailsafe is not None: self._failsafeCB.setChecked(not (savedFailsafe == 'False'))

def clearAppSettings(self):
(isYes, _) = confirm("Reset to Default", "Do you want to reset all settings to default?", ("Reset", "Cancel"))
Expand Down

0 comments on commit 7b63e53

Please sign in to comment.