Files
bearhub/view/qt/systray.py
2019-06-13 11:50:29 -03:00

77 lines
2.4 KiB
Python
Executable File

import sys
import time
from PyQt5.QtCore import QThread, pyqtSignal, QCoreApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu
from core import resource
# to update
from core.controller import FlatpakController
from view.qt.window import ManageWindow
class UpdateCheck(QThread):
signal = pyqtSignal(int)
def __init__(self, check_interval: int, controller: FlatpakController, parent=None):
super(UpdateCheck, self).__init__(parent)
self.controller = controller
self.check_interval = check_interval
def run(self):
while True:
apps = self.controller.refresh()
updates = len([app for app in apps if app['update']])
self.signal.emit(updates)
time.sleep(self.check_interval)
class TrayIcon(QSystemTrayIcon):
def __init__(self, controller: FlatpakController, check_interval: int = 60, parent=None):
self.icon_default = QIcon(resource.get_path('img/flathub_logo.svg'))
self.icon_update = QIcon(resource.get_path('img/update_logo.svg'))
QSystemTrayIcon.__init__(self, self.icon_default, parent)
self.menu = QMenu(parent)
self.action_manage = self.menu.addAction("Manage applications")
self.action_manage.triggered.connect(self.show_manage_window)
self.action_exit = self.menu.addAction("Exit")
self.action_exit.triggered.connect(lambda: QCoreApplication.exit())
self.setContextMenu(self.menu)
self.controller = controller
self.check_thread = UpdateCheck(check_interval=check_interval, controller=self.controller)
self.check_thread.signal.connect(self.notify_update)
self.check_thread.start()
self.manage_window = ManageWindow(controller=controller, tray_icon=self)
def notify_update(self, updates: int):
if updates > 0:
if self.icon() != self.icon_update:
self.setIcon(self.icon_update)
self.setToolTip('Updates found: {}'.format(updates))
if self.manage_window:
self.manage_window.refresh()
else:
self.setIcon(self.icon_default)
self.setToolTip(None)
def show_manage_window(self):
if not self.manage_window:
self.manage_window = ManageWindow(controller=self.controller)
self.manage_window.refresh()
self.manage_window.show()