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