From 31f2a3acab7b398b2ec41f08b466e4d15491fb35 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Wed, 23 Oct 2019 12:11:18 -0300 Subject: [PATCH] [screenshots] progress bar --- CHANGELOG.md | 4 ++++ bauh/gems/flatpak/controller.py | 17 ++++++++++++----- bauh/view/qt/screenshots.py | 24 +++++++++++++++++++++--- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac702efa..3c1fa1b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - not waiting for the categories file to be retrieved from the cloud during application boot ( reduces boot time ) - caching cloud categories to the disk so they can be used in scenarios when it is not possible to retrieve them ( e.g: internet is off ) - minor thread improvements + +### UI +- Screenshots panel: + - "downloading" label replaced by a progress bar ### Fixes - application not initializing when there is no internet connection diff --git a/bauh/gems/flatpak/controller.py b/bauh/gems/flatpak/controller.py index a431f4c3..43445cb4 100644 --- a/bauh/gems/flatpak/controller.py +++ b/bauh/gems/flatpak/controller.py @@ -1,3 +1,4 @@ +import json import traceback from datetime import datetime from threading import Thread @@ -279,11 +280,17 @@ class FlatpakManager(SoftwareManager): flatpak.run(str(pkg.id)) def get_screenshots(self, pkg: SoftwarePackage) -> List[str]: - res = self.http_client.get_json('{}/apps/{}'.format(FLATHUB_API_URL, pkg.id)) + screenshots_url = '{}/apps/{}'.format(FLATHUB_API_URL, pkg.id) urls = [] - if res and res.get('screenshots'): - for s in res['screenshots']: - if s.get('imgDesktopUrl'): - urls.append(s['imgDesktopUrl']) + try: + res = self.http_client.get_json(screenshots_url) + + if res and res.get('screenshots'): + for s in res['screenshots']: + if s.get('imgDesktopUrl'): + urls.append(s['imgDesktopUrl']) + + except json.decoder.JSONDecodeError: + self.context.logger.error("Could not decode json from '{}'".format(screenshots_url)) return urls diff --git a/bauh/view/qt/screenshots.py b/bauh/view/qt/screenshots.py index 395e89b0..56bd13fc 100644 --- a/bauh/view/qt/screenshots.py +++ b/bauh/view/qt/screenshots.py @@ -4,12 +4,13 @@ from typing import List from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QPixmap -from PyQt5.QtWidgets import QDialog, QLabel, QPushButton, QToolBar, QVBoxLayout +from PyQt5.QtWidgets import QDialog, QLabel, QPushButton, QToolBar, QVBoxLayout, QProgressBar, QApplication from bauh.api.abstract.cache import MemoryCache from bauh.api.http import HttpClient from bauh.view.qt import qt_utils from bauh.view.qt.components import new_spacer +from bauh.view.qt.thread import AnimateProgress from bauh.view.qt.view_model import PackageView @@ -28,6 +29,12 @@ class ScreenshotsDialog(QDialog): self.resize(1280, 720) self.i18n = i18n self.http_client = http_client + self.progress_bar = QProgressBar() + self.progress_bar.setMaximumHeight(10 if QApplication.instance().style().objectName().lower() == 'windows' else 6) + self.progress_bar.setTextVisible(False) + self.thread_progress = AnimateProgress() + self.thread_progress.signal_change.connect(self._update_progress) + self.thread_progress.start() # THERE ARE CRASHES WITH SOME RARE ICONS ( like insomnia ). IT CAN BE A QT BUG. IN THE MEANTIME, ONLY THE TYPE ICON WILL BE RENDERED # @@ -52,7 +59,9 @@ class ScreenshotsDialog(QDialog): self.img_label = QLabel() self.img_label.setStyleSheet('QLabel { font-weight: bold; text-align: center }') - self.bottom_bar.addWidget(self.img_label) + self.ref_img_label = self.bottom_bar.addWidget(self.img_label) + self.ref_img_label.setVisible(False) + self.ref_progress_bar = self.bottom_bar.addWidget(self.progress_bar) self.bottom_bar.addWidget(new_spacer(50)) self.bt_next = QPushButton(self.i18n['screenshots.bt_next.label'].capitalize()) @@ -69,6 +78,9 @@ class ScreenshotsDialog(QDialog): self._load_img() + def _update_progress(self, val: int): + self.progress_bar.setValue(val) + def _load_img(self): if len(self.loaded_imgs) > self.img_idx: img = self.loaded_imgs[self.img_idx] @@ -79,9 +91,15 @@ class ScreenshotsDialog(QDialog): else: self.img_label.setText(img) self.img.setPixmap(QPixmap()) + + self.thread_progress.stop = True + self.ref_progress_bar.setVisible(False) + self.ref_img_label.setVisible(True) else: self.img.setPixmap(QPixmap()) - self.img_label.setText('...{}...'.format(self.i18n['screenshots,download.running'])) + self.ref_img_label.setVisible(False) + self.ref_progress_bar.setVisible(True) + self.thread_progress.start() if len(self.screenshots) == 1: self.ref_bt_back.setVisible(False)