[bijiben] Manager::EmptyBin : use g_list_foreach



commit 9e63f37c98327a79f8227962fd8d096c53363bc4
Author: Pierre-Yves Luyten <py luyten fr>
Date:   Thu Mar 6 21:48:58 2014 +0100

    Manager::EmptyBin : use g_list_foreach
    
    and update hash table on-the-fly

 src/libbiji/biji-manager.c |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)
---
diff --git a/src/libbiji/biji-manager.c b/src/libbiji/biji-manager.c
index 4630742..6ad010b 100644
--- a/src/libbiji/biji-manager.c
+++ b/src/libbiji/biji-manager.c
@@ -291,6 +291,23 @@ biji_manager_notify_changed (BijiManager            *manager,
 static void
 on_item_deleted_cb (BijiItem *item, BijiManager *manager)
 {
+  BijiItem        *to_delete;
+  const gchar     *path;
+  gboolean         retval;
+
+
+  to_delete = NULL;
+  retval = FALSE;
+  path = biji_item_get_uuid (item);
+  to_delete = g_hash_table_lookup (manager->priv->archives, path);
+
+  if (to_delete != NULL)
+    retval = TRUE;
+
+  if (!retval)
+    return;
+
+  g_hash_table_remove (manager->priv->archives, path);
   biji_manager_notify_changed (manager,
                                BIJI_ARCHIVED_ITEMS,
                                BIJI_MANAGER_ITEM_DELETED,
@@ -668,21 +685,23 @@ biji_manager_load_archives          (BijiManager        *manager)
 
 
 static void
-_delete_item (gpointer key,
-              gpointer value,
+_delete_item (gpointer data,
               gpointer user_data)
 {
-  BijiItem *i;
-
-  i = BIJI_ITEM (value);
-  biji_item_delete (i);
+  biji_item_delete (BIJI_ITEM (data));
 }
 
 
+/* Do not g_list_free_full here.
+ * We only unref items where deletion works */
 void
-biji_manager_empty_bin              (BijiManager        *manager)
+biji_manager_empty_bin              (BijiManager        *self)
 {
-  g_hash_table_foreach (manager->priv->archives, _delete_item, NULL);
+  GList *items;
+
+  items = g_hash_table_get_values (self->priv->archives);
+  g_list_foreach (items, _delete_item, NULL);
+  g_list_free (items);
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]