X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=inline;f=src%2Fmodest-mail-operation-queue.c;h=1ca44507d1f355f0dbb513ce340f16ff3295e7c6;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hp=eacb4c3fdc7e715d6008233705ae55576df58b73;hpb=2be048f015649fda1a62eb609eee223fa0ef7b0d;p=modest diff --git a/src/modest-mail-operation-queue.c b/src/modest-mail-operation-queue.c index eacb4c3..1ca4450 100644 --- a/src/modest-mail-operation-queue.c +++ b/src/modest-mail-operation-queue.c @@ -55,6 +55,7 @@ struct _ModestMailOperationQueuePrivate { GMutex *queue_lock; guint op_id; guint queue_empty_handler; + gboolean running_final_sync; }; #define MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MAIL_OPERATION_QUEUE, \ @@ -148,6 +149,7 @@ modest_mail_operation_queue_init (ModestMailOperationQueue *obj) priv->queue_lock = g_mutex_new (); priv->op_id = 0; priv->queue_empty_handler = 0; + priv->running_final_sync = FALSE; } static void @@ -246,6 +248,8 @@ modest_mail_operation_queue_add (ModestMailOperationQueue *self, priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self); + priv->running_final_sync = (modest_mail_operation_get_type_operation (mail_op) == MODEST_MAIL_OPERATION_TYPE_SHUTDOWN); + g_mutex_lock (priv->queue_lock); g_queue_push_tail (priv->op_queue, g_object_ref (mail_op)); g_mutex_unlock (priv->queue_lock); @@ -328,7 +332,8 @@ modest_mail_operation_queue_remove (ModestMailOperationQueue *self, /* Check errors */ status = modest_mail_operation_get_status (mail_op); - if (status != MODEST_MAIL_OPERATION_STATUS_SUCCESS) { + if (status != MODEST_MAIL_OPERATION_STATUS_SUCCESS && + status != MODEST_MAIL_OPERATION_STATUS_INVALID) { /* This is a sanity check. Shouldn't be needed, but prevent possible application crashes. It's useful also for detecting mail operations with invalid @@ -426,7 +431,7 @@ modest_mail_operation_queue_cancel_all (ModestMailOperationQueue *self) g_queue_foreach (priv->op_queue, (GFunc) on_cancel_all_foreach, &operations_to_cancel); g_mutex_unlock (priv->queue_lock); - /* TODO: Reverse the list, to remove operations in order? */ + operations_to_cancel = g_slist_reverse (operations_to_cancel); for(cur = operations_to_cancel; cur != NULL; cur = cur->next) { if (!MODEST_IS_MAIL_OPERATION(cur->data)) @@ -511,3 +516,25 @@ modest_mail_operation_queue_to_string (ModestMailOperationQueue *self) return str; } + +gboolean +modest_mail_operation_queue_running_shutdown (ModestMailOperationQueue *self) +{ + ModestMailOperationQueuePrivate *priv; + + g_return_val_if_fail (MODEST_IS_MAIL_OPERATION_QUEUE (self), FALSE); + + priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self); + return priv->running_final_sync; +} + +void +modest_mail_operation_queue_set_running_shutdown (ModestMailOperationQueue *self) +{ + ModestMailOperationQueuePrivate *priv; + + g_return_if_fail (MODEST_IS_MAIL_OPERATION_QUEUE (self)); + + priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self); + priv->running_final_sync = TRUE; +}