1
0
Fork 0
mirror of synced 2024-09-28 15:31:14 +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 *.tar.gz
/Rare.egg-info/ /Rare.egg-info/
/venv /venv
/venv310/

View file

@ -1,16 +1,18 @@
import os import os
import platform import platform
from logging import getLogger
from typing import Tuple 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 PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox, QLabel, QVBoxLayout, QPushButton
from qtawesome import icon from qtawesome import icon
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, Game from legendary.models.game import InstalledGame, Game
from rare.components.tabs.settings.linux import LinuxSettings from rare.components.tabs.settings.linux import LinuxSettings
from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings
from rare.utils.extra_widgets import PathEdit from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import WineResolver, get_raw_save_path
def find_proton_wrappers(): def find_proton_wrappers():
@ -35,6 +37,9 @@ def find_proton_wrappers():
return possible_proton_wrappers return possible_proton_wrappers
logger = getLogger("GameSettings")
class GameSettings(QWidget, Ui_GameSettings): class GameSettings(QWidget, Ui_GameSettings):
game: Game game: Game
igame: InstalledGame igame: InstalledGame
@ -108,15 +113,34 @@ class GameSettings(QWidget, Ui_GameSettings):
try: try:
new_path = self.core.get_save_path(self.game.app_name) new_path = self.core.get_save_path(self.game.app_name)
except Exception as e: except Exception as e:
QMessageBox.warning(self, "Error", logger.warning(str(e))
self.tr("Could not compute save path for {}").format( self.cloud_save_path_edit.setText(self.tr("Loading"))
self.game.app_title) + "\n" + str( self.cloud_save_path_edit.setDisabled(True)
e)) 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 return
self.cloud_save_path_edit.setText(new_path) 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): 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.igame.save_path = text
self.core.lgd.set_installed_game(self.igame.app_name, self.igame) 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.core.lgd.save_config()
self.sender().setEnabled(False) self.sender().setEnabled(False)
if option == "wine_prefix":
if self.game.supports_cloud_saves:
self.compute_save_path()
def update_combobox(self, i, option): def update_combobox(self, i, option):
if self.change: if self.change:
# remove section # remove section

View file

@ -1,7 +1,6 @@
import os
from logging import getLogger from logging import getLogger
from PyQt5.QtWidgets import QFileDialog, QWidget, QMessageBox from PyQt5.QtWidgets import QFileDialog, QWidget
from rare import shared from rare import shared
from rare.components.tabs.settings.dxvk import DxvkSettings from rare.components.tabs.settings.dxvk import DxvkSettings
@ -48,19 +47,3 @@ class LinuxSettings(QWidget, Ui_LinuxSettings):
if self.core.lgd.config[self.name] == {}: if self.core.lgd.config[self.name] == {}:
self.core.lgd.config.remove_section(self.name) self.core.lgd.config.remove_section(self.name)
self.core.lgd.save_config() 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 PyQt5.QtGui import QPalette, QColor, QPixmap, QImage
from requests import HTTPError from requests import HTTPError
from legendary.models.game import Game
from .models import PathSpec from .models import PathSpec
# Windows # Windows
@ -434,3 +435,8 @@ class CloudWorker(QRunnable):
except HTTPError(): except HTTPError():
result = None result = None
self.signals.result_ready.emit(result) 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")