v1.10.0: el video en primer plano no cuenta como inactividad
Regla pedida por el usuario: si alguien mira un video en el navegador sin tocar
el mouse, no es que este quieto — esta viendo algo. Ahora el sensor lo cuenta
como tiempo de navegador en vez de inactividad.
- Excepcion del VIDEO (Windows): en el tick, si `ocioso` (3 min sin entrada)
PERO al frente hay un navegador (chrome/brave/edge/firefox/opera/vivaldi, se
excluye el host WebView2) Y el sistema esta sacando sonido, es un video
reproduciendose -> `viendo_video`. Se introduce `ocioso_efectivo = ocioso &&
!viendo_video`, y TODO (tramo de inactividad, bandeja, acumulacion de la
ventana) pasa a usar `ocioso_efectivo`. El bloque de navegador se acumula con
a=0 (segundos sin entrada real): presente, sin teclear. La bandeja lo dice
(«video en primer plano»).
- Deteccion de sonido: medidor de pico de la salida de audio por defecto
(WASAPI, IAudioMeterInformation via el crate `windows`, solo cfg(windows)).
No abre el navegador, no lee la pestaña, no graba nada — solo pregunta al SO
si hay sonido saliendo AHORA (pico > 0.01). Limite honesto documentado: un
video MUDO no se detecta. macOS: stub que devuelve false (no hay API publica
sencilla de nivel de audio; el equipo de edicion es Windows) -> comportamiento
identico al de siempre en Mac.
- La ventana al frente ahora se lee cada tic mientras se mide (antes solo con
actividad), porque hace falta para decidir la excepcion; se reutiliza esa
misma lectura para acumular, sin volver a preguntar al SO.
- COM se inicializa una vez al arrancar el hilo del sensor (cfg(windows)).
- El contrato con el servidor NO cambia: se sigue mandando {blocks, idles}, solo
que ahora hay menos idles y algun bloque de navegador cuando hay video. Nada
que tocar en labstream-os.
Verificado con `cargo check`: el reensamblado compila limpio en el host (macOS),
y el codigo WASAPI type-checkea contra el target x86_64-pc-windows-msvc (aislado
en un crate minimo, porque `ring` de la TLS de ureq no cross-compila su C a
Windows desde Mac — eso lo hace la CI). Falta la validacion final en una maquina
Windows real (no puedo reproducir audio de Windows aqui): probar que un video en
YouTube con el mouse quieto sale como navegador y no como inactividad.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Este commit está contenido en:
11
README.md
11
README.md
@@ -39,7 +39,7 @@ NAS. Esto le da al equipo un cliente nativo de verdad en Windows y Mac:
|
||||
resultado. Es un popup nativo del sistema, igual en Windows y macOS, y vive
|
||||
solo en el shell (la web app no se toca).
|
||||
|
||||
- **Rastreador de trabajo efectivo** (v1.9.0, `src-tauri/src/tracker.rs`): mide
|
||||
- **Rastreador de trabajo efectivo** (v1.10.0, `src-tauri/src/tracker.rs`): mide
|
||||
cuánto tiempo se trabaja de verdad y en qué aplicación, y lo publica en el
|
||||
panel **/rastreo** del servidor. Cada 5 s mira la ventana al frente y si
|
||||
hubo entrada de ratón/teclado; **con 3 minutos sin entrada deja de contar**
|
||||
@@ -55,6 +55,15 @@ NAS. Esto le da al equipo un cliente nativo de verdad en Windows y Mac:
|
||||
su último latido en vez de perderlo). Y un tramo se cierra solo a las 4 h:
|
||||
más que eso sin tocar el equipo es ausencia, no descanso frente a la
|
||||
pantalla. En pausa no se anota nada.
|
||||
- **Desde la 1.10, la excepción del VIDEO** (solo Windows): si no hay entrada
|
||||
PERO al frente hay un navegador (Chrome/Brave/Edge/Firefox…) y está saliendo
|
||||
sonido —un video reproduciéndose—, ese rato NO se anota como inactividad: se
|
||||
cuenta como tiempo de navegador (con 0 segundos «activos», porque no se
|
||||
teclea). Se detecta con el medidor de audio del sistema (WASAPI,
|
||||
`IAudioMeterInformation`): no abre el navegador, no lee la pestaña, no graba
|
||||
nada — solo pregunta si hay sonido saliendo. Límite honesto: un video **mudo**
|
||||
no se detecta (no suena). En macOS no aplica (no hay API pública sencilla de
|
||||
nivel de audio); el equipo de edición es Windows.
|
||||
- **Qué NO registra, a propósito:** ni qué teclas se pulsan (solo compara una
|
||||
huella de posición del ratón y cuántas teclas hay presionadas), ni
|
||||
pantallazos, ni el contenido de nada, ni los procesos de fondo.
|
||||
|
||||
Referencia en una nueva incidencia
Block a user