* src/dbus_api/modest-dbus-callbacks.c:
authorJose Dapena Paz <jdapena@igalia.com>
Thu, 24 Apr 2008 16:18:36 +0000 (16:18 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 24 Apr 2008 16:18:36 +0000 (16:18 +0000)
* (on_open_message_performer): if we're opening a draft, then we
  retrieve the account name from the from header, and take into
  accountif there's any account available, to show the account
  wizard (fixes NB#84808).

pmo-trunk-r4467

src/dbus_api/modest-dbus-callbacks.c

index 24cd7a8..d1feca9 100644 (file)
@@ -496,33 +496,74 @@ on_open_message_performer (gboolean canceled,
        if (modest_window_mgr_find_registered_header (win_mgr, header, &msg_view)) {
                gtk_window_present (GTK_WINDOW(msg_view));
        } else {
        if (modest_window_mgr_find_registered_header (win_mgr, header, &msg_view)) {
                gtk_window_present (GTK_WINDOW(msg_view));
        } else {
-               const gchar *modest_account_name;
 
                /* g_debug ("creating new window for this msg"); */
                modest_window_mgr_register_header (win_mgr, header, NULL);
 
 
                /* g_debug ("creating new window for this msg"); */
                modest_window_mgr_register_header (win_mgr, header, NULL);
 
-               if (account) {
-                       modest_account_name = 
-                               modest_tny_account_get_parent_modest_account_name_for_server_account (account);
-               } else {
-                       modest_account_name = NULL;
-               }
-                       
                /* Drafts will be opened in the editor, and others will be opened in the viewer */
                if (is_draft) {
                /* Drafts will be opened in the editor, and others will be opened in the viewer */
                if (is_draft) {
+                       gchar *modest_account_name = NULL;
+                       gchar *from_header;
+                       
+                       /* we cannot edit without a valid account... */
+                       if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr (), TRUE)) {
+                               if (!modest_ui_actions_run_account_setup_wizard(NULL)) {
+                                       modest_window_mgr_unregister_header (win_mgr, 
+                                                                            header);
+                                       goto cleanup;
+                               }
+                       }
+               
+                       from_header = tny_header_dup_from (header);
+                       if (from_header) {
+                               GSList *accounts = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE);
+                               GSList *node = NULL;
+                               for (node = accounts; node != NULL; node = g_slist_next (node)) {
+                                       gchar *from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr (), node->data);
+                                       
+                                       if (from && (strcmp (from_header, from) == 0)) {
+                                               g_free (modest_account_name);
+                                               modest_account_name = g_strdup (node->data);
+                                               g_free (from);
+                                               break;
+                                       }
+                                       g_free (from);
+                               }
+                               g_slist_foreach (accounts, (GFunc) g_free, NULL);
+                               g_slist_free (accounts);
+                               g_free (from_header);
+                       }
+
+                       if (modest_account_name == NULL) {
+                               modest_account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+                       }
                        msg_view = modest_msg_edit_window_new (msg, modest_account_name, TRUE);
                        msg_view = modest_msg_edit_window_new (msg, modest_account_name, TRUE);
+                       g_free (modest_account_name);
                } else {
                        TnyHeader *header;
                } else {
                        TnyHeader *header;
+                       const gchar *modest_account_name;
+
+                       if (account) {
+                               modest_account_name = 
+                                       modest_tny_account_get_parent_modest_account_name_for_server_account (account);
+                       } else {
+                               modest_account_name = NULL;
+                       }
+                       
                        header = tny_msg_get_header (msg);
                        msg_view = modest_msg_view_window_new_for_search_result (msg, modest_account_name, msg_uid);
                        if (! (tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
                                tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
                        g_object_unref (header);
                        
                        header = tny_msg_get_header (msg);
                        msg_view = modest_msg_view_window_new_for_search_result (msg, modest_account_name, msg_uid);
                        if (! (tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
                                tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
                        g_object_unref (header);
                        
-               }               
-               modest_window_mgr_register_window (win_mgr, msg_view);
-               gtk_widget_show_all (GTK_WIDGET (msg_view));
+               }
+               if (msg_view != NULL) {
+                       modest_window_mgr_register_window (win_mgr, msg_view);
+                       gtk_widget_show_all (GTK_WIDGET (msg_view));
+               }
        }
        }
+
+cleanup:
        g_object_unref (header);
        g_object_unref (msg);
        g_object_unref (folder);
        g_object_unref (header);
        g_object_unref (msg);
        g_object_unref (folder);