Skip to content

Aviso de versión nueva: consulta a GitHub cada 24 h, franja en la ventana y «Buscar actualizaciones» - #2

Merged
Dathinel merged 1 commit into
mainfrom
claude/pensive-wozniak-1bqxdy
Nov 1, 2026
Merged

Dathinel merged 1 commit into
mainfrom
claude/pensive-wozniak-1bqxdy

Conversation

@Dathinel

@Dathinel Dathinel commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Qué hace

  • Al arrancar, como mucho una vez cada 24 h y sin bloquear la ventana, consulta https://api.github.com/repos/Dathinel/rastrear/releases/latest sin token, con User-Agent: Rastrear/<versión> y 5 s de tiempo límite. Sin red, HTTP distinto de 200 o JSON raro: silencio.
  • Si tag_name (vX.Y.Z) es mayor que la versión de la app, una franja discreta bajo la cabecera con el estilo de la app (panel, raya de acento, Bahnschrift): «Rastrear 1.1.0 disponible», qué versión tienes y quién instala la nueva, y tres enlaces: «Ver novedades» (la página de la release en el navegador), «Abrir el Lanzador» solo si LauncherLocator lo encuentra, y «Más tarde» (no vuelve a avisar de esa versión; una mayor sí).
  • En «Acerca de» (donde ya está la versión): el interruptor «Avisar cuando haya una versión nueva» (activado por omisión) y el enlace «Buscar actualizaciones», que consulta al momento, pasa por encima de las 24 h y de «Más tarde», y dice el resultado también cuando no hay nada nuevo («No hay nada nuevo: la 1.0.0 es la última versión.») o sin red.
  • Todo en preferencias.json: avisarVersionNueva, ultimaConsultaVersion, versionDescartada. Un JSON de la 1.0.0 sin esos campos parte de los valores por defecto.

Dónde

  • Rastrear.Core/Ui/UpdateChecker.cs: IReleaseFeed (red) y GitHubReleaseFeed; UpdateChecker con el parseo (GitHubRelease en RastrearJsonContext, sin reflexión), la comparación de versiones, las 24 h, la versión descartada y los textos. La página de la release solo se acepta si es https en github.com; si no, la de esa etiqueta en el repositorio.
  • Rastrear.Core/Ui/UserPreferences.cs: los tres campos nuevos.
  • Rastrear.App/MainWindow.xaml(.cs): fila nueva para la franja, bloque en «Acerca de», región «Versión nueva»; «Abrir el Lanzador» reutiliza el mismo arranque que el aviso de módulo que falta.
  • tests/Rastrear.Tests/ActualizacionesTests.cs: JSON falso con nuevo, igual, menor, tag raro (y JSON que no es una release), error de red, descartada, 24 h no cumplidas, reloj hacia atrás, aviso apagado y force; preferencias de ida y vuelta. 49 pruebas en total.
  • CHANGELOG.md («Sin publicar»), README.md, bloque 9 de docs/pruebas-a-mano.md (con cómo probarlo sin esperar a una release: bajar la versión en Directory.Build.props) y la línea de estado en CLAUDE.md.

Decisiones que conviene mirar

  • El interruptor y «Buscar actualizaciones» van en «Acerca de» porque es el único sitio de la ventana con preferencias de la app (lo demás son parámetros de herramienta) y ya muestra la versión. Si prefieres otro sitio, es mover dos controles.
  • La hora de la consulta se apunta en cada intento, también si falló: así nunca hay más de una petición cada 24 h, al precio de que un arranque sin red deja el aviso para el día siguiente.
  • Se ignoran draft y prerelease (la API de latest ya no los devuelve, pero por si acaso).

Verificación

  • En Linux (este contenedor) compilan Rastrear.Core y las pruebas en Release con -warnaserror; pasan las 42 pruebas que no arrancan ffmpeg.exe ni el módulo de Windows (las 7 restantes fallan aquí también sin estos cambios, por el entorno). La App WinUI y el conjunto completo los verifica el CI en Windows.

Generated by Claude Code

…tana y «Buscar actualizaciones»

Al arrancar, como mucho una vez cada 24 h y sin bloquear la ventana, se consulta
la última release pública de GitHub (`UpdateChecker` en `Rastrear.Core/Ui`,
detrás de `IReleaseFeed`; `User-Agent: Rastrear/<versión>`, 5 s de tiempo
límite; sin red o con una respuesta rara, silencio). Si `tag_name` es mayor que
la versión de la app, una franja bajo la cabecera dice «Rastrear 1.1.0
disponible» con «Ver novedades», «Abrir el Lanzador» (si `LauncherLocator` lo
encuentra) y «Más tarde» (no vuelve a avisar de esa versión). En «Acerca de»,
el interruptor «Avisar cuando haya una versión nueva» (activado por omisión) y
el enlace «Buscar actualizaciones», que consulta al momento y también dice
cuando no hay nada nuevo. Interruptor, última consulta y versión descartada van
en `preferencias.json` (`UserPreferences`).

`ActualizacionesTests`: parseo del JSON de GitHub (nuevo, igual, menor, tag
raro), error de red, versión descartada, 24 h no cumplidas, aviso apagado y
preferencias. 49 pruebas.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CfAg5w152K3ziMAZELaUPF
@Dathinel
Dathinel merged commit c5bee84 into main Nov 1, 2026
1 check passed
@Dathinel
Dathinel deleted the claude/pensive-wozniak-1bqxdy branch November 1, 2026 01:22
Dathinel added a commit that referenced this pull request Nov 1, 2026
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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