1
0
Fork 0
mirror of synced 2024-06-30 20:20:53 +12:00

InstallDialog: Remove QMessageBox, use existing dedicated label

InstallInfoWorker: Reset excepthook to default

Also pass through black formatter
This commit is contained in:
Stelios Tsampas 2022-05-27 13:23:08 +03:00
parent 3bf7b20fbc
commit 06c89b459e
3 changed files with 53 additions and 71 deletions

View file

@ -1,11 +1,12 @@
import os import os
import platform import platform
import sys
from multiprocessing import Queue as MPQueue from multiprocessing import Queue as MPQueue
from typing import Tuple from typing import Tuple
from PyQt5.QtCore import Qt, QObject, QRunnable, QThreadPool, pyqtSignal, pyqtSlot from PyQt5.QtCore import Qt, QObject, QRunnable, QThreadPool, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QKeyEvent from PyQt5.QtGui import QCloseEvent, QKeyEvent
from PyQt5.QtWidgets import QDialog, QFileDialog, QCheckBox, QMessageBox from PyQt5.QtWidgets import QDialog, QFileDialog, QCheckBox
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from legendary.models.downloading import ConditionCheckResult from legendary.models.downloading import ConditionCheckResult
from legendary.models.game import Game from legendary.models.game import Game
@ -21,9 +22,7 @@ from rare.utils.utils import get_size
class InstallDialog(QDialog, Ui_InstallDialog): class InstallDialog(QDialog, Ui_InstallDialog):
result_ready = pyqtSignal(InstallQueueItemModel) result_ready = pyqtSignal(InstallQueueItemModel)
def __init__( def __init__(self, dl_item: InstallQueueItemModel, update=False, silent=False, parent=None):
self, dl_item: InstallQueueItemModel, update=False, silent=False, parent=None
):
super(InstallDialog, self).__init__(parent) super(InstallDialog, self).__init__(parent)
self.setupUi(self) self.setupUi(self)
self.setAttribute(Qt.WA_DeleteOnClose, True) self.setAttribute(Qt.WA_DeleteOnClose, True)
@ -34,12 +33,13 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.dl_item = dl_item self.dl_item = dl_item
self.dl_item.status_q = MPQueue() self.dl_item.status_q = MPQueue()
self.app_name = self.dl_item.options.app_name self.app_name = self.dl_item.options.app_name
self.game = self.core.get_game(self.app_name) \ self.game = (
if not self.dl_item.options.overlay \ self.core.get_game(self.app_name)
if not self.dl_item.options.overlay
else Game(app_name=self.app_name, app_title="Epic Overlay") else Game(app_name=self.app_name, app_title="Epic Overlay")
)
self.game_path = self.game.metadata.get('customAttributes', {}). \ self.game_path = self.game.metadata.get("customAttributes", {}).get("FolderName", {}).get("value", "")
get('FolderName', {}).get('value', "")
self.update = update self.update = update
self.silent = silent self.silent = silent
@ -56,8 +56,9 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.setWindowTitle(f'{self.windowTitle()} - {header} "{self.game.app_title}"') self.setWindowTitle(f'{self.windowTitle()} - {header} "{self.game.app_title}"')
if not self.dl_item.options.base_path: if not self.dl_item.options.base_path:
self.dl_item.options.base_path = self.core.lgd.config.get("Legendary", "install_dir", self.dl_item.options.base_path = self.core.lgd.config.get(
fallback=os.path.expanduser("~/legendary")) "Legendary", "install_dir", fallback=os.path.expanduser("~/legendary")
)
self.install_dir_edit = PathEdit( self.install_dir_edit = PathEdit(
path=self.dl_item.options.base_path, path=self.dl_item.options.base_path,
@ -74,8 +75,7 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.shortcut_cb.setVisible(False) self.shortcut_cb.setVisible(False)
self.shortcut_cb.setChecked(False) self.shortcut_cb.setChecked(False)
self.warn_label.setVisible(False) self.error_box()
self.warn_message.setVisible(False)
platforms = ["Windows"] platforms = ["Windows"]
if dl_item.options.app_name in self.api_results.bit32_games: if dl_item.options.app_name in self.api_results.bit32_games:
@ -83,46 +83,32 @@ class InstallDialog(QDialog, Ui_InstallDialog):
if dl_item.options.app_name in self.api_results.mac_games: if dl_item.options.app_name in self.api_results.mac_games:
platforms.append("Mac") platforms.append("Mac")
self.platform_combo_box.addItems(platforms) self.platform_combo_box.addItems(platforms)
self.platform_combo_box.currentIndexChanged.connect(lambda: self.option_changed(None))
self.platform_combo_box.currentIndexChanged.connect( self.platform_combo_box.currentIndexChanged.connect(
lambda: self.option_changed(None) lambda i: self.error_box(
) self.tr("Warning"),
self.platform_combo_box.currentIndexChanged.connect(
lambda i: QMessageBox.warning(
self,
"Warning",
self.tr("You will not be able to run the Game if you choose {}").format( self.tr("You will not be able to run the Game if you choose {}").format(
self.platform_combo_box.itemText(i) self.platform_combo_box.itemText(i)
), ),
) )
if ( if (self.platform_combo_box.currentText() == "Mac" and platform.system() != "Darwin")
self.platform_combo_box.currentText() == "Mac"
and platform.system() != "Darwin"
)
else None else None
) )
if platform.system() == "Darwin" and "Mac" in platforms: if platform.system() == "Darwin" and "Mac" in platforms:
self.platform_combo_box.setCurrentIndex(platforms.index("Mac")) self.platform_combo_box.setCurrentIndex(platforms.index("Mac"))
self.max_workers_spin.setValue( self.max_workers_spin.setValue(self.core.lgd.config.getint("Legendary", "max_workers", fallback=0))
self.core.lgd.config.getint("Legendary", "max_workers", fallback=0)
)
self.max_workers_spin.valueChanged.connect(self.option_changed) self.max_workers_spin.valueChanged.connect(self.option_changed)
self.max_memory_spin.setValue( self.max_memory_spin.setValue(self.core.lgd.config.getint("Legendary", "max_memory", fallback=0))
self.core.lgd.config.getint("Legendary", "max_memory", fallback=0)
)
self.max_memory_spin.valueChanged.connect(self.option_changed) self.max_memory_spin.valueChanged.connect(self.option_changed)
self.dl_optimizations_check.stateChanged.connect(self.option_changed) self.dl_optimizations_check.stateChanged.connect(self.option_changed)
self.force_download_check.stateChanged.connect(self.option_changed) self.force_download_check.stateChanged.connect(self.option_changed)
self.ignore_space_check.stateChanged.connect(self.option_changed) self.ignore_space_check.stateChanged.connect(self.option_changed)
self.download_only_check.stateChanged.connect( self.download_only_check.stateChanged.connect(lambda: self.non_reload_option_changed("download_only"))
lambda: self.non_reload_option_changed("download_only") self.shortcut_cb.stateChanged.connect(lambda: self.non_reload_option_changed("shortcut"))
)
self.shortcut_cb.stateChanged.connect(
lambda: self.non_reload_option_changed("shortcut")
)
self.sdl_list_checks = list() self.sdl_list_checks = list()
try: try:
for key, info in games[self.app_name].items(): for key, info in games[self.app_name].items():
@ -178,9 +164,7 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.show() self.show()
def get_options(self): def get_options(self):
self.dl_item.options.base_path = ( self.dl_item.options.base_path = self.install_dir_edit.text() if not self.update else None
self.install_dir_edit.text() if not self.update else None
)
self.dl_item.options.max_workers = self.max_workers_spin.value() self.dl_item.options.max_workers = self.max_workers_spin.value()
self.dl_item.options.max_shm = self.max_memory_spin.value() self.dl_item.options.max_shm = self.max_memory_spin.value()
@ -206,17 +190,12 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.threadpool.start(info_worker) self.threadpool.start(info_worker)
def verify_clicked(self): def verify_clicked(self):
self.warn_label.setVisible(False) self.error_box()
self.warn_message.setVisible(False)
message = self.tr("Updating...") message = self.tr("Updating...")
self.download_size_info_label.setText(message) self.download_size_info_label.setText(message)
self.download_size_info_label.setStyleSheet( self.download_size_info_label.setStyleSheet("font-style: italic; font-weight: normal")
"font-style: italic; font-weight: normal"
)
self.install_size_info_label.setText(message) self.install_size_info_label.setText(message)
self.install_size_info_label.setStyleSheet( self.install_size_info_label.setStyleSheet("font-style: italic; font-weight: normal")
"font-style: italic; font-weight: normal"
)
self.cancel_button.setEnabled(False) self.cancel_button.setEnabled(False)
self.verify_button.setEnabled(False) self.verify_button.setEnabled(False)
self.install_button.setEnabled(False) self.install_button.setEnabled(False)
@ -253,19 +232,13 @@ class InstallDialog(QDialog, Ui_InstallDialog):
install_size = self.dl_item.download.analysis.install_size install_size = self.dl_item.download.analysis.install_size
if download_size: if download_size:
self.download_size_info_label.setText("{}".format(get_size(download_size))) self.download_size_info_label.setText("{}".format(get_size(download_size)))
self.download_size_info_label.setStyleSheet( self.download_size_info_label.setStyleSheet("font-style: normal; font-weight: bold")
"font-style: normal; font-weight: bold"
)
self.install_button.setEnabled(not self.options_changed) self.install_button.setEnabled(not self.options_changed)
else: else:
self.install_size_info_label.setText(self.tr("Game already installed")) self.install_size_info_label.setText(self.tr("Game already installed"))
self.install_size_info_label.setStyleSheet( self.install_size_info_label.setStyleSheet("font-style: italics; font-weight: normal")
"font-style: italics; font-weight: normal"
)
self.install_size_info_label.setText("{}".format(get_size(install_size))) self.install_size_info_label.setText("{}".format(get_size(install_size)))
self.install_size_info_label.setStyleSheet( self.install_size_info_label.setStyleSheet("font-style: normal; font-weight: bold")
"font-style: normal; font-weight: bold"
)
self.verify_button.setEnabled(self.options_changed) self.verify_button.setEnabled(self.options_changed)
self.cancel_button.setEnabled(True) self.cancel_button.setEnabled(True)
if self.silent: if self.silent:
@ -275,22 +248,25 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.install_preqs_check.setVisible(True) self.install_preqs_check.setVisible(True)
self.install_preqs_lbl.setVisible(True) self.install_preqs_lbl.setVisible(True)
self.install_preqs_check.setText( self.install_preqs_check.setText(
self.tr("Also install: {}").format(dl_item.igame.prereq_info.get("name", ""))) self.tr("Also install: {}").format(dl_item.igame.prereq_info.get("name", ""))
)
def on_worker_failed(self, message: str): def on_worker_failed(self, message: str):
error_text = self.tr("Error") error_text = self.tr("Error")
self.download_size_info_label.setText(error_text) self.download_size_info_label.setText(error_text)
self.install_size_info_label.setText(error_text) self.install_size_info_label.setText(error_text)
self.warn_label.setText(error_text) self.error_box(error_text, message)
self.warn_message.setText(message)
self.warn_message.setVisible(True)
self.warn_label.setVisible(True)
QMessageBox.critical(self, self.windowTitle(), message)
self.verify_button.setEnabled(self.options_changed) self.verify_button.setEnabled(self.options_changed)
self.cancel_button.setEnabled(True) self.cancel_button.setEnabled(True)
if self.silent: if self.silent:
self.close() self.close()
def error_box(self, label: str = "", message: str = ""):
self.warn_label.setVisible(bool(label))
self.warn_label.setText(label)
self.warn_message.setVisible(bool(message))
self.warn_message.setText(message)
def on_worker_finished(self): def on_worker_finished(self):
self.worker_running = False self.worker_running = False
@ -312,13 +288,13 @@ class InstallDialog(QDialog, Ui_InstallDialog):
class InstallInfoWorker(QRunnable): class InstallInfoWorker(QRunnable):
class Signals(QObject): class Signals(QObject):
result = pyqtSignal(InstallDownloadModel) result = pyqtSignal(InstallDownloadModel)
failed = pyqtSignal(str) failed = pyqtSignal(str)
finished = pyqtSignal() finished = pyqtSignal()
def __init__(self, core: LegendaryCore, dl_item: InstallQueueItemModel, game: Game = None): def __init__(self, core: LegendaryCore, dl_item: InstallQueueItemModel, game: Game = None):
sys.excepthook = sys.__excepthook__
super(InstallInfoWorker, self).__init__() super(InstallInfoWorker, self).__init__()
self.signals = InstallInfoWorker.Signals() self.signals = InstallInfoWorker.Signals()
self.core = core self.core = core
@ -368,7 +344,7 @@ class InstallInfoWorker(QRunnable):
path=self.dl_item.options.base_path, path=self.dl_item.options.base_path,
status_queue=self.dl_item.status_q, status_queue=self.dl_item.status_q,
max_workers=self.dl_item.options.max_workers, max_workers=self.dl_item.options.max_workers,
force=self.dl_item.options.force force=self.dl_item.options.force,
) )
download = InstallDownloadModel( download = InstallDownloadModel(
@ -378,15 +354,13 @@ class InstallInfoWorker(QRunnable):
igame=igame, igame=igame,
repair=False, repair=False,
repair_file="", repair_file="",
res=ConditionCheckResult() # empty res=ConditionCheckResult(), # empty
) )
if not download.res or not download.res.failures: if not download.res or not download.res.failures:
self.signals.result.emit(download) self.signals.result.emit(download)
else: else:
self.signals.failed.emit( self.signals.failed.emit("\n".join(str(i) for i in download.res.failures))
"\n".join(str(i) for i in download.res.failures)
)
except Exception as e: except Exception as e:
self.signals.failed.emit(str(e)) self.signals.failed.emit(str(e))
self.signals.finished.emit() self.signals.finished.emit()

