diff --git a/.gitignore b/.gitignore index a0c0d5f4..b5aa625d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ __pycache__ /AppDir/ /System Volume Information/ /test_files/ +/rare.build +/rare.bin diff --git a/rare/components/dialogs/install_dialog.py b/rare/components/dialogs/install_dialog.py index ff734b65..c4e2281c 100644 --- a/rare/components/dialogs/install_dialog.py +++ b/rare/components/dialogs/install_dialog.py @@ -3,9 +3,9 @@ import platform as pf import sys from typing import Tuple, List, Union, Optional -from PyQt5.QtCore import Qt, QObject, QRunnable, QThreadPool, pyqtSignal, pyqtSlot +from PyQt5.QtCore import Qt, QObject, QRunnable, QThreadPool, pyqtSignal, pyqtSlot, QSettings from PyQt5.QtGui import QCloseEvent, QKeyEvent -from PyQt5.QtWidgets import QDialog, QFileDialog, QCheckBox +from PyQt5.QtWidgets import QDialog, QFileDialog, QCheckBox, QLayout from legendary.models.downloading import ConditionCheckResult from legendary.models.game import Game from legendary.utils.selective_dl import get_sdl_appname @@ -24,14 +24,15 @@ from rare.utils.misc import get_size from rare.widgets.collabsible_widget import CollabsibleWidget -class InstallDialog(QDialog, Ui_InstallDialog): +class InstallDialog(QDialog): result_ready = pyqtSignal(InstallQueueItemModel) def __init__(self, dl_item: InstallQueueItemModel, update=False, repair=False, silent=False, parent=None): super(InstallDialog, self).__init__(parent) - self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose, True) self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint) + self.ui = Ui_InstallDialog() + self.ui.setupUi(self) self.core = LegendaryCoreSingleton() self.api_results = ApiResultsSingleton() @@ -42,11 +43,11 @@ class InstallDialog(QDialog, Ui_InstallDialog): if not self.dl_item.options.overlay else Game(app_name=self.app_name, app_title="Epic Overlay") ) - self.advanced_layout.setParent(None) + self.ui.advanced_layout.setParent(None) self.advanced_widget = CollabsibleWidget( - self.advanced_layout, self.tr("Advanced options"), parent=self + self.ui.advanced_layout, self.tr("Advanced options"), parent=self ) - self.collapsible_layout.addWidget(self.advanced_widget) + self.ui.collapsible_layout.addWidget(self.advanced_widget) self.game_path = self.game.metadata.get("customAttributes", {}).get("FolderName", {}).get("value", "") @@ -62,7 +63,7 @@ class InstallDialog(QDialog, Ui_InstallDialog): self.threadpool.setMaxThreadCount(1) header = self.tr("Update") if update else self.tr("Install") - self.install_dialog_label.setText(f'

{header} "{self.game.app_title}"

') + self.ui.install_dialog_label.setText(f'

{header} "{self.game.app_title}"

') self.setWindowTitle(f'{self.windowTitle()} - {header} "{self.game.app_title}"') if not self.dl_item.options.base_path: @@ -76,14 +77,15 @@ class InstallDialog(QDialog, Ui_InstallDialog): edit_func=self.option_changed, parent=self, ) - self.install_dir_layout.addWidget(self.install_dir_edit) + self.ui.install_dir_layout.addWidget(self.install_dir_edit) if self.update: - self.install_dir_label.setVisible(False) + self.ui.install_dir_label.setVisible(False) self.install_dir_edit.setVisible(False) - self.shortcut_lbl.setVisible(False) - self.shortcut_cb.setVisible(False) - self.shortcut_cb.setChecked(False) + self.ui.shortcut_lbl.setVisible(False) + self.ui.shortcut_cb.setVisible(False) + else: + self.ui.shortcut_cb.setChecked(QSettings().value("create_shortcut", True, bool)) self.error_box() @@ -92,70 +94,70 @@ class InstallDialog(QDialog, Ui_InstallDialog): platforms.append("Win32") if dl_item.options.app_name in self.api_results.mac_games: platforms.append("Mac") - self.platform_combo_box.addItems(platforms) - self.platform_combo_box.currentIndexChanged.connect(lambda: self.option_changed(None)) - self.platform_combo_box.currentIndexChanged.connect(lambda: self.error_box()) - self.platform_combo_box.currentIndexChanged.connect( + self.ui.platform_combo_box.addItems(platforms) + self.ui.platform_combo_box.currentIndexChanged.connect(lambda: self.option_changed(None)) + self.ui.platform_combo_box.currentIndexChanged.connect(lambda: self.error_box()) + self.ui.platform_combo_box.currentIndexChanged.connect( lambda i: self.error_box( self.tr("Warning"), self.tr("You will not be able to run the game if you select {} as platform").format( - self.platform_combo_box.itemText(i) + self.ui.platform_combo_box.itemText(i) ), ) - if (self.platform_combo_box.currentText() == "Mac" and pf.system() != "Darwin") + if (self.ui.platform_combo_box.currentText() == "Mac" and pf.system() != "Darwin") else None ) - self.platform_combo_box.currentTextChanged.connect(self.setup_sdl_list) + self.ui.platform_combo_box.currentTextChanged.connect(self.setup_sdl_list) if pf.system() == "Darwin" and "Mac" in platforms: - self.platform_combo_box.setCurrentIndex(platforms.index("Mac")) + self.ui.platform_combo_box.setCurrentIndex(platforms.index("Mac")) - self.max_workers_spin.setValue(self.core.lgd.config.getint("Legendary", "max_workers", fallback=0)) - self.max_workers_spin.valueChanged.connect(self.option_changed) + self.ui.max_workers_spin.setValue(self.core.lgd.config.getint("Legendary", "max_workers", fallback=0)) + self.ui.max_workers_spin.valueChanged.connect(self.option_changed) - self.max_memory_spin.setValue(self.core.lgd.config.getint("Legendary", "max_memory", fallback=0)) - self.max_memory_spin.valueChanged.connect(self.option_changed) + self.ui.max_memory_spin.setValue(self.core.lgd.config.getint("Legendary", "max_memory", fallback=0)) + self.ui.max_memory_spin.valueChanged.connect(self.option_changed) - self.dl_optimizations_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.download_only_check.stateChanged.connect(lambda: self.non_reload_option_changed("download_only")) - self.shortcut_cb.stateChanged.connect(lambda: self.non_reload_option_changed("shortcut")) + self.ui.dl_optimizations_check.stateChanged.connect(self.option_changed) + self.ui.force_download_check.stateChanged.connect(self.option_changed) + self.ui.ignore_space_check.stateChanged.connect(self.option_changed) + self.ui.download_only_check.stateChanged.connect(lambda: self.non_reload_option_changed("download_only")) + self.ui.shortcut_cb.stateChanged.connect(lambda: self.non_reload_option_changed("shortcut")) self.sdl_list_cbs: List[TagCheckBox] = [] self.config_tags: Optional[List[str]] = None self.setup_sdl_list("Mac" if pf.system() == "Darwin" and "Mac" in platforms else "Windows") - self.install_button.setEnabled(False) + self.ui.install_button.setEnabled(False) if self.dl_item.options.overlay: - self.platform_label.setVisible(False) - self.platform_combo_box.setVisible(False) - self.ignore_space_check.setVisible(False) - self.ignore_space_label.setVisible(False) - self.download_only_check.setVisible(False) - self.download_only_label.setVisible(False) - self.shortcut_cb.setVisible(False) - self.shortcut_lbl.setVisible(False) + self.ui.platform_label.setVisible(False) + self.ui.platform_combo_box.setVisible(False) + self.ui.ignore_space_check.setVisible(False) + self.ui.ignore_space_label.setVisible(False) + self.ui.download_only_check.setVisible(False) + self.ui.download_only_label.setVisible(False) + self.ui.shortcut_cb.setVisible(False) + self.ui.shortcut_lbl.setVisible(False) if pf.system() == "Darwin": - self.shortcut_cb.setDisabled(True) - self.shortcut_cb.setChecked(False) - self.shortcut_cb.setToolTip(self.tr("Creating a shortcut is not supported on MacOS")) + self.ui.shortcut_cb.setDisabled(True) + self.ui.shortcut_cb.setChecked(False) + self.ui.shortcut_cb.setToolTip(self.tr("Creating a shortcut is not supported on MacOS")) - self.install_preqs_lbl.setVisible(False) - self.install_preqs_check.setVisible(False) - self.install_preqs_check.stateChanged.connect(lambda: self.non_reload_option_changed("install_preqs")) + self.ui.install_preqs_lbl.setVisible(False) + self.ui.install_preqs_check.setVisible(False) + self.ui.install_preqs_check.stateChanged.connect(lambda: self.non_reload_option_changed("install_preqs")) self.non_reload_option_changed("shortcut") - self.cancel_button.clicked.connect(self.cancel_clicked) - self.verify_button.clicked.connect(self.verify_clicked) - self.install_button.clicked.connect(self.install_clicked) + self.ui.cancel_button.clicked.connect(self.cancel_clicked) + self.ui.verify_button.clicked.connect(self.verify_clicked) + self.ui.install_button.clicked.connect(self.install_clicked) - self.install_preqs_check.setChecked(self.dl_item.options.install_preqs) + self.ui.install_preqs_check.setChecked(self.dl_item.options.install_preqs) - self.install_dialog_layout.setSizeConstraint(self.install_dialog_layout.SetFixedSize) + self.ui.install_dialog_layout.setSizeConstraint(QLayout.SetFixedSize) def execute(self): if self.silent: @@ -188,27 +190,27 @@ class InstallDialog(QDialog, Ui_InstallDialog): if self.config_tags is not None: if all(elem in self.config_tags for elem in info["tags"]): cb.setChecked(True) - self.sdl_list_layout.addWidget(cb) + self.ui.sdl_list_layout.addWidget(cb) self.sdl_list_cbs.append(cb) - self.sdl_list_frame.resize(self.sdl_list_frame.minimumSize()) + self.ui.sdl_list_layout.setSizeConstraint(QLayout.SetFixedSize) for cb in self.sdl_list_cbs: cb.stateChanged.connect(self.option_changed) else: - self.sdl_list_frame.setVisible(False) - self.sdl_list_label.setVisible(False) + self.ui.sdl_list_frame.setVisible(False) + self.ui.sdl_list_label.setVisible(False) def get_options(self): self.dl_item.options.base_path = 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.shared_memory = self.max_memory_spin.value() - self.dl_item.options.order_opt = self.dl_optimizations_check.isChecked() - self.dl_item.options.force = self.force_download_check.isChecked() - self.dl_item.options.ignore_space = self.ignore_space_check.isChecked() - self.dl_item.options.no_install = self.download_only_check.isChecked() - self.dl_item.options.platform = self.platform_combo_box.currentText() - self.dl_item.options.install_preqs = self.install_preqs_check.isChecked() - self.dl_item.options.create_shortcut = self.shortcut_cb.isChecked() + self.dl_item.options.max_workers = self.ui.max_workers_spin.value() + self.dl_item.options.shared_memory = self.ui.max_memory_spin.value() + self.dl_item.options.order_opt = self.ui.dl_optimizations_check.isChecked() + self.dl_item.options.force = self.ui.force_download_check.isChecked() + self.dl_item.options.ignore_space = self.ui.ignore_space_check.isChecked() + self.dl_item.options.no_install = self.ui.download_only_check.isChecked() + self.dl_item.options.platform = self.ui.platform_combo_box.currentText() + self.dl_item.options.install_preqs = self.ui.install_preqs_check.isChecked() + self.dl_item.options.create_shortcut = self.ui.shortcut_cb.isChecked() if self.sdl_list_cbs: self.dl_item.options.install_tag = [""] for cb in self.sdl_list_cbs: @@ -229,30 +231,31 @@ class InstallDialog(QDialog, Ui_InstallDialog): def verify_clicked(self): self.error_box() message = self.tr("Updating...") - self.download_size_info_label.setText(message) - self.download_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") - self.install_size_info_label.setText(message) - self.install_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") - self.cancel_button.setEnabled(False) - self.verify_button.setEnabled(False) - self.install_button.setEnabled(False) + self.ui.download_size_info_label.setText(message) + self.ui.download_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") + self.ui.install_size_info_label.setText(message) + self.ui.install_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") + self.ui.cancel_button.setEnabled(False) + self.ui.verify_button.setEnabled(False) + self.ui.install_button.setEnabled(False) self.options_changed = False self.get_options() self.get_download_info() def option_changed(self, path) -> Tuple[bool, str, str]: self.options_changed = True - self.install_button.setEnabled(False) - self.verify_button.setEnabled(not self.worker_running) + self.ui.install_button.setEnabled(False) + self.ui.verify_button.setEnabled(not self.worker_running) return True, path, "" def non_reload_option_changed(self, option: str): if option == "download_only": - self.dl_item.options.no_install = self.download_only_check.isChecked() + self.dl_item.options.no_install = self.ui.download_only_check.isChecked() elif option == "shortcut": - self.dl_item.options.create_shortcut = self.shortcut_cb.isChecked() + QSettings().setValue("create_shortcut", self.ui.shortcut_cb.isChecked()) + self.dl_item.options.create_shortcut = self.ui.shortcut_cb.isChecked() elif option == "install_preqs": - self.dl_item.options.install_preqs = self.install_preqs_check.isChecked() + self.dl_item.options.install_preqs = self.ui.install_preqs_check.isChecked() def cancel_clicked(self): if self.config_tags: @@ -274,42 +277,42 @@ class InstallDialog(QDialog, Ui_InstallDialog): download_size = self.dl_item.download.analysis.dl_size install_size = self.dl_item.download.analysis.install_size if download_size: - self.download_size_info_label.setText("{}".format(get_size(download_size))) - self.download_size_info_label.setStyleSheet("font-style: normal; font-weight: bold") - self.install_button.setEnabled(not self.options_changed) + self.ui.download_size_info_label.setText("{}".format(get_size(download_size))) + self.ui.download_size_info_label.setStyleSheet("font-style: normal; font-weight: bold") + self.ui.install_button.setEnabled(not self.options_changed) else: - self.install_size_info_label.setText(self.tr("Game already installed")) - self.install_size_info_label.setStyleSheet("font-style: italics; font-weight: normal") - self.install_size_info_label.setText("{}".format(get_size(install_size))) - self.install_size_info_label.setStyleSheet("font-style: normal; font-weight: bold") - self.verify_button.setEnabled(self.options_changed) - self.cancel_button.setEnabled(True) - if self.silent: - self.close() + self.ui.install_size_info_label.setText(self.tr("Game already installed")) + self.ui.install_size_info_label.setStyleSheet("font-style: italics; font-weight: normal") + self.ui.install_size_info_label.setText("{}".format(get_size(install_size))) + self.ui.install_size_info_label.setStyleSheet("font-style: normal; font-weight: bold") + self.ui.verify_button.setEnabled(self.options_changed) + self.ui.cancel_button.setEnabled(True) if pf.system() == "Windows" or ArgumentsSingleton().debug: if dl_item.igame.prereq_info and not dl_item.igame.prereq_info.get("installed", False): - self.install_preqs_check.setVisible(True) - self.install_preqs_lbl.setVisible(True) - self.install_preqs_check.setChecked(True) - self.install_preqs_check.setText( + self.ui.install_preqs_check.setVisible(True) + self.ui.install_preqs_lbl.setVisible(True) + self.ui.install_preqs_check.setChecked(True) + self.ui.install_preqs_check.setText( self.tr("Also install: {}").format(dl_item.igame.prereq_info.get("name", "")) ) + if self.silent: + self.close() def on_worker_failed(self, message: str): error_text = self.tr("Error") - self.download_size_info_label.setText(error_text) - self.install_size_info_label.setText(error_text) + self.ui.download_size_info_label.setText(error_text) + self.ui.install_size_info_label.setText(error_text) self.error_box(error_text, message) - self.verify_button.setEnabled(self.options_changed) - self.cancel_button.setEnabled(True) + self.ui.verify_button.setEnabled(self.options_changed) + self.ui.cancel_button.setEnabled(True) if self.silent: - self.close() + self.show() 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) + self.ui.warn_label.setVisible(bool(label)) + self.ui.warn_label.setText(label) + self.ui.warn_message.setVisible(bool(message)) + self.ui.warn_message.setText(message) def on_worker_finished(self): self.worker_running = False diff --git a/rare/ui/components/dialogs/install_dialog.py b/rare/ui/components/dialogs/install_dialog.py index 81059b8c..df52eea6 100644 --- a/rare/ui/components/dialogs/install_dialog.py +++ b/rare/ui/components/dialogs/install_dialog.py @@ -45,7 +45,6 @@ class Ui_InstallDialog(object): self.install_dialog_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.shortcut_lbl) self.shortcut_cb = QtWidgets.QCheckBox(InstallDialog) self.shortcut_cb.setText("") - self.shortcut_cb.setChecked(True) self.shortcut_cb.setObjectName("shortcut_cb") self.install_dialog_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.shortcut_cb) self.sdl_list_label = QtWidgets.QLabel(InstallDialog) diff --git a/rare/ui/components/dialogs/install_dialog.ui b/rare/ui/components/dialogs/install_dialog.ui index 37895437..0e3c9e53 100644 --- a/rare/ui/components/dialogs/install_dialog.ui +++ b/rare/ui/components/dialogs/install_dialog.ui @@ -66,9 +66,6 @@ - - true -