Afficher les erreurs dans l’interface GTK #35
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?
Ticket #033 — Afficher les erreurs dans l’interface GTK
Contexte
Le ticket #032 a centralisé le chargement d’une enquête dans :
Cette fonction produit maintenant des
GErrorprécis et conserve l’ancienne session en cas d’échec.Actuellement, les erreurs sont seulement écrites dans le terminal avec :
Un utilisateur qui lance Labfy Investigation depuis son menu d’applications ne verra pas ces messages.
Objectif
Créer un module GTK réutilisable capable d’afficher un message d’erreur compréhensible dans une fenêtre modale.
Le contrôleur doit conserver deux niveaux d’information :
Le module doit rester générique afin de pouvoir afficher plus tard :
Architecture attendue
Créer :
Responsabilités :
Le module de dialogue ne doit connaître ni :
Application;InvestigationSession;Travail à réaliser
1. Créer l’en-tête public
Créer :
Contenu attendu :
2. Créer l’implémentation GTK
Créer :
Le dialogue doit être construit avec des widgets GTK4 simples afin de rester indépendant d’une API de dialogue plus récente.
Structure visuelle recommandée :
Le module doit utiliser au minimum :
GtkWindow;GtkBox;GtkLabel;GtkButton.Propriétés recommandées :
Si
parent_windown’est pasNULL:Le message doit :
Exemple :
3. Gérer les arguments invalides
La fonction doit accepter :
Valeurs de remplacement recommandées :
Le titre par défaut dépend de
message_type.Une valeur inconnue de
message_typedoit être traitée comme une information ou un avertissement, sans crash.4. Ajouter un callback privé de fermeture
Dans l’implémentation, ajouter :
Ce callback doit :
button;gtk_window_destroy().Exemple :
Aucune structure allouée manuellement ne doit être nécessaire pour ce premier dialogue.
5. Différencier visuellement les types
Le dialogue doit au minimum afficher un libellé distinct :
Une différenciation légère peut être ajoutée avec des classes CSS GTK existantes sur le titre ou le bouton.
La couleur ne doit jamais être le seul moyen de distinguer le type.
Aucune feuille CSS spécifique n’est nécessaire dans ce ticket.
6. Ajouter la source au Makefile
Ajouter :
à la liste des sources de l’application.
Le module doit être compilé avec les mêmes options strictes :
Intégration dans
Application7. Ajouter l’en-tête
Dans :
ajouter :
8. Créer un helper privé dans
application.cAjouter :
Implémentation attendue :
Ce helper centralise le choix du parent GTK.
9. Afficher les erreurs d’ouverture
Dans :
conserver le
g_warning()existant.Ajouter ensuite :
L’erreur doit être affichée avant :
L’annulation du sélecteur ne doit toujours afficher aucun message.
10. Afficher les erreurs de création
Dans :
traiter les deux échecs.
Échec de création physique
Conserver le
g_warning()puis afficher :Le message peut contenir :
Projet créé mais impossible à ouvrir
Conserver le
g_warning()puis afficher un message indiquant clairement :Ajouter ensuite le détail du
GError.Le message doit éviter de laisser croire que le dossier créé a été supprimé.
Une chaîne dynamique peut être construite avec :
Elle doit être libérée après l’appel au dialogue.
Exemple d’intégration
Gestion de plusieurs erreurs
Ce ticket ne crée pas encore de file de notifications.
Si plusieurs erreurs surviennent successivement, plusieurs fenêtres peuvent être affichées.
La gestion centralisée des tâches et notifications arrivera avec les tickets #034 et #035.
Tests manuels
Dossier invalide
Ouvrir une enquête;Vérifier :
g_warning();Annulation
Vérifier :
Création dans un emplacement invalide
Provoquer si possible un échec de création :
Vérifier :
Projet créé mais ouverture échouée
Provoquer si possible un échec après la création.
Vérifier que le dialogue précise :
Fermeture du dialogue
Tester :
Fermer;Aucun segfault ne doit apparaître.
Répétition
Produire plusieurs erreurs successives.
Vérifier qu’une nouvelle erreur reste affichable après fermeture de la précédente.
Critères d’acceptation
application_message_dialogexiste.NULLsont acceptés.Fermerfonctionne.g_warning()techniques sont conservés.exit()direct n’est ajouté.makeréussit.make testréussit.git diff --checkne retourne aucune erreur.Audit attendu
Vérifier l’utilisation du module :
Vérifier que les erreurs restent journalisées :
Vérifier l’absence de logique métier dans le dialogue :
Résultat attendu :
Vérifier l’absence de sortie forcée :
Résultat attendu :
Fichiers concernés
Commit attendu
Résultat attendu
Après ce ticket, l’utilisateur ne dépendra plus du terminal pour comprendre pourquoi une enquête n’a pas pu être créée ou ouverte.
Le ticket #034 pourra ensuite introduire le gestionnaire de tâches asynchrones sans mélanger la présentation des erreurs avec l’exécution des traitements longs.