From e75a1aea506869d441fc084f78102367be1f9ed2 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 13 Apr 2020 20:41:28 +0200
Subject: Simplified the loading process of binary contents.

---
 plugins/pychrysalide/analysis/loading.c |  43 ------------
 src/analysis/loading.c                  | 114 ++------------------------------
 src/analysis/loading.h                  |   8 +--
 src/analysis/project.c                  |  12 +---
 4 files changed, 6 insertions(+), 171 deletions(-)

diff --git a/plugins/pychrysalide/analysis/loading.c b/plugins/pychrysalide/analysis/loading.c
index a0b9c38..dea4e31 100644
--- a/plugins/pychrysalide/analysis/loading.c
+++ b/plugins/pychrysalide/analysis/loading.c
@@ -44,9 +44,6 @@
 /* Ajoute un nouveau contenu découvert au crédit d'un groupe. */
 static PyObject *py_content_explorer_populate_group(PyObject *, PyObject *);
 
-/* Note un contenu chargé pour future intégration guidée. */
-static PyObject *py_content_explorer_note_detected(PyObject *, PyObject *);
-
 
 
 /* ------------------- RESOLUTION DE CONTENUS BINAIRES EN CHARGES ------------------- */
@@ -97,41 +94,6 @@ static PyObject *py_content_explorer_populate_group(PyObject *self, PyObject *ar
 
 }
 
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : self = classe représentant un binaire.                       *
-*                args = arguments fournis à l'appel.                          *
-*                                                                             *
-*  Description : Note un contenu chargé pour future intégration guidée.       *
-*                                                                             *
-*  Retour      : None.                                                        *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static PyObject *py_content_explorer_note_detected(PyObject *self, PyObject *args)
-{
-    PyObject *result;                       /* Valeur à retourner          */
-    unsigned long long wid;                 /* Identifiant de groupe       */
-    GLoadedContent *loaded;                 /* Contenu chargé au final     */
-    int ret;                                /* Bilan de lecture des args.  */
-    GContentExplorer *explorer;             /* Explorateur à manipuler     */
-
-    ret = PyArg_ParseTuple(args, "KO&", &wid, convert_to_loaded_content, &loaded);
-    if (!ret) return NULL;
-
-    explorer = G_CONTENT_EXPLORER(pygobject_get(self));
-
-    g_content_explorer_note_detected(explorer, wid, loaded);
-
-    result = Py_None;
-    Py_INCREF(result);
-
-    return result;
-
-}
-
 
 /******************************************************************************
 *                                                                             *
@@ -153,11 +115,6 @@ PyTypeObject *get_python_content_explorer_type(void)
             METH_VARARGS,
             "populate_group($self, wid, content, /)\n--\n\nPush a new binary content into the list to explore."
         },
-        {
-            "note_detected", py_content_explorer_note_detected,
-            METH_VARARGS,
-            "note_detected($self, wid, loaded, /)\n--\n\nMark a loaded content as one final candidate."
-        },
         { NULL }
     };
 
diff --git a/src/analysis/loading.c b/src/analysis/loading.c
index a376b4b..842628d 100644
--- a/src/analysis/loading.c
+++ b/src/analysis/loading.c
@@ -113,9 +113,6 @@ typedef struct _exploring_group
     GBinContent **contents;                 /* Contenus reconnus dispos.   */
     size_t count;                           /* Taille de cette liste       */
 
-    GLoadedContent **loaded;                /* Contenus reconnus à intégrer*/
-    size_t noted;                           /* Taille de cette liste       */
-
 } exploring_group;
 
 /* Exploration de contenus binaires (instance) */
