Importer une preuve depuis l’interface GTK #50
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?
Importer une preuve depuis l’interface GTK
Objectif
Permettre à l’utilisateur de démarrer l’import d’un fichier de preuve depuis la fenêtre principale de Labfy Investigation.
Cette fonctionnalité doit relier progressivement l’interface GTK au service métier
EvidenceImporter, sans bloquer la boucle principale GTK et sans introduire de dépendance directe entre les widgets et la base SQLite.Contexte
Le cœur métier de l’import est désormais disponible et testé :
EvidenceRecord;L’interface actuelle possède :
MainWindow;Workspacesitué danswidgets/;TaskManager;TaskPanel;BackgroundTask;Application.Le prochain travail consiste à exposer l’import dans l’interface, sans déplacer la logique métier dans les widgets.
Principe d’architecture
La répartition des responsabilités doit rester la suivante :
MainWindowResponsable uniquement de l’affichage et des événements GTK :
Applicationpar callback ;EvidenceImporter.ApplicationResponsable de l’orchestration :
BackgroundTask;EvidenceImporterdepuis le worker ;BackgroundTaskResponsable de l’exécution hors du thread GTK :
GCancellable;TaskPanel.EvidenceImporterReste responsable de toute la logique métier de l’import :
Aucun widget ne doit reproduire cette logique.
Interface utilisateur
Action principale
Ajouter une action compacte dans la barre d’outils de
MainWindow.Caractéristiques :
Importer une preuve;Un libellé texte peut être conservé temporairement pendant le développement, mais la version finale doit privilégier une présentation compacte avec icône et infobulle.
Sélection du fichier
Le clic doit ouvrir un sélecteur GTK asynchrone.
Contraintes :
Métadonnées
Dans cette première version, les valeurs minimales suivantes peuvent être utilisées :
documentpar défaut ;NULL;NULL;NULL.Une boîte de dialogue dédiée à la saisie des métadonnées sera ajoutée dans une évolution ultérieure.
Déroulement fonctionnel
Chemins de destination
La destination physique et le chemin relatif stocké en base doivent rester distincts.
Destination physique
Pour cette première version :
Chemin relatif SQLite
Le code ne doit jamais stocker un chemin absolu dans
EvidenceRecord.relative_path.Le dossier physique doit déjà exister ou être créé explicitement par le contrôleur avant le lancement de la tâche.
Données de travail de la tâche
Créer une structure privée dédiée, par exemple :
Règles de propriété :
worker_data_destroy;Databaseest empruntée à la session active ;Si cette dernière garantie n’est pas encore assurée par l’architecture, l’application doit empêcher la fermeture ou le remplacement de l’enquête tant qu’un import est en cours.
Worker d’import
Créer un worker compatible avec
BackgroundTaskWorker.Responsabilités :
EvidenceImporter;EvidenceImportRequest;evidence_importer_import();EvidenceImporter;EvidenceRecorden résultat ;Exemple de progression :
La progression reste approximative tant que
EvidenceImporterne fournit pas de callbacks détaillés.Résultat de la tâche
En cas de succès :
BackgroundTaskest unEvidenceRecord *;result_destroydoit êtreevidence_record_free;En cas d’échec :
TaskPanel;En cas d’annulation :
Cycle de vie de la session
Le worker utilise la base de la session active.
Il faut donc définir une règle stricte :
ou :
La première solution peut être utilisée pour cette version si elle est plus simple et clairement contrôlée dans
Application.Aucun pointeur vers
Databasene doit survivre à la session qui la possède.API
MainWindowAjouter un callback dédié, par exemple :
Ajouter les fonctions publiques :
MainWindowne devient propriétaire ni du callback ni deuser_data.Fichiers concernés
À modifier
Potentiellement concernés
Workspacene doit être modifié que si l’on souhaite afficher une confirmation ou un résumé de la preuve importée dans la zone centrale.Nouveau module possible
Si l’orchestration devient trop volumineuse dans
application.c:Ce module encapsulerait :
BackgroundTask.Étapes de réalisation
Étape 1 — Action GTK
MainWindow;Application.Aucun import réel à cette étape.
Étape 2 — Sélecteur de fichier
Aucune copie à cette étape.
Étape 3 — Préparation de la tâche
EvidenceImportTaskData;BackgroundTask;TaskManager.Étape 4 — Import réel
EvidenceImporterdans le worker ;Étape 5 — Rafraîchissement
Tests attendus
Tests unitaires ou d’intégration
Vérifier au minimum :
MainWindowest bien appelé ;EvidenceRecord;EvidenceImporter;Vérification manuelle GTK
TaskPanel.Critères d’acceptation
Le ticket est terminé lorsque :
MainWindow;BackgroundTask;TaskManageret visible dansTaskPanel;GCancellable;EvidenceRecordvalide ;make,make testetgit diff --checkréussissent ;Hors périmètre
Ne font pas partie de ce ticket :
Règles de sécurité et de qualité
snake_caseet les préfixes de module ;