From 67687a9b43af020f89597bb3aa17ec2abd8c41f7 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Thu, 14 May 2026 17:33:37 +0200 Subject: [PATCH] feat(notify): notify-py + _notification.py Wrapper --- pyproject.toml | 2 + uv.lock | 57 +++++++++++++++++++++++++++++ whisper_local/tray/_notification.py | 19 ++++++++++ 3 files changed, 78 insertions(+) create mode 100644 whisper_local/tray/_notification.py diff --git a/pyproject.toml b/pyproject.toml index 1c6b983..9315eb7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,8 @@ dependencies = [ "Pillow>=10.0.0", "sv-ttk>=2.6.0", "darkdetect>=0.8.0", + "notify-py>=0.3.43", + "comtypes>=1.4.0; sys_platform == 'win32'", ] [project.scripts] diff --git a/uv.lock b/uv.lock index 17e879f..1f88f89 100644 --- a/uv.lock +++ b/uv.lock @@ -131,6 +131,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "comtypes" +version = "1.4.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/2a/65274c13327f637ec13af8d39f2cf579d9ebe7a0e683696b5f05236d2805/comtypes-1.4.16.tar.gz", hash = "sha256:cd66d1add01265cface4df51ba1e31cd1657e04463c281c802e737e79e1ba93c", size = 260252, upload-time = "2026-03-02T23:11:42.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/7c/0eb685107290b6221c03c46d39214a4e42a124189691cb83ae3228257f46/comtypes-1.4.16-py3-none-any.whl", hash = "sha256:e18d85179ff12955524c5a8c3bc09cb3c0d890f1da4d7123d14244c7b78f84c8", size = 296230, upload-time = "2026-03-02T23:11:41.049Z" }, +] + [[package]] name = "ctranslate2" version = "4.7.1" @@ -331,6 +340,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "loguru" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/1f/d3818863e4be96bd641c4643c535a98f0fa2a12efa7c8ba35f763fa778ee/loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c", size = 123158, upload-time = "2022-01-29T13:47:31.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/21/e1d1da2586865a159fc73b611f36bdd50b6c4043cb6132d3d5e972988028/loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3", size = 58317, upload-time = "2022-01-29T13:47:29.921Z" }, +] + [[package]] name = "macholib" version = "1.16.4" @@ -373,6 +404,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, ] +[[package]] +name = "notify-py" +version = "0.3.43" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "loguru" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/2b/fc68aeed5108185922c5469484e15c192dff01d61eddfab0c1c256e4f54c/notify_py-0.3.43.tar.gz", hash = "sha256:16ee146d48f16bae5dad233db66014a387efd2c6ed2c4caf1e08aef432070513", size = 648145, upload-time = "2024-06-05T14:40:38.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/b4/649f16520ed0a64c275861dcaf9c1291d079f742aa2bf9102fdd168e4197/notify_py-0.3.43-py3-none-any.whl", hash = "sha256:90da686b480bf05d033b21fb5118662bb7a4c68e68cb21d93a048ca7b867f9b4", size = 649803, upload-time = "2024-06-05T14:40:36.733Z" }, +] + [[package]] name = "numpy" version = "2.4.4" @@ -939,10 +983,12 @@ name = "whisper-local" version = "1.2.0" source = { editable = "." } dependencies = [ + { name = "comtypes", marker = "sys_platform == 'win32'" }, { name = "darkdetect" }, { name = "dbus-next", marker = "sys_platform == 'linux'" }, { name = "evdev", marker = "sys_platform == 'linux'" }, { name = "faster-whisper" }, + { name = "notify-py" }, { name = "numpy" }, { name = "pillow" }, { name = "pygobject", marker = "sys_platform == 'linux'" }, @@ -967,10 +1013,12 @@ dev = [ [package.metadata] requires-dist = [ + { name = "comtypes", marker = "sys_platform == 'win32'", specifier = ">=1.4.0" }, { name = "darkdetect", specifier = ">=0.8.0" }, { name = "dbus-next", marker = "sys_platform == 'linux'", specifier = ">=0.2.3" }, { name = "evdev", marker = "sys_platform == 'linux'", specifier = ">=1.7.0" }, { name = "faster-whisper", specifier = ">=1.1.0" }, + { name = "notify-py", specifier = ">=0.3.43" }, { name = "numpy", specifier = ">=2.0.0" }, { name = "pillow", specifier = ">=10.0.0" }, { name = "pygobject", marker = "sys_platform == 'linux'", specifier = ">=3.50" }, @@ -991,6 +1039,15 @@ dev = [ { name = "pytest-asyncio", specifier = ">=0.24.0" }, ] +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] + [[package]] name = "winrt-runtime" version = "3.2.1" diff --git a/whisper_local/tray/_notification.py b/whisper_local/tray/_notification.py new file mode 100644 index 0000000..ab1e73b --- /dev/null +++ b/whisper_local/tray/_notification.py @@ -0,0 +1,19 @@ +"""Desktop-Benachrichtigungen via notify-py.""" +import logging + +logger = logging.getLogger(__name__) + +_APP_NAME = "whisper-local" + + +def notify(title: str, message: str) -> None: + """Zeigt eine Desktop-Benachrichtigung. Bei Fehler wird nur geloggt.""" + try: + from notifypy import Notify + n = Notify() + n.application_name = _APP_NAME + n.title = title + n.message = message + n.send() + except Exception: + logger.warning("Benachrichtigung fehlgeschlagen: %s – %s", title, message)