info
ed03d954a6
feat(media): SmtcController Skeleton mit circuit-breaker
...
Circuit-breaker-Pattern: Nach erstem Fehler beim SMTC-Manager-Zugriff
bleibt _broken=true und verhindert alle weiteren Zugriff-Versuche.
Logs Warnung einmalig und cleart _paused.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-15 20:11:02 +02:00
info
343240fec1
fix(media): Circuit-Breaker für D-Bus-Connect-Fehler
...
Nach dem ersten fehlgeschlagenen Bus-Connect wird der Controller
dauerhaft deaktiviert, statt bei jedem Hotkey-Druck einen neuen
Connect-Versuch zu starten.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 19:13:17 +02:00
info
b5d6ae6ecc
feat(media): MprisController fängt Player- und Bus-Fehler sauber ab
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 18:58:42 +02:00
info
f23ee1249d
feat(media): MprisController.resume() stellt nur eigene Pausen wieder her
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 18:57:40 +02:00
info
c98a935dbc
feat(media): MprisController.pause() via dbus-next
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 18:56:36 +02:00
info
184df1594e
feat(media): Protocol, Factory und Noop-Controller
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 18:50:55 +02:00
info
71602f0ece
feat(config): pause_media_during_recording-Flag
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 21:26:36 +02:00
info
34dddcc043
Merge branch 'master' of https://code.vitaligraf.de/info/whisper-local
2026-04-12 12:55:08 +02:00
info
e31230fd84
fix: winfo_viewable durch explizites Flag ersetzen, unbenutzte Imports entfernen
2026-04-12 12:36:18 +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
db1f55aee1
test: MagicMock im Linux-create_tray-Test für Stil-Konsistenz
2026-04-11 21:32:49 +02:00
info
149289510f
feat: create_tray() dispatcht auf Linux zu PystrayApp
2026-04-11 21:30:19 +02:00
info
d780960381
fix: EvdevHotkeyListener.stop() cancelt Tasks und schließt Devices
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 21:21:57 +02:00
info
107508eeb9
fix(evdev): Resource-Leak und Handling unbekannter Keycodes
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 21:19:07 +02:00
info
80a01903e8
feat: Linux-Hotkey-Record via evdev
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 21:16:21 +02:00
info
f380828309
refactor: Windows-Hotkey-Record in eigenes Modul auslagern
2026-04-11 21:13:10 +02:00
info
64bd584181
refactor: rename Win32TrayApp to PystrayApp
2026-04-11 21:09:39 +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
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