[screenshots] progress bar

This commit is contained in:
Vinicius Moreira
2019-10-23 12:11:18 -03:00
parent 773c761493
commit 31f2a3acab
3 changed files with 37 additions and 8 deletions

View File

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

View File

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

View File

@@ -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)