manager: Move GOA to GcalContext
Another step into making GcalManager only be responsible for handling backend interactions.
This commit is contained in:
@@ -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:
|
||||
*
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user