+
+ /* free */
+ g_object_unref (header);
+}
+
+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));
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ /* Check whether the mail is already in the queue */
+ msg_uid = modest_tny_send_queue_get_msg_id (header);
+ status = modest_tny_send_queue_get_msg_status (self, msg_uid);
+ switch (status) {
+ case MODEST_TNY_SEND_QUEUE_UNKNONW:
+ case MODEST_TNY_SEND_QUEUE_SUSPENDED:
+ 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);
+ info->status = MODEST_TNY_SEND_QUEUE_WAITING;
+ g_queue_push_tail (priv->queue, info);
+ break;
+ default:
+ goto frees;
+ }
+
+ /* Free */
+ frees:
+ g_free(msg_uid);