mirror of
https://github.com/yusufipk/dikte.git
synced 2026-09-11 10:56:10 +00:00
The recorded WAV was deleted in a finally that did not care why the run ended, so a whisper server being down destroyed the only copy of the user's speech; a failed run now keeps its audio in the recordings directory and names the path in the error. The history was written only after the paste, and a failed key press restored the previous clipboard over the fresh transcript: text not pasted, not on the clipboard, not in the history, audio gone, all from one refused key. The history now comes first, a failed press is a warning the row is amended to carry, and the clipboard keeps the text the user has to paste by hand. Kept recordings no longer overwrite each other inside one second, the keep_audio move failing no longer falls through to the delete, and the history row records whether cleanup actually ran rather than what the dictation gate implies about an ask. In the application: a recorder that failed to start emitted its error synchronously and start() then wrote RECORDING over the handler's IDLE, one more key press away from a BUSY nothing would ever end; start now checks the recorder is running, like start_meeting always has. The new died signal ends the run properly and transcribes what was captured. A --paste override armed by a request that no-opped stopped haunting some later unrelated run, and it dies with a cancelled or failed one. The toggle, ask and pause debounce timers are per action, so a pause right after a toggle is a pause and not a duplicate. Waiters outstanding at quit or restart are settled instead of being read back as "the instance is too old". The listing warm-up and the one-per-press backend lookup move off the key press. Co-Authored-By: Claude Fable 5 <[email protected]>