static void modest_tny_send_queue_finalize (GObject *obj);
static void modest_tny_send_queue_instance_init (GTypeInstance *instance, gpointer g_class);
+/* Signal handlers */
+static void _on_msg_start_sending (TnySendQueue *self, TnyMsg *msg, guint processed, guint total);
+static void _on_msg_has_been_sent (TnySendQueue *self, TnyMsg *msg, guint processed, guint total);
+
+
/* list my signals */
enum {
/* MY_SIGNAL_1, */
typedef struct _ModestTnySendQueuePrivate ModestTnySendQueuePrivate;
struct _ModestTnySendQueuePrivate {
- /* empty */
+ gchar *current_msg_id;
+
};
+
#define MODEST_TNY_SEND_QUEUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_TNY_SEND_QUEUE, \
ModestTnySendQueuePrivate))
+
/* globals */
static TnyCamelSendQueueClass *parent_class = NULL;
static void
modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err)
{
- ModestTnySendQueuePrivate *priv;
-
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);
-
/* FIXME: do something smart here... */
TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->add_func (self, msg, err); /* FIXME */
static void
modest_tny_send_queue_instance_init (GTypeInstance *instance, gpointer g_class)
{
-
+ ModestTnySendQueuePrivate *priv;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (instance);
+ priv->current_msg_id = NULL;
+
}
static void
modest_tny_send_queue_finalize (GObject *obj)
{
+ ModestTnySendQueuePrivate *priv;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (obj);
+ if (priv->current_msg_id != NULL)
+ g_free(priv->current_msg_id);
+
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
modest_tny_send_queue_new (TnyCamelTransportAccount *account)
{
ModestTnySendQueue *self;
- ModestTnySendQueuePrivate *priv;
g_return_val_if_fail (TNY_IS_CAMEL_TRANSPORT_ACCOUNT(account), NULL);
self = MODEST_TNY_SEND_QUEUE(g_object_new(MODEST_TYPE_TNY_SEND_QUEUE, NULL));
- priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE(self);
tny_camel_send_queue_set_transport_account (TNY_CAMEL_SEND_QUEUE(self),
account);
+
+ /* Connect signals to control when a msg is being or has been sent */
+ /* TODO: this signal was implemented in tinymail camel send queue, but im
+ waiting for implement some unit tests nbefore commited changes */
+ if (FALSE) {
+ g_signal_connect (G_OBJECT(self), "msg-sending",
+ G_CALLBACK(_on_msg_start_sending),
+ NULL);
+ }
+
+ g_signal_connect (G_OBJECT(self), "msg-sent",
+ G_CALLBACK(_on_msg_has_been_sent),
+ NULL);
return self;
}
void
-modest_tny_send_queue_flush (ModestTnySendQueue* self)
+modest_tny_send_queue_try_to_send (ModestTnySendQueue* self)
+{
+ /* TODO: Rename this to tny_camel_send_queue_try_to_send() in tinymail
+ and check that it works, without creating a second worker. */
+/* tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self)); */
+}
+
+gboolean
+modest_tny_send_queue_msg_is_being_sent (ModestTnySendQueue* self,
+ const gchar *msg_id)
+{
+ ModestTnySendQueuePrivate *priv;
+
+ g_return_val_if_fail (msg_id != NULL, FALSE);
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ if (modest_tny_send_queue_sending_in_progress(self))
+ return g_ascii_strcasecmp(priv->current_msg_id, msg_id);
+ else
+ return FALSE;
+}
+
+gboolean
+modest_tny_send_queue_sending_in_progress (ModestTnySendQueue* self)
+{
+ ModestTnySendQueuePrivate *priv;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ return priv->current_msg_id != NULL;
+}
+
+
+static void
+_on_msg_start_sending (TnySendQueue *self,
+ TnyMsg *msg,
+ guint processed,
+ guint total)
{
- tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self));
+ ModestTnySendQueuePrivate *priv;
+ TnyHeader *header = NULL;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ /* Delete previous msg_id */
+ if (priv->current_msg_id != NULL)
+ g_free(priv->current_msg_id);
+
+ /* Set current msg_id */
+ header = tny_msg_get_header(msg);
+ priv->current_msg_id = g_strdup(tny_header_get_message_id (header));
+}
+
+static void
+_on_msg_has_been_sent (TnySendQueue *self,
+ TnyMsg *msg,
+ guint processed,
+ guint total)
+{
+ ModestTnySendQueuePrivate *priv;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ /* Delete previous msg_id */
+ if (priv->current_msg_id != NULL)
+ g_free(priv->current_msg_id);
+
+ /* Unset current msg_id */
+ priv->current_msg_id = NULL;
}