Add auto compute save path button
This commit is contained in:
parent
9aacce97ac
commit
c99fd4761d
4 changed files with 44 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue