1
0
Fork 0
mirror of synced 2024-05-20 12:32:50 +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 os
import platform
import shutil
from dataclasses import dataclass
import datetime
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.QtNetwork import QLocalSocket
from PyQt5.QtWidgets import QMessageBox, QPushButton
from rare.components.dialogs.uninstall_dialog import UninstallDialog
from rare.components.extra.console import Console
from rare.components.tabs.games import CloudSaveUtils
from rare.game_launch_helper import message_models
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton
from rare.utils import legendary_utils
from rare.utils import utils
from rare.utils.meta import RareGameMeta
from rare.game_launch_helper import message_models
logger = getLogger("GameUtils")
@ -146,7 +143,6 @@ class GameUtils(QObject):
self.signals = GlobalSignalsSingleton()
self.args = ArgumentsSingleton()
self.console = Console()
self.cloud_save_utils = CloudSaveUtils()
self.cloud_save_utils.sync_finished.connect(self.sync_finished)
self.game_meta = RareGameMeta()
@ -251,7 +247,6 @@ class GameUtils(QObject):
self.finished.emit(app_name, "")
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("")
is_origin = self.core.get_game(app_name).third_party_store == "Origin"
if exit_code == 1 and is_origin:
@ -277,8 +272,6 @@ class GameUtils(QObject):
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)
if app_name in self.running_games.keys():
@ -302,77 +295,6 @@ class GameUtils(QObject):
# TODO move this to helper
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):
if app_name in self.launch_queue.keys():
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")):
for i in os.listdir(os.path.join(path, ".egstore")):
if i.endswith(".mancpn"):
file = os.path.join(path, ".egstore", i)
return json.load(open(file, "r")).get("AppName")
with open(os.path.join(path, ".egstore", i)) as file:
app_name = json.load(file).get("AppName")
return app_name
elif app_name := legendary_utils.resolve_aliases(
core, os.path.basename(os.path.normpath(path))):
# 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.QtNetwork import QLocalServer, QLocalSocket
from .console import Console
from .lgd_helper import get_launch_args, InitArgs, get_configured_process, LaunchArgs, GameArgsError
from .message_models import ErrorModel, Actions, FinishedModel, BaseModel, StateChangedModel
from ..components.extra.console import Console
from ..shared import LegendaryCoreSingleton
from ..widgets.rare_app import RareApp
@ -94,9 +94,16 @@ class GameProcessApp(RareApp):
if self.console:
self.game_process.readyReadStandardOutput.connect(
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()

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.QtWidgets import (
QPlainTextEdit,
@ -15,6 +17,8 @@ from rare.ui.components.extra.console_env import Ui_ConsoleEnv
class Console(QDialog):
term = pyqtSignal()
kill = pyqtSignal()
env: QProcessEnvironment
def __init__(self, parent=None):
@ -27,7 +31,6 @@ class Console(QDialog):
layout.addWidget(self.console)
button_layout = QHBoxLayout()
button_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
self.env_button = QPushButton(self.tr("Show environment"))
button_layout.addWidget(self.env_button)
@ -41,6 +44,18 @@ class Console(QDialog):
button_layout.addWidget(self.clear_button)
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)
self.setLayout(layout)

View file

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

View file

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