From c8cd6ec041216f03abd745d751cfc38663f856bc Mon Sep 17 00:00:00 2001 From: Labstream Date: Sat, 10 Oct 2026 11:38:42 -0500 Subject: [PATCH] =?UTF-8?q?Reintenta=20solo=20la=20conexi=C3=B3n=20cuando?= =?UTF-8?q?=20Windows=20a=C3=BAn=20retiene=20el=20enlace=20de=20una=20copi?= =?UTF-8?q?a=20cerrada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- app.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app.py b/app.py index bdf3b56..d187c4a 100644 --- a/app.py +++ b/app.py @@ -438,6 +438,7 @@ class App(tk.Tk): self._lens_type = None self._focus_reported = False self._af_hint_shown = False + self._denied_retries = 0 self._notice = None self.web_cmds = queue.Queue() @@ -2145,6 +2146,14 @@ class App(tk.Tk): elif kind == "error": self.log(f"ERROR {ev['text']}") self.notify(ev["text"], "error", 10 if ev.get("popup") else 6) + # Al abrir justo después de cerrar otra copia, Windows aún retiene el enlace unos segundos + # y la cámara responde «acceso denegado»: reintentamos solos dos veces antes de rendirnos. + if (not self.connected and "Acceso denegado" in ev["text"] and self._denied_retries < 2 + and ev["text"].startswith("Conexión")): + self._denied_retries += 1 + self.status_var.set(f"Enlace ocupado: reintento {self._denied_retries} de 2 en 10 s...") + self.after(10000, self.toggle_connect) + return if not self.connected: self.btn_connect.configure(state="normal") self.btn_scan.configure(state="normal") @@ -2203,6 +2212,7 @@ class App(tk.Tk): self.btn_pair.configure(state="normal") elif kind == "connected": self.connected = True + self._denied_retries = 0 self._connect_time = time.time() self._payload_count = 0 self._payload_warned = False