diff options
Diffstat (limited to 'sync/src/sync_group.c')
-rw-r--r-- | sync/src/sync_group.c | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/sync/src/sync_group.c b/sync/src/sync_group.c index b5771c5..284eb2f 100644 --- a/sync/src/sync_group.c +++ b/sync/src/sync_group.c @@ -43,6 +43,7 @@ struct _SyncGroupPrivate gint max_changes; /* Used to work out sync progress */ gint changes; guint progress_id; + gchar *error; GMutex *mutex; }; @@ -191,8 +192,8 @@ sync_group_class_init (SyncGroupClass *klass) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SyncGroupClass, failed), NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); g_type_class_add_private (klass, sizeof (SyncGroupPrivate)); @@ -462,8 +463,13 @@ sync_group_finished_idle (SyncGroup *group) static gboolean sync_group_failed_idle (SyncGroup *group) { + SyncGroupPrivate *priv = GROUP_PRIVATE (group); + sync_group_free_engine (group); - g_signal_emit (group, signals[FAILED], 0); + g_signal_emit (group, signals[FAILED], 0, priv->error ? + priv->error : ""); + g_free (priv->error); + priv->error = NULL; return FALSE; } @@ -482,6 +488,21 @@ OSyncChangeType2String (OSyncChangeType c) } static void +sync_append_error (SyncGroup *group, gchar *text) +{ + SyncGroupPrivate *priv = GROUP_PRIVATE (group); + + if (!priv->error) { + priv->error = text; + } else { + gchar *new_string = g_strconcat (priv->error, "\n", text); + g_free (text); + g_free (priv->error); + priv->error = new_string; + } +} + +static void sync_conflict_cb (OSyncEngine *engine, OSyncMapping *mapping, void *user_data) { @@ -624,10 +645,13 @@ sync_enginestatus_cb (OSyncEngine *engine, OSyncEngineUpdate *status, break; } } -#ifdef DEBUG + static void sync_memberstatus_cb (OSyncMemberUpdate *status, void *user_data) { + SyncGroup *group = (SyncGroup *)user_data; + +#ifdef DEBUG switch (status->type) { case MEMBER_CONNECTED: g_debug ("Member %lli of type %s just connected", @@ -650,44 +674,50 @@ sync_memberstatus_cb (OSyncMemberUpdate *status, void *user_data) osync_member_get_id (status->member), osync_member_get_pluginname (status->member)); break; +#endif case MEMBER_CONNECT_ERROR: - g_debug ("Member %lli of type %s had an " + sync_append_error (group, g_strdup_printf ( + "Member %lli of type %s had an " "error while connecting: %s", osync_member_get_id (status->member), osync_member_get_pluginname (status->member), - osync_error_print (&(status->error))); + osync_error_print (&(status->error)))); break; case MEMBER_GET_CHANGES_ERROR: - g_debug ("Member %lli of type %s had an error while " + sync_append_error (group, g_strdup_printf ( + "Member %lli of type %s had an error while " "getting changes: %s", osync_member_get_id (status->member), osync_member_get_pluginname (status->member), - osync_error_print (&(status->error))); + osync_error_print (&(status->error)))); break; case MEMBER_SYNC_DONE_ERROR: - g_debug ("Member %lli of type %s had an error while " + sync_append_error (group, g_strdup_printf ( + "Member %lli of type %s had an error while " "calling sync done: %s", osync_member_get_id (status->member), osync_member_get_pluginname (status->member), - osync_error_print (&(status->error))); + osync_error_print (&(status->error)))); break; case MEMBER_DISCONNECT_ERROR: - g_debug ("Member %lli of type %s had an error while " + sync_append_error (group, g_strdup_printf ( + "Member %lli of type %s had an error while " "disconnecting: %s", osync_member_get_id (status->member), osync_member_get_pluginname (status->member), - osync_error_print (&(status->error))); + osync_error_print (&(status->error)))); break; case MEMBER_COMMITTED_ALL_ERROR: - g_debug ("Member %lli of type %s had an error while " + sync_append_error (group, g_strdup_printf ( + "Member %lli of type %s had an error while " "commiting changes: %s", osync_member_get_id (status->member), osync_member_get_pluginname (status->member), - osync_error_print (&(status->error))); + osync_error_print (&(status->error)))); break; } } -#endif + gboolean sync_group_start (SyncGroup *group) { |