diff options
author | Jose M. Guisado <jguisado@soleta.eu> | 2021-11-09 13:19:53 +0100 |
---|---|---|
committer | Jose M. Guisado <jguisado@soleta.eu> | 2021-11-15 13:39:36 +0100 |
commit | 69d214f63b2aa8ef60489d56468393b70795124a (patch) | |
tree | 0427eea8699e24591ed880bb31fddd81b2503dab /src/linux | |
parent | 2d3d31bf61a8a0a1499ff2fe002019bdfc1241ec (diff) |
#1065 linux: add systray icon
Adds a systray icon for linux mode. Uses pystray module. Expects a
favicon.ico stored in the same folder as the main ogclient python
script, but if not found a placeholder image is used.
Diffstat (limited to 'src/linux')
-rw-r--r-- | src/linux/ogOperations.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/linux/ogOperations.py b/src/linux/ogOperations.py index 0d70f76..3970d41 100644 --- a/src/linux/ogOperations.py +++ b/src/linux/ogOperations.py @@ -7,18 +7,70 @@ # (at your option) any later version. import os +from pystray import Icon, Menu, MenuItem +import multiprocessing as mp +from multiprocessing import Process +from PIL import Image, ImageDraw + from src.ogRest import ThreadState +def _create_default_image(): + """ + Creates a default image for the tray icon. Use in case + no favicon.ico is found. + """ + width = height = 250 + color1 = (255, 255, 255) + color2 = (255, 0, 255) + + image = Image.new('RGB', (width, height), color1) + dc = ImageDraw.Draw(image) + dc.rectangle( + (width // 2, 0, width, height // 2), + fill=color2) + dc.rectangle( + (0, height // 2, width // 2, height), + fill=color2) + + return image + + +def create_image(): + try: + image = Image.open(r'./favicon.ico') + image = Image.composite(image, Image.new('RGB', image.size, 'white'), image) + except: + image = _create_default_image() + return image + + +def create_systray(): + menu = Menu(MenuItem('Powered by Soleta Networks!', + lambda icon, item: 1)) + icon = Icon('ogClient', create_image(), menu=menu) + assert icon.icon + icon.run() + + +systray_p = Process(target=create_systray) + + class OgLinuxOperations: + def __init__(self): + mp.set_start_method('spawn') + systray_p.start() + def _restartBrowser(self, url): raise NotImplementedError def poweroff(self): + systray_p.terminate() os.system('systemctl poweroff') def reboot(self): + systray_p.terminate() os.system('systemctl reboot') def shellrun(self, request, ogRest): |