1
0
Fork 0
mirror of synced 2024-06-03 03:04:42 +12:00

Merge pull request #228 from loathingKernel/fixups

Fixups
This commit is contained in:
Dummerle 2022-07-11 22:20:28 +02:00 committed by GitHub
commit 44926869bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 38 additions and 93 deletions

View file

@ -1,24 +1,21 @@
import datetime
import json import json
import os import os
import platform
import shutil
from dataclasses import dataclass from dataclasses import dataclass
import datetime
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import QObject, QSettings, QProcess, QProcessEnvironment, pyqtSignal, QUrl, QTimer from PyQt5.QtCore import QObject, QProcess, pyqtSignal, QUrl, QTimer
from PyQt5.QtGui import QDesktopServices from PyQt5.QtGui import QDesktopServices
from PyQt5.QtNetwork import QLocalSocket from PyQt5.QtNetwork import QLocalSocket
from PyQt5.QtWidgets import QMessageBox, QPushButton from PyQt5.QtWidgets import QMessageBox, QPushButton
from rare.components.dialogs.uninstall_dialog import UninstallDialog from rare.components.dialogs.uninstall_dialog import UninstallDialog
from rare.components.extra.console import Console
from rare.components.tabs.games import CloudSaveUtils from rare.components.tabs.games import CloudSaveUtils
from rare.game_launch_helper import message_models
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton
from rare.utils import legendary_utils from rare.utils import legendary_utils
from rare.utils import utils from rare.utils import utils
from rare.utils.meta import RareGameMeta from rare.utils.meta import RareGameMeta
from rare.game_launch_helper import message_models
logger = getLogger("GameUtils") logger = getLogger("GameUtils")
@ -146,7 +143,6 @@ class GameUtils(QObject):
self.signals = GlobalSignalsSingleton() self.signals = GlobalSignalsSingleton()
self.args = ArgumentsSingleton() self.args = ArgumentsSingleton()
self.console = Console()
self.cloud_save_utils = CloudSaveUtils() self.cloud_save_utils = CloudSaveUtils()
self.cloud_save_utils.sync_finished.connect(self.sync_finished) self.cloud_save_utils.sync_finished.connect(self.sync_finished)
self.game_meta = RareGameMeta() self.game_meta = RareGameMeta()
@ -251,7 +247,6 @@ class GameUtils(QObject):
self.finished.emit(app_name, "") self.finished.emit(app_name, "")
logger.info(f"Game exited with exit code: {exit_code}") logger.info(f"Game exited with exit code: {exit_code}")
self.console.log(f"Game exited with code: {exit_code}")
self.signals.set_discord_rpc.emit("") self.signals.set_discord_rpc.emit("")
is_origin = self.core.get_game(app_name).third_party_store == "Origin" is_origin = self.core.get_game(app_name).third_party_store == "Origin"
if exit_code == 1 and is_origin: if exit_code == 1 and is_origin:
@ -277,8 +272,6 @@ class GameUtils(QObject):
self.core.get_game(app_name).app_title self.core.get_game(app_name).app_title
), ),
) )
# show console on error, even if disabled
self.console.show()
game: RunningGameModel = self.running_games.get(app_name, None) game: RunningGameModel = self.running_games.get(app_name, None)
if app_name in self.running_games.keys(): if app_name in self.running_games.keys():
@ -302,77 +295,6 @@ class GameUtils(QObject):
# TODO move this to helper # TODO move this to helper
self.cloud_save_utils.game_finished(app_name, always_ask=False) self.cloud_save_utils.game_finished(app_name, always_ask=False)
def _launch_pre_command(self, env: dict):
proc = QProcess()
environment = QProcessEnvironment().systemEnvironment()
for e in env:
environment.insert(e, env[e])
proc.setProcessEnvironment(environment)
proc.readyReadStandardOutput.connect(
lambda: self.console.log(
str(proc.readAllStandardOutput().data(), "utf-8", "ignore")
)
)
proc.readyReadStandardError.connect(
lambda: self.console.error(
str(proc.readAllStandardError().data(), "utf-8", "ignore")
)
)
self.console.set_env(environment)
return proc
def _get_process(self, app_name, env):
process = GameProcess(app_name)
environment = QProcessEnvironment().systemEnvironment()
for e in env:
environment.insert(e, env[e])
process.setProcessEnvironment(environment)
process.readyReadStandardOutput.connect(
lambda: self.console.log(
str(process.readAllStandardOutput().data(), "utf-8", "ignore")
)
)
process.readyReadStandardError.connect(
lambda: self.console.error(
str(process.readAllStandardError().data(), "utf-8", "ignore")
)
)
process.finished.connect(lambda x: self.game_finished(x, app_name))
process.stateChanged.connect(
lambda state: self.console.show()
if (state == QProcess.Running
and QSettings().value("show_console", False, bool))
else None
)
self.console.set_env(environment)
return process
def _launch_origin(self, app_name, process: QProcess):
origin_uri = self.core.get_origin_uri(app_name, self.args.offline)
logger.info("Launch Origin Game: ")
if platform.system() == "Windows":
QDesktopServices.openUrl(QUrl(origin_uri))
self.finished.emit(app_name, "")
return
command = self.core.get_app_launch_command(app_name)
if not os.path.exists(command[0]) and shutil.which(command[0]) is None:
# wine binary does not exist
QMessageBox.warning(
None, "Warning",
self.tr(
"'{}' does not exist. Please change it in Settings"
).format(command[0]),
)
process.deleteLater()
return
command.append(origin_uri)
process.start(command[0], command[1:])
def sync_finished(self, app_name): def sync_finished(self, app_name):
if app_name in self.launch_queue.keys(): if app_name in self.launch_queue.keys():
self.cloud_save_finished.emit(app_name) self.cloud_save_finished.emit(app_name)

