* modest-tny-send-queue:
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 12 Feb 2007 14:50:13 +0000 (14:50 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 12 Feb 2007 14:50:13 +0000 (14:50 +0000)
  - semi-working implementation, requires latest tinymail
* other:
  - some fixes

pmo-trunk-r820

src/modest-runtime.h
src/modest-tny-account-store.c
src/modest-tny-send-queue.c
src/modest-tny-send-queue.h
src/modest-ui-actions.c

index 5fd3142..c081ac5 100644 (file)
@@ -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
index 5e5b884..f3384e0 100644 (file)
@@ -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);
 }
index ae5ff1e..dee8127 100644 (file)
@@ -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));
+}
index 0af775a..148797d 100644 (file)
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
-#ifndef __MODEST_TNY_SEND_QUEUE_H__
-#define __MODEST_TNY_SEND_QUEUE_H__
-
 #include <glib.h>
 #include <glib-object.h>
 #include <tny-send-queue.h>
@@ -38,6 +34,9 @@
 #include <tny-msg.h>
 #include <tny-camel-transport-account.h>
 
+#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__ */
index 24325fd..7f859ba 100644 (file)
@@ -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));
 }