Skip to content

Calidad de vida: preferencias, cola de videos, vista previa, abrir carpeta y atajos - #1

Merged
Dathinel merged 8 commits into
mainfrom
claude/calidad-de-vida
Nov 1, 2026
Merged

Dathinel merged 8 commits into
mainfrom
claude/calidad-de-vida

Conversation

@Dathinel

@Dathinel Dathinel commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Funciones de calidad de vida para la ventana, cada una en su commit, con la lógica en Rastrear.Core probada sin UI (35 pruebas en total) y una línea en CHANGELOG «Sin publicar». CI en verde.

  1. Recordar la última carpeta, la última herramienta y sus parámetros (UserPreferences, preferencias.json); los diálogos se abren en la última carpeta.
  2. Soltar varios videos en cualquier parte de la ventana y cola con progreso por archivo (BatchQueue); el resultado queda junto al video de entrada (OutputNaming). «Cancelar» mata ffmpeg y el módulo de visión que sigan vivos (ChildProcessRegistry por ejecución + TaskExecutionController.CancelAsync) y avisa si alguno no salió.
  3. Vista previa «Después» del primer cuadro al cambiar parámetros: recorte del reencuadre y fondo quitado con la máscara del módulo (FramePreview, VisionService.MatteFrameAsync). Seguir, detectar y estabilizar no la tienen: dependen del video entero.
  4. «Abrir carpeta» y «Copiar ruta» del resultado (ResultActions).
  5. Atajos Ctrl+O, Ctrl+Enter, Esc (KeyboardShortcuts) y aviso claro si falta el módulo de visión con botón «Abrir el Lanzador» si está en el PC (VisionModuleMissingException, LauncherLocator). La ruta del Lanzador (RASTREAR_LANZADOR, %LOCALAPPDATA%\Dathinel\Lanzador) es una suposición: si se instala en otro sitio, añadirla a LauncherLocator.Candidates.

Aparte, un commit corrige docs/legal.md (la atribución a Rodaje en la interfaz ya estaba desde la 1.0.0) y añade TerraFX.Interop.Windows a LICENCIAS.md. Lo que juzga Daniel a ojo: bloque 8 de docs/pruebas-a-mano.md.

No unir hasta que Daniel lo revise.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz

…p.Windows en LICENCIAS.md

docs/legal.md decía que faltaba el enlace a Rodaje en la interfaz (término 1 de su licencia) cuando el diálogo «Acerca de» lo lleva desde la 1.0.0, como ya marcaba la lista de comprobación. LICENCIAS.md no listaba TerraFX.Interop.Windows (MIT), que se compila dentro de Rastrear.App.exe.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
UserPreferences (Rastrear.Core/Ui) guarda en preferencias.json la carpeta del último video abierto, la herramienta elegida y los parámetros de las cinco; al cargar recorta lo que no cabe en los controles y un archivo roto vuelve a los valores por defecto. La ventana los aplica al arrancar, los guarda al ejecutar y al cerrar, y los diálogos de abrir y guardar se abren en la última carpeta (IFileDialog::SetFolder). Dos pruebas.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
…ancelar sin dejar procesos vivos

BatchQueue (Rastrear.Core/Ui) lleva la cola: estado, progreso por archivo y global, «Archivo 2 de 5 · 40 % · Siguiendo», resumen al acabar y reanudar o repetir. OutputNaming deja el resultado junto al video de entrada (clip-fondo.webm, clip-seguimiento.csv…) sin pisar nada. ChildProcessRegistry apunta ffmpeg, ffprobe y el módulo de visión al arrancarlos; TaskExecutionController.CancelAsync, además de cancelar el token, los mata y espera a que salgan, y deja en LeftAliveAfterCancel lo que no salió. La ventana acepta soltar en cualquier parte, filtra lo que no es video, muestra la cola con su estado y ejecuta la herramienta sobre cada uno. Cinco pruebas, una de ellas con un proceso real que cancelar mata.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
FramePreview (Rastrear.Core/Ui) recorta el primer cuadro con el rectángulo centrado de OverlayGeometry para el reencuadre y compone la máscara del fondo sobre un tablero de ajedrez o en grises; VisionService.MatteFrameAsync pide al módulo la máscara de un solo cuadro. El botón «Después» del reproductor alterna con el cuadro original y se rehace al cambiar el aspecto, el modo, la calidad o el dispositivo, cancelando la petición anterior. Seguir, detectar y estabilizar no tienen vista previa y el botón lo explica. Dos pruebas sobre píxeles sintéticos.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
ResultActions (Rastrear.Core/Ui) da los argumentos de explorer.exe con el archivo seleccionado (o la carpeta si el archivo ya no está) y el texto para el portapapeles. Dos botones bajo «Exportar», activos cuando hay resultado; exportar un video deja la copia como resultado. Una prueba con el lanzador simulado.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
…n ella

El registro era global y la prueba de cancelar mataba el ffmpeg de otra prueba que corría en paralelo (CI roja en StabilizeTests). Ahora BeginExecution abre un ámbito que viaja con el flujo asíncrono (AsyncLocal) y CancelAsync mata solo lo apuntado en ese ámbito; lo arrancado fuera (el reproductor, otras pruebas) no se toca. La prueba lo comprueba con un proceso ajeno que sigue vivo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
…si falta el módulo de visión

KeyboardShortcuts (Rastrear.Core/Ui) decide cuándo vale cada atajo (abrir no mientras corre, empezar con video y sin nada corriendo, cancelar solo corriendo); la ventana los declara como KeyboardAccelerator en la raíz. FindModule lanza VisionModuleMissingException (sigue siendo RastrearUserException con las rutas probadas para la Cli) y la ventana, antes de ejecutar quitar fondo, detectar o reencuadrar, comprueba el módulo y avisa en claro, con un botón «Abrir el Lanzador» si LauncherLocator lo encuentra (RASTREAR_LANZADOR o %LOCALAPPDATA%\Dathinel\Lanzador). Dos pruebas.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5yC1exGqq77EU7AJWz
@Dathinel
Dathinel merged commit 7b7eec1 into main Nov 1, 2026
1 check passed
@Dathinel
Dathinel deleted the claude/calidad-de-vida branch November 1, 2026 00:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants