X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-send-queue.c;h=88bf044550e76b2a2eda479a7d6ba4cdc5617d71;hp=281699cccdc07e8738191056c57439c8b0798d97;hb=e7c11995eead176629592f70148b088d3c3185e2;hpb=362784ce756b3f0e31cd451d9ac5e69b909d4053 diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index 281699c..88bf044 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -33,8 +33,11 @@ #include #include #include +#include +#include #include #include +#include #include #include #include /* strcmp */ @@ -93,6 +96,8 @@ static guint signals[LAST_SIGNAL] = {0}; static int on_modest_tny_send_queue_compare_id(gconstpointer info, gconstpointer msg_id) { + g_return_val_if_fail (info && ((SendInfo*)info)->msg_id && msg_id, -1); + return strcmp( ((SendInfo*)info)->msg_id, msg_id); } @@ -171,7 +176,7 @@ modest_tny_send_queue_cancel (TnySendQueue *self, gboolean remove, GError **err) static void modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) { - ModestTnySendQueuePrivate *priv; + ModestTnySendQueuePrivate *priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE(self); TnyHeader *header = NULL; SendInfo *info = NULL; GList* existing = NULL; @@ -180,17 +185,16 @@ modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) 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); - - /* 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 */ - /* Check whether the mail is already in the queue */ -/* msg_id = tny_header_get_message_id (header); */ - msg_id = tny_header_get_uid (header); - g_return_if_fail (msg_id != NULL); + /* TODO: We cannot access the message ID of the message here because + * it might just have been created. Wait for it being added to outbox. */ + + header = tny_msg_get_header (msg); + msg_id = tny_header_get_message_id (header); + g_return_if_fail(msg_id != NULL); + + /* Put newly added message in WAITING state */ existing = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE(self), msg_id); if(existing != NULL) { @@ -212,8 +216,7 @@ modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) g_signal_emit (self, signals[STATUS_CHANGED], 0, info->msg_id, info->status); - /* free */ - g_object_unref (header); + g_object_unref(G_OBJECT(header)); } static void @@ -243,12 +246,14 @@ _add_message (ModestTnySendQueue *self, TnyHeader *header) /* 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; - + if(existing != NULL) + break; + /* Check if its being edited */ mgr = modest_runtime_get_window_mgr (); editing = modest_window_mgr_find_registered_header (mgr, header, NULL); - if (editing) return; + if (editing) + break; /* Add new meesage info */ info = g_slice_new (SendInfo); @@ -257,11 +262,10 @@ _add_message (ModestTnySendQueue *self, TnyHeader *header) g_queue_push_tail (priv->queue, info); break; default: - goto frees; + break; } /* Free */ - frees: g_free(msg_uid); } @@ -330,6 +334,7 @@ modest_tny_send_queue_get_type (void) (GInstanceInitFunc) modest_tny_send_queue_instance_init, NULL }; + my_type = g_type_register_static (TNY_TYPE_CAMEL_SEND_QUEUE, "ModestTnySendQueue", &my_info, 0); @@ -495,14 +500,18 @@ modest_tny_send_queue_get_msg_id (TnyHeader *header) /* Get message uid */ uid = tny_header_get_uid (header); - tmp = g_strsplit (uid, "__", 2); - if (tmp[1] != NULL) - msg_uid = g_strconcat (tmp[0], "_", NULL); - else - msg_uid = g_strdup(tmp[0]); - - /* free */ - g_strfreev(tmp); + if (uid) + tmp = g_strsplit (uid, "__", 2); + + if (tmp) { + if (tmp[1] != NULL) + msg_uid = g_strconcat (tmp[0], "_", NULL); + else + msg_uid = g_strdup(tmp[0]); + + /* free */ + g_strfreev(tmp); + } return msg_uid; } @@ -528,13 +537,16 @@ _on_msg_start_sending (TnySendQueue *self, /* Get status info */ item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self), msg_id); - g_return_if_fail (item != NULL); - info = item->data; - info->status = MODEST_TNY_SEND_QUEUE_SENDING; - - /* Set current status item */ - g_signal_emit (self, signals[STATUS_CHANGED], 0, info->msg_id, info->status); - priv->current = item; + if (!item) + g_warning ("%s: item should not be NULL", __FUNCTION__); + else { + info = item->data; + info->status = MODEST_TNY_SEND_QUEUE_SENDING; + + /* Set current status item */ + g_signal_emit (self, signals[STATUS_CHANGED], 0, info->msg_id, info->status); + priv->current = item; + } /* free */ g_free (msg_id); @@ -559,12 +571,17 @@ _on_msg_has_been_sent (TnySendQueue *self, /* Get status info */ item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self), msg_id); - g_return_if_fail(item != NULL); + if (!item) + g_warning ("%s: item should not be NULL", __FUNCTION__); + else { - /* Remove status info */ - modest_tny_send_queue_info_free (item->data); - g_queue_delete_link (priv->queue, item); - priv->current = NULL; + /* Remove status info */ + modest_tny_send_queue_info_free (item->data); + g_queue_delete_link (priv->queue, item); + priv->current = NULL; + + modest_platform_information_banner (NULL, NULL, _("mcen_ib_message_sent")); + } /* free */ g_free(msg_id); @@ -592,10 +609,8 @@ _on_msg_error_happened (TnySendQueue *self, info = g_slice_new (SendInfo); info->msg_id = strdup(msg_uid); g_queue_push_tail (priv->queue, info); - } - else { + } else info = item->data; - } /* Keep in queue so that we remember that the opertion has failed */ /* and was not just cancelled */