Clone
10
Architecture
FroSteel edited this page 2026-10-01 00:09:53 +02:00

Architecture

Cette page s'adresse à qui veut lire, construire ou modifier le code de l'extension. Elle décrit la version publiée 2026.5.50.

Structure du dépôt

Planification/
├── src/                     Sources de l'extension, chargées telles quelles par le navigateur
│   ├── manifest.json        Manifest V3 (version, permissions, domaines EasyVista)
│   ├── background.js        Service worker : session, requêtes EasyVista, hôte natif
│   ├── viewer.html          Page du planning
│   ├── viewer.js            Interface : lecture, rendu, bulles, déplacements, paramètres
│   ├── viewer.css           Styles, thèmes clair et sombre
│   └── icons/               Icônes 16, 48 et 128 px
├── native-host/             Script Windows de synchronisation (PowerShell)
│   ├── Gerer.cmd            Point d'entrée : installer, réparer, désinstaller
│   └── bin/                 host.ps1, manage.ps1, tray.ps1, tray.vbs
├── build.sh                 Construction des paquets Chromium et Firefox
├── firefox-updates.json     Manifeste de mise à jour lu par Firefox
├── CHANGELOG.md
├── LICENSE                  MIT
└── README.md

Le code est du JavaScript sans framework ni bundler. Le navigateur charge src/ sans transformation.

Construire

Prérequis : bash, python3 et zip.

./build.sh

Le script lit la version dans src/manifest.json et produit :

  • dist/chromium/ et dist/planification-vX.Y.Z-chromium.zip ;
  • dist/firefox/ et dist/planification-vX.Y.Z-firefox.xpi, avec les réglages propres à Firefox (identifiant de l'extension, version minimale 140, adresse de mise à jour) ;
  • une entrée pour cette version dans firefox-updates.json.

Pour essayer une modification : charge dist/chromium/ comme extension non empaquetée dans Chrome, ou dist/firefox/ comme module temporaire dans Firefox (about:debugging).

Publier une version

  1. Version dans src/manifest.json, entrée dans CHANGELOG.md, puis ./build.sh.
  2. Commit, tag vX.Y.Z et publication Gitea avec le .zip Chromium et le .xpi.
  3. Mozilla signe le .xpi (distribution hors catalogue). Le .xpi signé remplace celui de la publication, puis son empreinte sha256 va dans firefox-updates.json sur main.

Firefox lit firefox-updates.json sur la branche main pour proposer la mise à jour : ce fichier et les .xpi publiés servent en production.

Composants

Service worker (background.js)

  • Trouve la session EasyVista (cookie PHPSESSID) sur les domaines configurés et détecte le contexte réseau, interne ou Internet.
  • Envoie toutes les requêtes vers EasyVista : planning du jour, fiches, historique des actions, utilisateur connecté, groupes et membres d'un groupe.
  • Envoie les modifications demandées par la page : déplacement ou changement d'horaire, création et suppression d'absences et de réservations, envoi sur la douchette, prolongation de session.
  • Ouvre la page du planning au clic sur l'icône de l'extension.

Page du planning (viewer.html, viewer.js, viewer.css)

  • Lit le planning EasyVista et le range dans le store du jour.
  • Affiche les deux vues, les bulles, le dock, la recherche et les Paramètres.
  • Parle au script de synchronisation par messagerie native (ch.netaplaid.planification).

Données stockées

Dans chrome.storage.local, sur le poste :

Clé Contenu
admin_config Réglages : groupe, équipe, absences récurrentes, domaines, apparence, emails, dossier partagé
planv2_AAAA-MM-JJ Store d'un jour : techniciens et interventions, chacune avec un verdict unique (live, done, suspended, closed, gone, moved, unknown)
reservation_meta Informations de réservation en attente d'enregistrement dans le store
pompier_assignments Périodes de service pompier
network_context_v2 Contexte réseau détecté (interne ou Internet)
debug_logs Journal détaillé activé ou non (côté service worker)

Dans localStorage de la page : view_mode (vue classique ou horizontale) et debug_logs.

L'extension efface les jours plus vieux que la durée du cache (7 jours par défaut). Elle identifie une intervention par son requestId, sinon son actionId, sinon sa référence.

Synchronisation entre postes

Le script native-host s'installe dans le profil Windows de l'utilisateur, sans droits administrateur, et s'enregistre comme hôte de messagerie native. L'extension lui confie la lecture et l'écriture des fichiers de jour dans le sous-dossier v2 du dossier partagé, classés par année et par mois. Chaque écriture compare le fichier avant de le remplacer et prend un verrou : deux postes ne s'écrasent pas.

Réseau

L'extension ne contacte que :

  • les domaines EasyVista configurés (itsma.etat-de-vaud.ch, itsma.vd.ch par défaut), avec la session de l'utilisateur ;
  • le portail de connexion du Canton, ouvert dans un onglet pour se reconnecter ;
  • Gitea, pour télécharger le script de synchronisation sur clic de l'utilisateur.

Firefox, de son côté, consulte firefox-updates.json sur Gitea pour les mises à jour.

Journaux

Chaque ligne de la console porte l'heure, la version, le module et le niveau. Les étapes détaillées n'apparaissent qu'avec « Logs verbeux (debug) » (onglet Diagnostics).