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.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sync/src/sync_collection.c b/sync/src/sync_collection.c
index 88b2d05..913d580 100644
--- a/sync/src/sync_collection.c
+++ b/sync/src/sync_collection.c
@@ -35,6 +35,8 @@ struct _SyncCollectionPrivate
gdouble progress;
gint num_groups;
gint num_finished;
+
+ gboolean abort_failed;
};
static void
@@ -134,8 +136,11 @@ static void
sync_collection_abort_func (gpointer data, gpointer user_data)
{
SyncCollectionGroup *col_group = data;
+ SyncCollection *collection = user_data;
+ SyncCollectionPrivate *priv = COLLECTION_PRIVATE (collection);
- sync_group_abort (col_group->group);
+ if (!sync_group_abort (col_group->group))
+ priv->abort_failed = TRUE;
}
static void
@@ -211,6 +216,9 @@ sync_collection_finished (SyncCollection *collection)
if (priv->num_finished == priv->num_groups) {
GList *c;
gchar *error = NULL;
+
+ g_debug ("All groups in collection finished syncing");
+
for (c = priv->groups; c; c = c->next) {
gchar *new_error;
SyncCollectionGroup *col_group = c->data;
@@ -245,6 +253,7 @@ sync_collection_finished (SyncCollection *collection)
static void
sync_collection_finished_cb (SyncGroup *group, SyncCollection *collection)
{
+ g_debug ("Group in collection finished syncing");
sync_collection_finished (collection);
}
@@ -342,13 +351,16 @@ sync_collection_start (SyncCollection *collection)
return success;
}
-void
+gboolean
sync_collection_abort (SyncCollection *collection)
{
SyncCollectionPrivate *priv = COLLECTION_PRIVATE (collection);
+ priv->abort_failed = FALSE;
g_list_foreach (priv->groups,
sync_collection_abort_func, collection);
+
+ return !priv->abort_failed;
}
void
@@ -364,6 +376,7 @@ sync_collection_remove_group (SyncCollection *collection,
sync_collection_group_free (collection, (SyncCollectionGroup *)
col_group->data);
priv->groups = g_list_delete_link (priv->groups, col_group);
+ priv->num_groups --;
}
}
@@ -378,6 +391,7 @@ sync_collection_remove_all (SyncCollection *collection)
sync_collection_group_free (collection, col_group);
priv->groups = g_list_delete_link (priv->groups, priv->groups);
}
+ priv->num_groups = 0;
}
gboolean