manager: unify completion flags
Instead of having a completion flag for GOA and calendars, unify both of them and simplify some code.
This commit is contained in:
+47
-48
@@ -100,7 +100,9 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_DEFAULT_CALENDAR,
|
PROP_DEFAULT_CALENDAR,
|
||||||
|
PROP_LOADING,
|
||||||
PROP_SETTINGS,
|
PROP_SETTINGS,
|
||||||
|
NUM_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -109,13 +111,12 @@ enum
|
|||||||
SOURCE_CHANGED,
|
SOURCE_CHANGED,
|
||||||
SOURCE_REMOVED,
|
SOURCE_REMOVED,
|
||||||
SOURCE_ENABLED,
|
SOURCE_ENABLED,
|
||||||
LOAD_COMPLETED,
|
|
||||||
QUERY_COMPLETED,
|
QUERY_COMPLETED,
|
||||||
GOA_CLIENT_READY,
|
|
||||||
NUM_SIGNALS
|
NUM_SIGNALS
|
||||||
};
|
};
|
||||||
|
|
||||||
static guint signals[NUM_SIGNALS] = { 0, };
|
static guint signals[NUM_SIGNALS] = { 0, };
|
||||||
|
static GParamSpec *properties[NUM_PROPS] = { NULL, };
|
||||||
|
|
||||||
/* -- start: threading related code provided by Milan Crha */
|
/* -- start: threading related code provided by Milan Crha */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -346,8 +347,9 @@ on_client_connected (GObject *source_object,
|
|||||||
source = e_client_get_source (E_CLIENT (source_object));
|
source = e_client_get_source (E_CLIENT (source_object));
|
||||||
|
|
||||||
manager->sources_at_launch--;
|
manager->sources_at_launch--;
|
||||||
|
|
||||||
if (manager->sources_at_launch == 0)
|
if (manager->sources_at_launch == 0)
|
||||||
g_signal_emit (user_data, signals[LOAD_COMPLETED], 0);
|
g_object_notify_by_pspec (G_OBJECT (manager), properties[PROP_LOADING]);
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
client = E_CAL_CLIENT (e_cal_client_connect_finish (result, &error));
|
client = E_CAL_CLIENT (e_cal_client_connect_finish (result, &error));
|
||||||
@@ -746,8 +748,6 @@ gcal_manager_client_ready_cb (GObject *source,
|
|||||||
manager->goa_client = goa_client_new_finish (result, &error);
|
manager->goa_client = goa_client_new_finish (result, &error);
|
||||||
manager->goa_client_ready = TRUE;
|
manager->goa_client_ready = TRUE;
|
||||||
|
|
||||||
g_signal_emit (user_data, signals[GOA_CLIENT_READY], 0, manager->goa_client);
|
|
||||||
|
|
||||||
if (error != NULL)
|
if (error != NULL)
|
||||||
{
|
{
|
||||||
g_warning ("%s: Error retrieving GoaClient: %s",
|
g_warning ("%s: Error retrieving GoaClient: %s",
|
||||||
@@ -757,6 +757,8 @@ gcal_manager_client_ready_cb (GObject *source,
|
|||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (manager), properties[PROP_LOADING]);
|
||||||
|
|
||||||
GCAL_EXIT;
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -972,6 +974,10 @@ gcal_manager_get_property (GObject *object,
|
|||||||
g_value_take_object (value, e_source_registry_ref_default_calendar (self->source_registry));
|
g_value_take_object (value, e_source_registry_ref_default_calendar (self->source_registry));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_LOADING:
|
||||||
|
g_value_set_boolean (value, gcal_manager_get_loading (self));
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_SETTINGS:
|
case PROP_SETTINGS:
|
||||||
g_value_set_object (value, self->settings);
|
g_value_set_object (value, self->settings);
|
||||||
return;
|
return;
|
||||||
@@ -995,22 +1001,40 @@ gcal_manager_class_init (GcalManagerClass *klass)
|
|||||||
object_class->set_property = gcal_manager_set_property;
|
object_class->set_property = gcal_manager_set_property;
|
||||||
object_class->get_property = gcal_manager_get_property;
|
object_class->get_property = gcal_manager_get_property;
|
||||||
|
|
||||||
/* properties */
|
/**
|
||||||
g_object_class_install_property (object_class,
|
* GcalManager:default-calendar:
|
||||||
PROP_DEFAULT_CALENDAR,
|
*
|
||||||
g_param_spec_object ("default-calendar",
|
* The default calendar.
|
||||||
"Default calendar",
|
*/
|
||||||
"The default calendar",
|
properties[PROP_DEFAULT_CALENDAR] = g_param_spec_object ("default-calendar",
|
||||||
E_TYPE_SOURCE,
|
"Default calendar",
|
||||||
G_PARAM_READWRITE));
|
"The default calendar",
|
||||||
|
E_TYPE_SOURCE,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
/**
|
||||||
PROP_SETTINGS,
|
* GcalManager:loading:
|
||||||
g_param_spec_object ("settings",
|
*
|
||||||
"Application settings",
|
* Whether the manager is loading or not.
|
||||||
"The settings of the application passed down from GcalApplication",
|
*/
|
||||||
G_TYPE_SETTINGS,
|
properties[PROP_LOADING] = g_param_spec_boolean ("loading",
|
||||||
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
|
"Loading",
|
||||||
|
"Whether it's still loading or not",
|
||||||
|
TRUE,
|
||||||
|
G_PARAM_READABLE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GcalManager:settings:
|
||||||
|
*
|
||||||
|
* The settings.
|
||||||
|
*/
|
||||||
|
properties[PROP_SETTINGS] = g_param_spec_object ("settings",
|
||||||
|
"Application settings",
|
||||||
|
"The settings of the application passed down from GcalApplication",
|
||||||
|
G_TYPE_SETTINGS,
|
||||||
|
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
|
||||||
|
|
||||||
|
g_object_class_install_properties (object_class, NUM_PROPS, properties);
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
signals[SOURCE_ADDED] = g_signal_new ("source-added",
|
signals[SOURCE_ADDED] = g_signal_new ("source-added",
|
||||||
@@ -1047,13 +1071,6 @@ gcal_manager_class_init (GcalManagerClass *klass)
|
|||||||
E_TYPE_SOURCE,
|
E_TYPE_SOURCE,
|
||||||
G_TYPE_BOOLEAN);
|
G_TYPE_BOOLEAN);
|
||||||
|
|
||||||
signals[LOAD_COMPLETED] = g_signal_new ("load-completed",
|
|
||||||
GCAL_TYPE_MANAGER,
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
0, NULL, NULL, NULL,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
0);
|
|
||||||
|
|
||||||
signals[QUERY_COMPLETED] = g_signal_new ("query-completed",
|
signals[QUERY_COMPLETED] = g_signal_new ("query-completed",
|
||||||
GCAL_TYPE_MANAGER,
|
GCAL_TYPE_MANAGER,
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
@@ -1061,14 +1078,6 @@ gcal_manager_class_init (GcalManagerClass *klass)
|
|||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
G_TYPE_NONE,
|
G_TYPE_NONE,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
signals[GOA_CLIENT_READY] = g_signal_new ("goa-client-ready",
|
|
||||||
GCAL_TYPE_MANAGER,
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
0, NULL, NULL, NULL,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
1,
|
|
||||||
GOA_TYPE_CLIENT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1805,11 +1814,11 @@ gcal_manager_get_events (GcalManager *manager,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gcal_manager_load_completed (GcalManager *self)
|
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->sources_at_launch == 0;
|
return !self->goa_client_ready || self->sources_at_launch > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GcalEvent*
|
GcalEvent*
|
||||||
@@ -1847,16 +1856,6 @@ gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
|||||||
GCAL_RETURN (new_event);
|
GCAL_RETURN (new_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
gcal_manager_is_goa_client_ready (GcalManager *manager)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GCAL_IS_MANAGER (manager), FALSE);
|
|
||||||
|
|
||||||
GCAL_ENTRY;
|
|
||||||
|
|
||||||
GCAL_RETURN (manager->goa_client_ready);
|
|
||||||
}
|
|
||||||
|
|
||||||
GoaClient*
|
GoaClient*
|
||||||
gcal_manager_get_goa_client (GcalManager *manager)
|
gcal_manager_get_goa_client (GcalManager *manager)
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-3
@@ -104,11 +104,9 @@ GList* gcal_manager_get_events (GcalManager
|
|||||||
icaltimetype *range_start,
|
icaltimetype *range_start,
|
||||||
icaltimetype *range_end);
|
icaltimetype *range_end);
|
||||||
|
|
||||||
gboolean gcal_manager_load_completed (GcalManager *self);
|
gboolean gcal_manager_get_loading (GcalManager *self);
|
||||||
|
|
||||||
/* Online Accounts */
|
/* Online Accounts */
|
||||||
gboolean gcal_manager_is_goa_client_ready (GcalManager *manager);
|
|
||||||
|
|
||||||
GoaClient* gcal_manager_get_goa_client (GcalManager *manager);
|
GoaClient* gcal_manager_get_goa_client (GcalManager *manager);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ execute_search (GcalShellSearchProvider *search_provider)
|
|||||||
|
|
||||||
priv = search_provider->priv;
|
priv = search_provider->priv;
|
||||||
|
|
||||||
if (!gcal_manager_load_completed (priv->manager))
|
if (gcal_manager_get_loading (priv->manager))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
zone = gcal_manager_get_system_timezone (priv->manager);
|
zone = gcal_manager_get_system_timezone (priv->manager);
|
||||||
@@ -151,7 +151,7 @@ schedule_search (GcalShellSearchProvider *search_provider,
|
|||||||
priv->pending_search->invocation = g_object_ref (invocation);
|
priv->pending_search->invocation = g_object_ref (invocation);
|
||||||
priv->pending_search->terms = g_strdupv (terms);
|
priv->pending_search->terms = g_strdupv (terms);
|
||||||
|
|
||||||
if (!gcal_manager_load_completed (priv->manager))
|
if (gcal_manager_get_loading (priv->manager))
|
||||||
{
|
{
|
||||||
priv->scheduled_search_id = g_timeout_add_seconds (1, (GSourceFunc) execute_search, search_provider);
|
priv->scheduled_search_id = g_timeout_add_seconds (1, (GSourceFunc) execute_search, search_provider);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+27
-19
@@ -16,8 +16,9 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "GcaçSourceDialog"
|
#define G_LOG_DOMAIN "GcalSourceDialog"
|
||||||
|
|
||||||
|
#include "gcal-debug.h"
|
||||||
#include "gcal-source-dialog.h"
|
#include "gcal-source-dialog.h"
|
||||||
#include "gcal-utils.h"
|
#include "gcal-utils.h"
|
||||||
|
|
||||||
@@ -2143,16 +2144,24 @@ goa_account_removed_cb (GoaClient *client,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
goa_client_ready_cb (GcalSourceDialog *dialog,
|
loading_changed_cb (GcalSourceDialog *dialog)
|
||||||
GoaClient *client,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
{
|
||||||
|
GoaClient *client;
|
||||||
GList *accounts, *l;
|
GList *accounts, *l;
|
||||||
|
|
||||||
|
GCAL_ENTRY;
|
||||||
|
|
||||||
g_return_if_fail (GCAL_IS_SOURCE_DIALOG (dialog));
|
g_return_if_fail (GCAL_IS_SOURCE_DIALOG (dialog));
|
||||||
g_return_if_fail (GOA_IS_CLIENT (client));
|
|
||||||
|
if (gcal_manager_get_loading (dialog->manager))
|
||||||
|
{
|
||||||
|
GCAL_TRACE_MSG ("Not loaded yet");
|
||||||
|
GCAL_EXIT;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Add already fetched accounts */
|
/* Add already fetched accounts */
|
||||||
|
client = gcal_manager_get_goa_client (dialog->manager);
|
||||||
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)
|
||||||
@@ -2162,7 +2171,12 @@ goa_client_ready_cb (GcalSourceDialog *dialog,
|
|||||||
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), dialog);
|
||||||
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), dialog);
|
||||||
|
|
||||||
|
/* Once we loaded, no need to track it down again */
|
||||||
|
g_signal_handlers_disconnect_by_func (dialog->manager, loading_changed_cb, dialog);
|
||||||
|
|
||||||
g_list_free (accounts);
|
g_list_free (accounts);
|
||||||
|
|
||||||
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2179,20 +2193,7 @@ gcal_source_dialog_set_manager (GcalSourceDialog *dialog,
|
|||||||
{
|
{
|
||||||
dialog->manager = manager;
|
dialog->manager = manager;
|
||||||
|
|
||||||
/*
|
if (!gcal_manager_get_loading (dialog->manager))
|
||||||
* If the GoaClient is already loaded, fetch the online accounts
|
|
||||||
* directly. Otherwise, wait for it to be ready.
|
|
||||||
*/
|
|
||||||
if (gcal_manager_is_goa_client_ready (manager))
|
|
||||||
{
|
|
||||||
goa_client_ready_cb (dialog, gcal_manager_get_goa_client (manager), NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_signal_connect_swapped (manager, "goa-client-ready", G_CALLBACK (goa_client_ready_cb), dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gcal_manager_load_completed (dialog->manager))
|
|
||||||
{
|
{
|
||||||
GList *sources, *l;
|
GList *sources, *l;
|
||||||
|
|
||||||
@@ -2201,6 +2202,13 @@ gcal_source_dialog_set_manager (GcalSourceDialog *dialog,
|
|||||||
for (l = sources; l != NULL; l = l->next)
|
for (l = sources; l != NULL; l = l->next)
|
||||||
add_source (dialog->manager, l->data, gcal_manager_source_enabled (dialog->manager, l->data), dialog);
|
add_source (dialog->manager, l->data, gcal_manager_source_enabled (dialog->manager, l->data), dialog);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_signal_connect_swapped (manager,
|
||||||
|
"notify::loading",
|
||||||
|
G_CALLBACK (loading_changed_cb),
|
||||||
|
dialog);
|
||||||
|
}
|
||||||
|
|
||||||
g_signal_connect (dialog->manager, "source-added", G_CALLBACK (add_source), dialog);
|
g_signal_connect (dialog->manager, "source-added", G_CALLBACK (add_source), dialog);
|
||||||
g_signal_connect (dialog->manager, "source-removed", G_CALLBACK (remove_source), dialog);
|
g_signal_connect (dialog->manager, "source-removed", G_CALLBACK (remove_source), dialog);
|
||||||
|
|||||||
+1
-1
@@ -1242,7 +1242,7 @@ gcal_window_constructed (GObject *object)
|
|||||||
gtk_list_box_set_sort_func (GTK_LIST_BOX (window->calendar_listbox), (GtkListBoxSortFunc) calendar_listbox_sort_func,
|
gtk_list_box_set_sort_func (GTK_LIST_BOX (window->calendar_listbox), (GtkListBoxSortFunc) calendar_listbox_sort_func,
|
||||||
object, NULL);
|
object, NULL);
|
||||||
|
|
||||||
if (gcal_manager_load_completed (window->manager))
|
if (!gcal_manager_get_loading (window->manager))
|
||||||
{
|
{
|
||||||
GList *sources, *l;
|
GList *sources, *l;
|
||||||
sources = gcal_manager_get_sources_connected (window->manager);
|
sources = gcal_manager_get_sources_connected (window->manager);
|
||||||
|
|||||||
Reference in New Issue
Block a user