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;
|
GObject parent;
|
||||||
|
|
||||||
GcalClock *clock;
|
GcalClock *clock;
|
||||||
|
GoaClient *goa_client;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GSettings *settings;
|
GSettings *settings;
|
||||||
GcalWeatherService *weather_service;
|
GcalWeatherService *weather_service;
|
||||||
@@ -38,6 +39,7 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_CLOCK,
|
PROP_CLOCK,
|
||||||
|
PROP_GOA_CLIENT,
|
||||||
PROP_MANAGER,
|
PROP_MANAGER,
|
||||||
PROP_SETTINGS,
|
PROP_SETTINGS,
|
||||||
PROP_WEATHER_SERVICE,
|
PROP_WEATHER_SERVICE,
|
||||||
@@ -57,6 +59,7 @@ gcal_context_finalize (GObject *object)
|
|||||||
GcalContext *self = (GcalContext *)object;
|
GcalContext *self = (GcalContext *)object;
|
||||||
|
|
||||||
g_clear_object (&self->clock);
|
g_clear_object (&self->clock);
|
||||||
|
g_clear_object (&self->goa_client);
|
||||||
g_clear_object (&self->manager);
|
g_clear_object (&self->manager);
|
||||||
g_clear_object (&self->weather_service);
|
g_clear_object (&self->weather_service);
|
||||||
|
|
||||||
@@ -77,6 +80,10 @@ gcal_context_get_property (GObject *object,
|
|||||||
g_value_set_object (value, self->clock);
|
g_value_set_object (value, self->clock);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_GOA_CLIENT:
|
||||||
|
g_value_set_object (value, self->goa_client);
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_MANAGER:
|
case PROP_MANAGER:
|
||||||
g_value_set_object (value, self->manager);
|
g_value_set_object (value, self->manager);
|
||||||
break;
|
break;
|
||||||
@@ -103,6 +110,7 @@ gcal_context_set_property (GObject *object,
|
|||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_CLOCK:
|
case PROP_CLOCK:
|
||||||
|
case PROP_GOA_CLIENT:
|
||||||
case PROP_MANAGER:
|
case PROP_MANAGER:
|
||||||
case PROP_SETTINGS:
|
case PROP_SETTINGS:
|
||||||
case PROP_WEATHER_SERVICE:
|
case PROP_WEATHER_SERVICE:
|
||||||
@@ -126,6 +134,12 @@ gcal_context_class_init (GcalContextClass *klass)
|
|||||||
GCAL_TYPE_CLOCK,
|
GCAL_TYPE_CLOCK,
|
||||||
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
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",
|
properties[PROP_MANAGER] = g_param_spec_object ("manager",
|
||||||
"Data manager",
|
"Data manager",
|
||||||
"Data manager of the application",
|
"Data manager of the application",
|
||||||
@@ -151,6 +165,7 @@ static void
|
|||||||
gcal_context_init (GcalContext *self)
|
gcal_context_init (GcalContext *self)
|
||||||
{
|
{
|
||||||
self->clock = gcal_clock_new ();
|
self->clock = gcal_clock_new ();
|
||||||
|
self->goa_client = goa_client_new_sync (NULL, NULL);
|
||||||
self->manager = gcal_manager_new ();
|
self->manager = gcal_manager_new ();
|
||||||
self->settings = g_settings_new ("org.gnome.calendar");
|
self->settings = g_settings_new ("org.gnome.calendar");
|
||||||
self->weather_service = gcal_weather_service_new ();
|
self->weather_service = gcal_weather_service_new ();
|
||||||
@@ -185,6 +200,21 @@ gcal_context_get_clock (GcalContext *self)
|
|||||||
return self->clock;
|
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:
|
* gcal_context_get_manager:
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include "weather/gcal-weather-service.h"
|
#include "weather/gcal-weather-service.h"
|
||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
#include <goa/goa.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@@ -35,6 +36,8 @@ GcalContext* gcal_context_new (void);
|
|||||||
|
|
||||||
GcalClock* gcal_context_get_clock (GcalContext *self);
|
GcalClock* gcal_context_get_clock (GcalContext *self);
|
||||||
|
|
||||||
|
GoaClient* gcal_context_get_goa_client (GcalContext *self);
|
||||||
|
|
||||||
GcalManager* gcal_context_get_manager (GcalContext *self);
|
GcalManager* gcal_context_get_manager (GcalContext *self);
|
||||||
|
|
||||||
GSettings* gcal_context_get_settings (GcalContext *self);
|
GSettings* gcal_context_get_settings (GcalContext *self);
|
||||||
|
|||||||
+1
-55
@@ -88,10 +88,7 @@ struct _GcalManager
|
|||||||
|
|
||||||
GCancellable *async_ops;
|
GCancellable *async_ops;
|
||||||
|
|
||||||
GoaClient *goa_client;
|
|
||||||
|
|
||||||
/* state flags */
|
/* state flags */
|
||||||
gboolean goa_client_ready;
|
|
||||||
gint sources_at_launch;
|
gint sources_at_launch;
|
||||||
|
|
||||||
/* timezone */
|
/* timezone */
|
||||||
@@ -735,33 +732,6 @@ source_get_last_credentials_required_arguments_cb (GObject *source_object,
|
|||||||
GCAL_EXIT;
|
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
|
static void
|
||||||
gcal_manager_finalize (GObject *object)
|
gcal_manager_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
@@ -769,7 +739,6 @@ gcal_manager_finalize (GObject *object)
|
|||||||
|
|
||||||
GCAL_ENTRY;
|
GCAL_ENTRY;
|
||||||
|
|
||||||
g_clear_object (&self->goa_client);
|
|
||||||
g_clear_object (&self->e_data_model);
|
g_clear_object (&self->e_data_model);
|
||||||
g_clear_object (&self->search_data_model);
|
g_clear_object (&self->search_data_model);
|
||||||
g_clear_object (&self->shell_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);
|
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_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
|
void
|
||||||
gcal_manager_startup (GcalManager *self)
|
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,
|
self->clients = g_hash_table_new_full ((GHashFunc) e_source_hash, (GEqualFunc) e_source_equal,
|
||||||
g_object_unref, (GDestroyNotify) free_unit_data);
|
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 */
|
/* reading sources and schedule its connecting */
|
||||||
self->source_registry = e_source_registry_new_sync (NULL, &error);
|
self->source_registry = e_source_registry_new_sync (NULL, &error);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include "gcal-event.h"
|
#include "gcal-event.h"
|
||||||
|
|
||||||
#include <libical/icaltime.h>
|
#include <libical/icaltime.h>
|
||||||
#include <goa/goa.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@@ -104,10 +103,6 @@ GList* gcal_manager_get_events (GcalManager
|
|||||||
|
|
||||||
gboolean gcal_manager_get_loading (GcalManager *self);
|
gboolean gcal_manager_get_loading (GcalManager *self);
|
||||||
|
|
||||||
/* Online Accounts */
|
|
||||||
GoaClient* gcal_manager_get_goa_client (GcalManager *self);
|
|
||||||
|
|
||||||
|
|
||||||
/* GNOME Shell-related functions */
|
/* GNOME Shell-related functions */
|
||||||
GcalEvent* gcal_manager_get_event_from_shell_search (GcalManager *self,
|
GcalEvent* gcal_manager_get_event_from_shell_search (GcalManager *self,
|
||||||
const gchar *uuid);
|
const gchar *uuid);
|
||||||
|
|||||||
@@ -2035,69 +2035,31 @@ goa_account_removed_cb (GoaClient *client,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
loading_changed_cb (GcalSourceDialog *dialog)
|
setup_context (GcalSourceDialog *self)
|
||||||
{
|
{
|
||||||
|
g_autolist (GoaAccount) accounts = NULL;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GoaClient *client;
|
GoaClient *client;
|
||||||
GList *accounts, *l;
|
GList *l;
|
||||||
|
|
||||||
GCAL_ENTRY;
|
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 */
|
/* 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);
|
accounts = goa_client_get_accounts (client);
|
||||||
|
|
||||||
for (l = accounts; l != NULL; l = l->next)
|
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 */
|
/* Be ready to other accounts */
|
||||||
g_signal_connect (client, "account-added", G_CALLBACK (goa_account_added_cb), dialog);
|
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), dialog);
|
g_signal_connect (client, "account-removed", G_CALLBACK (goa_account_removed_cb), self);
|
||||||
|
|
||||||
/* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
manager = gcal_context_get_manager (self->context);
|
||||||
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), self);
|
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), self);
|
||||||
g_signal_connect (manager, "source-removed", G_CALLBACK (remove_source), self);
|
g_signal_connect (manager, "source-removed", G_CALLBACK (remove_source), self);
|
||||||
|
|
||||||
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user