fix: update notifications are not being displayed

This commit is contained in:
Vinicius Moreira
2019-09-28 13:09:37 -03:00
parent e91bd85fa8
commit fd2dbe7dd0
7 changed files with 62 additions and 28 deletions

View File

@@ -196,8 +196,9 @@ class SoftwareManager(ABC):
pass
@abstractmethod
def list_updates(self) -> List[PackageUpdate]:
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
"""
:param internet_available
:return: available package updates
"""
pass

View File

@@ -689,8 +689,9 @@ class ArchManager(SoftwareManager):
self.comp_optimizer.start()
self.aur_index_updater.start()
def list_updates(self) -> List[PackageUpdate]:
return [PackageUpdate(app.id, app.latest_version, 'aur') for app in self.read_installed(disk_loader=None).installed if app.update]
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
installed = self.read_installed(disk_loader=None, internet_available=internet_available).installed
return [PackageUpdate(p.id, p.latest_version, 'aur') for p in installed if p.update]
def list_warnings(self) -> List[str]:
warnings = []

View File

@@ -184,26 +184,28 @@ class FlatpakManager(SoftwareManager):
def prepare(self):
pass
def list_updates(self) -> List[PackageUpdate]:
to_update = [app for app in self.read_installed(None).installed if app.update]
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
updates = []
installed = self.read_installed(None, internet_available=internet_available).installed
to_update = [p for p in installed if p.update]
if to_update:
loaders = []
loaders = []
for app in to_update:
if app.is_application():
loader = FlatpakUpdateLoader(app=app, http_client=self.context.http_client)
loader.start()
loaders.append(loader)
for app in to_update:
if app.is_application():
loader = FlatpakUpdateLoader(app=app, http_client=self.context.http_client)
loader.start()
loaders.append(loader)
for loader in loaders:
loader.join()
for loader in loaders:
loader.join()
for app in to_update:
updates.append(PackageUpdate(pkg_id='{}:{}'.format(app.id, app.branch),
pkg_type='flatpak',
version=app.version))
for app in to_update:
updates.append(PackageUpdate(pkg_id='{}:{}'.format(app.id, app.branch),
pkg_type='flatpak',
version=app.version))
return updates

View File

@@ -140,7 +140,7 @@ class SnapManager(SoftwareManager):
def prepare(self):
pass
def list_updates(self) -> List[PackageUpdate]:
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
pass
def list_warnings(self) -> List[str]:

View File

@@ -143,12 +143,12 @@ class GenericSoftwareManager(SoftwareManager):
t.start()
return t
def read_installed(self, disk_loader: DiskCacheLoader = None, limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, internet_available: bool = None) -> SearchResult:
def read_installed(self, disk_loader: DiskCacheLoader = None, limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, net_check: bool = None) -> SearchResult:
ti = time.time()
self._wait_to_be_ready()
internet_available = {}
thread_internet_check = self._get_internet_check(internet_available)
net_check = {}
thread_internet_check = self._get_internet_check(net_check)
res = SearchResult([], None, 0)
@@ -165,7 +165,7 @@ class GenericSoftwareManager(SoftwareManager):
thread_internet_check.join()
mti = time.time()
man_res = man.read_installed(disk_loader=disk_loader, pkg_types=None, internet_available=internet_available['available'])
man_res = man.read_installed(disk_loader=disk_loader, pkg_types=None, internet_available=net_check['available'])
mtf = time.time()
self.logger.info(man.__class__.__name__ + " took {0:.2f} seconds".format(mtf - mti))
@@ -184,7 +184,7 @@ class GenericSoftwareManager(SoftwareManager):
thread_internet_check.join()
mti = time.time()
man_res = man.read_installed(disk_loader=disk_loader, pkg_types=None, internet_available=internet_available['available'])
man_res = man.read_installed(disk_loader=disk_loader, pkg_types=None, internet_available=net_check['available'])
mtf = time.time()
self.logger.info(man.__class__.__name__ + " took {0:.2f} seconds".format(mtf - mti))
@@ -286,15 +286,22 @@ class GenericSoftwareManager(SoftwareManager):
self.thread_prepare = Thread(target=self._prepare)
self.thread_prepare.start()
def list_updates(self) -> List[PackageUpdate]:
def list_updates(self, net_check: bool = None) -> List[PackageUpdate]:
self._wait_to_be_ready()
updates = []
if self.managers:
net_check = {}
thread_internet_check = self._get_internet_check(net_check)
for man in self.managers:
if self._can_work(man):
man_updates = man.list_updates()
if thread_internet_check.is_alive():
thread_internet_check.join()
man_updates = man.list_updates(internet_available=net_check['available'])
if man_updates:
updates.extend(man_updates)

View File

@@ -1,4 +1,5 @@
import time
from io import StringIO
from threading import Lock, Thread
from typing import List
@@ -96,7 +97,22 @@ class TrayIcon(QSystemTrayIcon):
if update_keys.difference(self.last_updates):
self.last_updates = update_keys
n_updates = len(updates)
msg = self.i18n['notification.update{}'.format('' if n_updates == 1 else 's')].format(n_updates)
ups_by_type = {}
for key in update_keys:
ptype = key.split(':')[0]
count = ups_by_type.get(ptype)
count = 1 if count is None else count + 1
ups_by_type[ptype] = count
msg = StringIO()
msg.write(self.i18n['notification.update{}'.format('' if n_updates == 1 else 's')].format(n_updates))
for ptype, count in ups_by_type.items():
msg.write('\n * {} ( {} )'.format(ptype.capitalize(), count))
msg.seek(0)
msg = msg.read()
self.setToolTip(msg)
if self.update_notification and notify_user: