commit
44926869bb
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in a new issue