1
0
Fork 0
mirror of synced 2024-06-29 03:31:06 +12:00

Add auto compute save path button

This commit is contained in:
Dummerle 2021-11-03 22:18:03 +01:00
parent 9aacce97ac
commit c99fd4761d
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
4 changed files with 44 additions and 5 deletions

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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: