- Ajout d'un bouton pour forcer la mise à jour (si coupure internet pdt le dl, il faut tout désinstaller et re-instalter...).
- Pour les grandes bibli, ajouter un visuel que l'appli est en train de charger les données en cache
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
@page "/a-propos"
|
||||
@inject ServiceLivresApi Api
|
||||
@inject EtatReseau Reseau
|
||||
@inject IJSRuntime JS
|
||||
@implements IDisposable
|
||||
|
||||
@*
|
||||
@@ -93,6 +94,34 @@
|
||||
celle qui y tourne en ce moment.
|
||||
</p>
|
||||
}
|
||||
|
||||
@*
|
||||
⚠️ Ce numéro vient du SERVEUR (voir plus haut) : il ne prouve pas que le navigateur a
|
||||
lui-même récupéré la nouvelle version. Le service worker n'active un nouveau cache
|
||||
qu'une fois TOUS les onglets fermés — un appareil qui reste ouvert en arrière-plan
|
||||
(téléphone surtout) peut rester bloqué sur l'ancienne version indéfiniment. Ce bouton
|
||||
court-circuite cette attente : désinscrire le worker et vider son cache, recharger.
|
||||
Hors-ligne il est désactivé — le déclencher sans réseau couperait l'accès hors-ligne
|
||||
en cours, sans rien pouvoir retélécharger à la place.
|
||||
*@
|
||||
<p>
|
||||
@if (Reseau.EnLigne)
|
||||
{
|
||||
<button type="button" class="bouton bouton-discret" disabled="@_forcageEnCours"
|
||||
@onclick="ForcerMiseAJourAsync">
|
||||
@(_forcageEnCours ? "Mise à jour…" : "Forcer la mise à jour")
|
||||
</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button type="button" class="bouton bouton-discret" disabled
|
||||
title="@EtatReseau.MotifHorsLigne">Forcer la mise à jour</button>
|
||||
}
|
||||
</p>
|
||||
<p class="message-discret">
|
||||
Vide le cache de l'application et la recharge entièrement — à utiliser si une nouvelle
|
||||
version tarde à apparaître malgré la fermeture de tous les onglets.
|
||||
</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -145,6 +174,7 @@
|
||||
private const string Depot = "https://git.akbar.nohost.me/mathieu/mabibli";
|
||||
|
||||
private VersionApplication? _version;
|
||||
private bool _forcageEnCours;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
@@ -161,6 +191,28 @@
|
||||
StateHasChanged();
|
||||
});
|
||||
|
||||
/// <summary>
|
||||
/// Désinscrit le service worker et vide son cache avant de recharger — voir js/forcer-maj.js.
|
||||
/// Le bouton reste désactivé pendant l'opération : un double clic déclencherait deux
|
||||
/// désinscriptions concurrentes pour un seul rechargement.
|
||||
/// </summary>
|
||||
private async Task ForcerMiseAJourAsync()
|
||||
{
|
||||
_forcageEnCours = true;
|
||||
try
|
||||
{
|
||||
await using var module = await JS.InvokeAsync<IJSObjectReference>("import", "./js/forcer-maj.js");
|
||||
await module.InvokeVoidAsync("forcerMiseAJour");
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Le rechargement forcé qui suit normalement l'appel JS ne survient pas ici : on
|
||||
// rend la main pour que l'utilisateur puisse réessayer plutôt que de rester sur un
|
||||
// bouton grisé pour rien.
|
||||
_forcageEnCours = false;
|
||||
}
|
||||
}
|
||||
|
||||
private static string Quand(DateTimeOffset instant)
|
||||
{
|
||||
var local = instant.ToLocalTime();
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
|
||||
@if (_chargement && _livres is null)
|
||||
{
|
||||
<p class="message-discret">Chargement…</p>
|
||||
<Patience Message="Chargement du catalogue…" />
|
||||
}
|
||||
else if (_livres is { Count: 0 })
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user