commit
8277a0f999
1 changed files with 78 additions and 0 deletions
@ -0,0 +1,78 @@
|
||||
#!/usr/bin/python |
||||
|
||||
import gi |
||||
gi.require_version('Gtk', '3.0') |
||||
from gi.repository import Gtk |
||||
import subprocess, time, threading |
||||
|
||||
|
||||
class TrayIcon(Gtk.StatusIcon): |
||||
|
||||
check_interval = 3600 # seconds |
||||
|
||||
def __init__(self): |
||||
Gtk.StatusIcon.__init__(self) |
||||
self.set_from_icon_name('help-about') |
||||
self.set_has_tooltip(True) |
||||
self.set_visible(True) |
||||
self.connect("popup_menu", self.on_secondary_click) |
||||
self.lastupdate = 0 |
||||
self.update_timer = threading.Timer(None, None) |
||||
self.run_checkupdates(None) |
||||
|
||||
def on_secondary_click(self, widget, button, gtk_time): |
||||
menu = Gtk.Menu() |
||||
|
||||
menu_item0 = Gtk.MenuItem("Last check: " + time.strftime("%a, %H:%M:%S", time.localtime(self.lastupdate))) |
||||
menu.append(menu_item0) |
||||
|
||||
menu_item1 = Gtk.MenuItem("Run checkupdates now") |
||||
menu.append(menu_item1) |
||||
menu_item1.connect("activate", self.run_checkupdates, True) |
||||
|
||||
menu_item2 = Gtk.MenuItem("Quit") |
||||
menu.append(menu_item2) |
||||
menu_item2.connect("activate", self.quit) |
||||
|
||||
menu.show_all() |
||||
menu.popup(None, None, None, self, 3, gtk_time) |
||||
|
||||
def restart_timer(self): |
||||
#print("start_timer(), self.lastupdate=" + str(self.lastupdate)) |
||||
if self.update_timer.is_alive(): |
||||
self.update_timer.cancel() |
||||
|
||||
self.update_timer = threading.Timer(self.check_interval, self.run_checkupdates) |
||||
#self.update_timer = threading.Timer(2, self.restart_timer) |
||||
self.update_timer.start() |
||||
self.run_checkupdates(None) |
||||
|
||||
def run_checkupdates(self, widget, force_update=False): |
||||
cur_time = time.mktime(time.localtime()) |
||||
|
||||
if cur_time > self.check_interval + self.lastupdate or force_update == True: |
||||
print("Checking for updates") |
||||
self.lastupdate = cur_time |
||||
output = subprocess.run("checkupdates", stdout=subprocess.PIPE) |
||||
parsed = output.stdout.decode("utf-8") |
||||
|
||||
if parsed != "": |
||||
self.set_from_icon_name("software-update-urgent") |
||||
self.set_tooltip_text(parsed) |
||||
else: |
||||
self.set_from_icon_name('help-about') |
||||
self.set_tooltip_text("Arch packages up to date") |
||||
|
||||
self.restart_timer() |
||||
|
||||
def quit(self, widget): |
||||
if self.update_timer.is_alive(): |
||||
self.update_timer.cancel() |
||||
|
||||
Gtk.main_quit() |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
tray = TrayIcon() |
||||
Gtk.main() |
||||
|
||||
Loading…
Reference in new issue