[gnome-notes] Only show the default provider's items



commit 034ee1cb5504adc9f7c85043fcadb6df438cb14d
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Wed Apr 28 10:59:13 2021 +0200

    Only show the default provider's items
    
    The providers would fetch and send their items after being constructed.
    Now they only fetch and send them when asked.
    
    When the default provider changes, the stored items are removed and we ask for the new ones.
    
    Fixes #166

 src/bjb-application.c                          |  3 +++
 src/bjb-settings-dialog.c                      |  2 ++
 src/libbiji/biji-manager.c                     | 34 ++++++++++++++++++++------
 src/libbiji/biji-manager.h                     |  3 +++
 src/libbiji/provider/biji-local-provider.c     | 13 +++++++++-
 src/libbiji/provider/biji-memo-provider.c      | 24 ++++++++++++------
 src/libbiji/provider/biji-nextcloud-provider.c | 14 +++++++++--
 src/libbiji/provider/biji-provider.c           |  7 ++++++
 src/libbiji/provider/biji-provider.h           | 14 ++++++++---
 9 files changed, 92 insertions(+), 22 deletions(-)
---
diff --git a/src/bjb-application.c b/src/bjb-application.c
index 521fd4c5..844e074a 100644
--- a/src/bjb-application.c
+++ b/src/bjb-application.c
@@ -357,6 +357,9 @@ manager_ready_cb (GObject *source,
       return;
     }
 
