From da00eacd1faa738ac85dcf0cd5518ad29bb2ccf5 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Sun, 30 Jun 2019 18:58:56 -0300 Subject: [PATCH] notifying only new updates --- CHANGELOG.md | 1 + fpakman/view/qt/systray.py | 33 +++++++++++++++++++++------------ fpakman/view/qt/window.py | 3 +-- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0613a9b9..797c8053 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Allowing to specify a custom app translation with the environment variable **FPAKMAN_LOCALE** - Adding expiration time for cached app data. Default to 1 hour. The environment variable **FPAKMAN_CACHE_EXPIRATION** can change this value. - Minor GUI improvements +- Notifying only new updates ## [0.2.1] - 2019-06-24 ### Features diff --git a/fpakman/view/qt/systray.py b/fpakman/view/qt/systray.py index 7fba210e..1783ddf6 100755 --- a/fpakman/view/qt/systray.py +++ b/fpakman/view/qt/systray.py @@ -1,19 +1,19 @@ -import os import time +from typing import List from PyQt5.QtCore import QThread, pyqtSignal, QCoreApplication from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QSystemTrayIcon, QMenu -from fpakman.core.controller import FlatpakManager from fpakman.core import resource, system +from fpakman.core.controller import FlatpakManager from fpakman.view.qt.about import AboutDialog from fpakman.view.qt.window import ManageWindow class UpdateCheck(QThread): - signal = pyqtSignal(int) + signal = pyqtSignal(list) def __init__(self, manager: FlatpakManager, check_interval: int, parent=None): super(UpdateCheck, self).__init__(parent) @@ -26,9 +26,10 @@ class UpdateCheck(QThread): apps = self.manager.read_installed() - updates = len([app for app in apps if app['update']]) + updates = [app for app in apps if app['update']] - self.signal.emit(updates) + if updates: + self.signal.emit(updates) time.sleep(self.check_interval) @@ -83,6 +84,7 @@ class TrayIcon(QSystemTrayIcon): self.thread_database = LoadDatabase(manager) self.thread_database.signal_finished.connect(self._update_menu) + self.last_updates = set() def load_database(self): self.thread_database.start() @@ -91,20 +93,27 @@ class TrayIcon(QSystemTrayIcon): self.action_refreshing.setVisible(False) self.action_manage.setVisible(True) - def notify_updates(self, updates: int): - if updates > 0: - if self.icon().cacheKey() != self.icon_update.cacheKey(): - self.setIcon(self.icon_update) + def notify_updates(self, updates: List[dict]): - msg = '{}: {}'.format(self.locale_keys['notification.new_updates'], updates) + if len(updates) > 0: + + update_keys = {'{}:{}'.format(app['id'], app['latest_version']) for app in updates} + + new_icon = self.icon_update + + if update_keys.difference(self.last_updates): + self.last_updates = update_keys + msg = '{}: {}'.format(self.locale_keys['notification.new_updates'], len(updates)) self.setToolTip(msg) - system.notify_user(msg) else: - self.setIcon(self.icon_default) + new_icon = self.icon_default self.setToolTip(None) + if self.icon().cacheKey() != new_icon.cacheKey(): # changes the icon if needed + self.setIcon(new_icon) + def show_manage_window(self): if not self.manage_window: diff --git a/fpakman/view/qt/window.py b/fpakman/view/qt/window.py index 5d688feb..d625aad6 100755 --- a/fpakman/view/qt/window.py +++ b/fpakman/view/qt/window.py @@ -297,8 +297,7 @@ class ManageWindow(QWidget): break self.bt_upgrade.setEnabled(enable_bt_update) - - self.tray_icon.notify_updates(total_updates) + self.tray_icon.notify_updates([app['model'] for app in self.apps if app['model']['update']]) def centralize(self): geo = self.frameGeometry()