From d34d4e9d44c42b456612b4b351bec305c9bbbbea Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Sat, 5 Feb 2022 13:11:00 -0600 Subject: [PATCH] Addon Manager: Add timeout to page load --- src/Mod/AddonManager/package_details.py | 37 +++++++++++++++++++++---- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py index 130d17d783..c6c5526d6a 100644 --- a/src/Mod/AddonManager/package_details.py +++ b/src/Mod/AddonManager/package_details.py @@ -41,12 +41,13 @@ show_javascript_console_output = False try: from PySide2.QtWebEngineWidgets import * + HAS_QTWEBENGINE = True except Exception: FreeCAD.Console.PrintWarning( translate( "AddonsInstaller", - "Addon Manager Warning: Could not import QtWebEngineWidgets, it seems to be missing from your system. Please use your system's package manager to install the python3-pyside2.qtwebengine* packages, and if possible alert your package creator to the missing dependency. Display of package README will be limited until dependency is resolved.", + "Addon Manager Warning: Could not import QtWebEngineWidgets, it seems to be missing from your system. Please use your system's package manager to install the python3-pyside2.qtwebengine* and python3-pyside2.qtwebchannel packages, and if possible alert your package creator to the missing dependency. Display of package README will be limited until this dependency is resolved.", ) + "\n" ) @@ -73,7 +74,6 @@ class PackageDetails(QWidget): self.status_update_thread = None self.ui.buttonBack.clicked.connect(self.back.emit) - self.ui.buttonBack.clicked.connect(self.clear_web_view) self.ui.buttonExecute.clicked.connect(lambda: self.execute.emit(self.repo)) self.ui.buttonInstall.clicked.connect(lambda: self.install.emit(self.repo)) self.ui.buttonUninstall.clicked.connect(lambda: self.uninstall.emit(self.repo)) @@ -102,8 +102,13 @@ class PackageDetails(QWidget): if HAS_QTWEBENGINE: self.ui.loadingLabel.show() + self.ui.slowLoadLabel.hide() + self.ui.webView.setHtml("Loading...") self.ui.webView.hide() self.ui.progressBar.show() + self.timeout = QTimer.singleShot( + 6000, self.long_load_running + ) # Six seconds else: self.ui.missingWebViewLabel.setStyleSheet( "color:" + utils.warning_color_string() @@ -403,9 +408,6 @@ class PackageDetails(QWidget): """ self.ui.webView.page().runJavaScript(s) - def clear_web_view(self): - self.ui.webView.setHtml("

Loading...

") - def load_started(self): self.ui.progressBar.show() self.ui.progressBar.setValue(0) @@ -415,9 +417,16 @@ class PackageDetails(QWidget): def load_finished(self, load_succeeded: bool): self.ui.loadingLabel.hide() + self.ui.slowLoadLabel.hide() self.ui.webView.show() self.ui.progressBar.hide() url = self.ui.webView.url() + if ( + hasattr(self, "timeout") + and hasattr(self.timeout, "isActive") + and self.timeout.isActive() + ): + self.timeout.stop() if load_succeeded: # It says it succeeded, but it might have only succeeded in loading a "Page not found" page! title = self.ui.webView.title() @@ -432,6 +441,12 @@ class PackageDetails(QWidget): else: self.show_error_for(url) + def long_load_running(self): + if hasattr(self.ui, "webView") and self.ui.webView.isHidden(): + self.ui.slowLoadLabel.show() + self.ui.loadingLabel.hide() + self.ui.webView.show() + def show_error_for(self, url: QUrl) -> None: m = translate( "AddonsInstaller", "Could not load README data from URL {}" @@ -558,6 +573,11 @@ class Ui_PackageDetails(object): self.verticalLayout_2.addWidget(self.loadingLabel) + self.slowLoadLabel = QLabel(PackageDetails) + self.slowLoadLabel.setObjectName("slowLoadLabel") + + self.verticalLayout_2.addWidget(self.slowLoadLabel) + self.progressBar = QProgressBar(PackageDetails) self.progressBar.setObjectName("progressBar") self.progressBar.setTextVisible(False) @@ -620,5 +640,12 @@ class Ui_PackageDetails(object): ) + "" ) + else: + self.slowLoadLabel.setText( + QCoreApplication.translate( + "AddonsInstaller", + "The page is taking a long time to load... showing the data we have so far...", + ) + ) # retranslateUi