#!/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 contatore = 0 NetsrpmsArg = "-c" lista = [] nOre = 2 srpm = [ "skype", "win32codecs", "msttcorefonts", "b43-firmware", "virtualbox-extension-pack", "chromium-widevine", "spotify" ] desktop_session = 'default' xdg_session_type = 'x11' refreshPackagesTimer = None checkSRPMSUpdatesTimer = None refreshPackagesCacheProcess = None SRPMUpdateProcess = None softwareManagerProcess = None softwareCheckUpgradesProcess = None softwareBaseInstallsProcess = None networkOnlineProcess = None networkFirewallDisableProcess = None networkFirewallEnableProcess = None networkFirewallConfigureProcess = None networkProxyProcess = None def __init__(self, icon): QSystemTrayIcon.__init__(self, icon) self.menu = QMenu() try: self.desktop_session = os.path.basename(os.getenv('DESKTOP_SESSION')) except: None try: self.xdg_session_type = os.path.basename(os.getenv('XDG_SESSION_TYPE')) except: None if self.desktop_session == 'default': self.desktop_session = 'plasma' elif self.desktop_session[:3] == 'kde': self.desktop_session = 'kde' # refresh packages cache timer self.refreshPackagesTimer = QTimer(self) self.checkSRPMSUpdatesTimer = QTimer(self) self.refreshPackagesCacheProcess = QProcess(self) self.SRPMUpdateProcess = QProcess(self) self.networkOnlineProcess = QProcess(self) self.refreshPackagesTimer.timeout.connect(self.refreshPackagesCache) self.refreshPackagesCacheProcess.finished.connect(self.restartRefreshPackagesTimer) self.checkSRPMSUpdatesTimer.timeout.connect(self.SRPMSCheckUpgradeList) # software menu self.softwareManagerProcess = QProcess(self) self.softwareCheckUpgradesProcess = QProcess(self) self.softwareBaseInstallsProcess = QProcess(self) self.softwareMenu = self.menu.addMenu(QIcon.fromTheme("applications-system"),_("Software")) self.softwareManageAction = self.softwareMenu.addAction(QIcon.fromTheme("applications-other"),_("Add/Remove software packages...")) self.softwareManageAction.triggered.connect(self.softwareManager) self.softwareCheckUpgradesAction = self.softwareMenu.addAction(QIcon.fromTheme("system-software-update"),_("Check for updates now...")) self.softwareCheckUpgradesAction.triggered.connect(self.softwareCheckUpgrades) self.softwareBaseInstallsAction = self.softwareMenu.addAction(QIcon.fromTheme("mambabase"),_("{} components...").format(distro.name())) self.softwareBaseInstallsAction.triggered.connect(self.softwareBaseInstalls) # network menu self.networkFirewallDisableProcess = QProcess(self) self.networkFirewallEnableProcess = QProcess(self) self.networkFirewallConfigureProcess = QProcess(self) self.networkProxyProcess = QProcess(self) self.networkMenu = self.menu.addMenu(QIcon.fromTheme("preferences-system-network"), _("Network")) self.networkFirewallMenu = self.networkMenu.addMenu(QIcon.fromTheme("security-medium"),_("Firewall")) self.networkFirewallDisableAction = self.networkFirewallMenu.addAction(QIcon.fromTheme("security-low"),_("Disable")) self.networkFirewallDisableAction.triggered.connect(self.networkFirewallDisable) self.networkFirewallDisableProcess.finished.connect(self.networkFirewallDisableMessage) self.networkFirewallEnableAction = self.networkFirewallMenu.addAction(QIcon.fromTheme("security-high"),_("Enable")) self.networkFirewallEnableAction.triggered.connect(self.networkFirewallEnable) self.networkFirewallEnableProcess.finished.connect(self.networkFirewallEnableMessage) self.networkFirewallConfigureAction = self.networkFirewallMenu.addAction(QIcon.fromTheme("security-medium"),_("Configure...")) self.networkFirewallConfigureAction.triggered.connect(self.networkFirewallConfigure) self.networkProxyAction = self.networkMenu.addAction(QIcon.fromTheme("network-server"),_("Proxy...")) self.networkProxyAction.triggered.connect(self.networkProxy) self.SRPMUpdateProcess.finished.connect(self.SRPMSCheckUpgrade) # about box self.aboutAction = self.menu.addSeparator() self.aboutAction = self.menu.addAction(QIcon.fromTheme("system-logo"),_("About")) self.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 self.refreshPackagesTimer.start( 5 * 60000 ) # the first time check for SRPMS updates after 4 minutes self.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 self.xdg_session_type != 'wayland': self.contextMenu().popup(QCursor.pos()) def about(self): aboutBox = QMessageBox(self.menu) aboutBox.setWindowIcon(QIcon.fromTheme("mambatray")) aboutBox.setWindowTitle(_("About")) aboutBox.setText( "