From d801a145ab01d040ae8d8917f20124f1f3d02eae Mon Sep 17 00:00:00 2001 From: Dummerle <44114474+Dummerle@users.noreply.github.com> Date: Thu, 13 Jan 2022 18:58:07 +0100 Subject: [PATCH] Add update button, to update EOS overlay --- rare/components/tabs/settings/eos.py | 46 ++++++++++++++++--- .../ui/components/tabs/settings/eos_widget.py | 21 ++++++--- .../ui/components/tabs/settings/eos_widget.ui | 33 ++++++++++--- 3 files changed, 81 insertions(+), 19 deletions(-) diff --git a/rare/components/tabs/settings/eos.py b/rare/components/tabs/settings/eos.py index 6e01fd37..313c9ec7 100644 --- a/rare/components/tabs/settings/eos.py +++ b/rare/components/tabs/settings/eos.py @@ -3,6 +3,7 @@ import platform from logging import getLogger from typing import List +from PyQt5.QtCore import QRunnable, QObject, pyqtSignal, QThreadPool from PyQt5.QtWidgets import QGroupBox, QFormLayout, QMessageBox from legendary.utils import eos @@ -34,7 +35,19 @@ def get_wine_prefixes() -> List[str]: return prefixes -# TODO Update Button +class WorkerSignals(QObject): + update_available = pyqtSignal(bool) + + +class CheckForUpdateWorker(QRunnable): + def __init__(self): + super(CheckForUpdateWorker, self).__init__() + self.setAutoDelete(True) + self.signals = WorkerSignals() + + def run(self) -> None: + shared.core.check_for_overlay_updates() + self.signals.update_available.emit(shared.core.overlay_update_available) class EosWidget(QGroupBox, Ui_EosWidget): @@ -52,12 +65,14 @@ class EosWidget(QGroupBox, Ui_EosWidget): self.uninstall_button.clicked.connect(self.uninstall_overlay) self.update_button.setVisible(False) + self.update_info_lbl.setVisible(False) self.overlay = self.core.lgd.get_overlay_install_info() shared.signals.overlay_installation_finished.connect(self.overlay_installation_finished) self.update_check_button.clicked.connect(self.check_for_update) self.install_button.clicked.connect(self.install_overlay) + self.update_button.clicked.connect(lambda: self.install_overlay(True)) if self.overlay: # installed self.installed_version_lbl.setText(self.overlay.version) @@ -85,9 +100,15 @@ class EosWidget(QGroupBox, Ui_EosWidget): self.enabled_info_label.setText("") def check_for_update(self): - self.core.check_for_overlay_updates() - if self.core.overlay_update_available: - self.update_button.setVisible(True) + def worker_finished(update_available): + self.update_button.setVisible(update_available) + self.update_info_lbl.setVisible(update_available) + self.update_check_button.setDisabled(False) + + self.update_check_button.setDisabled(True) + worker = CheckForUpdateWorker() + worker.signals.update_available.connect(worker_finished) + QThreadPool.globalInstance().start(worker) def overlay_installation_finished(self): self.overlay = self.core.lgd.get_overlay_install_info() @@ -101,6 +122,9 @@ class EosWidget(QGroupBox, Ui_EosWidget): self.installed_version_lbl.setText(self.overlay.version) self.installed_path_lbl.setText(self.overlay.install_path) + self.update_button.setVisible(False) + self.update_info_lbl.setVisible(False) + self.enable_gb.setEnabled(True) def update_select_combo(self, i: None): @@ -156,8 +180,18 @@ class EosWidget(QGroupBox, Ui_EosWidget): enabled = True self.enabled_cb.setChecked(enabled) - def install_overlay(self): - options = InstallOptionsModel(app_name="", base_path=os.path.expanduser("~/legendary/.overlay"), + def install_overlay(self, update=False): + + base_path = os.path.expanduser("~/legendary/.overlay") + if update: + if not self.overlay: + self.info_stack.setCurrentIndex(1) + self.enable_gb.setDisabled(True) + QMessageBox.warning(self, "Warning", self.tr("Overlay is not installed. Could not update")) + return + base_path = self.overlay.install_path + + options = InstallOptionsModel(app_name="", base_path=base_path, platform="Windows", overlay=True) shared.signals.install_game.emit(options) diff --git a/rare/ui/components/tabs/settings/eos_widget.py b/rare/ui/components/tabs/settings/eos_widget.py index 218121d2..afe8073f 100644 --- a/rare/ui/components/tabs/settings/eos_widget.py +++ b/rare/ui/components/tabs/settings/eos_widget.py @@ -76,9 +76,6 @@ class Ui_EosWidget(object): self.update_check_button.setMaximumSize(QtCore.QSize(150, 16777215)) self.update_check_button.setObjectName("update_check_button") self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.update_check_button) - self.update_button = QtWidgets.QPushButton(self.installed_info_gb) - self.update_button.setObjectName("update_button") - self.formLayout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.update_button) self.uninstall_info_label = QtWidgets.QLabel(self.installed_info_gb) self.uninstall_info_label.setObjectName("uninstall_info_label") self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.uninstall_info_label) @@ -91,6 +88,18 @@ class Ui_EosWidget(object): self.uninstall_button.setMaximumSize(QtCore.QSize(150, 16777215)) self.uninstall_button.setObjectName("uninstall_button") self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.uninstall_button) + self.update_button = QtWidgets.QPushButton(self.installed_info_gb) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.update_button.sizePolicy().hasHeightForWidth()) + self.update_button.setSizePolicy(sizePolicy) + self.update_button.setMaximumSize(QtCore.QSize(150, 16777215)) + self.update_button.setObjectName("update_button") + self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.update_button) + self.update_info_lbl = QtWidgets.QLabel(self.installed_info_gb) + self.update_info_lbl.setObjectName("update_info_lbl") + self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.update_info_lbl) self.horizontalLayout.addWidget(self.installed_info_gb) self.install_overlay_gb = QtWidgets.QGroupBox(EosWidget) self.install_overlay_gb.setObjectName("install_overlay_gb") @@ -119,13 +128,14 @@ class Ui_EosWidget(object): self.enable_gb.setTitle(_translate("EosWidget", "Enable / Disable")) self.enabled_cb.setText(_translate("EosWidget", "Activated")) self.installed_info_gb.setTitle(_translate("EosWidget", "Installed Info")) - self.installed_version_info_lbl.setText(_translate("EosWidget", "Installed version: ")) + self.installed_version_info_lbl.setText(_translate("EosWidget", "Installed version:")) self.installed_path_info_lbl.setText(_translate("EosWidget", "Installed path")) self.update_available_info_label.setText(_translate("EosWidget", "Updates")) self.update_check_button.setText(_translate("EosWidget", "Check for Update")) - self.update_button.setText(_translate("EosWidget", "Update")) self.uninstall_info_label.setText(_translate("EosWidget", "Uninstall")) self.uninstall_button.setText(_translate("EosWidget", "Uninstall")) + self.update_button.setText(_translate("EosWidget", "Update")) + self.update_info_lbl.setText(_translate("EosWidget", "Install Update")) self.install_overlay_gb.setTitle(_translate("EosWidget", "Install Overlay")) self.label.setText(_translate("EosWidget", "No overlays are installed")) self.install_button.setText(_translate("EosWidget", "Install")) @@ -133,7 +143,6 @@ class Ui_EosWidget(object): if __name__ == "__main__": import sys - app = QtWidgets.QApplication(sys.argv) EosWidget = QtWidgets.QGroupBox() ui = Ui_EosWidget() diff --git a/rare/ui/components/tabs/settings/eos_widget.ui b/rare/ui/components/tabs/settings/eos_widget.ui index ac2eab34..d55d0836 100644 --- a/rare/ui/components/tabs/settings/eos_widget.ui +++ b/rare/ui/components/tabs/settings/eos_widget.ui @@ -134,13 +134,6 @@ - - - - Update - - - @@ -167,6 +160,32 @@ + + + + + 0 + 0 + + + + + 150 + 16777215 + + + + Update + + + + + + + Install Update + + +