[gnome-notes] manager: Use GListModel to save notebooks



commit 7759d3e72b31461843959261e92d2c3dac71b522
Author: Mohammed Sadiq <sadiq sadiqpk org>
Date:   Thu Jun 17 13:07:04 2021 +0530

    manager: Use GListModel to save notebooks
    
    And bump glib requirement for g_list_store_find()

 meson.build                |  2 +-
 src/libbiji/biji-manager.c | 30 ++++++++++++++++++++++++++++++
 src/libbiji/biji-manager.h |  1 +
 3 files changed, 32 insertions(+), 1 deletion(-)
---
diff --git a/meson.build b/meson.build
index 025ae5ba..409cffe5 100644
--- a/meson.build
+++ b/meson.build
@@ -116,7 +116,7 @@ config_h.set('TRACKER_PRIVATE_STORE', private_store)
 bijiben_deps = [
   tracker_sparql_dep,
   dependency('gio-unix-2.0'),
-  dependency('glib-2.0', version: '>= 2.53.4'),
+  dependency('glib-2.0', version: '>= 2.64'),
   dependency('goa-1.0'),
   dependency('gtk+-3.0', version: '>= 3.19.3'),
   dependency('json-glib-1.0'),
diff --git a/src/libbiji/biji-manager.c b/src/libbiji/biji-manager.c
index c8793942..68e7f7e2 100644
--- a/src/libbiji/biji-manager.c
+++ b/src/libbiji/biji-manager.c
@@ -41,6 +41,7 @@ struct _BijiManager
    * rather than one big central db here
    */
 
+  GListStore *notebooks;
   GHashTable *items;
   GHashTable *archives;
   GHashTable *providers;
@@ -228,6 +229,8 @@ load_eds_provider (BijiManager *self,
 static void
 biji_manager_init (BijiManager *self)
 {
+  self->notebooks = g_list_store_new (BIJI_TYPE_NOTEBOOK);
+
   /* Item path is key for table */
   self->items = g_hash_table_new_full (g_str_hash,
                                        g_str_equal,
@@ -294,6 +297,7 @@ biji_manager_finalize (GObject *object)
 {
   BijiManager *self = BIJI_MANAGER (object);
 
+  g_clear_object (&self->notebooks);
   g_clear_object (&self->location);
   g_hash_table_destroy (self->items);
   g_hash_table_destroy (self->archives);
@@ -523,6 +527,21 @@ manager_on_item_icon_changed_cb (BijiNoteObj *note, BijiManager *manager)
                                BIJI_ITEM (note));
 }
 
+static int
+compare_notebook (gconstpointer a,
+                  gconstpointer b,
+                  gpointer      user_data)
+{
+  g_autofree char *up_a = NULL;
+  g_autofree char *up_b = NULL;
+  BijiItem *item_a = (BijiItem *) a;
+  BijiItem *item_b = (BijiItem *) b;
+
+  up_a = g_utf8_casefold (biji_item_get_title (item_a), -1);
+  up_b = g_utf8_casefold (biji_item_get_title (item_b), -1);
+
+  return g_strcmp0 (up_a, up_b);
+}
 
 gboolean
 biji_manager_add_item (BijiManager *manager,
@@ -583,6 +602,9 @@ biji_manager_add_item (BijiManager *manager,
 
     else if (BIJI_IS_NOTEBOOK (item))
     {
+      if (!g_list_store_find (manager->notebooks, item, NULL))
+        g_list_store_insert_sorted (manager->notebooks, item,
+                                    compare_notebook, NULL);
       g_signal_connect (item , "icon-changed", G_CALLBACK (manager_on_item_icon_changed_cb), manager);
     }
   }
@@ -684,6 +706,14 @@ biji_manager_get_items (BijiManager    *self,
   return list;
 }
 
+GListModel *
+biji_manager_get_notebooks (BijiManager *self)
+{
+  g_return_val_if_fail (BIJI_IS_MANAGER (self), NULL);
+
+  return G_LIST_MODEL (self->notebooks);
+}
+
 BijiItem *
 biji_manager_get_item_at_path (BijiManager *self, const gchar *path)
 {
diff --git a/src/libbiji/biji-manager.h b/src/libbiji/biji-manager.h
index bff1891c..7ef784bb 100644
--- a/src/libbiji/biji-manager.h
+++ b/src/libbiji/biji-manager.h
@@ -91,6 +91,7 @@ BijiItem        *biji_manager_get_item_at_path      (BijiManager *manager,
 
 GList           *biji_manager_get_items             (BijiManager         *manager,
                                                      BijiItemsGroup       group);
+GListModel      *biji_manager_get_notebooks         (BijiManager         *self);
 
 BijiNoteObj     *biji_manager_note_new              (BijiManager *manager,
                                                      const gchar *str,


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