Boton cerrar y cerrar la pestaña apaga JARVIS
Cerrar el panel dejaba el proceso vivo (whisper agarrando la grafica, el microfono escuchando). Ahora hay un boton "cerrar" (dos clics) y cerrar la ultima pestaña apaga JARVIS del todo: para la voz, suelta whisper y cierra el proceso, via SIGINT (la misma limpieza que Ctrl+C).
This commit is contained in:
parent
3a2a1bb111
commit
fde0fc1c72
6 changed files with 95 additions and 10 deletions
|
|
@ -18,6 +18,7 @@ mirando: sin panel abierto son quince mensajes por segundo a nadie.
|
|||
"""
|
||||
import os
|
||||
import shutil
|
||||
import signal
|
||||
import subprocess
|
||||
import threading
|
||||
import time
|
||||
|
|
@ -360,6 +361,20 @@ class Panel:
|
|||
except Exception:
|
||||
pass
|
||||
|
||||
def cerrar(self):
|
||||
"""Apaga JARVIS entero: la escucha, la voz, whisper-server y el proceso.
|
||||
|
||||
Cerrar la pestaña o pulsar «cerrar» tiene que soltar de verdad el
|
||||
microfono y la grafica, no dejar el proceso escuchando en segundo plano.
|
||||
Se manda SIGINT al propio proceso: eso dispara el mismo apagado que
|
||||
Ctrl+C —el finally del bucle de escucha para whisper, y atexit lo remata—
|
||||
asi que se reutiliza la limpieza que ya estaba probada, sin duplicarla.
|
||||
Corre desde un hilo del servidor; la señal la atiende el hilo principal.
|
||||
"""
|
||||
self.parado = True # que la escucha no atienda nada mas ya
|
||||
self.para() # corta los hilos y las tareas del panel
|
||||
os.kill(os.getpid(), signal.SIGINT)
|
||||
|
||||
# --------------------------------------------------------------- pulsar
|
||||
|
||||
def pulsado(self, canal: str, dato: str):
|
||||
|
|
@ -417,6 +432,13 @@ class Panel:
|
|||
self.manda_controles()
|
||||
self.estado("escuchando" if not self.centinela.activo else "dormido")
|
||||
|
||||
elif dato == "cerrar":
|
||||
# Apagar JARVIS del todo. Se responde primero al HUD para que la
|
||||
# ventana sepa cerrarse, y luego se mata el proceso.
|
||||
self.cara.manda("cerrando", True)
|
||||
self.cerrar()
|
||||
return
|
||||
|
||||
elif dato.startswith("parar"):
|
||||
# El boton alterna PAUSA. No es solo "cortar lo de ahora": el titulo
|
||||
# promete "cierra el microfono y corta la voz; pulsa otra vez para
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue