* src/modest-text-utils.c
[modest] / src / modest-tny-send-queue.c
index 0db96a1..eb4c1c3 100644 (file)
@@ -34,6 +34,9 @@
 #include <tny-folder.h>
 #include <tny-camel-msg.h>
 #include <modest-tny-account.h>
+#include <modest-runtime.h>
+#include <modest-platform.h>
+#include <widgets/modest-window-mgr.h>
 #include <modest-marshal.h>
 #include <string.h> /* strcmp */
 
@@ -170,19 +173,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 */
@@ -219,11 +220,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));
@@ -238,9 +241,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);
@@ -417,8 +427,13 @@ 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));
@@ -481,14 +496,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;
 }
@@ -552,6 +571,8 @@ _on_msg_has_been_sent (TnySendQueue *self,
        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);
 }