systrayUpdater/systrayUpdater.py

89 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
"""
Current status is; it runs, it will initially get
number of updates, it will open new terminal window
and complete update (keeping the window open?),
IT DOES NOT UPDATE THE COUNT.
"""
# Get needed modules
import yaml
import subprocess
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
# Available Updates count holder
Nupd = []
avail = ""
# Use config.yml file to allow for compatibility with
# most terminal emulators possible & custom icon
with open('config.yml') as f:
conf = yaml.load(f, yaml.FullLoader)
term = str(conf['terminal'])
opt = str(conf['option'])
icn = str(conf['icon'])
f.close()
# Run checkupdates command
# Populates the available updates count holder
def count():
cmd = ['checkupdates']
p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p2 = subprocess.Popen(['wc', '-l'], stdin=p1.stdout, stdout=subprocess.PIPE)
output = ((p2.communicate()[0]).decode()).rstrip('\n')
digit = str(output)+" Updates"
global Nupd
Nupd.append(digit)
global avail
avail = Nupd[-1]
# Run system update
def update():
cmd = [ term, opt, 'sudo', 'pacman', '-Syu']
subprocess.Popen(cmd)
# Initially populate available updates count
count()
app = QApplication([])
app.setQuitOnLastWindowClosed(False)
# Set up timer to update count
timer = QTimer()
timer.timeout.connect(count)
timer.start(10000)
# Adding an icon
icon = QIcon(icn)
# Adding item on the menu bar
tray = QSystemTrayIcon()
tray.setIcon(icon)
tray.setToolTip(avail)
tray.setVisible(True)
# Creating the options
menu = QMenu()
option1 = QAction(avail)
option1.triggered.connect(update)
menu.addAction(option1)
# To quit the app
quit = QAction("Quit")
quit.triggered.connect(app.quit)
menu.addAction(quit)
# Adding options to the System Tray
tray.setContextMenu(menu)
# Update the labels for available updates count
for i in Nupd:
option1.triggered.connect(lambda menuItem=text: self.dostuff(menuItem))
option1.setText(text)
tray.setToolTip(text)
app.exec_()