Changeset 62

Show
Ignore:
Timestamp:
12/01/07 10:28:15
Author:
pvanhoof
Message:

Connecting when offline and asking for a message

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/tmut-folder-view.c

    r58 r62  
    3434#include <tny-gtk-header-list-model.h> 
    3535#include <tny-simple-list.h> 
     36#include <tny-camel-account.h> 
    3637 
    3738#include <modest-vbox-cell-renderer.h> 
     
    383384                        TMUT_SHELL_CHILD (view), NULL); 
    384385 
     386        } else { 
     387                gchar *msg = err?err->message:"User canceled the operation"; 
     388                GtkWidget *dialog = gtk_message_dialog_new ( 
     389                                GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     390                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     391                                GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); 
     392                g_signal_connect_swapped (dialog, "response", 
     393                        G_CALLBACK (gtk_widget_destroy), dialog); 
     394                gtk_widget_show_all (dialog); 
    385395        } 
    386396 
     
    388398 
    389399        return; 
     400} 
     401 
     402typedef struct { 
     403        TMutFolderView *self; 
     404        TnyFolder *folder; 
     405        TnyHeader *header; 
     406} OnWentOnlineInfo; 
     407 
     408static void  
     409on_went_online (TnyCamelAccount *account, gboolean canceled, GError *err, gpointer user_data) 
     410{ 
     411        OnWentOnlineInfo *info = (OnWentOnlineInfo *) user_data; 
     412        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (info->self); 
     413 
     414        if (!canceled && !err && (tny_account_get_connection_status (TNY_ACCOUNT (account)) == TNY_CONNECTION_STATUS_CONNECTED)) { 
     415                tny_folder_get_msg_async (info->folder, info->header,  
     416                        tmut_folder_view_on_got_msg, status_update, 
     417                        g_object_ref (info->self)); 
     418        } else { 
     419                gchar *msg; 
     420                GtkWidget *dialog; 
     421 
     422                if (err) 
     423                        msg = g_strdup_printf ("Can't get message: %s", 
     424                                err->message); 
     425                else { 
     426                        if (tny_account_get_connection_status (TNY_ACCOUNT (account)) != TNY_CONNECTION_STATUS_CONNECTED) 
     427                                msg = g_strdup ("Can't get message: account not online"); 
     428                        else 
     429                                msg = g_strdup ("Can't get message: User canceled the operation"); 
     430                } 
     431 
     432                dialog = gtk_message_dialog_new ( 
     433                                GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     434                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     435                                GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); 
     436                g_signal_connect_swapped (dialog, "response", 
     437                        G_CALLBACK (gtk_widget_destroy), dialog); 
     438                gtk_widget_show_all (dialog); 
     439        } 
     440 
     441        g_object_unref (info->self); 
     442        g_object_unref (info->header); 
     443        g_object_unref (info->folder); 
     444        g_slice_free (OnWentOnlineInfo, info); 
    390445} 
    391446 
     
    411466                        TnyFolder *folder = tny_header_get_folder (header); 
    412467                        if (folder) { 
    413                                 tny_folder_get_msg_async (folder, header,  
    414                                         tmut_folder_view_on_got_msg, status_update, 
    415                                         g_object_ref (self)); 
    416  
     468                                TnyDevice *device = tny_account_store_get_device (priv->account_store); 
     469                                if (!tny_device_is_online (device)) { 
     470                                        OnWentOnlineInfo *info = g_slice_new0 (OnWentOnlineInfo); 
     471                                        TnyAccount *account = tny_folder_get_account (folder); 
     472                                        //tny_device_force_online (device); 
     473                                        info->folder = g_object_ref (folder); 
     474                                        info->header = g_object_ref (header); 
     475                                        info->self = g_object_ref (self); 
     476                                        tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (account),  
     477                                                TRUE, on_went_online, info); 
     478                                        g_object_unref (account); 
     479                                } else { 
     480                                        tny_folder_get_msg_async (folder, header,  
     481                                                tmut_folder_view_on_got_msg, status_update, 
     482                                                g_object_ref (self)); 
     483                                } 
     484                                g_object_unref (device); 
    417485                                g_object_unref (folder); 
    418486                        }