* Added support to reload a msg when the device gets online
authorSergio Villar Senin <svillar@igalia.com>
Thu, 14 Dec 2006 13:33:37 +0000 (13:33 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Thu, 14 Dec 2006 13:33:37 +0000 (13:33 +0000)
pmo-trunk-r556

src/gtk/modest-account-assistant.c
src/modest-marshal.list
src/modest-widget-factory.c
src/widgets/modest-header-view.c

index 75fd1fd..0f26e72 100644 (file)
@@ -554,6 +554,9 @@ on_apply (ModestAccountAssistant *self, gpointer user_data)
                                       get_email(self), FALSE, NULL);
        
        g_free (store_name);
+
+       /* Close the assistant */
+       gtk_widget_destroy (GTK_WIDGET(self));
 }
 
 
index 187d0bb..712fb2b 100644 (file)
@@ -6,3 +6,5 @@ VOID:STRING,INT,INT
 VOID:STRING,BOOL
 VOID:STRING,STRING,BOOL
 VOID:STRING,POINTER,POINTER,POINTER
+VOID:INT,POINTER
+
index f3f7aef..f540fc9 100644 (file)
@@ -75,7 +75,7 @@ static void on_password_requested (ModestTnyAccountStore *account_store, const g
                                   gchar **password, gboolean *cancel, gboolean *remember, ModestWidgetFactory *self);
 
 static void on_item_not_found     (ModestHeaderView* header_view, ModestItemType type,
-                                  ModestWidgetFactory *self);
+                                  gboolean *retry, ModestWidgetFactory *self);
 
 
 /* list my signals */
@@ -707,7 +707,7 @@ on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *self)
 
 static void
 on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
-                  ModestWidgetFactory *self)
+                  gboolean *retry, ModestWidgetFactory *self)
 {
        /* FIXME ==> ask from UI... */
        GtkWidget *dialog;
@@ -720,6 +720,7 @@ on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
        
        priv    = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
        device  = tny_account_store_get_device (priv->account_store);
+       *retry = FALSE;
        
        online = tny_device_is_online (device);
        if (online) {
@@ -753,8 +754,10 @@ on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
 
                gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300);
                gdk_threads_enter ();
-               if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+               if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                        tny_device_force_online (device);
+                       *retry = TRUE;
+               }
                gdk_threads_leave ();
        }
        gtk_widget_destroy (dialog);
index 0ec08ee..a18f1df 100644 (file)
@@ -128,8 +128,8 @@ modest_header_view_class_init (ModestHeaderViewClass *klass)
                              G_SIGNAL_RUN_FIRST,
                              G_STRUCT_OFFSET (ModestHeaderViewClass,item_not_found),
                              NULL, NULL,
-                             g_cclosure_marshal_VOID__INT,
-                             G_TYPE_NONE, 1, G_TYPE_INT);
+                             modest_marshal_VOID__INT_POINTER,
+                             G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
 
        signals[STATUS_UPDATE_SIGNAL] = 
                g_signal_new ("status_update",
@@ -891,6 +891,7 @@ get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
 {
        GetMsgAsyncHelper *helper;
        TnyHeaderFlags header_flags;
+       gboolean retry;
 
        helper = (GetMsgAsyncHelper *) user_data;
 
@@ -901,12 +902,18 @@ get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
                /* mark message as seen; _set_flags crashes, bug in tinymail? */
                header_flags = tny_header_get_flags (helper->header);
                tny_header_set_flags (helper->header, header_flags | TNY_HEADER_FLAG_SEEN);
-       } else
-               g_signal_emit (G_OBJECT(helper->self), signals[ITEM_NOT_FOUND_SIGNAL], 0,
-                              MODEST_ITEM_TYPE_MESSAGE);
+       } else {
+               g_signal_emit (G_OBJECT(helper->self), 
+                              signals[ITEM_NOT_FOUND_SIGNAL], 0,
+                              MODEST_ITEM_TYPE_MESSAGE, &retry);
+               if (retry)
+                       tny_folder_get_msg_async (TNY_FOLDER(folder), helper->header, 
+                                                 get_msg_cb, helper);
+       }
 
-       /* Frees */                                     
-       g_slice_free (GetMsgAsyncHelper, helper);
+       /* Frees */
+       if (!retry)
+               g_slice_free (GetMsgAsyncHelper, helper);
 }
 
 static void