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') | ||||||
|     global avail |     outputCount = len(outputList.splitlines()) | ||||||
|     avail = str(output)+" Updates" |     if outputCount == 0: | ||||||
|  |         tray.setVisible(False) | ||||||
|  |     else: | ||||||
|  |         tray.setVisible(True) | ||||||
|  |         for i in outputList.splitlines(): | ||||||
|  |             menu.addAction(i, partial(infos, i)) | ||||||
|  |         global avail | ||||||
|  |         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