summaryrefslogtreecommitdiffstats
path: root/sync/src/sync_group.c
diff options
context:
space:
mode:
Diffstat (limited to 'sync/src/sync_group.c')
-rw-r--r--sync/src/sync_group.c60
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)
{