Repository navigation
Avisa en la ventana cuando hay una versión nueva en GitHub - #2
Merged
Merged
Conversation
Al arrancar, como mucho una vez cada 24 h (última consulta en preferencias.json), la ventana consulta releases/latest de Dathinel/subtitular en la API pública de GitHub (User-Agent «Subtitular/<versión>», 5 s de límite, fuera del hilo de UI); sin red o con respuesta rara, calla. Si el tag vX.Y.Z es mayor que la versión de la app, una franja discreta arriba dice «Subtitular X.Y.Z disponible» con «Ver novedades», «Abrir el Lanzador» (si está en %LOCALAPPDATA%\Dathinel\Lanzador o SUBTITULAR_LANZADOR) y «Más tarde» (no vuelve a avisar de esa versión). En Ajustes: la casilla «Avisar cuando haya una versión nueva» (activada de fábrica) y «Buscar actualizaciones», que consulta al momento y también dice cuando no hay nada nuevo. La lógica va en Subtitular.Core detrás de IReleaseFeed: ReleaseInfo (parseo con generador de fuente, solo páginas de github.com), UpdateCheck (24 h, versión descartada, forzado) y Launcher; Preferences suma checkUpdates, lastUpdateCheck y skippedVersion. Pruebas UpdateCheckTests y LauncherTests con JSON falso (nuevo, igual, menor, tag raro, error de red, descartada, 24 h no cumplidas, apagado, forzado). CHANGELOG, README y docs/pruebas-a-mano.md al día. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CfAg5zbUpNWh89d1GNxvHF
Dathinel
added a commit
that referenced
this pull request
Nov 1, 2026
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué hace
Al arrancar, como mucho una vez cada 24 h (última consulta en
preferencias.json), la ventana consultahttps://api.github.com/repos/Dathinel/subtitular/releases/latestsin cuenta, conUser-Agent«Subtitular/<versión>», 5 s de tiempo límite y en el grupo de hilos (la consulta arranca después del primer cuadro, así que no retrasa el arranque). Sin red o con una respuesta rara, calla.Si
tag_name(vX.Y.Z) es mayor que la versión de la app, sale una franja discreta arriba de la ventana, encima de la cabecera, con los colores del acento de la app: «Subtitular 1.1.0 disponible» con:https://github.com/…; sihtml_urltrae otra cosa, la lista de releases).En la tarjeta Ajustes: la casilla «Avisar cuando haya una versión nueva» (activada de fábrica) y el enlace «Buscar actualizaciones», que consulta al momento (aunque no hayan pasado 24 h, aunque la casilla esté apagada y aunque la versión esté descartada) y dice en la barra de abajo cuando no hay nada nuevo o cuando no se pudo consultar.
Dónde está la lógica
Todo en
Subtitular.Core(UpdateCheck.cs), detrás de la interfazIReleaseFeed:GitHubReleaseFeed: la red de verdad (HttpClient, 5 s,User-Agent, 1 MB de respuesta como mucho).ReleaseInfo.Parse: JSON con generador de fuente (GitHubJsonContext, sin reflexión: compatible con AOT);TagVersionsolo acepta tres números con o sinv.UpdateCheck.CheckAsync: las 24 h, la versión descartada, el forzado; nunca lanza por la red (devuelveFailed), solo propaga la cancelación del que llama.Launcher.Find:SUBTITULAR_LANZADOR(el exe o su carpeta) y%LOCALAPPDATA%\Dathinel\Lanzador\Lanzador.exe(ahí mismo o en la subcarpeta de versión más nueva, como los módulos deDathinel\Comun).PreferencessumacheckUpdates,lastUpdateCheckyskippedVersion; un archivo viejo deja el aviso activado.Pruebas
UpdateCheckTestsyLauncherTests, con JSON falso y sin red: nuevo, igual, menor (y versión de cuatro partes), tag raro (v1.1.0-rc1,1.1,latest, vacío), cuerpo raro (roto,[],{"message":"Not Found"},null), error de red (HTTP, tiempo límite, E/S) que cuenta como la consulta del día, cancelación del que llama, descartada (y que «Buscar actualizaciones» la vuelve a ofrecer), 24 h no cumplidas, reloj atrasado, aviso apagado, filtrado dehtml_url, y el Lanzador en carpetas temporales.PreferencesTestscubre los campos nuevos.Compilado con
-warnaserrory 28 pruebas deCoreen verde en Linux (las que necesitanffmpeg.exe,powershello los módulos.exesolo corren en la CI de Windows, que también compila la ventana). La respuesta real de la API se comprobó a mano:tag_namev1.0.0,html_urlde la release.Para decidir Daniel
Launcher.Findsupone%LOCALAPPDATA%\Dathinel\Lanzador\Lanzador.exe(plano o<versión>\) másSUBTITULAR_LANZADOR. Si la ruta o el nombre del exe son otros, es un cambio de una línea enLauncher, con su prueba.Failed.Documentación
CHANGELOG.md(«Sin publicar»),README.mdy una sección nueva endocs/pruebas-a-mano.md(incluye cómo ver la franja bajando<Version>a0.9.0).Generated by Claude Code