diff --git a/kanban/cards/4-a-tester/110-home-v3-telechargement-hors-ligne-et-mort-de.md b/kanban/cards/4-a-tester/110-home-v3-telechargement-hors-ligne-et-mort-de.md new file mode 100644 index 0000000..14fbc07 --- /dev/null +++ b/kanban/cards/4-a-tester/110-home-v3-telechargement-hors-ligne-et-mort-de.md @@ -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 +--- +

Trois trous de home_3.0.dart comblés le 2026-09-08, aucun vu tourner sur device.

+

(1) Les configurations désactivées s'affichaient. isActive ne vit pas sur ConfigurationDTO mais sur le lien config↔canal (AppConfigurationLinkDTO.isActive, ce que bascule app_configuration_link_screen:407). Ni le fetch par liens ni le set mobileConfigIds ne le lisaient. ⚠️ L'ancienne home avait le même bug — ce n'était pas une régression de la v3. La référence était à côté : visitapp-web/src/lib/api/client.ts:170 filtre déjà link.isActive && link.configuration.

+

(2) Une visite hors ligne était un cul-de-sac. Pas de bouton télécharger, pas de garde : la tuile ouvrait ConfigurationPage, et body.dart:250 lisant ses sections uniquement en base locale quand isOffline est vrai, le visiteur voyait un détail vide, sans message ni erreur. Porté depuis configurations_list.dart : 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 (DownloadConfigurationWidget réutilisé tel quel). Zéro nouvelle clé i18n, tout existait dans les 10 langues.

+

⚠️ Piège trouvé en câblant : alreadyDownloaded se déduisait des lignes de la table configurations — table dans laquelle le fetch écrit une ligne par visite pour cacher order/gridSpan. Au deuxième lancement, toutes 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 sections en base locale, ce que lit le détail.

+

(3) Passe visuelle. Nouveau Components/GlassPill.dart (verre dépoli, 3 usages) : le cog devient Icons.tune + drapeau de la langue courante en pastille, GlassesStatusWidget 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.

+

✅ À supprimer une fois validé sur device : Screens/Home/home.dart et Screens/Home/configurations_list.dart. Ils ne sont plus référencés par personne — HomePage est orphelin, CustomAppBar, main.dart:220, body.dart:122 et menu_page.dart:136 pointent tous sur HomePage3. Ils n'étaient gardés que pour le téléchargement, qui vient d'être porté. Ne les supprimer qu'après avoir joué §21 du test-plan sur device : ce sont les seules références du comportement d'origine si le portage se révèle incomplet.

+

⚠️ Deux verrues mises en lumière, pas corrigées. downloadPrompt annonce « 39,8MB » en dur dans les 10 langues et aucune donnée de poids n'existe côté DTO (la colonne weightMasonryGrid a été abandonnée en v3) : soit la taille entre dans l'export, soit le chiffre sort du texte. Et home_3.0.dart:904 porte isOnline = true; // Todo remove if not local test — la branche hors ligne ne s'exécute jamais (l'analyzer le confirme, dead_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.

diff --git a/test-plan.md b/test-plan.md index bde9c28..ccead60 100644 --- a/test-plan.md +++ b/test-plan.md @@ -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.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 | # | Action | Attendu | OK |