View file

@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_InstallDialog(object): class Ui_InstallDialog(object):
def setupUi(self, InstallDialog): def setupUi(self, InstallDialog):
InstallDialog.setObjectName("InstallDialog") InstallDialog.setObjectName("InstallDialog")
InstallDialog.resize(379, 434) InstallDialog.resize(406, 447)
InstallDialog.setWindowTitle("Rare") InstallDialog.setWindowTitle("Rare")
self.install_dialog_layout = QtWidgets.QFormLayout(InstallDialog) self.install_dialog_layout = QtWidgets.QFormLayout(InstallDialog)
self.install_dialog_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) self.install_dialog_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
@ -119,6 +119,8 @@ class Ui_InstallDialog(object):
font = QtGui.QFont() font = QtGui.QFont()
font.setItalic(True) font.setItalic(True)
self.warn_message.setFont(font) self.warn_message.setFont(font)
self.warn_message.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.warn_message.setFrameShadow(QtWidgets.QFrame.Sunken)
self.warn_message.setWordWrap(True) self.warn_message.setWordWrap(True)
self.warn_message.setObjectName("warn_message") self.warn_message.setObjectName("warn_message")
self.install_dialog_layout.setWidget(15, QtWidgets.QFormLayout.FieldRole, self.warn_message) self.install_dialog_layout.setWidget(15, QtWidgets.QFormLayout.FieldRole, self.warn_message)
@ -224,7 +226,7 @@ class Ui_InstallDialog(object):
self.install_size_label.setText(_translate("InstallDialog", "Total install size")) self.install_size_label.setText(_translate("InstallDialog", "Total install size"))
self.install_size_info_label.setText(_translate("InstallDialog", "Click verify...")) self.install_size_info_label.setText(_translate("InstallDialog", "Click verify..."))
self.warn_message.setText(_translate("InstallDialog", "None")) self.warn_message.setText(_translate("InstallDialog", "None"))
self.warn_label.setText(_translate("InstallDialog", "Warnings")) self.warn_label.setText(_translate("InstallDialog", "Warning"))
self.cancel_button.setText(_translate("InstallDialog", "Cancel")) self.cancel_button.setText(_translate("InstallDialog", "Cancel"))
self.verify_button.setText(_translate("InstallDialog", "Verify")) self.verify_button.setText(_translate("InstallDialog", "Verify"))
self.install_button.setText(_translate("InstallDialog", "Install")) self.install_button.setText(_translate("InstallDialog", "Install"))

View file

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>379</width> <width>406</width>
<height>434</height> <height>447</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -205,6 +205,12 @@
<italic>true</italic> <italic>true</italic>
</font> </font>
</property> </property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text"> <property name="text">
<string>None</string> <string>None</string>
</property> </property>
@ -216,7 +222,7 @@
<item row="15" column="0"> <item row="15" column="0">
<widget class="QLabel" name="warn_label"> <widget class="QLabel" name="warn_label">
<property name="text"> <property name="text">
<string>Warnings</string> <string>Warning</string>
</property> </property>
</widget> </widget>
</item> </item>