View file

@ -22,8 +22,9 @@ def find_app_name(path: str, core) -> Optional[str]:
if os.path.exists(os.path.join(path, ".egstore")): if os.path.exists(os.path.join(path, ".egstore")):
for i in os.listdir(os.path.join(path, ".egstore")): for i in os.listdir(os.path.join(path, ".egstore")):
if i.endswith(".mancpn"): if i.endswith(".mancpn"):
file = os.path.join(path, ".egstore", i) with open(os.path.join(path, ".egstore", i)) as file:
return json.load(open(file, "r")).get("AppName") app_name = json.load(file).get("AppName")
return app_name
elif app_name := legendary_utils.resolve_aliases( elif app_name := legendary_utils.resolve_aliases(
core, os.path.basename(os.path.normpath(path))): core, os.path.basename(os.path.normpath(path))):
# return None if game does not exist (Workaround for overlay) # return None if game does not exist (Workaround for overlay)

View file

@ -11,9 +11,9 @@ from PyQt5.QtCore import QObject, QProcess, pyqtSignal, QUrl, QRunnable, QThread
from PyQt5.QtGui import QDesktopServices from PyQt5.QtGui import QDesktopServices
from PyQt5.QtNetwork import QLocalServer, QLocalSocket from PyQt5.QtNetwork import QLocalServer, QLocalSocket
from .console import Console
from .lgd_helper import get_launch_args, InitArgs, get_configured_process, LaunchArgs, GameArgsError from .lgd_helper import get_launch_args, InitArgs, get_configured_process, LaunchArgs, GameArgsError
from .message_models import ErrorModel, Actions, FinishedModel, BaseModel, StateChangedModel from .message_models import ErrorModel, Actions, FinishedModel, BaseModel, StateChangedModel
from ..components.extra.console import Console
from ..shared import LegendaryCoreSingleton from ..shared import LegendaryCoreSingleton
from ..widgets.rare_app import RareApp from ..widgets.rare_app import RareApp
@ -94,9 +94,16 @@ class GameProcessApp(RareApp):
if self.console: if self.console:
self.game_process.readyReadStandardOutput.connect( self.game_process.readyReadStandardOutput.connect(
lambda: self.console.log( lambda: self.console.log(
str(self.game_process.readAllStandardOutput().data(), "utf-8", "ignore") self.game_process.readAllStandardOutput().data().decode("utf-8", "ignore")
) )
) )
self.game_process.readyReadStandardError.connect(
lambda: self.console.log(
self.game_process.readAllStandardError().data().decode("utf-8", "ignore")
)
)
self.console.term.connect(lambda: self.game_process.terminate())
self.console.kill.connect(lambda: self.game_process.kill())
self.start_time = time.time() self.start_time = time.time()

