Commit Graph

36 Commits

Author SHA1 Message Date
info 3d9f95b3ee fix: root.withdraw() vor messagebox statt destroy() 2026-04-12 12:32:40 +02:00
info c26dfa38d1 fix: root.destroy() erst nach Fehlerbehandlung aufrufen 2026-04-12 12:31:59 +02:00
info 3067499c88 feat: load_model_with_progress mit tkinter-Fortschrittsdialog 2026-04-12 12:30:48 +02:00
info 44c8d8ed84 fix: TkProgressTqdm Typ-Signatur und Test-Isolation verbessert 2026-04-12 12:29:34 +02:00
info e92f5f59fb feat: TkProgressTqdm leitet tqdm-Fortschritt an Queue weiter 2026-04-12 12:28:13 +02:00
info 3a580990ea feat: Transcriber akzeptiert optionales vorgeladenes WhisperModel 2026-04-12 12:26:20 +02:00
info 05ff5765bf feat: Windows-Packaging mit PyInstaller (ZIP ohne Python-Installation)
Fügt Build-Infrastruktur hinzu, mit der whisper-local als
selbständiges Windows-ZIP-Paket ohne Python-Installation
bereitgestellt werden kann.

- whisper_local.spec: PyInstaller onedir-Konfiguration für Windows 64-bit
  mit allen nativen DLLs (ctranslate2/CUDA, pywin32, PortAudio,
  onnxruntime, av/FFmpeg) und Hidden Imports für platform-bedingte Backends
- build.ps1: Build-Skript das versioniertes ZIP erstellt (.\build.ps1 -Clean)
- transcriber.py: portabler Modell-Cache neben der EXE im gebündelten Modus
- pyproject.toml: pyinstaller>=6.0 als [build]-Abhängigkeitsgruppe, v1.0.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 12:01:02 +02:00
info 7319ff6299 fix: App beendet sich nicht mehr nach Hotkey-Änderung in Einstellungen
run() wartete auf den Hotkey-Task direkt; beim Neustart des Listeners
wurde dieser Task beendet und run() kehrte zurück. Jetzt wartet run()
auf ein asyncio.Event (_quit_event), das nur durch _quit() gesetzt wird.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 11:15:55 +02:00
info 71806cd0b8 feat: integrate tray icon, settings dialog, and config reload into App
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:21:29 +02:00
info ad60da4a38 feat: add create_tray() factory with platform dispatch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:17:05 +02:00
info cba0340c76 feat: add SettingsDialog with hotkey recording and microphone selection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:15:34 +02:00
info 32c40827e0 feat: add hotkey conflict detection and microphone listing helpers
Implementiere drei Hilfsfunktionen in _settings.py:
- check_hotkey_conflict(): Prüft mit Win32 RegisterHotKey ob eine Taste belegt ist
- list_microphones(): Gibt alle Eingabegeräte als (name, index) Tupel zurück
- pynput_to_evdev_key(): Konvertiert pynput Keys zu evdev Key-Namen

Alle Tests (9 neue + 9 existierende) bestehen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:13:00 +02:00
info 2630d4c7a5 feat: add system theme detection for sv-ttk 2026-04-10 21:11:18 +02:00
info 9a1b96d178 feat: add Win32TrayApp and NoOpTray with state management 2026-04-10 21:09:10 +02:00
info eb74e4787f feat: add AppState enum and programmatic tray icon generation
Implements Task 5 of the TDD plan: creates the tray package with
AppState enum (WAITING, RECORDING, TRANSCRIBING) and a create_icon()
function that generates colorized microphone icons via Pillow.

- whisper_local/tray/__init__.py: empty package marker
- whisper_local/tray/_tray.py: AppState enum
- whisper_local/tray/_icon.py: icon generation with state-specific colors
- tests/test_tray.py: comprehensive test coverage for icon creation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:07:48 +02:00
info 8b64d66326 feat: add stop() method to HotkeyListener protocol and PynputHotkeyListener 2026-04-10 21:05:20 +02:00
info 1d19a197c7 feat: add optional device parameter to Recorder 2026-04-10 21:03:57 +02:00
info 484df3b9fd fix: escape special characters in save_config TOML output 2026-04-10 21:02:36 +02:00
info 1637314c1d feat: add microphone field and save_config to Config 2026-04-10 21:01:08 +02:00
Vitali Graf 6c678fbcfb fix: suppress key-repeat events in pynput hotkey listener
Holding the hotkey caused dozens of on_press callbacks due to OS key-repeat.
Added a _pressed guard flag so only the first press and actual release fire.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 10:53:09 +02:00
Vitali Graf b94c58d628 fix: add pywin32 dep, move Controller into class, wrap keyboard in to_thread 2026-04-08 10:43:14 +02:00
Vitali Graf 45ad54a79c refactor: use factory functions for hotkey and inserter in main
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:38:56 +02:00
Vitali Graf fc96e9a10c feat: add Win32 inserter backend with clipboard + Ctrl+V
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:36:38 +02:00
Vitali Graf b47045ab9b refactor: convert inserter module to package with wayland backend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:34:07 +02:00
Vitali Graf f9402c427c feat: add pynput hotkey backend for Windows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:31:11 +02:00
Vitali Graf f9bc2204c7 refactor: convert hotkey module to package with evdev backend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:28:52 +02:00
Vitali Graf 5c8eecbb8b feat: platform-dependent config path (APPDATA on Windows)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 10:26:17 +02:00
info 9c058a1ec8 fix: use ydotool + wl-copy for text insertion on KDE Wayland
Replace wtype (unsupported on KDE) with ydotool key for Ctrl+V
simulation. Use wl-copy for clipboard-based insertion to avoid
ydotool type's QWERTZ/QWERTY layout mismatch. Use DEVNULL instead
of PIPE for wl-copy to prevent hanging on its forked background
process.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 21:26:51 +02:00
info edece0488d fix: listen on all matching input devices, not just the first keyboard 2026-04-06 20:50:44 +02:00
info 3a0f70da0b feat: add main entry-point with asyncio event loop
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:29:45 +02:00
info 70d2b6d6e4 feat: add inserter module with clipboard paste and restore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:28:18 +02:00
info 0e9db0b60e feat: add transcriber module with faster-whisper integration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:26:53 +02:00
info 949eb679e1 feat: add recorder module with sounddevice audio capture
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:25:31 +02:00
info ef6ff5b35b feat: add hotkey module with evdev push-to-talk listener
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:23:48 +02:00
info 8224fdcc3f feat: add config module with TOML loading and defaults
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:22:25 +02:00
info e8b73de84a chore: project setup with dependencies and entry-point 2026-04-06 20:20:57 +02:00