update
This commit is contained in:
		
							parent
							
								
									25c6b8a8bf
								
							
						
					
					
						commit
						9955176321
					
				| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					# Maintainer: Eric Lay <ericlaytm@gmail.com>
 | 
				
			||||||
 | 
					pkgname=systrayupdater
 | 
				
			||||||
 | 
					pkgver=0.1
 | 
				
			||||||
 | 
					pkgrel=1
 | 
				
			||||||
 | 
					pkgdesc="PyQt5 system tray applet to notify of available updates"
 | 
				
			||||||
 | 
					arch=('x86_64')
 | 
				
			||||||
 | 
					url="https://github.com/ericlay/$pkgname"
 | 
				
			||||||
 | 
					license=('GPL3')
 | 
				
			||||||
 | 
					depends=('python'
 | 
				
			||||||
 | 
					    'python-pyqt5'
 | 
				
			||||||
 | 
						'python-yaml'
 | 
				
			||||||
 | 
						'python-jaraco.functools'
 | 
				
			||||||
 | 
						'pacman')
 | 
				
			||||||
 | 
					makedepends=('git')
 | 
				
			||||||
 | 
					optdepends=()
 | 
				
			||||||
 | 
					source=("git+https://github.com/ericlay/fuzzy-pkg-finder.git")
 | 
				
			||||||
 | 
					md5sums=('SKIP')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pkgver(){
 | 
				
			||||||
 | 
					    cd "$pkgname"
 | 
				
			||||||
 | 
					    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package() {
 | 
				
			||||||
 | 
						cd "$srcdir/$pkgname"
 | 
				
			||||||
 | 
						install -Dm755 systrayUpdater -t "$pkgdir/usr/bin"
 | 
				
			||||||
 | 
						install -Dm666 systrayUpdater.desktop -t "$pkgdir/usr/share/applications"
 | 
				
			||||||
 | 
						install -Dm755 ./*.png systrayupdater.yml -t "$pkgdir/$HOME/.config/$pkgname"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,13 @@
 | 
				
			||||||
# systrayUpdater
 | 
					# systrayUpdater
 | 
				
			||||||
Simple Qt based system tray icon to notify of available updates and then update on click
 | 
					PyQt5 system tray applet to notify of available updates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For Arch (based) systems only!
 | 
					For Arch (based) systems only!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Right click to access menu actions:
 | 
				
			||||||
 | 
					-Run update
 | 
				
			||||||
 | 
					-Read the News
 | 
				
			||||||
 | 
					-Display list of packages with updates available (click to search arch website for highlighted package)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To install and use: Place files in appropriate locations and run appropriate commands when doing so
 | 
					To install and use: Place files in appropriate locations and run appropriate commands when doing so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Uses config file for options.
 | 
					Uses config file for options.
 | 
				
			||||||
| 
						 | 
					@ -14,5 +19,3 @@ Includes:
 | 
				
			||||||
- .desktop file for autostarting
 | 
					- .desktop file for autostarting
 | 
				
			||||||
- Tray and shortcut icons
 | 
					- Tray and shortcut icons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TODO
 | 
					 | 
				
			||||||
- look into adding option to view news or quick list
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,14 +2,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Get needed modules
 | 
					# Get needed modules
 | 
				
			||||||
import yaml
 | 
					import yaml
 | 
				
			||||||
 | 
					import webbrowser
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
from os import path
 | 
					from os import path
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					from functools import partial
 | 
				
			||||||
from PyQt5.QtCore import QTimer
 | 
					from PyQt5.QtCore import QTimer
 | 
				
			||||||
from PyQt5.QtGui import *
 | 
					from PyQt5.QtGui import *
 | 
				
			||||||
from PyQt5.QtWidgets import *
 | 
					from PyQt5.QtWidgets import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Available Updates count holder
 | 
					# Available Updates holders
 | 
				
			||||||
avail = ""
 | 
					avail = ""
 | 
				
			||||||
 | 
					outputList = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use config.yml file to allow for compatibility with
 | 
					# Use config.yml file to allow for compatibility with
 | 
				
			||||||
# most terminal emulators possible & custom icon / timer duration
 | 
					# most terminal emulators possible & custom icon / timer duration
 | 
				
			||||||
| 
						 | 
					@ -22,59 +26,85 @@ with open(path.expanduser("~/.config/systrayUpdater/systrayUpdater.yml")) as f:
 | 
				
			||||||
    f.close()
 | 
					    f.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run checkupdates command
 | 
					# Run checkupdates command
 | 
				
			||||||
# Populates the available updates count holder
 | 
					# Populates the available updates and count
 | 
				
			||||||
 | 
					# Sets the list and count in proper spots
 | 
				
			||||||
def count():
 | 
					def count():
 | 
				
			||||||
    cmd = ['checkupdates']
 | 
					    cmd = ['checkupdates']
 | 
				
			||||||
    p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
 | 
					    p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
 | 
				
			||||||
    p2 = subprocess.Popen(['wc', '-l'], stdin=p1.stdout, stdout=subprocess.PIPE)
 | 
					    global outputList
 | 
				
			||||||
    output = ((p2.communicate()[0]).decode()).rstrip('\n')
 | 
					    outputList = ((p1.communicate()[0]).decode()).rstrip('\n')
 | 
				
			||||||
 | 
					    outputCount = len(outputList.splitlines())
 | 
				
			||||||
 | 
					    if outputCount == 0:
 | 
				
			||||||
 | 
					        tray.setVisible(False)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        tray.setVisible(True)
 | 
				
			||||||
 | 
					        for i in outputList.splitlines():
 | 
				
			||||||
 | 
					            menu.addAction(i, partial(infos, i))
 | 
				
			||||||
        global avail
 | 
					        global avail
 | 
				
			||||||
    avail = str(output)+" Updates"
 | 
					        avail = str(outputCount)+" Updates"
 | 
				
			||||||
 | 
					        tray.setToolTip(avail)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run system update
 | 
					# Read the News
 | 
				
			||||||
 | 
					# Get pkg info
 | 
				
			||||||
 | 
					def news():
 | 
				
			||||||
 | 
					    url = 'https://archlinux.org/news/'
 | 
				
			||||||
 | 
					    webbrowser.open_new_tab(url)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					# Get pkg info
 | 
				
			||||||
 | 
					def infos(pkgString):
 | 
				
			||||||
 | 
					    pkg = pkgString.split(' ')
 | 
				
			||||||
 | 
					    url = 'https://archlinux.org/packages/?q='+ pkg[0]
 | 
				
			||||||
 | 
					    webbrowser.open_new_tab(url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Clear old update list when new list available
 | 
				
			||||||
 | 
					def clear():
 | 
				
			||||||
 | 
					    menu.clear()
 | 
				
			||||||
 | 
					    menu.addAction(option1)
 | 
				
			||||||
 | 
					    menu.addAction(option2)
 | 
				
			||||||
 | 
					    menu.addAction(quit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run system updatehttps://archlinux.org/packages/?q='+ pkg[0]
 | 
				
			||||||
def update():
 | 
					def update():
 | 
				
			||||||
    cmd = [ term, opt, 'sudo', 'pacman', '-Syu' ]
 | 
					    cmd = [ term, opt, 'sudo', 'pacman', '-Syu' ]
 | 
				
			||||||
    subprocess.Popen(cmd)
 | 
					    subprocess.Popen(cmd)
 | 
				
			||||||
 | 
					    clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Sets new text for available updates
 | 
					# Create an app surface
 | 
				
			||||||
def newText():
 | 
					 | 
				
			||||||
    count()
 | 
					 | 
				
			||||||
    option1.setText(avail)
 | 
					 | 
				
			||||||
    tray.setToolTip(avail)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Initially populate available updates
 | 
					 | 
				
			||||||
count()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
app = QApplication([])
 | 
					app = QApplication([])
 | 
				
			||||||
app.setQuitOnLastWindowClosed(False)
 | 
					app.setQuitOnLastWindowClosed(False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Adding an icon
 | 
					# Set up timer to update count
 | 
				
			||||||
icon = QIcon(icn)
 | 
					clearTimer = QTimer()
 | 
				
			||||||
 | 
					clearTimer.timeout.connect(clear)
 | 
				
			||||||
 | 
					updateTimer = QTimer()
 | 
				
			||||||
 | 
					updateTimer.timeout.connect(count)
 | 
				
			||||||
 | 
					updateTimer.singleShot(1,count) # Initially populate available updates
 | 
				
			||||||
 | 
					clearTimer.start(wait)
 | 
				
			||||||
 | 
					sleep(1)
 | 
				
			||||||
 | 
					updateTimer.start(wait)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Adding item on the menu bar
 | 
					# Adding items to the menu 
 | 
				
			||||||
tray = QSystemTrayIcon()
 | 
					tray = QSystemTrayIcon()
 | 
				
			||||||
 | 
					icon = QIcon(icn)
 | 
				
			||||||
tray.setIcon(icon)
 | 
					tray.setIcon(icon)
 | 
				
			||||||
tray.setToolTip(avail)
 | 
					tray.setToolTip(avail)
 | 
				
			||||||
tray.setVisible(True)
 | 
					tray.setVisible(True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Creating the options
 | 
					# Creating the options
 | 
				
			||||||
menu = QMenu()
 | 
					menu = QMenu()
 | 
				
			||||||
option1 = QAction(avail)
 | 
					option1 = QAction("Run Update")
 | 
				
			||||||
 | 
					option2 = QAction("Read the News")
 | 
				
			||||||
option1.triggered.connect(update)
 | 
					option1.triggered.connect(update)
 | 
				
			||||||
option1.triggered.connect(newText)
 | 
					option2.triggered.connect(news)
 | 
				
			||||||
menu.addAction(option1)
 | 
					menu.addAction(option1)
 | 
				
			||||||
 | 
					menu.addAction(option2)
 | 
				
			||||||
# Set up timer to update count
 | 
					 | 
				
			||||||
timer = QTimer()
 | 
					 | 
				
			||||||
timer.timeout.connect(newText)
 | 
					 | 
				
			||||||
timer.start(wait)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# To quit the app
 | 
					# To quit the app
 | 
				
			||||||
quit = QAction("Quit")
 | 
					quit = QAction("Quit")
 | 
				
			||||||
quit.triggered.connect(app.quit)
 | 
					quit.triggered.connect(app.quit)
 | 
				
			||||||
menu.addAction(quit)
 | 
					menu.addAction(quit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Adding options to the System Tray
 | 
					# Place the app in the System Tray
 | 
				
			||||||
tray.setContextMenu(menu)
 | 
					tray.setContextMenu(menu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.exec_()
 | 
					app.exec_()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,8 +3,8 @@
 | 
				
			||||||
# ----------------#
 | 
					# ----------------#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Terminal emulator launch command and execute option
 | 
					# Terminal emulator launch command and execute option
 | 
				
			||||||
terminal: terminator
 | 
					terminal: $TERM
 | 
				
			||||||
option: -x
 | 
					option: -e
 | 
				
			||||||
# timer value is set to minutes
 | 
					# timer value is set to minutes
 | 
				
			||||||
timer: 10
 | 
					timer: 10
 | 
				
			||||||
# custom icons should follow Arch linux standards
 | 
					# custom icons should follow Arch linux standards
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue