From: Dirk-Jan C. Binnema Date: Mon, 12 Feb 2007 14:50:13 +0000 (+0000) Subject: * modest-tny-send-queue: X-Git-Tag: git_migration_finished~4061 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=98df4aae51f0f37b7fd1158e86f132d528aaf3b3 * modest-tny-send-queue: - semi-working implementation, requires latest tinymail * other: - some fixes pmo-trunk-r820 --- diff --git a/src/modest-runtime.h b/src/modest-runtime.h index 5fd3142..c081ac5 100644 --- a/src/modest-runtime.h +++ b/src/modest-runtime.h @@ -100,7 +100,6 @@ gboolean modest_runtime_uninit (void); * g_type_init_with_debug_flags * - "track-signals": track the use of (g)signals in the program. this option influences * g_type_init_with_debug_flags - * - "disable-cache": disable caching of strings and pixbuf * if you would want to track signals and log actions, you could do something like: * MODEST_DEBUG="log-actions:track-signals" ./modest * NOTE that the flags will stay the same during the run of the program, even diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 5e5b884..f3384e0 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -338,7 +338,7 @@ modest_tny_account_store_finalize (GObject *obj) priv->cache_dir = NULL; if (priv->device) { - g_object_unref (priv->device); + g_object_unref (G_OBJECT(priv->device)); priv->device = NULL; } @@ -348,21 +348,22 @@ modest_tny_account_store_finalize (GObject *obj) } if (priv->account_mgr) { - g_object_unref (priv->account_mgr); + g_object_unref (G_OBJECT(priv->account_mgr)); priv->account_mgr = NULL; } - - if (priv->session) { - camel_object_unref (CAMEL_OBJECT(priv->session)); - priv->session = NULL; - } - + /* this includes the local folder */ account_list_free (priv->store_accounts); priv->store_accounts = NULL; account_list_free (priv->transport_accounts); priv->transport_accounts = NULL; + + if (priv->session) { + camel_object_unref (CAMEL_OBJECT(priv->session)); + priv->session = NULL; + } + G_OBJECT_CLASS(parent_class)->finalize (obj); } diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index ae5ff1e..dee8127 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -49,7 +49,7 @@ enum { typedef struct _ModestTnySendQueuePrivate ModestTnySendQueuePrivate; struct _ModestTnySendQueuePrivate { - TnyCamelTransportAccount *account; + /* empty */ }; #define MODEST_TNY_SEND_QUEUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_TNY_SEND_QUEUE, \ @@ -67,9 +67,7 @@ static TnyCamelSendQueueClass *parent_class = NULL; static void modest_tny_send_queue_cancel (TnySendQueue *self, gboolean remove, GError **err) -{ - g_warning (__FUNCTION__); - +{ TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->cancel_func (self, remove, err); /* FIXME */ } @@ -80,8 +78,6 @@ modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) g_return_if_fail (TNY_IS_SEND_QUEUE(self)); g_return_if_fail (TNY_IS_CAMEL_MSG(msg)); - - g_warning (__FUNCTION__); priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); @@ -93,32 +89,42 @@ modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err) static TnyFolder* modest_tny_send_queue_get_sentbox (TnySendQueue *self) { - ModestTnySendQueuePrivate *priv; - - g_warning (__FUNCTION__); + TnyFolder *folder; + TnyCamelTransportAccount *account; g_return_val_if_fail (self, NULL); - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); - - return modest_tny_account_get_special_folder (TNY_ACCOUNT(priv->account), - TNY_FOLDER_TYPE_SENT); + account = tny_camel_send_queue_get_transport_account (TNY_CAMEL_SEND_QUEUE(self)); + if (!account) { + g_printerr ("modest: no account for send queue\n"); + return NULL; + } + folder = modest_tny_account_get_special_folder (TNY_ACCOUNT(account), + TNY_FOLDER_TYPE_SENT); + g_object_unref (G_OBJECT(account)); + + return folder; } static TnyFolder* modest_tny_send_queue_get_outbox (TnySendQueue *self) { - ModestTnySendQueuePrivate *priv; + TnyFolder *folder; + TnyCamelTransportAccount *account; g_return_val_if_fail (self, NULL); - g_warning (__FUNCTION__); - - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); + account = tny_camel_send_queue_get_transport_account (TNY_CAMEL_SEND_QUEUE(self)); + if (!account) { + g_printerr ("modest: no account for send queue\n"); + return NULL; + } + folder = modest_tny_account_get_special_folder (TNY_ACCOUNT(account), + TNY_FOLDER_TYPE_OUTBOX); + g_object_unref (G_OBJECT(account)); - return modest_tny_account_get_special_folder (TNY_ACCOUNT(priv->account), - TNY_FOLDER_TYPE_OUTBOX); + return folder; } @@ -169,26 +175,12 @@ modest_tny_send_queue_class_init (ModestTnySendQueueClass *klass) static void modest_tny_send_queue_instance_init (GTypeInstance *instance, gpointer g_class) { - ModestTnySendQueue *self; - ModestTnySendQueuePrivate *priv; - - self = (ModestTnySendQueue*)instance; - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); - - priv->account = NULL; + } static void modest_tny_send_queue_finalize (GObject *obj) { - ModestTnySendQueuePrivate *priv; - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (obj); - - if (priv->account) { - g_object_unref (priv->account); - priv->account = NULL; - } - G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -203,12 +195,15 @@ modest_tny_send_queue_new (TnyCamelTransportAccount *account) self = MODEST_TNY_SEND_QUEUE(g_object_new(MODEST_TYPE_TNY_SEND_QUEUE, NULL)); priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE(self); - priv->account = account; - g_object_ref (G_OBJECT(priv->account)); - -// tny_camel_send_queue_set_transport_account (TNY_CAMEL_SEND_QUEUE(self), -// account); /* hmmm */ - + tny_camel_send_queue_set_transport_account (TNY_CAMEL_SEND_QUEUE(self), + account); return self; } + + +void +modest_tny_send_queue_flush (ModestTnySendQueue* self) +{ + tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self)); +} diff --git a/src/modest-tny-send-queue.h b/src/modest-tny-send-queue.h index 0af775a..148797d 100644 --- a/src/modest-tny-send-queue.h +++ b/src/modest-tny-send-queue.h @@ -27,10 +27,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -#ifndef __MODEST_TNY_SEND_QUEUE_H__ -#define __MODEST_TNY_SEND_QUEUE_H__ - #include #include #include @@ -38,6 +34,9 @@ #include #include +#ifndef __MODEST_TNY_SEND_QUEUE_H__ +#define __MODEST_TNY_SEND_QUEUE_H__ + G_BEGIN_DECLS /* convenience macros */ @@ -80,6 +79,18 @@ GType modest_tny_send_queue_get_type (void) G_GNUC_CONST; */ ModestTnySendQueue* modest_tny_send_queue_new (TnyCamelTransportAccount *account); + + +/** + * modest_tny_send_queue_flush: + * @self: a valid #ModestTnySendQueue instance + * + * (try to) send the messages in the outbox folder + * + */ +void modest_tny_send_queue_flush (ModestTnySendQueue* self); + + G_END_DECLS #endif /* __MODEST_TNY_SEND_QUEUE_H__ */ diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 24325fd..7f859ba 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -113,24 +113,29 @@ get_selected_headers (ModestWindow *win) { if (MODEST_IS_MAIN_WINDOW(win)) { GtkWidget *header_view; - + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), MODEST_WIDGET_TYPE_HEADER_VIEW); return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); - + } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) { /* for MsgViewWindows, we simply return a list with one element */ TnyMsg *msg; - TnyList *list; + TnyHeader *header; + TnyList *list = NULL; msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW(win)); - list = tny_simple_list_new (); - tny_list_prepend (list, G_OBJECT(msg)); - + if (msg) { + header = tny_msg_get_header (msg); + list = tny_simple_list_new (); + tny_list_prepend (list, G_OBJECT(header)); + g_object_unref (G_OBJECT(header)); + } return list; + } else return NULL; - + } void modest_ui_actions_on_delete (GtkWidget *widget, ModestWindow *win) @@ -339,13 +344,15 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, ModestWindow *win) header = TNY_HEADER (tny_iterator_get_current (helper->iter)); folder = tny_header_get_folder (header); - - /* The callback will call it per each header */ - tny_folder_get_msg_async (folder, header, get_msg_cb, helper); + if (folder) { + /* The callback will call it per each header */ + tny_folder_get_msg_async (folder, header, get_msg_cb, helper); + g_object_unref (G_OBJECT (folder)); + } else + g_printerr ("modest: no folder for header\n"); /* Clean */ g_object_unref (G_OBJECT (header)); - g_object_unref (G_OBJECT (folder)); } void @@ -408,15 +415,37 @@ modest_ui_actions_on_send_receive (GtkWidget *widget, ModestWindow *win) { TnyDevice *device; TnyAccountStore *account_store; + gchar *account_name; + TnyAccount *tny_account; + ModestTnySendQueue *send_queue; /* Get device. Do not ask the platform factory for it, because it returns always a new one */ account_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); device = tny_account_store_get_device (account_store); - - tny_device_force_online (device); - - /* FIXME: refresh the folders */ + + account_name = + g_strdup(modest_window_get_active_account(MODEST_WINDOW(win))); + if (!account_name) + account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + if (!account_name) { + g_printerr ("modest: cannot get account\n"); + return; + } + + tny_account = + modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + account_name, TNY_ACCOUNT_TYPE_TRANSPORT); + if (!tny_account) { + g_printerr ("modest: cannot get tny transport account\n"); + return; + } + + send_queue = modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(tny_account)); + modest_tny_send_queue_flush (send_queue); + + g_object_unref (G_OBJECT(send_queue)); + g_object_unref (G_OBJECT(tny_account)); }