X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-send-queue.c;h=281699cccdc07e8738191056c57439c8b0798d97;hb=8376cf7ef539a483f17fc1e4d88a5ac91acaa24a;hp=8f7e2caaa06356e8816db531c8c596361ba9a7b4;hpb=ae6cc4558ea0f5afc82a06376200904ee7b061dd;p=modest diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index 8f7e2ca..281699c 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -34,6 +34,8 @@ #include #include #include +#include +#include #include #include /* strcmp */ @@ -140,11 +142,13 @@ modest_tny_send_queue_cancel (TnySendQueue *self, gboolean remove, GError **err) if (err != NULL) goto frees; iter = tny_list_create_iterator (headers); while (!tny_iterator_is_done (iter)) { - header = TNY_HEADER (tny_iterator_get_current (iter)); - tny_header_unset_flags (header, TNY_HEADER_FLAG_PRIORITY); - tny_header_set_flags (header, TNY_HEADER_FLAG_SUSPENDED_PRIORITY); - tny_iterator_next (iter); - g_object_unref (header); + header = TNY_HEADER (tny_iterator_get_current (iter)); + if (header) { + tny_header_unset_flags (header, TNY_HEADER_FLAG_PRIORITY); + tny_header_set_flags (header, TNY_HEADER_FLAG_SUSPENDED_PRIORITY); + tny_iterator_next (iter); + g_object_unref (header); + } } g_queue_foreach (priv->queue, (GFunc)modest_tny_send_queue_info_free, NULL); @@ -168,19 +172,17 @@ static void modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) { ModestTnySendQueuePrivate *priv; - TnyHeader *header; + TnyHeader *header = NULL; SendInfo *info = NULL; - GList* existing; - const gchar* msg_id; + GList* existing = NULL; + const gchar* msg_id = NULL; g_return_if_fail (TNY_IS_SEND_QUEUE(self)); g_return_if_fail (TNY_IS_CAMEL_MSG(msg)); priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); header = tny_msg_get_header (msg); - - /* FIXME: do something smart here... */ - + /* Note that this call actually sets the message id to something * sensible. */ TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->add_func (self, msg, err); /* FIXME */ @@ -217,11 +219,13 @@ modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) static void _add_message (ModestTnySendQueue *self, TnyHeader *header) { + ModestWindowMgr *mgr = NULL; ModestTnySendQueuePrivate *priv; SendInfo *info = NULL; GList* existing = NULL; gchar* msg_uid = NULL; ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_WAITING; + gboolean editing = FALSE; g_return_if_fail (TNY_IS_SEND_QUEUE(self)); g_return_if_fail (TNY_IS_HEADER(header)); @@ -236,9 +240,16 @@ _add_message (ModestTnySendQueue *self, TnyHeader *header) case MODEST_TNY_SEND_QUEUE_FAILED: if (status != MODEST_TNY_SEND_QUEUE_SUSPENDED) tny_header_unset_flags (header, TNY_HEADER_FLAG_PRIORITY); + + /* Check if it already exists on queue */ existing = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE(self), msg_uid); if(existing != NULL) return; + /* Check if its being edited */ + mgr = modest_runtime_get_window_mgr (); + editing = modest_window_mgr_find_registered_header (mgr, header, NULL); + if (editing) return; + /* Add new meesage info */ info = g_slice_new (SendInfo); info->msg_id = strdup(msg_uid); @@ -415,14 +426,22 @@ modest_tny_send_queue_try_to_send (ModestTnySendQueue* self) GError *err = NULL; outbox = modest_tny_send_queue_get_outbox (TNY_SEND_QUEUE(self)); + if (!outbox) + return; + tny_folder_get_headers (outbox, headers, TRUE, &err); - if (err != NULL) goto frees; + if (err != NULL) + goto frees; + iter = tny_list_create_iterator (headers); while (!tny_iterator_is_done (iter)) { - header = TNY_HEADER (tny_iterator_get_current (iter)); - _add_message (self, header); + header = TNY_HEADER (tny_iterator_get_current (iter)); + if (header) { + _add_message (self, header); + g_object_unref (header); + } + tny_iterator_next (iter); - g_object_unref (header); } /* Flush send queue */