diff --git a/rare/components/tabs/settings/linux.py b/rare/components/tabs/settings/linux.py index 4c87052f..a92b5bda 100644 --- a/rare/components/tabs/settings/linux.py +++ b/rare/components/tabs/settings/linux.py @@ -16,34 +16,53 @@ class LinuxSettings(QWidget, Ui_LinuxSettings): self.setupUi(self) self.name = name if name is not None else "default" - self.core = shared.core # Wine prefix - self.wine_prefix = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""), - file_type=QFileDialog.DirectoryOnly, - save_func=lambda text: self.save_setting(text, "wine_prefix")) + self.wine_prefix = PathEdit( + self.load_prefix(), + file_type=QFileDialog.DirectoryOnly, + save_func=self.save_prefix) self.prefix_layout.addWidget(self.wine_prefix) # Wine executable - self.wine_exec = PathEdit(self.core.lgd.config.get(self.name, "wine_executable", fallback=""), - file_type=QFileDialog.ExistingFile, - name_filter="Wine executable (wine wine64)", - save_func=lambda text: self.save_setting(text, "wine_executable")) + self.wine_exec = PathEdit( + self.load_setting(self.name, "wine_executable"), + file_type=QFileDialog.ExistingFile, + name_filter="Wine executable (wine wine64)", + save_func=lambda text: self.save_setting(text, section=self.name, setting="wine_executable")) self.exec_layout.addWidget(self.wine_exec) # dxvk self.dxvk = DxvkSettings(self.name) self.dxvk_layout.addWidget(self.dxvk) - def save_setting(self, text: str, setting_name: str): - if self.name not in self.core.lgd.config.sections(): - self.core.lgd.config.add_section(self.name) + def load_prefix(self) -> str: + return self.load_setting(f'{self.name}.env', + 'WINEPREFIX', + fallback=self.load_setting(self.name, 'wine_prefix')) + + def save_prefix(self, text: str): + self.save_setting(text, f'{self.name}.env', 'WINEPREFIX') + self.save_setting(text, self.name, 'wine_prefix') + + @staticmethod + def load_setting(section: str, setting: str, fallback: str = str()): + return shared.core.lgd.config.get(section, setting, fallback=fallback) + + @staticmethod + def save_setting(text: str, section: str, setting: str): + if text: + if section not in shared.core.lgd.config.sections(): + shared.core.lgd.config.add_section(section) + logger.debug(f"Added {f'[{section}]'} configuration section") + shared.core.lgd.config.set(section, setting, text) + logger.debug(f"Set {setting} in {f'[{section}]'} to {text}") - self.core.lgd.config.set(self.name, setting_name, text) - if not text: - self.core.lgd.config.remove_option(self.name, setting_name) else: - logger.debug("Set config of wine_prefix to " + text) - if self.core.lgd.config[self.name] == {}: - self.core.lgd.config.remove_section(self.name) - self.core.lgd.save_config() + shared.core.lgd.config.remove_option(section, setting) + logger.debug(f"Unset {setting} from {f'[{section}]'}") + if not shared.core.lgd.config[section]: + shared.core.lgd.config.remove_section(section) + logger.debug(f"Removed {f'[{section}]'} configuration section") + + shared.core.lgd.save_config()