From 3beef497051218cabda74c228a23714c5782ff74 Mon Sep 17 00:00:00 2001 From: Dummerle <44114474+Dummerle@users.noreply.github.com> Date: Sun, 6 Mar 2022 19:48:35 +0100 Subject: [PATCH] Add support for wrappers with spaces --- .../tabs/games/game_info/game_settings.py | 2 +- .../tabs/settings/widgets/wrapper.py | 36 +++++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index 265af075..bdc9e037 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -67,7 +67,7 @@ class GameSettings(QWidget, Ui_GameSettings): self.wrapper_settings = WrapperSettings() - self.launch_settings_groupbox.layout().addRow( + self.launch_settings_group.layout().addRow( QLabel("Wrapper"), self.wrapper_settings ) diff --git a/rare/components/tabs/settings/widgets/wrapper.py b/rare/components/tabs/settings/widgets/wrapper.py index 2b9fe56c..6b2f060d 100644 --- a/rare/components/tabs/settings/widgets/wrapper.py +++ b/rare/components/tabs/settings/widgets/wrapper.py @@ -2,7 +2,7 @@ import re from logging import getLogger from typing import Dict -from PyQt5.QtCore import pyqtSignal +from PyQt5.QtCore import pyqtSignal, QSettings from PyQt5.QtWidgets import QGroupBox, QHBoxLayout, QLabel, QPushButton, QInputDialog, QFrame, QMessageBox, QSizePolicy from rare import shared @@ -49,9 +49,13 @@ class WrapperSettings(QGroupBox, Ui_WrapperSettings): self.core = shared.LegendaryCoreSingleton() self.add_button.clicked.connect(self.add_button_pressed) + self.settings = QSettings() def get_wrapper_string(self): - return " ".join(list(self.extra_wrappers.values()) + list(self.wrappers.keys())) + return " ".join(self.get_wrapper_list()) + + def get_wrapper_list(self): + return list(self.extra_wrappers.values()) + list(self.wrappers.keys()) def add_button_pressed(self): wrapper, done = QInputDialog.getText(self, "Input Dialog", self.tr("Insert name of wrapper")) @@ -98,30 +102,34 @@ class WrapperSettings(QGroupBox, Ui_WrapperSettings): self.save() def save(self): + # save wrappers twice, to support wrappers with spaces if len(self.wrappers) == 0 and len(self.extra_wrappers) == 0: config_helper.remove_option(self.app_name, "wrapper") + self.settings.remove(f"{self.app_name}/wrapper") else: config_helper.add_option(self.app_name, "wrapper", self.get_wrapper_string()) + self.settings.setValue(f"{self.app_name}/wrapper", self.get_wrapper_list()) - def load_settings(self, app_name): + def load_settings(self, app_name: str): self.app_name = app_name for i in self.wrappers.values(): i.deleteLater() self.wrappers.clear() self.extra_wrappers.clear() - wrapper_config = self.core.lgd.config.get(app_name, "wrapper", fallback="") - pattern = re.compile(r'''((?:[^ "']|"[^"]*"|'[^']*')+)''') - wrappers = pattern.split(wrapper_config)[1::2] - if not wrappers: + wrappers = self.settings.value(f"{self.app_name}/wrapper", [], str) + + if not wrappers and (cfg := self.core.lgd.config.get(self.app_name, "wrapper", fallback="")): + logger.info("Loading wrappers from legendary config") + # no qt wrapper, but legendary wrapper, to have backward compatibility + pattern = re.compile(r'''((?:[^ "']|"[^"]*"|'[^']*')+)''') + wrappers = pattern.split(cfg)[1::2] + + for wrapper in wrappers: + self.add_wrapper(wrapper) + + if not self.wrappers: self.widget_stack.setCurrentIndex(1) return else: self.widget_stack.setCurrentIndex(0) - - for wrapper in wrappers: - if wrapper.strip('"').endswith("proton"): - wrapper = f"{wrapper} run" - if wrapper == "run": - continue - self.add_wrapper(wrapper)