From 69d214f63b2aa8ef60489d56468393b70795124a Mon Sep 17 00:00:00 2001 From: "Jose M. Guisado" Date: Tue, 9 Nov 2021 13:19:53 +0100 Subject: #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. --- src/linux/ogOperations.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) 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): -- cgit v1.2.3-18-g5258