1
0
Fork 0
mirror of synced 2024-06-21 12:00:25 +12:00

Update savepath on button click

This commit is contained in:
Dummerle 2021-11-10 19:00:15 +01:00
parent 6c99b369be
commit 3225d1b1eb
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
4 changed files with 43 additions and 25 deletions

1
.gitignore vendored
View file

@ -11,3 +11,4 @@ __pycache__
*.tar.gz
/Rare.egg-info/
/venv
/venv310/

View file

@ -1,16 +1,18 @@
import os
import platform
from logging import getLogger
from typing import Tuple
from PyQt5.QtCore import QSettings
from PyQt5.QtCore import QSettings, QThreadPool
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
from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import WineResolver, get_raw_save_path
def find_proton_wrappers():
@ -35,6 +37,9 @@ def find_proton_wrappers():
return possible_proton_wrappers
logger = getLogger("GameSettings")
class GameSettings(QWidget, Ui_GameSettings):
game: Game
igame: InstalledGame
@ -108,15 +113,34 @@ class GameSettings(QWidget, Ui_GameSettings):
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))
logger.warning(str(e))
self.cloud_save_path_edit.setText(self.tr("Loading"))
self.cloud_save_path_edit.setDisabled(True)
self.compute_save_path_button.setDisabled(True)
resolver = WineResolver(get_raw_save_path(self.game), self.game.app_name, self.core)
resolver.signals.result_ready.connect(self.wine_resolver_finished)
QThreadPool.globalInstance().start(resolver)
return
self.cloud_save_path_edit.setText(new_path)
def wine_resolver_finished(self, path):
self.cloud_save_path_edit.setDisabled(False)
self.compute_save_path_button.setDisabled(False)
if path and not os.path.exists(path):
try:
os.makedirs(path)
except PermissionError:
self.cloud_save_path_edit.setText("")
QMessageBox.warning(None, "Error", self.tr(
"Error while launching {}. No permission to create {}").format(
self.game.app_title, path))
return
if not path:
return
self.cloud_save_path_edit.setText(path)
def save_save_path(self, text):
if self.game.supports_cloud_saves and not self.change:
if self.game.supports_cloud_saves and self.change:
self.igame.save_path = text
self.core.lgd.set_installed_game(self.igame.app_name, self.igame)
@ -134,6 +158,10 @@ class GameSettings(QWidget, Ui_GameSettings):
self.core.lgd.save_config()
self.sender().setEnabled(False)
if option == "wine_prefix":
if self.game.supports_cloud_saves:
self.compute_save_path()
def update_combobox(self, i, option):
if self.change:
# remove section

View file

@ -1,7 +1,6 @@
import os
from logging import getLogger
from PyQt5.QtWidgets import QFileDialog, QWidget, QMessageBox
from PyQt5.QtWidgets import QFileDialog, QWidget
from rare import shared
from rare.components.tabs.settings.dxvk import DxvkSettings
@ -48,19 +47,3 @@ 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

@ -13,6 +13,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QRunnable, QSettings, Qt
from PyQt5.QtGui import QPalette, QColor, QPixmap, QImage
from requests import HTTPError
from legendary.models.game import Game
from .models import PathSpec
# Windows
@ -434,3 +435,8 @@ class CloudWorker(QRunnable):
except HTTPError():
result = None
self.signals.result_ready.emit(result)
def get_raw_save_path(game: Game):
if game.supports_cloud_saves:
return game.metadata.get("customAttributes", {}).get("CloudSaveFolder", {}).get("value")