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
|
*.tar.gz
|
||||||
/Rare.egg-info/
|
/Rare.egg-info/
|
||||||
/venv
|
/venv
|
||||||
|
/venv310/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in a new issue