#!/usr/bin/python3 # mambatray 2 # Copyright (C) 2011-2024 by Silvan Calarco # Copyright (C) 2011 by michiamophil # Distributed under the terms of the GPL version 3 FLOSS License # import sys import os import gettext import distro from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QCursor from PyQt5.QtWidgets import QSystemTrayIcon, QApplication, QMenu, QMessageBox from PyQt5.QtCore import QTimer, QProcess DATADIR = os.path.dirname(os.path.realpath((__file__))) + "/" class SystemTrayIcon(QSystemTrayIcon): menu = None def __init__(self, icon): QSystemTrayIcon.__init__(self, icon) global w, contatore, srpm, lista, NetsrpmsArg, nOre, desktop_session nOre = 2 srpm = [ "skype", "win32codecs", "msttcorefonts", "b43-firmware", "virtualbox-extension-pack", "chromium-widevine", "spotify" ] NetsrpmsArg = "-c" lista = [] contatore = 0 self.menu = QMenu() try: desktop_session = os.path.basename(os.getenv('DESKTOP_SESSION')) except: desktop_session = 'default' if desktop_session == 'default': desktop_session = 'plasma' elif desktop_session[:3] == 'kde': desktop_session = 'kde' # refresh packages cache timer global refreshPackagesTimer, refreshPackagesCacheProcess,\ checkSRPMSUpdatesTimer, SRPMUpdateProcess, networkOnlineProcess refreshPackagesTimer = QTimer(self) checkSRPMSUpdatesTimer = QTimer(self) refreshPackagesCacheProcess = QProcess(self) SRPMUpdateProcess = QProcess(self) networkOnlineProcess = QProcess(self) refreshPackagesTimer.timeout.connect(self.refreshPackagesCache) refreshPackagesCacheProcess.finished.connect(self.restartRefreshPackagesTimer) checkSRPMSUpdatesTimer.timeout.connect(self.SRPMSCheckUpgradeList) # software menu global softwareManagerProcess, softwareCheckUpgradesProcess,\ softwareBaseInstallsProcess softwareManagerProcess = QProcess(self) softwareCheckUpgradesProcess = QProcess(self) softwareBaseInstallsProcess = QProcess(self) softwareMenu = self.menu.addMenu(QIcon.fromTheme("applications-system"),_("Software")) softwareManageAction = softwareMenu.addAction(QIcon.fromTheme("applications-other"),_("Add/Remove software packages...")) softwareManageAction.triggered.connect(self.softwareManager) softwareCheckUpgradesAction = softwareMenu.addAction(QIcon.fromTheme("system-software-update"),_("Check for updates now...")) softwareCheckUpgradesAction.triggered.connect(self.softwareCheckUpgrades) softwareBaseInstallsAction = softwareMenu.addAction(QIcon.fromTheme("mambabase"),_("{} components...").format(distro.name())) softwareBaseInstallsAction.triggered.connect(self.softwareBaseInstalls) # network menu global networkFirewallDisableProcess, networkFirewallEnableProcess,\ networkFirewallConfigureProcess, networkProxyProcess networkFirewallDisableProcess = QProcess(self) networkFirewallEnableProcess = QProcess(self) networkFirewallConfigureProcess = QProcess(self) networkProxyProcess = QProcess(self) networkMenu = self.menu.addMenu(QIcon.fromTheme("preferences-system-network"), _("Network")) networkFirewallMenu = networkMenu.addMenu(QIcon.fromTheme("security-medium"),_("Firewall")) networkFirewallDisableAction = networkFirewallMenu.addAction(QIcon.fromTheme("security-low"),_("Disable")) networkFirewallDisableAction.triggered.connect(self.networkFirewallDisable) networkFirewallDisableProcess.finished.connect(self.networkFirewallDisableMessage) networkFirewallEnableAction = networkFirewallMenu.addAction(QIcon.fromTheme("security-high"),_("Enable")) networkFirewallEnableAction.triggered.connect(self.networkFirewallEnable) networkFirewallEnableProcess.finished.connect(self.networkFirewallEnableMessage) networkFirewallConfigureAction = networkFirewallMenu.addAction(QIcon.fromTheme("security-medium"),_("Configure...")) networkFirewallConfigureAction.triggered.connect(self.networkFirewallConfigure) networkProxyAction = networkMenu.addAction(QIcon.fromTheme("network-server"),_("Proxy...")) networkProxyAction.triggered.connect(self.networkProxy) SRPMUpdateProcess.finished.connect(self.SRPMSCheckUpgrade) # about box aboutAction = self.menu.addSeparator() aboutAction = self.menu.addAction(QIcon.fromTheme("system-logo"),_("About")) aboutAction.triggered.connect(self.about) self.setToolTip(_("{} control center").format(distro.name())) self.activated.connect(self.iconActivated) self.setContextMenu(self.menu) # the first time refresh packages cache after 5 minutes refreshPackagesTimer.start( 5 * 60000 ) # the first time check for SRPMS updates after 4 minutes checkSRPMSUpdatesTimer.start( 4 * 60000 ) def iconActivated(self, reason): if reason in (QSystemTrayIcon.Trigger, QSystemTrayIcon.DoubleClick, QSystemTrayIcon.Context): # FIXME: on plasma wayland and left click menu will popup in the center of the screen # disabling and only supporting right click. if desktop_session != 'plasmawayland': self.contextMenu().popup(QCursor.pos()) def about(self): aboutBox = QMessageBox(self.menu) aboutBox.setWindowIcon(QIcon.fromTheme("mambatray")) aboutBox.setWindowTitle(_("About")) aboutBox.setText( "