#
# Makefile.am
-# Time-stamp: <2007-01-27 18:11:31 (djcb)>
+# Time-stamp: <2007-01-30 00:21:56 (djcb)>
SUBDIRS=$(MODEST_PLATFORM) widgets
DIST_SUBDIRS = widgets gtk maemo
modest
modest_SOURCES=\
- modest-account-mgr.c\
- modest-account-mgr.h\
- modest-account-mgr-helpers.h\
modest-account-mgr-helpers.c\
- modest-account-mgr-priv.h\
+ modest-account-mgr-helpers.h\
modest-account-mgr-priv.c\
+ modest-account-mgr-priv.h\
+ modest-account-mgr.c\
+ modest-account-mgr.h\
modest-cache-mgr.c\
modest-cache-mgr.h\
modest-conf.c\
modest-formatter.h \
modest-icon-factory.c\
modest-icon-factory.h\
- modest-local-folder-info.h \
modest-local-folder-info.c \
+ modest-local-folder-info.h \
modest-mail-operation-queue.c \
modest-mail-operation-queue.h \
modest-mail-operation.c \
modest-singletons.h\
modest-text-utils.c\
modest-text-utils.h\
- modest-tny-account.c\
- modest-tny-account.h\
modest-tny-account-store.c\
modest-tny-account-store.h\
+ modest-tny-account.c\
+ modest-tny-account.h\
modest-tny-folder.c \
modest-tny-folder.h \
modest-tny-msg-actions.c\
modest-tny-msg-actions.h\
modest-tny-platform-factory.c \
modest-tny-platform-factory.h \
+ modest-tny-send-queue.c\
+ modest-tny-send-queue.h\
+ modest-ui-actions.h\
modest-ui.c\
modest-ui.h\
- modest-ui-actions.h\
modest-widget-factory.c \
modest-widget-factory.h \
+ modest-widget-memory-priv.h \
modest-widget-memory.c\
- modest-widget-memory.h \
- modest-widget-memory-priv.h
+ modest-widget-memory.h
modest_LDADD = \
$(MODEST_GSTUFF_LIBS) \
#include <modest-tny-send-queue.h>
+#include <tny-simple-list.h>
+#include <tny-iterator.h>
+#include <tny-folder.h>
+#include <tny-camel-msg.h>
+#include <modest-tny-account.h>
/* 'private'/'protected' functions */
static void modest_tny_send_queue_class_init (ModestTnySendQueueClass *klass);
-static void modest_tny_send_queue_init (ModestTnySendQueue *obj);
+static void modest_tny_send_queue_init (gpointer g, gpointer iface_data);
static void modest_tny_send_queue_finalize (GObject *obj);
+static void modest_tny_send_queue_instance_init (GTypeInstance *instance, gpointer g_class);
+
/* list my signals */
enum {
/* MY_SIGNAL_1, */
typedef struct _ModestTnySendQueuePrivate ModestTnySendQueuePrivate;
struct _ModestTnySendQueuePrivate {
TnyTransportAccount *account;
+ GThread *flush_outbox_thread;
+ GMutex *flush_lock;
};
#define MODEST_TNY_SEND_QUEUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_TNY_SEND_QUEUE, \
ModestTnySendQueuePrivate))
/* globals */
-static TnySendQueueClass *parent_class = NULL;
+static GObjectClass *parent_class = NULL;
/* uncomment the following if you have defined any signals */
/* static guint signals[LAST_SIGNAL] = {0}; */
+/*
+ * this thread actually tries to send all the mails in the outbox
+ */
+static void
+flush_outbox_thread (TnySendQueue *self)
+{
+ TnyFolder *outbox, *sentbox;
+ TnyMsg *msg;
+ TnyHeader *header;
+
+ TnyList *headers;
+ TnyIterator *iter;
+
+ ModestTnySendQueuePrivate *priv;
+
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+
+ outbox = tny_send_queue_get_outbox (self);
+ sentbox = tny_send_queue_get_sentbox (self);
+
+ headers = tny_simple_list_new ();
+
+ g_mutex_lock (priv->flush_lock);
+ tny_folder_get_headers (outbox, headers, TRUE, NULL); /* FIXME: err */
+ iter = tny_list_create_iterator (headers);
+
+ while (!tny_iterator_is_done (iter)) {
+ header = TNY_HEADER(tny_iterator_get_current(iter));
+ msg = tny_folder_get_msg (outbox, header, NULL);
+ tny_transport_account_send (priv->account,
+ msg, NULL); /* FIXME: err */
+ tny_folder_add_msg (sentbox, msg, NULL); /* FIXME: err */
+ tny_folder_remove_msg (outbox, header, NULL); /* FIXME: err */
+
+ g_object_unref (G_OBJECT(header));
+ g_object_unref (G_OBJECT(msg));
+
+ tny_iterator_next (iter);
+ }
+
+
+ g_object_unref (G_OBJECT(headers));
+ g_object_unref (G_OBJECT(iter));
+
+ priv->flush_outbox_thread = NULL;
+ g_mutex_unlock (priv->flush_lock);
+
+ g_thread_exit (NULL);
+}
+
+
static void
modest_tny_send_queue_cancel (TnySendQueue *self, gboolean remove)
{
- MODEST_TNY_SENT_QUEUE_GET_CLASS(self)->cancel_func (self, remove);
+ MODEST_TNY_SEND_QUEUE_GET_CLASS(self)->cancel_func (self, remove);
}
static void
modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg)
{
- MODEST_TNY_SENT_QUEUE_GET_CLASS(self)->add_func (self, msg);
+ MODEST_TNY_SEND_QUEUE_GET_CLASS(self)->add_func (self, msg);
}
-static void
+static TnyFolder*
modest_tny_send_queue_get_sentbox (TnySendQueue *self)
{
- MODEST_TNY_SENT_QUEUE_GET_CLASS(self)->get_sentbox (self);
+ return MODEST_TNY_SEND_QUEUE_GET_CLASS(self)->get_sentbox_func (self);
}
-static void
-modest_tny_send_queue_get_outbox (TnySendQueue *self, TnyMsg *msg)
+static TnyFolder*
+modest_tny_send_queue_get_outbox (TnySendQueue *self)
{
- MODEST_TNY_SENT_QUEUE_GET_CLASS(self)->get_outbox (self);
+ return MODEST_TNY_SEND_QUEUE_GET_CLASS(self)->get_outbox_func (self);
}
static void
modest_tny_send_queue_add_default (TnySendQueue *self, TnyMsg *msg)
{
- ModestTnySendQueuePriv *priv;
-
- g_return_if_fail (self, NULL);
- g_return_if_fail (TNY_IS_CAMEL_MSG(msg), NULL);
+ ModestTnySendQueuePrivate *priv;
+ TnyFolder *outbox;
+
+ g_return_if_fail (self);
+ g_return_if_fail (TNY_IS_CAMEL_MSG(msg));
priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
-
- /* FIXME */
-}
+ outbox = tny_send_queue_get_outbox (self);
+ tny_folder_add_msg (outbox, msg, NULL);
+ priv->flush_outbox_thread = g_thread_create (
+ (GThreadFunc)flush_outbox_thread,
+ self, FALSE, NULL);
+}
static TnyFolder*
modest_tny_send_queue_get_sentbox_default (TnySendQueue *self)
{
- ModestTnySendQueuePriv *priv;
-
+ ModestTnySendQueuePrivate *priv;
+
g_return_val_if_fail (self, NULL);
priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
- return modest_tny_account_get_special_folder (priv->account,
- TNY_FOLDER_TYPE_SENT);
+ return modest_tny_account_get_special_folder (TNY_ACCOUNT(priv->account),
+ TNY_FOLDER_TYPE_SENT);
}
static TnyFolder*
modest_tny_send_queue_get_outbox_default (TnySendQueue *self)
{
- ModestTnySendQueuePriv *priv;
+ ModestTnySendQueuePrivate *priv;
g_return_val_if_fail (self, NULL);
priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
- return modest_tny_account_get_special_folder (priv->account,
+ return modest_tny_account_get_special_folder (TNY_ACCOUNT(priv->account),
TNY_FOLDER_TYPE_OUTBOX);
}
modest_tny_send_queue_get_type (void)
{
static GType my_type = 0;
+
+ if (G_UNLIKELY (!camel_type_init_done)) {
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+ camel_type_init ();
+ camel_type_init_done = TRUE;
+ }
+
if (!my_type) {
static const GTypeInfo my_info = {
sizeof(ModestTnySendQueueClass),
NULL, /* class data */
sizeof(ModestTnySendQueue),
1, /* n_preallocs */
- (GInstanceInitFunc) modest_tny_send_queue_init,
+ (GInstanceInitFunc) modest_tny_send_queue_instance_init,
NULL
};
- my_type = g_type_register_static (TNY__TYPE__SEND_QUEUE,
- "ModestTnySendQueue",
+
+ static const GInterfaceInfo tny_send_queue_info = {
+ (GInterfaceInitFunc) modest_tny_send_queue_init,
+ /* interface_init */
+ NULL, /* interface_finalize */
+ NULL /* interface_data */
+ };
+
+ my_type = g_type_register_static (G_TYPE_OBJECT,
+ "ModestTnySendQueue",
&my_info, 0);
+ g_type_add_interface_static (my_type, TNY_TYPE_SEND_QUEUE,
+ &tny_send_queue_info);
}
+
return my_type;
}
modest_tny_send_queue_instance_init (GTypeInstance *instance, gpointer g_class)
{
ModestTnySendQueue *self;
- ModestTnySendQueuePriv *priv;
+ ModestTnySendQueuePrivate *priv;
self = (ModestTnySendQueue*)instance;
priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+ priv->flush_lock = g_mutex_new ();
+ priv->flush_outbox_thread = NULL;
priv->account = NULL;
}
static void
modest_tny_send_queue_finalize (GObject *obj)
{
- ModestTnySendQueuePriv *priv;
+ ModestTnySendQueuePrivate *priv;
priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (obj);
if (priv->account) {
g_object_unref (priv->account);
priv->account = NULL;
}
+
+ if (priv->flush_lock) {
+ g_mutex_free (priv->flush_lock);
+ priv->flush_lock = NULL;
+ }
G_OBJECT_CLASS(parent_class)->finalize (obj);
}