Plan de test : entrée du téléchargement hors ligne depuis la home v3

§21.1 bis — 9 cas ajoutés avec le portage du téléchargement dans le
bento (home_3.0.dart, 08/09), dont le piège du fetch qui échoue en
mode avion et laisse les visites téléchargées affichées en « ↓ ».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Thomas Fransolet 2026-09-10 12:04:46 +02:00
parent c525a936c8
commit 2824ca63c1
2 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,14 @@
---
title: Home v3 — téléchargement hors ligne porté, et mort de l'ancienne home
area: visitapp
tags: mymuseum-visitapp, UI, hors ligne
flag: warn | Jamais vu tourner sur device
src: conversation du 2026-09-08 — captures du Fort de Saint-Héribert
---
<p><strong>Trois trous de <code>home_3.0.dart</code> comblés le 2026-09-08, aucun vu tourner sur device.</strong></p>
<p><strong>(1) Les configurations désactivées s'affichaient.</strong> <code>isActive</code> ne vit pas sur <code>ConfigurationDTO</code> mais sur le <em>lien</em> config↔canal (<code>AppConfigurationLinkDTO.isActive</code>, ce que bascule <code>app_configuration_link_screen:407</code>). Ni le fetch par liens ni le set <code>mobileConfigIds</code> ne le lisaient. ⚠️ <strong>L'ancienne home avait le même bug</strong> — ce n'était pas une régression de la v3. La référence était à côté : <code>visitapp-web/src/lib/api/client.ts:170</code> filtre déjà <code>link.isActive &amp;&amp; link.configuration</code>.</p>
<p><strong>(2) Une visite hors ligne était un cul-de-sac.</strong> Pas de bouton télécharger, pas de garde : la tuile ouvrait <code>ConfigurationPage</code>, et <code>body.dart:250</code> lisant ses sections <em>uniquement</em> en base locale quand <code>isOffline</code> est vrai, le visiteur voyait un détail vide, sans message ni erreur. Porté depuis <code>configurations_list.dart</code> : badge en pastille de verre sur la tuile bento (↓ / ✓), tuile ternie tant qu'elle n'est pas prête, dialogue sombre choix de langue + progression (<code>DownloadConfigurationWidget</code> réutilisé tel quel). Zéro nouvelle clé i18n, tout existait dans les 10 langues.</p>
<p>⚠️ <strong>Piège trouvé en câblant</strong> : <code>alreadyDownloaded</code> se déduisait des lignes de la table <code>configurations</code> — table dans laquelle le fetch <strong>écrit une ligne par visite</strong> pour cacher <code>order</code>/<code>gridSpan</code>. Au deuxième lancement, <em>toutes</em> les visites se seraient déclarées téléchargées, et le clic aurait rouvert un détail vide. L'état se déduit maintenant des <strong>sections en base locale</strong>, ce que lit le détail.</p>
<p><strong>(3) Passe visuelle.</strong> Nouveau <code>Components/GlassPill.dart</code> (verre dépoli, 3 usages) : le cog devient <code>Icons.tune</code> + drapeau de la langue courante en pastille, <code>GlassesStatusWidget</code> passe sur la même pastille, et la feuille de réglages passe en sombre — une feuille blanche dans une app noire était le contraste le plus violent de l'écran.</p>
<p><strong>✅ À supprimer une fois validé sur device : <code>Screens/Home/home.dart</code> et <code>Screens/Home/configurations_list.dart</code>.</strong> Ils ne sont plus référencés par personne — <code>HomePage</code> est orphelin, <code>CustomAppBar</code>, <code>main.dart:220</code>, <code>body.dart:122</code> et <code>menu_page.dart:136</code> pointent tous sur <code>HomePage3</code>. Ils n'étaient gardés que pour le téléchargement, qui vient d'être porté. <strong>Ne les supprimer qu'après avoir joué §21 du test-plan sur device</strong> : ce sont les seules références du comportement d'origine si le portage se révèle incomplet.</p>
<p>⚠️ <strong>Deux verrues mises en lumière, pas corrigées.</strong> <code>downloadPrompt</code> annonce « 39,8MB » <strong>en dur dans les 10 langues</strong> et aucune donnée de poids n'existe côté DTO (la colonne <code>weightMasonryGrid</code> a été abandonnée en v3) : soit la taille entre dans l'export, soit le chiffre sort du texte. Et <code>home_3.0.dart:904</code> porte <code>isOnline = true; // Todo remove if not local test</code> — la branche hors ligne <strong>ne s'exécute jamais</strong> (l'analyzer le confirme, <code>dead_code</code> juste après) : une visite téléchargée s'ouvre, mais l'accueil en mode avion passe quand même par le réseau.</p>

View File

@ -747,6 +747,22 @@ Points de vigilance à ne pas oublier au moment de tester :
| 21.1.5 | Ouvrir un Quiz avec images de questions/réponses | Les images s'affichent | | | 21.1.5 | Ouvrir un Quiz avec images de questions/réponses | Les images s'affichent | |
| 21.1.6 | Ouvrir une SectionMap téléchargée | Fond de carte, icônes et points présents | | | 21.1.6 | Ouvrir une SectionMap téléchargée | Fond de carte, icônes et points présents | |
### 21.1 bis — Entrée dans le téléchargement depuis la home v3
> Ajouté le 2026-09-08 avec le portage du téléchargement dans le bento (`home_3.0.dart`). Avant ce portage, une visite hors ligne non téléchargée ouvrait un détail **vide**, sans message.
| # | Action | Attendu | OK |
|---|--------|---------|-----|
| 21.1.7 | Ouvrir la home v3 avec une configuration `isOffline` jamais téléchargée | Tuile ternie, pastille `↓` en haut à droite | |
| 21.1.8 | Taper la tuile (pas la pastille) | Le dialogue de téléchargement s'ouvre — **pas** un détail vide | |
| 21.1.9 | Télécharger, fermer, revenir à la home | La pastille passe au `✓` vert, la tuile n'est plus ternie | |
| 21.1.10 | Taper la tuile téléchargée | Le détail s'ouvre **avec ses sections** | |
| 21.1.11 | **Relancer l'app** puis regarder les tuiles | ⚠️ Les visites non téléchargées restent en `↓`. Le piège : le fetch écrit une ligne par visite dans la table `configurations` pour cacher `order`/`gridSpan` — si l'état se remettait à se déduire de ces lignes, tout passerait en `✓` au 2ᵉ lancement | |
| 21.1.12 | Choisir une langue dans le dialogue, puis télécharger | Seules les ressources de cette langue sont récupérées (sauf mode admin toutes langues) | |
| 21.1.13 | Taper la pastille `✓` d'une visite déjà téléchargée | Dialogue de **mise à jour** (`downloadPromptUpdate`), pas de premier téléchargement | |
| 21.1.14 | Ouvrir une visite dont les langues ne contiennent pas la langue courante | Snackbar « langue non supportée », pas de navigation | |
| 21.1.15 | Désactiver une configuration dans manager-app (interrupteur du lien de canal), relancer la home | La tuile disparaît | |
### 21.2 — Fraîcheur du contenu ### 21.2 — Fraîcheur du contenu
| # | Action | Attendu | OK | | # | Action | Attendu | OK |