Update savepath on button click
This commit is contained in:
parent
6c99b369be
commit
3225d1b1eb
4 changed files with 43 additions and 25 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -11,3 +11,4 @@ __pycache__
|
|||
*.tar.gz
|
||||
/Rare.egg-info/
|
||||
/venv
|
||||
/venv310/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in a new issue