labfy-investigation/include/core/tool_initializer.h
2026-07-18 11:29:56 +02:00

237 lines
6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
* @file tool_initializer.h
* @brief Initialisation asynchrone des outils externes.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_TOOL_INITIALIZER_H
#define LABFY_INVESTIGATION_TOOL_INITIALIZER_H
#include "core/background_task.h"
#include "core/task_manager.h"
#include "core/tool_registry.h"
#include <glib.h>
G_BEGIN_DECLS
/**
* @brief Représentation opaque de linitialiseur doutils.
*/
typedef struct ToolInitializer ToolInitializer;
/**
* @brief Résumé dune initialisation terminée avec succès.
*/
typedef struct
{
gsize total_count;
gsize available_count;
gsize missing_count;
gsize version_detected_count;
gsize version_failed_count;
} ToolInitializationSummary;
/**
* @brief Codes derreur de ToolInitializer.
*/
typedef enum
{
/**
* Un argument transmis au module est invalide.
*/
TOOL_INITIALIZER_ERROR_INVALID_ARGUMENT,
/**
* Une initialisation est déjà en cours.
*/
TOOL_INITIALIZER_ERROR_ALREADY_RUNNING,
/**
* Aucune initialisation nest actuellement en cours.
*/
TOOL_INITIALIZER_ERROR_NOT_RUNNING,
/**
* La tâche darrière-plan na pas pu être créée.
*/
TOOL_INITIALIZER_ERROR_TASK_CREATION,
/**
* La tâche na pas pu être ajoutée au TaskManager.
*/
TOOL_INITIALIZER_ERROR_TASK_REGISTRATION,
/**
* La tâche na pas pu être démarrée.
*/
TOOL_INITIALIZER_ERROR_TASK_START,
/**
* Le catalogue na pas pu être enregistré.
*/
TOOL_INITIALIZER_ERROR_CATALOG_REGISTRATION,
/**
* Le registre na pas pu rechercher les exécutables.
*/
TOOL_INITIALIZER_ERROR_REGISTRY_REFRESH,
/**
* Létat interne de linitialiseur est incohérent.
*/
TOOL_INITIALIZER_ERROR_INTERNAL_STATE
} ToolInitializerError;
/**
* @brief Domaine derreur du module.
*/
#define TOOL_INITIALIZER_ERROR \
tool_initializer_error_quark()
/**
* @brief Retourne le domaine derreur de ToolInitializer.
*
* @return Quark GLib du domaine derreur.
*/
GQuark tool_initializer_error_quark(void);
/**
* @brief Crée un initialiseur doutils externes.
*
* Linitialiseur :
*
* - conserve une référence empruntée vers task_manager ;
* - crée et possède son propre ToolRegistry ;
* - ne prend pas possession de task_manager.
*
* task_manager doit rester valide pendant les appels publics utilisant
* linitialiseur.
*
* @param task_manager Gestionnaire recevant la tâche dinitialisation.
* @param error Emplacement facultatif recevant une erreur.
*
* @return Nouvel initialiseur, ou NULL en cas déchec.
*/
ToolInitializer *tool_initializer_new(
TaskManager *task_manager,
GError **error
);
/**
* @brief Libère la référence détenue par lappelant.
*
* Si une initialisation est encore active, son annulation est demandée.
* La fonction ne bloque pas en attendant la fin du worker.
*
* Une référence interne conserve les ressources nécessaires jusquà la
* finalisation réelle de la tâche.
*
* La fonction accepte tool_initializer == NULL.
*
* @param tool_initializer Initialiseur à libérer.
*/
void tool_initializer_free(
ToolInitializer *tool_initializer
);
/**
* @brief Retourne le registre appartenant à linitialiseur.
*
* Le pointeur retourné est emprunté et ne doit jamais être libéré par
* lappelant.
*
* Il ne doit plus être utilisé après tool_initializer_free().
*
* @param tool_initializer Initialiseur consulté.
*
* @return Registre emprunté, ou NULL.
*/
ToolRegistry *tool_initializer_get_registry(
ToolInitializer *tool_initializer
);
/**
* @brief Démarre linitialisation en arrière-plan.
*
* La fonction :
*
* - crée une nouvelle BackgroundTask ;
* - lajoute au TaskManager ;
* - lance son worker ;
* - refuse un second démarrage tant quune tâche est active.
*
* Une nouvelle exécution peut être lancée après la fin ou lannulation
* de la précédente.
*
* @param tool_initializer Initialiseur concerné.
* @param error Emplacement facultatif recevant une erreur.
*
* @return TRUE si la tâche a été lancée, sinon FALSE.
*/
gboolean tool_initializer_start(
ToolInitializer *tool_initializer,
GError **error
);
/**
* @brief Demande lannulation de linitialisation active.
*
* Lannulation est coopérative.
*
* @param tool_initializer Initialiseur concerné.
* @param error Emplacement facultatif recevant une erreur.
*
* @return TRUE si une annulation a été demandée, sinon FALSE.
*/
gboolean tool_initializer_cancel(
ToolInitializer *tool_initializer,
GError **error
);
/**
* @brief Indique si une initialisation est en cours.
*
* @param tool_initializer Initialiseur consulté.
*
* @return TRUE si une tâche est en attente ou en cours, sinon FALSE.
*/
gboolean tool_initializer_is_running(
const ToolInitializer *tool_initializer
);
/**
* @brief Retourne une référence vers la tâche actuelle ou la dernière tâche.
*
* Lappelant devient propriétaire dune référence et doit la libérer avec :
*
* @code
* background_task_unref(task);
* @endcode
*
* @param tool_initializer Initialiseur consulté.
*
* @return Nouvelle référence vers la tâche, ou NULL.
*/
BackgroundTask *tool_initializer_get_task(
const ToolInitializer *tool_initializer
);
/**
* @brief Copie le résumé de la dernière initialisation réussie.
*
* Le résumé nest disponible que lorsque la dernière tâche sest terminée
* dans létat BACKGROUND_TASK_STATE_COMPLETED.
*
* @param tool_initializer Initialiseur consulté.
* @param out_summary Structure recevant une copie du résumé.
*
* @return TRUE si un résumé est disponible, sinon FALSE.
*/
gboolean tool_initializer_get_last_summary(
const ToolInitializer *tool_initializer,
ToolInitializationSummary *out_summary
);
G_END_DECLS
#endif