diff --git a/Rare/GameWidget.py b/Rare/GameWidget.py
index 1dcfc062..19c09c9b 100644
--- a/Rare/GameWidget.py
+++ b/Rare/GameWidget.py
@@ -1,7 +1,7 @@
import subprocess
from logging import getLogger
-from PyQt5.QtCore import QThread, pyqtSignal
+from PyQt5.QtCore import QThread, pyqtSignal, QProcess
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton, QStyle
@@ -32,7 +32,7 @@ class Thread(QThread):
class GameWidget(QWidget):
- proc: subprocess.Popen
+ proc: QProcess
signal = pyqtSignal(str)
def __init__(self, game):
@@ -81,23 +81,28 @@ class GameWidget(QWidget):
def launch(self):
if not self.game_running:
logger.info(f"launching {self.title}")
- resp = legendaryUtils.launch_game(self.app_name)
- if resp != 1:
- self.proc = resp
- self.thread = Thread(self.proc)
- self.thread.signal.connect(self.kill)
- self.thread.start()
- self.launch_button.setText("Kill")
- self.game_running = True
- else:
- logger.warning("Error")
+ self.proc = legendaryUtils.launch_game(self.app_name)
+ if not self.proc:
+ print("Fail")
+ return
+
+ self.proc.finished.connect(self.finished)
+ self.launch_button.setText("Kill")
+ self.game_running = True
+
else:
self.kill()
+ def finished(self, exit_code):
+ self.launch_button.setText("Launch")
+ logger.info(f"Game {self.title} finished with exit code {exit_code}")
+ self.game_running = False
+
def kill(self):
self.proc.kill()
self.launch_button.setText("Launch")
self.game_running = False
+ logger.info("Killing Game")
def get_rating(self) -> str:
return "gold" # TODO
diff --git a/Rare/TabWidgets.py b/Rare/TabWidgets.py
index bf83273e..70881a95 100644
--- a/Rare/TabWidgets.py
+++ b/Rare/TabWidgets.py
@@ -54,8 +54,6 @@ class Settings(QScrollArea):
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
# Settings
- if RareConfig.get_config()["Rare"].get("theme") == "dark":
- self.parent().parent().setStyleSheet(open("../Styles/style.qss").read())
self.layout = QVBoxLayout()
self.layout.addWidget(QLabel("
Rare Settings
"))
@@ -64,6 +62,10 @@ class Settings(QScrollArea):
self.gen_form_legendary()
self.gen_form_rare()
+ if RareConfig.get_config()["Rare"].get("theme") == "dark":
+ self.parent().parent().setStyleSheet(open("../Styles/style.qss").read())
+ self.style_combo_box.setCurrentIndex(1)
+
self.logout_button = QPushButton("Logout")
self.logout_button.clicked.connect(self.logout)
self.layout.addWidget(self.logged_in_as)
@@ -88,11 +90,16 @@ class Settings(QScrollArea):
self.setLayout(self.layout)
def update_rare_settings(self):
- print("Update Rare settings")
+ logger.info("Update Rare settings")
+ config = {"Rare": {}}
if self.style_combo_box.currentIndex() == 1:
self.parent().parent().parent().setStyleSheet(open("../Styles/style.qss").read())
+ config["Rare"]["theme"] = "dark"
else:
self.parent().parent().parent().setStyleSheet("")
+ config["Rare"]["theme"] = "light"
+
+ RareConfig.set_config(config)
def update_legendary_settings(self):
print("Legendary update")
@@ -137,11 +144,14 @@ class Settings(QScrollArea):
self.lgd_conf_locale = QLineEdit(self.config["Legendary"]["locale"])
self.add_button = QPushButton("Add Environment Variable")
+ self.delete_env_var = QPushButton("Delete selected Variable")
+ self.delete_env_var.clicked.connect(self.delete_var)
self.add_button.clicked.connect(self.add_variable)
self.form.addRow(QLabel("Default Wineprefix"), self.lgd_conf_wine_prefix)
self.form.addRow(QLabel("Wine executable"), self.lgd_conf_wine_exec)
self.form.addRow(QLabel("Environment Variables"), self.table)
self.form.addRow(QLabel("Add Variable"), self.add_button)
+ self.form.addRow(QLabel("Delete Variable"), self.delete_env_var)
self.form.addRow(QLabel("Locale"), self.lgd_conf_locale)
self.form_group_box.setLayout(self.form)
@@ -152,6 +162,9 @@ class Settings(QScrollArea):
self.table.setItem(self.table.rowCount(), 0, QTableWidgetItem(""))
self.table.setItem(self.table.rowCount(), 1, QTableWidgetItem(""))
+ def delete_var(self):
+ self.table.removeRow(self.table.currentRow())
+
def gen_form_rare(self):
self.rare_form_group_box = QGroupBox("Rare Settings")
self.rare_form = QFormLayout()
diff --git a/Rare/utils/legendaryUtils.py b/Rare/utils/legendaryUtils.py
index dc33e23f..93828d31 100644
--- a/Rare/utils/legendaryUtils.py
+++ b/Rare/utils/legendaryUtils.py
@@ -3,6 +3,7 @@ import os
import subprocess
from getpass import getuser
+from PyQt5.QtCore import QProcess, QProcessEnvironment
from legendary.core import LegendaryCore
core = LegendaryCore()
@@ -57,35 +58,43 @@ def launch_game(app_name: str, offline: bool = False, skip_version_check: bool =
game = core.get_installed_game(app_name)
if not game:
print("Game not found")
- return 1
+ return None
if game.is_dlc:
print("Game is dlc")
- return 1
+ return None
if not os.path.exists(game.install_path):
print("Game doesn't exist")
- return 1
+ return None
if not offline:
print("logging in")
if not core.login():
- return 1
+ return None
if not skip_version_check and not core.is_noupdate_game(app_name):
# check updates
try:
latest = core.get_asset(app_name, update=True)
except ValueError:
print("Metadata doesn't exist")
- return 1
+ return None
if latest.build_version != game.version:
print("Please update game")
- return 1
+ return None
params, cwd, env = core.get_launch_parameters(app_name=app_name, offline=offline,
extra_args=extra, user=username_override,
wine_bin=wine_bin, wine_pfx=wine_prfix,
language=language, wrapper=wrapper,
disable_wine=no_wine)
+ process = QProcess()
+ process.setWorkingDirectory(cwd)
+ environment = QProcessEnvironment()
+ for e in env:
+ environment.insert(e, env[e])
+ process.setProcessEnvironment(environment)
- return subprocess.Popen(params, cwd=cwd, env=env)
+ process.start(params[0], params[1:])
+ return process
+ # return subprocess.Popen(params, cwd=cwd, env=env)
def auth_import(lutris: bool = False, wine_prefix: str = None) -> bool: