From 09cb3ee36595e423d34b469389779b62b6411f2c Mon Sep 17 00:00:00 2001 From: Isaak Date: Fri, 28 Jun 2024 17:05:23 +0200 Subject: [PATCH] fix errors exiting the program, add tray icon --- src/VERSION | 2 +- src/main.py | 6 +++++- src/osc.py | 3 ++- src/requirements.txt | 1 + src/setup.py | 4 ++-- src/tray_icon.py | 22 ++++++++++++++++++++++ 6 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/tray_icon.py diff --git a/src/VERSION b/src/VERSION index a6316f0..d07897c 100644 --- a/src/VERSION +++ b/src/VERSION @@ -1 +1 @@ -v2.3.0 \ No newline at end of file +v2.3.1 \ No newline at end of file diff --git a/src/main.py b/src/main.py index 5789e07..173480c 100644 --- a/src/main.py +++ b/src/main.py @@ -8,6 +8,7 @@ import traceback import glob import shutil +from tray_icon import TrayIcon from threading import Thread from zeroconf._exceptions import NonUniqueNameException @@ -210,14 +211,17 @@ def stop() -> None: None """ xinput.running = False + tray.stop() ovr.shutdown() osc.shutdown() - logging.basicConfig(level=logging.DEBUG if len(sys.argv) > 1 else logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S', handlers=[logging.StreamHandler(), logging.FileHandler(get_absolute_path("log.log"))]) VERSION = open(get_absolute_path("VERSION")).read().strip() +tray = TrayIcon(stop, get_absolute_path("icon.ico")) +tray.run() + # Argument Parser parser = argparse.ArgumentParser(description='ThumbParamsOSC: Takes button data from SteamVR and sends it to an OSC-Client') parser.add_argument('-d', '--debug', required=False, action='store_true', help='prints values for debugging') diff --git a/src/osc.py b/src/osc.py index e176967..fb8d748 100644 --- a/src/osc.py +++ b/src/osc.py @@ -26,7 +26,8 @@ def __init__(self, conf: dict, avatar_change_function, run_server = True) -> Non self.binary_num_bits = int(conf["Binary_bits"]) self.binary_potencies = [2**i for i in range(self.binary_num_bits)] self.binary_potency = (2**self.binary_num_bits) - 1 - + self.server = None + self.oscqs = None self.osc_client = udp_client.SimpleUDPClient(self.ip, self.port) if run_server: self.start_server(avatar_change_function) diff --git a/src/requirements.txt b/src/requirements.txt index a2758b6..a2d78ec 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -5,3 +5,4 @@ argparse requests psutil pyglet +pillow \ No newline at end of file diff --git a/src/setup.py b/src/setup.py index 2083bb2..016d6ba 100644 --- a/src/setup.py +++ b/src/setup.py @@ -2,9 +2,9 @@ VERSION = open("VERSION").read().strip() -packages = ["argparse", "certifi", "charset_normalizer", "idna", "ifaddr", "lief", "openvr", "psutil", "pyglet", "pythonosc", "requests", "urllib3", "zeroconf", "ctypes"] +packages = ["argparse", "certifi", "charset_normalizer", "idna", "ifaddr", "lief", "openvr", "psutil", "pyglet", "pythonosc", "requests", "urllib3", "zeroconf", "ctypes", "pystray", "PIL"] exclude = ["tkinter", "lib2to3", "test", "unittest", "xmlrpc"] -file_include = ["config.json", "Run Debug Mode.bat", "bindings/", "app.vrmanifest", "VERSION"] +file_include = ["config.json", "Run Debug Mode.bat", "bindings/", "app.vrmanifest", "VERSION", "icon.ico"] bin_excludes = ["_bz2.pyd", "_decimal.pyd", "_hashlib.pyd", "_lzma.pyd", "_queue.pyd", "_ssl.pyd", "libcrypto-1_1.dll", "libssl-1_1.dll", "ucrtbase.dll", "VCRUNTIME140.dll"] build_exe_options = {"packages": packages, "excludes": exclude, "include_files": file_include, "bin_excludes": bin_excludes} diff --git a/src/tray_icon.py b/src/tray_icon.py new file mode 100644 index 0000000..b01f81e --- /dev/null +++ b/src/tray_icon.py @@ -0,0 +1,22 @@ +import pystray +import sys + +from PIL import Image, ImageDraw + +class TrayIcon: + def __init__(self, stop_func, icon_path): + self.icon = Image.open(icon_path) + self.menu = pystray.Menu( + pystray.MenuItem("Exit", stop_func) + ) + self.tray_icon = pystray.Icon("tray_icon", self.icon, "ThumbparamsOSC", self.menu) + + def run(self): + self.tray_icon.run_detached() + + def stop(self): + self.tray_icon.stop() + +if __name__ == "__main__": + tray_icon = TrayIcon() + tray_icon.run() \ No newline at end of file