diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index d2043bcf..cf391578 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -3,8 +3,9 @@ import platform from typing import Tuple from PyQt5.QtCore import QSettings -from PyQt5.QtWidgets import QWidget, QFileDialog, QLabel +from PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox, QLabel, QVBoxLayout, QPushButton +from qtawesome import icon from legendary.core import LegendaryCore from legendary.models.game import InstalledGame, Game from rare.components.tabs.settings.linux import LinuxSettings @@ -48,11 +49,19 @@ class GameSettings(QWidget, Ui_GameSettings): self.core = core self.settings = QSettings() + save_widget = QWidget() + save_widget.setLayout(QVBoxLayout()) self.cloud_save_path_edit = PathEdit("", file_type=QFileDialog.DirectoryOnly, ph_text=self.tr("Cloud save path"), edit_func=lambda text: (os.path.exists(text), text), save_func=self.save_save_path) - self.cloud_gb.layout().addRow(QLabel(self.tr("Save path")), self.cloud_save_path_edit) + save_widget.layout().addWidget(self.cloud_save_path_edit) + + self.compute_save_path_button = QPushButton(icon("fa.magic"), self.tr("Auto compute save path")) + save_widget.layout().addWidget(self.compute_save_path_button) + self.compute_save_path_button.clicked.connect(self.compute_save_path) + + self.cloud_gb.layout().addRow(QLabel(self.tr("Save path")), save_widget) self.offline.currentIndexChanged.connect( lambda x: self.update_combobox(x, "offline") @@ -94,6 +103,18 @@ class GameSettings(QWidget, Ui_GameSettings): # skip_update_check + def compute_save_path(self): + if self.core.is_installed(self.game.app_name) and self.game.supports_cloud_saves: + try: + new_path = self.core.get_save_path(self.game.app_name) + except Exception as e: + QMessageBox.warning(self, "Error", + self.tr("Could not compute save path for {}").format( + self.game.app_title) + "\n" + str( + e)) + return + self.cloud_save_path_edit.setText(new_path) + def save_save_path(self, text): if self.game.supports_cloud_saves and not self.change: self.igame.save_path = text diff --git a/rare/components/tabs/games/game_widgets/base_installed_widget.py b/rare/components/tabs/games/game_widgets/base_installed_widget.py index bca7d285..48c0b842 100644 --- a/rare/components/tabs/games/game_widgets/base_installed_widget.py +++ b/rare/components/tabs/games/game_widgets/base_installed_widget.py @@ -102,7 +102,7 @@ class BaseInstalledWidget(QGroupBox): uninstall = QAction(self.tr("Uninstall"), self) uninstall.triggered.connect( - lambda: shared.signals.update_gamelist.emit(self.game.app_name) if self.game_utils.uninstall_game( + lambda: shared.signals.update_gamelist.emit([self.game.app_name]) if self.game_utils.uninstall_game( self.game.app_name) else None) self.addAction(uninstall) diff --git a/rare/components/tabs/settings/linux.py b/rare/components/tabs/settings/linux.py index a6cb8480..108d299a 100644 --- a/rare/components/tabs/settings/linux.py +++ b/rare/components/tabs/settings/linux.py @@ -1,6 +1,7 @@ +import os from logging import getLogger -from PyQt5.QtWidgets import QFileDialog, QWidget +from PyQt5.QtWidgets import QFileDialog, QWidget, QMessageBox from rare import shared from rare.components.tabs.settings.dxvk import DxvkSettings @@ -47,3 +48,19 @@ class LinuxSettings(QWidget, Ui_LinuxSettings): if self.core.lgd.config[self.name] == {}: self.core.lgd.config.remove_section(self.name) self.core.lgd.save_config() + + if setting_name == "wine_prefix": + if not os.path.isdir(text) or not os.path.exists(os.path.join(text, "user.reg")): + return + if self.name != "default": # if game + game = self.core.get_game(self.name) + if self.core.is_installed(self.name) and game.supports_cloud_saves: + try: + new_path = self.core.get_save_path(self.name) + except Exception as e: + QMessageBox.warning(self, "Error", self.tr("Could not compute save path for {}").format( + game.app_title) + "\n" + str(e)) + return + igame = self.core.get_installed_game(self.name) + igame.save_path = new_path + self.core.lgd.set_installed_game(self.name, igame) diff --git a/rare/utils/extra_widgets.py b/rare/utils/extra_widgets.py index a3da1dcd..710e6936 100644 --- a/rare/utils/extra_widgets.py +++ b/rare/utils/extra_widgets.py @@ -199,7 +199,8 @@ class IndicatorLineEdit(QWidget): if self.edit_func is not None: self.line_edit.blockSignals(True) self.is_valid, text = self.edit_func(text) - self.line_edit.setText(text) + if text != self.line_edit.text(): + self.line_edit.setText(text) self.line_edit.blockSignals(False) self.__indicator(self.is_valid) if self.is_valid: