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
+
+
+