diff options
Diffstat (limited to 'sync/src/sync_collection.c')
-rw-r--r-- | sync/src/sync_collection.c | 18 |
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 |