+  biji_manager_set_provider (self->manager,
+                            bjb_settings_get_default_location(self->settings));
+
   /* Automatic imports on startup */
   if (self->first_run == TRUE)
     {
diff --git a/src/bjb-settings-dialog.c b/src/bjb-settings-dialog.c
index 3e39e531..3cb9af5d 100644
--- a/src/bjb-settings-dialog.c
+++ b/src/bjb-settings-dialog.c
@@ -22,6 +22,7 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
+#include "biji-manager.h"
 #include "bjb-application.h"
 #include "bjb-color-button.h"
 #include "bjb-settings.h"
@@ -203,6 +204,7 @@ on_row_activated_cb    (GtkListBox    *list_box,
     return;
 
   g_object_set (self->settings, "default-location", child->id, NULL);
+  biji_manager_set_provider (self->manager, child->id);
 
   /* Toggle everything : unselect all but this one */
   g_list_foreach (self->children, unselect_child, NULL);
diff --git a/src/libbiji/biji-manager.c b/src/libbiji/biji-manager.c
index 76e420d7..3031e359 100644
--- a/src/libbiji/biji-manager.c
+++ b/src/libbiji/biji-manager.c
@@ -27,6 +27,7 @@
 #include "provider/biji-local-provider.h"
 #include "provider/biji-memo-provider.h"
 #include "provider/biji-nextcloud-provider.h"
+#include "provider/biji-provider.h"
 
 
 struct _BijiManager
@@ -45,6 +46,9 @@ struct _BijiManager
   GHashTable *providers;
   BijiProvider *local_provider;
 
+  /* The active provider */
+  BijiProvider *provider;
+
   /* Signals */
   gulong note_renamed ;
 
@@ -82,14 +86,6 @@ on_provider_loaded_cb (BijiProvider   *provider,
                        BijiManager    *manager)
 {
   GList *l;
-  const BijiProviderInfo *info;
-
-  info = biji_provider_get_info (provider);
-  /* TODO: This is a workaround related to the local provider, which
-   *        emits the signal twice but it should emit it only once */
-  if (!g_hash_table_contains (manager->providers, info->unique_id))
-    g_hash_table_insert (manager->providers,
-                         (gpointer) info->unique_id, provider);
 
   switch (group)
   {
@@ -130,6 +126,15 @@ static void
 _add_provider (BijiManager  *self,
                BijiProvider *provider)
 {
+  const BijiProviderInfo *info;
+
+  info = biji_provider_get_info (provider);
+  /* TODO: This is a workaround related to the local provider, which
+   *        emits the signal twice but it should emit it only once */
+  if (!g_hash_table_contains (self->providers, info->unique_id))
+    g_hash_table_insert (self->providers,
+                         (gpointer) info->unique_id, provider);
+
   g_signal_connect (provider, "loaded",
                     G_CALLBACK (on_provider_loaded_cb), self);
   g_signal_connect (provider, "abort",
@@ -251,6 +256,19 @@ biji_manager_get_tracker_connection (BijiManager *self)
 }
 
 
+void
+biji_manager_set_provider (BijiManager *self,
+                           const gchar *provider_id)
+{
+  g_hash_table_remove_all (self->items);
+  g_hash_table_remove_all (self->archives);
+
+  self->provider = g_hash_table_lookup (self->providers, provider_id);
+  if (self->provider)
+    biji_provider_load_items (self->provider);
+  else
+    g_warning ("Could not find provider with ID: %s", provider_id);
+}
 
 GList *
 biji_manager_get_providers (BijiManager *self)
diff --git a/src/libbiji/biji-manager.h b/src/libbiji/biji-manager.h
index 793cc6f5..4b564409 100644
--- a/src/libbiji/biji-manager.h
+++ b/src/libbiji/biji-manager.h
@@ -53,6 +53,9 @@ void             biji_manager_import_uri            (BijiManager *manager,
                                                      const gchar *target_provider_id,
                                                      const gchar *uri);
 
+void             biji_manager_set_provider          (BijiManager *manager,
+                                                     const gchar *provider_id);
+
 GList           *biji_manager_get_providers         (BijiManager *manager); /* <ProviderInfo*> */
 TrackerSparqlConnection
                 *biji_manager_get_tracker_connection (BijiManager *manager);
diff --git a/src/libbiji/provider/biji-local-provider.c b/src/libbiji/provider/biji-local-provider.c
index 25f12283..441c8307 100644
--- a/src/libbiji/provider/biji-local-provider.c
+++ b/src/libbiji/provider/biji-local-provider.c
@@ -319,7 +319,6 @@ biji_local_provider_constructed (GObject *object)
 
 
   self->trash_file = g_file_get_child (self->location, ".Trash");
-  load_from_location (self->living_helper);
 }
 
 
@@ -486,6 +485,17 @@ local_prov_create_note_full (BijiProvider  *provider,
   return retval;
 }
 
+static void
+local_prov_load_items (BijiProvider *prov)
+{
+  BijiLocalProvider *self;
+
+  g_return_if_fail (BIJI_IS_LOCAL_PROVIDER (prov));
+
+  self = BIJI_LOCAL_PROVIDER (prov);
+  load_from_location (self->living_helper);
+}
+
 
 static void
 local_prov_load_archives (BijiProvider *prov)
@@ -566,6 +576,7 @@ biji_local_provider_class_init (BijiLocalProviderClass *klass)
   provider_class->get_info = local_provider_get_info;
   provider_class->create_new_note = local_prov_create_new_note;
   provider_class->create_note_full = local_prov_create_note_full;
+  provider_class->load_items = local_prov_load_items;
   provider_class->load_archives = local_prov_load_archives;
 
   properties[PROP_LOCATION] =
diff --git a/src/libbiji/provider/biji-memo-provider.c b/src/libbiji/provider/biji-memo-provider.c
index ff2274fa..0f8ae285 100644
--- a/src/libbiji/provider/biji-memo-provider.c
+++ b/src/libbiji/provider/biji-memo-provider.c
@@ -484,13 +484,6 @@ biji_memo_provider_constructed (GObject *obj)
 
   gtk_image_set_pixel_size (GTK_IMAGE (self->info.icon), 48);
   g_object_ref (self->info.icon);
-
-  e_cal_client_connect (self->source,
-                        E_CAL_CLIENT_SOURCE_TYPE_MEMOS,
-                       10, /* wait up to 10 seconds until the memo list is connected */
-                        NULL, /* cancel */
-                        on_client_connected,
-                        self);
 }
 
 
@@ -695,6 +688,22 @@ biji_memo_provider_get_property (GObject    *object,
 }
 
 
+static void
+memo_provider_load_items (BijiProvider *provider)
+{
+  BijiMemoProvider *self;
+
+  g_return_if_fail (BIJI_IS_MEMO_PROVIDER (provider));
+
+  self = BIJI_MEMO_PROVIDER (provider);
+  e_cal_client_connect (self->source,
+                        E_CAL_CLIENT_SOURCE_TYPE_MEMOS,
+                       10, /* wait up to 10 seconds until the memo list is connected */
+                        NULL, /* cancel */
+                        on_client_connected,
+                        self);
+}
+
 
 static const BijiProviderInfo *
 memo_provider_get_info (BijiProvider *provider)
@@ -717,6 +726,7 @@ biji_memo_provider_class_init (BijiMemoProviderClass *klass)
   provider_class->get_info = memo_provider_get_info;
   provider_class->create_new_note = memo_create_note;
   provider_class->create_note_full = NULL;
+  provider_class->load_items = memo_provider_load_items;
 
   properties[PROP_SOURCE] =
     g_param_spec_object ("source",
diff --git a/src/libbiji/provider/biji-nextcloud-provider.c b/src/libbiji/provider/biji-nextcloud-provider.c
index 0f7f54b7..9ca091ae 100644
--- a/src/libbiji/provider/biji-nextcloud-provider.c
+++ b/src/libbiji/provider/biji-nextcloud-provider.c
@@ -182,6 +182,17 @@ create_note_full (BijiProvider  *provider,
   return note;
 }
 
+static void
+load_items (BijiProvider *provider)
+{
+  BijiNextcloudProvider *self;
+
+  g_return_if_fail (BIJI_IS_NEXTCLOUD_PROVIDER (provider));
+
+  self = BIJI_NEXTCLOUD_PROVIDER (provider);
+  load_all_notes_async (self);
+}
+
 static void
 load_archives (BijiProvider *provider)
 {
@@ -301,8 +312,6 @@ constructed (GObject *object)
                                    self->info.domain);
 
   curl_global_init (CURL_GLOBAL_DEFAULT);
-
-  load_all_notes_async (self);
 }
 
 static void
@@ -378,6 +387,7 @@ biji_nextcloud_provider_class_init (BijiNextcloudProviderClass *klass)
   provider_class->get_info = get_info;
   provider_class->create_new_note = create_new_note;
   provider_class->create_note_full = create_note_full;
+  provider_class->load_items = load_items;
   provider_class->load_archives = load_archives;
 
   properties[PROP_GOA_OBJECT] =
diff --git a/src/libbiji/provider/biji-provider.c b/src/libbiji/provider/biji-provider.c
index 5b0e705e..4149d51b 100644
--- a/src/libbiji/provider/biji-provider.c
+++ b/src/libbiji/provider/biji-provider.c
@@ -101,6 +101,13 @@ biji_provider_get_info                (BijiProvider *provider)
 
 
 
+void
+biji_provider_load_items        (BijiProvider *provider)
+{
+  return BIJI_PROVIDER_GET_CLASS (provider)->load_items (provider);
+}
+
+
 void
 biji_provider_load_archives        (BijiProvider *provider)
 {
diff --git a/src/libbiji/provider/biji-provider.h b/src/libbiji/provider/biji-provider.h
index 56cecce7..929b1df9 100644
--- a/src/libbiji/provider/biji-provider.h
+++ b/src/libbiji/provider/biji-provider.h
@@ -56,16 +56,20 @@ struct _BijiProviderClass
   const BijiProviderInfo*    (*get_info)              (BijiProvider *provider);
 
 
-  /* When a provider is loaded, notify the manager to transmit the items */
+  /* When a provider's items are loaded, notify the manager to transmit the items */
 
   void                       (*notify_loaded)         (BijiProvider *provider,
                                                        GList *loaded_items,
                                                        BijiItemsGroup group);
 
 
-  /* When created, the provider is supposed to load the items.
-   * Loading archives might or might not happen at creation time.
-   * This function ensures the provider loads its archived items.
+  /* This function ensures the provider loads its items.
+   * The provider will notify when done. */
+
+  void                       (*load_items)        (BijiProvider *provider);
+
+
+  /* This function ensures the provider loads its archived items.
    * The provider will notify when done */
 
   void                       (*load_archives)        (BijiProvider *provider);
@@ -129,6 +133,8 @@ BijiProviderHelper*        biji_provider_helper_new           (BijiProvider *pro
 void                       biji_provider_helper_free          (BijiProviderHelper *helper);
 
 
+void                       biji_provider_load_items           (BijiProvider *provider);
+
 
 void                       biji_provider_load_archives        (BijiProvider *provider);
 


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