* added extra checking to on_account_inserted, on_account_changed.
[modest] / src / modest-tny-send-queue.c
index 37e26f9..b18c964 100644 (file)
@@ -105,6 +105,9 @@ struct _ModestTnySendQueuePrivate {
        /* Special folders */
        TnyFolder *outbox;
        TnyFolder *sentbox;
+
+       /* last was send receive operation?*/
+       gboolean requested_send_receive;
 };
 
 #define MODEST_TNY_SEND_QUEUE_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
@@ -207,7 +210,10 @@ _on_added_to_outbox (TnySendQueue *self,
 
        header = tny_msg_get_header (msg);
        msg_id = modest_tny_send_queue_get_msg_id (header);
-       g_return_if_fail(msg_id != NULL);
+       if (!msg_id) {
+               g_warning ("%s: No msg_id returned for header", __FUNCTION__);
+               goto end;
+       }
 
        /* Put newly added message in WAITING state */
        existing = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE(self), msg_id);
@@ -223,7 +229,8 @@ _on_added_to_outbox (TnySendQueue *self,
 
        g_signal_emit (self, signals[STATUS_CHANGED_SIGNAL], 0, info->msg_id, info->status);
 
-       g_object_unref(G_OBJECT(header));
+ end:
+       g_object_unref (G_OBJECT(header));
 }
 
 static void
@@ -424,6 +431,8 @@ modest_tny_send_queue_new (TnyCamelTransportAccount *account)
        priv->sentbox = modest_tny_account_get_special_folder (TNY_ACCOUNT(account),
                                                               TNY_FOLDER_TYPE_SENT);
 
+       priv->requested_send_receive = FALSE;
+
 
        headers = tny_simple_list_new ();       
        tny_folder_get_headers (priv->outbox, headers, TRUE, NULL);
@@ -497,16 +506,17 @@ gchar *
 modest_tny_send_queue_get_msg_id (TnyHeader *header)
 {
        gchar* msg_uid = NULL;
-       const gchar *subject;
+       gchar *subject;
        time_t date_received;
                
        g_return_val_if_fail (header && TNY_IS_HEADER(header), NULL);
 
        /* Get message uid */
-       subject = tny_header_get_subject (header);
+       subject = tny_header_dup_subject (header);
        date_received = tny_header_get_date_received (header);
 
        msg_uid = g_strdup_printf ("%s %d", subject, (int) date_received);
+       g_free (subject);
 
        return msg_uid;
 }
@@ -598,7 +608,7 @@ _on_msg_error_happened (TnySendQueue *self,
           generic send queue errors with this signal as well, and
           those notifications are not bound to any particular header
           or message */
-       if (header) {
+       if (header && TNY_IS_HEADER (header)) {
                SendInfo *info = NULL;
                GList *item = NULL;
                gchar* msg_uid = NULL;
@@ -606,7 +616,16 @@ _on_msg_error_happened (TnySendQueue *self,
                /* Get sending info (create new if it doesn not exist) */
                msg_uid = modest_tny_send_queue_get_msg_id (header);
                item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self), 
-                                                         msg_uid);     
+                                                         msg_uid);
+
+               /* TODO: this should not happen (but it does), so the
+                  problem should be located in the way we generate
+                  the message uids */
+               if (!item) {
+                       g_warning ("%s: could not find item with id '%s'", __FUNCTION__, msg_uid);
+                       g_free(msg_uid);
+                       return;
+               }
                
                info = item->data;
 
@@ -761,3 +780,25 @@ modest_tny_send_queue_wakeup (ModestTnySendQueue *self)
        g_object_unref (iter);
        g_object_unref (G_OBJECT (headers));
 }
+
+gboolean 
+modest_tny_send_queue_get_requested_send_receive (ModestTnySendQueue *self)
+{
+       ModestTnySendQueuePrivate *priv;
+
+       g_return_val_if_fail (MODEST_IS_TNY_SEND_QUEUE (self), FALSE);
+       priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+       return priv->requested_send_receive;
+}
+
+void 
+modest_tny_send_queue_set_requested_send_receive (ModestTnySendQueue *self, gboolean requested_send_receive)
+{
+       ModestTnySendQueuePrivate *priv;
+
+       g_return_if_fail (MODEST_IS_TNY_SEND_QUEUE (self));
+       priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+       priv->requested_send_receive = requested_send_receive;
+}