From 2ee7762745efa930cdc4c894f849a979164fdbb5 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sun, 20 Oct 2019 14:46:47 +0200 Subject: [PATCH] mambabase: scanning packages in welcome page with progress bar --- mambabase/WelcomePage.ui | 19 ++++++-- mambabase/mambabase.py | 94 +++++++++++++++++++++++++++++----------- 2 files changed, 84 insertions(+), 29 deletions(-) diff --git a/mambabase/WelcomePage.ui b/mambabase/WelcomePage.ui index 1118a67..0ef0c6b 100644 --- a/mambabase/WelcomePage.ui +++ b/mambabase/WelcomePage.ui @@ -144,17 +144,30 @@ true - + 10 180 - 321 + 531 20 - <html><head/><body><p><span style=" font-weight:600;">Please, press the Next button to continue.</span></p></body></html> + <html><head/><body><p><br/></p></body></html> + + + + + + 10 + 150 + 531 + 23 + + + + 0 diff --git a/mambabase/mambabase.py b/mambabase/mambabase.py index eb6dd9b..365cdee 100755 --- a/mambabase/mambabase.py +++ b/mambabase/mambabase.py @@ -18,6 +18,61 @@ from gi.repository import PackageKitGlib as packagekit DATADIR = os.path.dirname(os.path.realpath((__file__))) + "/" + +class MambabaseWizard(QtWidgets.QWizard): + def __init__(self, parent=None): + super(MambabaseWizard, self).__init__(parent) + self.welcomePage = WelcomePage(self) + self.addPage(self.welcomePage) + self.selectGroupsPage = SelectGroupsPage(self) + self.addPage(self.selectGroupsPage) + self.selectExtraPage = SelectExtraPage(self) + self.addPage(self.selectExtraPage) + self.installationPage = InstallationPage(self) + self.addPage(self.installationPage) + self.finishPage = FinishPage(self) + self.addPage(self.finishPage) + self.setWindowTitle(_("openmamba base network installations") + + " - openmamba.org") + self.setFixedSize(571,465) + self.currentIdChanged.connect(self.currentIdChangedSlot) + self.prepareThread = PrepareThread(self) + self.installThread = InstallThread(self, self.selectGroupsPage.pkggroups) + + def currentIdChangedSlot(self, currentId): + if currentId == 0: + self.prepareThread.start() + elif currentId == 3: + self.installThread.start() + + +class PrepareThread(QtCore.QThread): + parent = None + doneSignal = QtCore.pyqtSignal() + updateProgressSignal = QtCore.pyqtSignal(dict) + + def __init__(self, parent=None): + super(PrepareThread, self).__init__(parent) + self.parent = parent + self.doneSignal.connect(parent.welcomePage.completeChanged) + self.updateProgressSignal.connect( + parent.welcomePage.updateProgressSlot) + + def run(self): + # Update packages list + self.updateProgressSignal.emit({ 'value': 5, + 'label': _("Checking installed packages...")}) + self.parent.selectGroupsPage.loadPkgGroups() + self.updateProgressSignal.emit({ 'value': 55, + 'label': _("Checking installed extra components...")}) + self.parent.selectExtraPage.setExtras() + self.updateProgressSignal.emit({ 'value': 100, + 'label': _("Done. Please, press the Next button to continue.")}) + # Enable back and next buttons + self.parent.welcomePage.done = True + self.doneSignal.emit() + + class InstallThread(QtCore.QThread): parent = None doneSignal = QtCore.pyqtSignal() @@ -62,7 +117,7 @@ class InstallThread(QtCore.QThread): self.updateProgressSignal.emit({ 'value': 10, 'label': _("Updating installed packages...")}) - result = subprocess.run(['pkcon', 'update'], + result = subprocess.run(['pkcon', 'update', '-y'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode == 0: if result.stdout: @@ -144,35 +199,24 @@ class InstallThread(QtCore.QThread): str(status.get_percentage())))}) -class MambabaseWizard(QtWidgets.QWizard): - def __init__(self, parent=None): - super(MambabaseWizard, self).__init__(parent) - self.addPage(WelcomePage(self)) - self.selectGroupsPage = SelectGroupsPage(self) - self.addPage(self.selectGroupsPage) - self.selectExtraPage = SelectExtraPage(self) - self.addPage(self.selectExtraPage) - self.installationPage = InstallationPage(self) - self.addPage(self.installationPage) - self.finishPage = FinishPage(self) - self.addPage(self.finishPage) - self.setWindowTitle(_("openmamba base network installations") + - " - openmamba.org") - self.setFixedSize(571,465) - self.currentIdChanged.connect(self.currentIdChangedSlot) - self.installThread = InstallThread(self, self.selectGroupsPage.pkggroups) - - def currentIdChangedSlot(self, currentId): - if currentId == 3: - self.installThread.start() - - class WelcomePage(QtWidgets.QWizardPage): + done = False + def __init__(self, parent=None): super(WelcomePage, self).__init__(parent) uic.loadUi(DATADIR + "WelcomePage.ui", self) self.show() + def isComplete(self): + return self.done + + @QtCore.pyqtSlot(dict) + def updateProgressSlot(self, dict): + if 'value' in dict: + self.progressBar.setValue(dict['value']) + if 'label' in dict: + self.progressLabel.setText(dict['label']) + class SelectGroupsPage(QtWidgets.QWizardPage): groups_checkboxes = {} @@ -181,7 +225,6 @@ class SelectGroupsPage(QtWidgets.QWizardPage): def __init__(self, parent=None): super(SelectGroupsPage, self).__init__(parent) uic.loadUi(DATADIR + "SelectGroupsPage.ui", self) - self.loadPkgGroups() self.show() def loadPkgGroups(self): @@ -240,7 +283,6 @@ class SelectExtraPage(QtWidgets.QWizardPage): super(SelectExtraPage, self).__init__(parent) uic.loadUi(DATADIR + "SelectExtraPage.ui", self) self.setCommitPage(True) - self.setExtras() self.show() def setExtras(self):