View file

@ -1,4 +1,6 @@
from PyQt5.QtCore import QProcessEnvironment import platform
from PyQt5.QtCore import QProcessEnvironment, pyqtSignal
from PyQt5.QtGui import QTextCursor, QFont from PyQt5.QtGui import QTextCursor, QFont
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QPlainTextEdit, QPlainTextEdit,
@ -15,6 +17,8 @@ from rare.ui.components.extra.console_env import Ui_ConsoleEnv
class Console(QDialog): class Console(QDialog):
term = pyqtSignal()
kill = pyqtSignal()
env: QProcessEnvironment env: QProcessEnvironment
def __init__(self, parent=None): def __init__(self, parent=None):
@ -27,7 +31,6 @@ class Console(QDialog):
layout.addWidget(self.console) layout.addWidget(self.console)
button_layout = QHBoxLayout() button_layout = QHBoxLayout()
button_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
self.env_button = QPushButton(self.tr("Show environment")) self.env_button = QPushButton(self.tr("Show environment"))
button_layout.addWidget(self.env_button) button_layout.addWidget(self.env_button)
@ -41,6 +44,18 @@ class Console(QDialog):
button_layout.addWidget(self.clear_button) button_layout.addWidget(self.clear_button)
self.clear_button.clicked.connect(self.console.clear) self.clear_button.clicked.connect(self.console.clear)
button_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
self.terminate_button = QPushButton(self.tr("Terminate"))
self.terminate_button.setVisible(platform.system() == "Windows")
button_layout.addWidget(self.terminate_button)
self.terminate_button.clicked.connect(lambda: self.term.emit())
self.kill_button = QPushButton(self.tr("Kill"))
self.kill_button.setVisible(platform.system() == "Windows")
button_layout.addWidget(self.kill_button)
self.kill_button.clicked.connect(lambda: self.kill.emit())
layout.addLayout(button_layout) layout.addLayout(button_layout)
self.setLayout(layout) self.setLayout(layout)

View file

@ -40,8 +40,8 @@ class Ui_ImportGroup(object):
self.import_folder_check.setFont(font) self.import_folder_check.setFont(font)
self.import_folder_check.setObjectName("import_folder_check") self.import_folder_check.setObjectName("import_folder_check")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.import_folder_check) self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.import_folder_check)
self.horizontalLayout = QtWidgets.QHBoxLayout() self.button_info_layout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout") self.button_info_layout.setObjectName("button_info_layout")
self.import_button = QtWidgets.QPushButton(ImportGroup) self.import_button = QtWidgets.QPushButton(ImportGroup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -49,12 +49,12 @@ class Ui_ImportGroup(object):
sizePolicy.setHeightForWidth(self.import_button.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.import_button.sizePolicy().hasHeightForWidth())
self.import_button.setSizePolicy(sizePolicy) self.import_button.setSizePolicy(sizePolicy)
self.import_button.setObjectName("import_button") self.import_button.setObjectName("import_button")
self.horizontalLayout.addWidget(self.import_button) self.button_info_layout.addWidget(self.import_button)
self.info_label = QtWidgets.QLabel(ImportGroup) self.info_label = QtWidgets.QLabel(ImportGroup)
self.info_label.setText("") self.info_label.setText("")
self.info_label.setObjectName("info_label") self.info_label.setObjectName("info_label")
self.horizontalLayout.addWidget(self.info_label) self.button_info_layout.addWidget(self.info_label)
self.formLayout.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout) self.formLayout.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
self.retranslateUi(ImportGroup) self.retranslateUi(ImportGroup)
QtCore.QMetaObject.connectSlotsByName(ImportGroup) QtCore.QMetaObject.connectSlotsByName(ImportGroup)

View file

@ -60,7 +60,7 @@
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="button_info_layout">
<item> <item>
<widget class="QPushButton" name="import_button"> <widget class="QPushButton" name="import_button">
<property name="sizePolicy"> <property name="sizePolicy">