Intégrer le chargement asynchrone du graphe dans la fenêtre principale #61
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Intégrer le chargement asynchrone du graphe dans la fenêtre principale
Contexte
Le projet possède désormais :
InvestigationGraphModel;InvestigationGraphLoader;InvestigationGraphLoadTask;Le chargement du graphe est désormais capable de s'exécuter dans un worker avec
sa propre connexion SQLite et de restituer le résultat sur le thread principal.
Cette fonctionnalité doit maintenant être intégrée au cycle de vie réel de
l'application.
Objectif
Lorsqu'une enquête est ouverte dans la fenêtre principale :
InvestigationGraphLoadTask;InvestigationGraphModelsur le thread GTK ;d'enquête.
Ce ticket ne dessine pas encore le graphe.
Architecture attendue
Le cycle de vie doit être explicite :
La fenêtre ne doit jamais appeler directement
investigation_graph_loader_load().Propriété du graphe
Le propriétaire du graphe chargé doit être clairement défini.
Architecture recommandée :
Règles :
État privé à ajouter
Le contexte propriétaire doit conserver au minimum :
graph_load_generationpermet d'ignorer un résultat devenu obsolète lorsqu'uneautre enquête a été ouverte avant la fin du chargement précédent.
Une autre stratégie équivalente est acceptée si elle garantit le même résultat.
Générations de chargement
Chaque nouvelle ouverture d'enquête doit :
Dans le callback :
Même si l'annulation est demandée, cette vérification reste obligatoire car une
ancienne tâche peut être en phase de finalisation.
État de chargement dans le workspace
Ajouter une API explicite au workspace, adaptée à son architecture actuelle.
Exemple possible :
Les noms exacts peuvent être adaptés aux conventions actuelles.
Chargement
Pendant le chargement, afficher au minimum :
Un
GtkSpinnerpeut être utilisé.Succès
À ce stade, le workspace peut afficher un résumé temporaire :
Ce résumé sert uniquement à valider l'intégration avant le futur canvas.
Erreur
Afficher un message compréhensible :
Le détail technique de
GErrorpeut être :Ne pas afficher seulement un message SQLite brut sans contexte.
Démarrage du chargement
Créer une fonction interne dédiée, par exemple :
Elle doit :
Ne pas disperser cette logique dans plusieurs callbacks GTK.
Callback de fin
Créer une fonction interne dédiée :
Elle doit :
graph_modeleterror;Données du callback
Créer une petite structure possédée par la tâche :
Ou une variante adaptée au type réel de la fenêtre.
Son destructeur doit :
Si la fenêtre n'est pas un objet GObject possédé par référence, prévoir un
mécanisme sûr pour rendre le callback inactif après fermeture.
Fermeture de la fenêtre
Lors de la destruction de la fenêtre :
Le cycle de vie garanti par
InvestigationGraphLoadTaskdoit être utilisé, pascontourné.
Changement d'enquête
Si une seconde enquête est ouverte pendant le chargement de la première :
Fermeture d'une enquête active
Lorsqu'aucune enquête n'est active :
Erreurs immédiates
Les cas suivants doivent être gérés :
InvestigationGraphLoadTaskimpossible ;Dans ces cas :
graph_load_taskpointer vers un objet inutilisable.Journalisation
Journaliser au minimum :
Début
Succès
Annulation
Erreur
Ne jamais journaliser de données sensibles issues des entités.
Tests
Créer ou compléter les tests des composants concernés.
Tests du workspace
Tester :
Tests de l'intégration fenêtre
Selon l'architecture actuelle du projet, créer un test ciblé ou extraire un
contrôleur testable sans afficher une fenêtre réelle.
Scénarios minimaux :
Test d'un résultat obsolète
Le test doit contrôler deux chargements :
Vérifier que :
freene survient.Utiliser des hooks déterministes plutôt que des délais arbitraires.
Makefile
Ajouter les nouvelles sources de production aux listes appropriées.
Ajouter les nouvelles cibles de test selon l'organisation actuelle du
Makefile.
Les tests doivent conserver :
Les tests GTK doivent pouvoir être lancés dans l'environnement de test actuel
du projet. Ne pas introduire de dépendance à X11.
Hors périmètre
Ce ticket ne couvre pas :
Le ticket suivant créera la première vue GTK/Cairo du graphe chargé.
Critères d'acceptation
make clean && make && make testréussit.git diff --checkne retourne aucune erreur.