manager: Move GOA to GcalContext

Another step into making GcalManager only be responsible
for handling backend interactions.
This commit is contained in:
Georges Basile Stavracas Neto
2019-04-25 16:30:54 -03:00
parent 9b7650db45
commit 1b8a29e59b
5 changed files with 43 additions and 107 deletions
+30
View File
@@ -27,6 +27,7 @@ struct _GcalContext
GObject parent;
GcalClock *clock;
GoaClient *goa_client;
GcalManager *manager;
GSettings *settings;
GcalWeatherService *weather_service;
@@ -38,6 +39,7 @@ enum
{
PROP_0,
PROP_CLOCK,
PROP_GOA_CLIENT,
PROP_MANAGER,
PROP_SETTINGS,
PROP_WEATHER_SERVICE,
@@ -57,6 +59,7 @@ gcal_context_finalize (GObject *object)
GcalContext *self = (GcalContext *)object;
g_clear_object (&self->clock);
g_clear_object (&self->goa_client);
g_clear_object (&self->manager);
g_clear_object (&self->weather_service);
@@ -77,6 +80,10 @@ gcal_context_get_property (GObject *object,
g_value_set_object (value, self->clock);
break;
case PROP_GOA_CLIENT:
g_value_set_object (value, self->goa_client);
break;
case PROP_MANAGER:
g_value_set_object (value, self->manager);
break;
@@ -103,6 +110,7 @@ gcal_context_set_property (GObject *object,
switch (prop_id)
{
case PROP_CLOCK:
case PROP_GOA_CLIENT:
case PROP_MANAGER:
case PROP_SETTINGS:
case PROP_WEATHER_SERVICE:
@@ -126,6 +134,12 @@ gcal_context_class_init (GcalContextClass *klass)
GCAL_TYPE_CLOCK,
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
properties[PROP_GOA_CLIENT] = g_param_spec_object ("goa-client",
"Online Accounts client",
"Online Accounts client",
GOA_TYPE_CLIENT,
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
properties[PROP_MANAGER] = g_param_spec_object ("manager",
"Data manager",
"Data manager of the application",
@@ -151,6 +165,7 @@ static void
gcal_context_init (GcalContext *self)
{
self->clock = gcal_clock_new ();
self->goa_client = goa_client_new_sync (NULL, NULL);
self->manager = gcal_manager_new ();
self->settings = g_settings_new ("org.gnome.calendar");
self->weather_service = gcal_weather_service_new ();
@@ -185,6 +200,21 @@ gcal_context_get_clock (GcalContext *self)
return self->clock;
}
/**
* gcal_context_get_goa_client:
*
* Retrieves the #GoaClient from @self.
*
* Returns: (transfer none): a #GoaClient
*/
GoaClient*
gcal_context_get_goa_client (GcalContext *self)
{
g_return_val_if_fail (GCAL_IS_CONTEXT (self), NULL);
return self->goa_client;
}
/**
* gcal_context_get_manager:
*
+3
View File
@@ -25,6 +25,7 @@
#include "weather/gcal-weather-service.h"
#include <glib-object.h>
#include <goa/goa.h>
G_BEGIN_DECLS
@@ -35,6 +36,8 @@ GcalContext* gcal_context_new (void);
GcalClock* gcal_context_get_clock (GcalContext *self);
GoaClient* gcal_context_get_goa_client (GcalContext *self);
GcalManager* gcal_context_get_manager (GcalContext *self);
GSettings* gcal_context_get_settings (GcalContext *self);
+1 -55
View File
@@ -88,10 +88,7 @@ struct _GcalManager
GCancellable *async_ops;
GoaClient *goa_client;
/* state flags */
gboolean goa_client_ready;
gint sources_at_launch;
/* timezone */
@@ -735,33 +732,6 @@ source_get_last_credentials_required_arguments_cb (GObject *source_object,
GCAL_EXIT;
}
static void
gcal_manager_client_ready_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GcalManager *self = GCAL_MANAGER (user_data);
GError *error = NULL;
GCAL_ENTRY;
self->goa_client = goa_client_new_finish (result, &error);
self->goa_client_ready = TRUE;
if (error != NULL)
{
g_warning ("%s: Error retrieving GoaClient: %s",
G_STRFUNC,
error->message);
g_error_free (error);
}
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_LOADING]);
GCAL_EXIT;
}
static void
gcal_manager_finalize (GObject *object)
{
@@ -769,7 +739,6 @@ gcal_manager_finalize (GObject *object)
GCAL_ENTRY;
g_clear_object (&self->goa_client);
g_clear_object (&self->e_data_model);
g_clear_object (&self->search_data_model);
g_clear_object (&self->shell_search_data_model);
@@ -1800,7 +1769,7 @@ gcal_manager_get_loading (GcalManager *self)
{
g_return_val_if_fail (GCAL_IS_MANAGER (self), FALSE);
return !self->goa_client_ready || self->sources_at_launch > 0;
return self->sources_at_launch > 0;
}
/**
@@ -1856,24 +1825,6 @@ gcal_manager_get_event_from_shell_search (GcalManager *self,
GCAL_RETURN (new_event);
}
/**
* gcal_manager_get_goa_client:
* @self: a #GcalManager
*
* Retrieves the #GoaClient connected by @self.
*
* Returns: (transfer none): a #GoaClient
*/
GoaClient*
gcal_manager_get_goa_client (GcalManager *self)
{
GCAL_ENTRY;
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
GCAL_RETURN (self->goa_client);
}
void
gcal_manager_startup (GcalManager *self)
{
@@ -1886,11 +1837,6 @@ gcal_manager_startup (GcalManager *self)
self->clients = g_hash_table_new_full ((GHashFunc) e_source_hash, (GEqualFunc) e_source_equal,
g_object_unref, (GDestroyNotify) free_unit_data);
/* load GOA client */
goa_client_new (NULL, /* we won't really cancel it */
(GAsyncReadyCallback) gcal_manager_client_ready_cb,
self);
/* reading sources and schedule its connecting */
self->source_registry = e_source_registry_new_sync (NULL, &error);
-5
View File
@@ -23,7 +23,6 @@
#include "gcal-event.h"
#include <libical/icaltime.h>
#include <goa/goa.h>
G_BEGIN_DECLS
@@ -104,10 +103,6 @@ GList* gcal_manager_get_events (GcalManager
gboolean gcal_manager_get_loading (GcalManager *self);
/* Online Accounts */
GoaClient* gcal_manager_get_goa_client (GcalManager *self);
/* GNOME Shell-related functions */
GcalEvent* gcal_manager_get_event_from_shell_search (GcalManager *self,
const gchar *uuid);
+9 -47
View File
@@ -2035,69 +2035,31 @@ goa_account_removed_cb (GoaClient *client,
}
static void
loading_changed_cb (GcalSourceDialog *dialog)
setup_context (GcalSourceDialog *self)
{
g_autolist (GoaAccount) accounts = NULL;
GcalManager *manager;
GoaClient *client;
GList *accounts, *l;
GList *l;
GCAL_ENTRY;
g_return_if_fail (GCAL_IS_SOURCE_DIALOG (dialog));
manager = gcal_context_get_manager (dialog->context);
if (gcal_manager_get_loading (manager))
{
GCAL_TRACE_MSG ("Not loaded yet");
GCAL_EXIT;
return;
}
/* Add already fetched accounts */
client = gcal_manager_get_goa_client (manager);
client = gcal_context_get_goa_client (self->context);
accounts = goa_client_get_accounts (client);
for (l = accounts; l != NULL; l = l->next)
add_goa_account (dialog, goa_object_get_account (l->data));
add_goa_account (self, goa_object_get_account (l->data));
/* Be ready to other accounts */
g_signal_connect (client, "account-added", G_CALLBACK (goa_account_added_cb), dialog);
g_signal_connect (client, "account-removed", G_CALLBACK (goa_account_removed_cb), dialog);
/* Once we loaded, no need to track it down again */
g_signal_handlers_disconnect_by_func (manager, loading_changed_cb, dialog);
g_list_free (accounts);
GCAL_EXIT;
}
static void
setup_context (GcalSourceDialog *self)
{
GcalManager *manager = gcal_context_get_manager (self->context);
if (!gcal_manager_get_loading (manager))
{
GList *sources, *l;
sources = gcal_manager_get_sources_connected (manager);
for (l = sources; l != NULL; l = l->next)
add_source (manager, l->data, is_source_enabled (l->data), self);
}
else
{
g_signal_connect_swapped (manager,
"notify::loading",
G_CALLBACK (loading_changed_cb),
self);
}
g_signal_connect (client, "account-added", G_CALLBACK (goa_account_added_cb), self);
g_signal_connect (client, "account-removed", G_CALLBACK (goa_account_removed_cb), self);
manager = gcal_context_get_manager (self->context);
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), self);
g_signal_connect (manager, "source-removed", G_CALLBACK (remove_source), self);
GCAL_EXIT;
}
static void