diff options
Diffstat (limited to 'sync/src/sync_collection.c')
-rw-r--r-- | sync/src/sync_collection.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/sync/src/sync_collection.c b/sync/src/sync_collection.c index 27a1e15..f9dddca 100644 --- a/sync/src/sync_collection.c +++ b/sync/src/sync_collection.c @@ -30,6 +30,7 @@ typedef struct { struct _SyncCollectionPrivate { GList *groups; + GList *current_group; gboolean started; gdouble progress; @@ -208,10 +209,11 @@ sync_collection_conflict_cb (SyncGroup *group, SyncCollection *collection) } static void -sync_collection_finished (SyncCollection *collection) +sync_collection_finished_cb (SyncGroup *group, SyncCollection *collection) { SyncCollectionPrivate *priv = COLLECTION_PRIVATE (collection); + g_debug ("Group in collection finished syncing"); priv->num_finished ++; if (priv->num_finished == priv->num_groups) { GList *c; @@ -247,17 +249,20 @@ sync_collection_finished (SyncCollection *collection) g_signal_emit (collection, signals[FAILED], 0, error); g_free (error); } + } else { + SyncCollectionGroup *col_group; + priv->current_group = priv->current_group->next; + col_group = (SyncCollectionGroup *)priv->current_group->data; + if (!sync_group_start (col_group->group)) { + col_group->error = g_strdup ( + "Error starting synchronisation"); + sync_collection_finished_cb (col_group->group, + collection); + } } } static void -sync_collection_finished_cb (SyncGroup *group, SyncCollection *collection) -{ - g_debug ("Group in collection finished syncing"); - sync_collection_finished (collection); -} - -static void sync_collection_failed_cb (SyncGroup *group, const gchar *error, SyncCollection *collection) { @@ -267,7 +272,7 @@ sync_collection_failed_cb (SyncGroup *group, const gchar *error, sync_collection_find_func))->data); col_group->error = g_strdup (error); - sync_collection_finished (collection); + sync_collection_finished_cb (col_group->group, collection); } static SyncCollectionGroup * @@ -343,12 +348,14 @@ gboolean sync_collection_start (SyncCollection *collection) { SyncCollectionPrivate *priv = COLLECTION_PRIVATE (collection); - gboolean success = TRUE; - g_list_foreach (priv->groups, - sync_collection_start_func, &success); - - return success; + if (priv->groups) { + SyncCollectionGroup *col_group = (SyncCollectionGroup *) + priv->groups->data; + priv->current_group = priv->groups; + return sync_group_start (col_group->group); + } else + return FALSE; } gboolean |