Attend le relachement des touches avant de coller
Deux dictees ont ete transcrites correctement puis n'ont jamais atteint la zone de
saisie, sans la moindre erreur : inject_text avait bien envoye ses touches. Cause :
la hotkey Cmd+Ctrl+D etait encore enfoncee quand Zonza a simule Cmd+V. Le systeme a
recu Cmd+Ctrl+V, que l'application cible ignore. Le code croyait avoir reussi.
inject_text patiente donc jusqu'a ce qu'aucun modificateur physique ne soit enfonce
(drapeaux Quartz), au plus 2 s. Au-dela, il colle quand meme : mieux vaut un collage
douteux qu'une transcription perdue. Le delai du presse-papier passe de 0,05 a 0,12 s,
0,05 etant juste.
Et surtout, le collage se TRACE desormais ("[collage] ok" ou l'avertissement) : sans
cela, un echec futur resterait invisible dans le log, comme celui-ci l'a ete.
L'attente est une unite pure et bornee (core.attendre, horloge et sommeil injectables).
Detecteur verifie en conditions reelles : False au repos, retour immediat.
55 tests passent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,8 @@ CONFIG = {
|
||||
"hotkey": "<cmd>+<ctrl>+d", # Cmd+Ctrl+D (libre : ni macOS ni VS Code ne l'utilisent)
|
||||
"sounds": True,
|
||||
"min_duration_s": 0.3,
|
||||
"attente_modificateurs_s": 2.0, # on patiente avant de coller (cf inject_text)
|
||||
"delai_presse_papier_s": 0.12, # 0.05 s etait juste : le presse-papier n'etait pas pret
|
||||
"max_duration_s": 120.0, # sécurité : arrêt auto après 2 min (fenêtre jamais figée)
|
||||
"sample_rate": 16000,
|
||||
"fps": 30,
|
||||
@@ -105,6 +107,25 @@ _PROPORTIONS = {
|
||||
}
|
||||
|
||||
|
||||
def attendre(condition, delai_max_s, pas_s, dormir=None, horloge=None):
|
||||
"""Attend que `condition()` soit vraie, au plus `delai_max_s`. Rend True/False.
|
||||
|
||||
Bornee volontairement : mieux vaut coller avec un modificateur encore enfonce
|
||||
que perdre la transcription si une touche reste bloquee. `dormir` et `horloge`
|
||||
sont injectables pour tester sans attendre reellement.
|
||||
"""
|
||||
import time as _t
|
||||
dormir = dormir or _t.sleep
|
||||
horloge = horloge or _t.monotonic
|
||||
debut = horloge()
|
||||
while True:
|
||||
if condition():
|
||||
return True
|
||||
if horloge() - debut >= delai_max_s:
|
||||
return False
|
||||
dormir(pas_s)
|
||||
|
||||
|
||||
def bar_metrics(bar_height):
|
||||
"""Mesures de l'overlay pour une hauteur de barre donnee, en points."""
|
||||
if bar_height <= 0:
|
||||
|
||||
Reference in New Issue
Block a user