[gnome-calendar] manager: Add 'synchronizing' property
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] manager: Add 'synchronizing' property
- Date: Fri, 10 May 2019 16:16:44 +0000 (UTC)
commit f4c4a91465b71a2100bb3d726645dca5f7372b20
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri May 10 12:42:13 2019 -0300
manager: Add 'synchronizing' property
Will be useful to know if there are any clients being
synchronized.
src/core/gcal-manager.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++---
src/core/gcal-manager.h | 2 ++
2 files changed, 55 insertions(+), 3 deletions(-)
---
diff --git a/src/core/gcal-manager.c b/src/core/gcal-manager.c
index 4081eeb4..c6e853a4 100644
--- a/src/core/gcal-manager.c
+++ b/src/core/gcal-manager.c
@@ -86,6 +86,8 @@ struct _GcalManager
ViewStateData *search_view_data;
GCancellable *async_ops;
+
+ gint clients_synchronizing;
};
G_DEFINE_TYPE (GcalManager, gcal_manager, G_TYPE_OBJECT)
@@ -94,6 +96,7 @@ enum
{
PROP_0,
PROP_DEFAULT_CALENDAR,
+ PROP_SYNCHRONIZING,
NUM_PROPS
};
@@ -208,6 +211,7 @@ on_client_refreshed (GObject *source_object,
GAsyncResult *result,
gpointer user_data)
{
+ GcalManager *self = GCAL_MANAGER (user_data);
GError *error = NULL;
GCAL_ENTRY;
@@ -224,6 +228,10 @@ on_client_refreshed (GObject *source_object,
g_warning ("Error synchronizing client");
}
+ self->clients_synchronizing--;
+ if (self->clients_synchronizing == 0)
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SYNCHRONIZING]);
+
GCAL_EXIT;
}
@@ -271,7 +279,12 @@ on_calendar_created_cb (GObject *source_object,
/* refresh client when it's added */
if (visible && e_client_check_refresh_supported (E_CLIENT (client)))
- e_client_refresh (E_CLIENT (client), NULL, on_client_refreshed, user_data);
+ {
+ e_client_refresh (E_CLIENT (client), NULL, on_client_refreshed, user_data);
+
+ self->clients_synchronizing++;
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SYNCHRONIZING]);
+ }
/* Cache all the online calendars, so the user can see them offline */
offline_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_OFFLINE);
@@ -654,6 +667,10 @@ gcal_manager_set_property (GObject *object,
gcal_manager_set_default_calendar (self, g_value_get_object (value));
break;
+ case PROP_SYNCHRONIZING:
+ g_assert_not_reached ();
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -677,12 +694,14 @@ gcal_manager_get_property (GObject *object,
g_value_set_object (value, gcal_manager_get_default_calendar (self));
break;
+ case PROP_SYNCHRONIZING:
+ g_value_set_boolean (value, self->clients_synchronizing != 0);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-
GCAL_EXIT;
}
@@ -706,6 +725,17 @@ gcal_manager_class_init (GcalManagerClass *klass)
GCAL_TYPE_CALENDAR,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ /**
+ * GcalManager:refreshing:
+ *
+ * Whether there are any sources refreshing or not.
+ */
+ properties[PROP_SYNCHRONIZING] = g_param_spec_boolean ("refreshing",
+ "Refreshing",
+ "Whether there are any sources refreshing or not",
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (object_class, NUM_PROPS, properties);
/* signals */
@@ -1141,10 +1171,14 @@ gcal_manager_refresh (GcalManager *self)
NULL,
on_client_refreshed,
self);
+
+ self->clients_synchronizing++;
}
g_list_free (clients);
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SYNCHRONIZING]);
+
GCAL_EXIT;
}
@@ -1458,6 +1492,22 @@ gcal_manager_get_event_from_shell_search (GcalManager *self,
GCAL_RETURN (new_event);
}
+/**
+ * gcal_manager_get_synchronizing:
+ * @self: a #GcalManager
+ *
+ * Retrieves whether @self is refreshing the calendars or not.
+ *
+ * Returns: %TRUE if any calendars are being synchronizing.
+ */
+gboolean
+gcal_manager_get_synchronizing (GcalManager *self)
+{
+ g_return_val_if_fail (GCAL_IS_MANAGER (self), FALSE);
+
+ return self->clients_synchronizing != 0;
+}
+
void
gcal_manager_startup (GcalManager *self)
{
diff --git a/src/core/gcal-manager.h b/src/core/gcal-manager.h
index 9c3036b2..48a5b43e 100644
--- a/src/core/gcal-manager.h
+++ b/src/core/gcal-manager.h
@@ -110,6 +110,8 @@ gboolean gcal_manager_shell_search_done (GcalManager
GList* gcal_manager_get_shell_search_events (GcalManager *self);
+gboolean gcal_manager_get_synchronizing (GcalManager *self);
+
void gcal_manager_startup (GcalManager *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]