@@ -732,9 +729,6 @@ wgroup_id_t g_content_explorer_create_group(GContentExplorer *explorer, GBinCont
     group->contents = NULL;
     group->count = 0;
 
-    group->loaded = NULL;
-    group->noted = 0;
-
     /* Alimentation du contenu initial */
 
     work = g_exploring_work_new(content);
@@ -790,12 +784,6 @@ void g_content_explorer_delete_group(GContentExplorer *explorer, wgroup_id_t wid
     if (group->contents != NULL)
         free(group->contents);
 
-    for (i = 0; i < group->noted; i++)
-        g_object_unref(G_OBJECT(group->loaded[i]));
-
-    if (group->loaded != NULL)
-        free(group->loaded);
-
     /* Réorganisation de la liste */
 
     index = group - explorer->groups;
@@ -866,39 +854,6 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, wgroup_id_t w
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : explorer = gestionnaire d'explorations à consulter.          *
-*                wid      = identifiant du groupe recherché.                  *
-*                loaded   = contenu chargé et pouvant être représenté.        *
-*                                                                             *
-*  Description : Note un contenu chargé pour future intégration guidée.       *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void g_content_explorer_note_detected(GContentExplorer *explorer, wgroup_id_t wid, GLoadedContent *loaded)
-{
-    exploring_group *group;                 /* Groupe d'opération concerné */
-
-    g_mutex_lock(&explorer->mutex);
-
-    group = g_content_explorer_find_group(explorer, wid);
-    assert(group != NULL);
-
-    group->loaded = realloc(group->loaded, ++group->noted * sizeof(GLoadedContent *));
-
-    group->loaded[group->noted - 1] = loaded;
-    g_object_ref(G_OBJECT(loaded));
-
-    g_mutex_unlock(&explorer->mutex);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : explorer = gestionnaire d'explorations à consulter.          *
 *                wid      = identifiant du groupe à parcourir.                *
 *                count    = nombre de contenus binaires retournés. [OUT]      *
 *                                                                             *
@@ -949,53 +904,6 @@ GBinContent **g_content_explorer_get_all(GContentExplorer *explorer, wgroup_id_t
 }
 
 
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : explorer = gestionnaire d'explorations à consulter.          *
-*                wid      = identifiant du groupe à parcourir.                *
-*                noted    = nombre de contenus chargés retournés. [OUT]       *
-*                                                                             *
-*  Description : Fournit la liste de tous les contenus préalablement détectés.*
-*                                                                             *
-*  Retour      : Liste de contenus chargés enregistrés.                       *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-GLoadedContent **g_content_explorer_get_detected(GContentExplorer *explorer, wgroup_id_t wid, size_t *noted)
-{
-    GLoadedContent **result;                /* Trouvailles à retourner      */
-    exploring_group *group;                 /* Groupe d'opération concerné */
-    size_t i;                               /* Boucle de parcours          */
-
-    g_mutex_lock(&explorer->mutex);
-
-    group = g_content_explorer_find_group(explorer, wid);
-    assert(group != NULL);
-
-    /* Allocation de la liste finale */
-
-    *noted = group->noted;
-    result = (GLoadedContent **)malloc(*noted * sizeof(GLoadedContent *));
-
-    /* On parcourt les éventuels contenus encapsulés découverts */
-
-    for (i = 0; i < group->noted; i++)
-    {
-        result[i] = group->loaded[i];
-
-        g_object_ref(G_OBJECT(result[i]));
-
-    }
-
-    g_mutex_unlock(&explorer->mutex);
-
-    return result;
-
-}
-
-
 
 /* ---------------------------------------------------------------------------------- */
 /*                           TACHE DE RESOLUTION DE CONTENU                           */
@@ -1401,8 +1309,6 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
 *                wid      = identifiant du groupe de tâches réservé.          *
 *                contents = contenus à analyser.                              *
 *                count    = nombre de ces contenus.                           *
-*                detected = contenus préalablement détectés.                  *
-*                noted    = nombre de contenus chargés.                       *
 *                                                                             *
 *  Description : Initie une nouvelle vague de résolution de contenus.         *
 *                                                                             *
@@ -1412,7 +1318,7 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
 *                                                                             *
 ******************************************************************************/
 
-void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid, GBinContent **contents, size_t count, GLoadedContent **detected, size_t noted)
+void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid, GBinContent **contents, size_t count)
 {
     resolving_group *group;                 /* Groupe ciblé par l'opération*/
     GWorkQueue *queue;                      /* Gestionnaire de différés    */
@@ -1434,21 +1340,6 @@ void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid
     group->loaded = NULL;
     group->count = 0;
 
-    /* Insertion des résultats préalables */
-
-    if (noted > 0)
-    {
-        group->count = noted;
-        group->loaded = realloc(group->loaded, group->count * sizeof(GLoadedContent *));
-
-        for (i = 0; i < noted; i++)
-        {
-            group->loaded[i] = detected[i];
-            g_object_ref(G_OBJECT(detected[i]));
-        }
-
-    }
-
     /* Alimentation du contenu initial */
 
     queue = get_work_queue();
@@ -1466,6 +1357,9 @@ void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid
 
     g_mutex_unlock(&resolver->mutex);
 
+    if (count == 0)
+        g_signal_emit_by_name(resolver, "resolved", wid);
+
 }
 
 
diff --git a/src/analysis/loading.h b/src/analysis/loading.h
index d3b9ed9..2310aef 100644
--- a/src/analysis/loading.h
+++ b/src/analysis/loading.h
@@ -67,15 +67,9 @@ void g_content_explorer_delete_group(GContentExplorer *, wgroup_id_t);
 /* Ajoute un nouveau contenu découvert au crédit d'un groupe. */
 void g_content_explorer_populate_group(GContentExplorer *, wgroup_id_t, GBinContent *);
 
-/* Note un contenu chargé pour future intégration guidée. */
-void g_content_explorer_note_detected(GContentExplorer *, wgroup_id_t, GLoadedContent *);
-
 /* Fournit la liste de tous les contenus disponibles. */
 GBinContent **g_content_explorer_get_all(GContentExplorer *, wgroup_id_t, size_t *);
 
-/* Fournit la liste de tous les contenus préalablement détectés. */
-GLoadedContent **g_content_explorer_get_detected(GContentExplorer *, wgroup_id_t, size_t *);
-
 
 
 /* ------------------- RESOLUTION DE CONTENUS BINAIRES EN CHARGES ------------------- */
@@ -103,7 +97,7 @@ GType g_content_resolver_get_type(void);
 GContentResolver *g_content_resolver_new(void);
 
 /* Initie une nouvelle vague de résolution de contenus. */
-void g_content_resolver_create_group(GContentResolver *, wgroup_id_t, GBinContent **, size_t, GLoadedContent **, size_t);
+void g_content_resolver_create_group(GContentResolver *, wgroup_id_t, GBinContent **, size_t);
 
 /* Termine une vague de résolution de contenu. */
 void g_content_resolver_delete_group(GContentResolver *, wgroup_id_t);
diff --git a/src/analysis/project.c b/src/analysis/project.c
index e3b38b2..71e0f43 100644
--- a/src/analysis/project.c
+++ b/src/analysis/project.c
@@ -1246,8 +1246,6 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid,
 {
     GBinContent **available;                /* Contenus binaires présents  */
     size_t count;                           /* Quantité de ces contenus    */
-    GLoadedContent **detected;              /* Contenus chargés présents   */
-    size_t noted;                           /* Quantité de ces contenus    */
     GContentResolver *resolver;             /* Resolveur de contenus       */
     size_t i;                               /* Boucle de parcours          */
 
@@ -1256,11 +1254,9 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid,
         available = g_content_explorer_get_all(explorer, wid, &count);
         assert(count > 0);
 
-        detected = g_content_explorer_get_detected(explorer, wid, &noted);
-
         resolver = get_current_content_resolver();
 
-        g_content_resolver_create_group(resolver, wid, available, count, detected, noted);
+        g_content_resolver_create_group(resolver, wid, available, count);
 
         g_object_unref(G_OBJECT(resolver));
 
@@ -1269,12 +1265,6 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid,
 
         free(available);
 
-        for (i = 0; i < noted; i++)
-            g_object_unref(G_OBJECT(detected[i]));
-
-        if (detected != NULL)
-            free(detected);
-
     }
 
 }
-- 
cgit v0.11.2-87-g4458