Hi,

Attached is the patch for evolution-exchange bug fix [ #71519 ] and its approval. This patch adds a new string, and breaks string freeze.

This new message notifies the user that evolution could not fetch the message from the cache, when he performs a fetch message or a message move operation. This message provides the reason for this failure saying that the message was not present in the cache.

I need i18n approval for adding this string.

Regards
-- Sarfraaz
--- Begin Message ---
On Mon, 2005-02-28 at 11:00 +0530, Sarfraaz Ahmed wrote:
> Oops .. sorry for the string freeze break. This one missed out in the
> huge patch. Should have been more careful.
> 
> On Sun, 2005-02-27 at 21:47 -0500, JP Rosevear wrote: 
> > On Sun, 2005-02-27 at 11:02 +0100, Christian Rose wrote:
> > > There has recently been an unannounced string freeze breakage in the
> > > string frozen evolution-exchange HEAD branch.
> > > 
> > > It is this added message:
> > > 
> > >   #: camel/camel-exchange-folder.c:371
> > >   msgid "This message is not available in offline mode."
> > 
> > Hmm, seems to have been some confusion since this message is in
> > Evolution.
> > 
> > Surf, what happens without this message in place from a user view point?
> Yeah, this string is there in Evolution and i took it from there. From
> a user's point of view, if we dont have this string,  he would not
> know that fetching a message or moving a message between folders in
> offline mode, failed because the message was not yet cached.
> 
> I think we might have to break string freeze for this. :(

We need i18n approval for this then, just send a note to
gnome-i18n@gnome.org (unless they consider this enough for a request)
explaining why.

-JP
-- 
JP Rosevear <[EMAIL PROTECTED]>
Novell, Inc.


--- End Message ---
--- Begin Message ---
Quite a big  patch. A changelog entry would have helped in reviewing.

exchange_create_folder(): 
should return in case of offline. Uncomment that code.

get_message(): 
The message retuned by find_message() is ignored.

exchange_account_open_folder():
mode will be set to UNSUPPORTED_MODE in case 
EXCHANGE_IS_ACCOUNT (account) condition fails in
exchange_account_is_offline() function.
exchange_account_open_folder() already does that check.
so if (offline == UNSUPPORTED_MODE) becomes redundant.

scan_subtree():  
Offline check need to be done before calling get_hrefs().

Isn't it better to have a variable initialized to true or false, instead
of doing the comparison (offline == whatever mode ) everytime?

Thanks,
Sushma.



On Wed, 2005-02-23 at 12:29 +0530, Sarfraaz Ahmed wrote:
> Hi,
> 
> This fixes #71519 for mailer not showing messages in offline mode. I
> also found some bug in the offline listener code so added that too in
> this patch, as it is anyway needed for this bugfix.
> 
> 
>             Thanks
>                                         -- Sarfraaz Ahmed
> <[EMAIL PROTECTED]>
_______________________________________________
evolution-patches mailing list
[EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/evolution-patches

--- End Message ---
--- Begin Message --- Hi,

This fixes #71519 for mailer not showing messages in offline mode. I also found some bug in the offline listener code so added that too in this patch, as it is anyway needed for this bugfix.


            Thanks
                                        -- Sarfraaz Ahmed <[EMAIL PROTECTED]>
Index: calendar/e-cal-backend-exchange.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange.c,v
retrieving revision 1.28
diff -u -p -u -r1.28 e-cal-backend-exchange.c
--- calendar/e-cal-backend-exchange.c   4 Feb 2005 11:29:44 -0000       1.28
+++ calendar/e-cal-backend-exchange.c   23 Feb 2005 07:00:51 -0000
@@ -1022,14 +1022,6 @@ set_mode (ECalBackend *backend, CalMode 
        
        case CAL_MODE_REMOTE:
                        /* Change status to be online now */
-#if 0
-                       if (exchange_account_set_online (cbex->account)) { 
printf ("mode set to online\n"); 
-                               priv->mode = CAL_MODE_REMOTE;
-                       }
-                       else { printf ("failed to set mode to online\n");
-                               break;
-                       }
-#endif
                        /* Should we check for access rights before setting 
this ? */
                        d(printf ("set mode to online\n"));
                        uristr = e_cal_backend_get_uri (E_CAL_BACKEND 
(backend));
@@ -1040,6 +1032,7 @@ set_mode (ECalBackend *backend, CalMode 
                        /* FIXME : Test if available for read already */
                        priv->read_only = TRUE;
                        exchange_account_set_online (account);
+                       priv->mode = CAL_MODE_REMOTE;
                        e_cal_backend_notify_mode (backend, 
                                GNOME_Evolution_Calendar_CalListener_MODE_SET,
                                GNOME_Evolution_Calendar_MODE_REMOTE);
@@ -1048,7 +1041,6 @@ set_mode (ECalBackend *backend, CalMode 
                        break;
 
        case CAL_MODE_LOCAL:
-                       /* FIXME : Update the cache before closing the 
connection */
                        d(printf ("set mode to offline\n"));
                        uristr = e_cal_backend_get_uri (E_CAL_BACKEND 
(backend));
                        account = exchange_component_get_account_for_uri 
(global_exchange_component, uristr);
@@ -1056,7 +1048,6 @@ set_mode (ECalBackend *backend, CalMode 
                                return;
                        cbex->folder = exchange_account_get_folder (account, 
uristr);
                        priv->mode = CAL_MODE_LOCAL;
-                       /* FIXME : Set connection to NULL and become offline */
                        exchange_account_set_offline (account);
                        e_cal_backend_notify_mode (backend, 
                                GNOME_Evolution_Calendar_CalListener_MODE_SET,
@@ -1306,6 +1297,11 @@ static icaltimezone *
 internal_get_default_timezone (ECalBackend *backend)
 {
        ECalBackendExchange *cbex = E_CAL_BACKEND_EXCHANGE (backend);
+
+       /* FIXME : This should never happen. Sometimes gets triggered while 
moving 
+       between online and offline. */
+       if (!cbex->account)
+               return NULL;
 
        if (!cbex->priv->default_timezone &&
            cbex->account->default_timezone) {
Index: camel/camel-exchange-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/camel/camel-exchange-folder.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 camel-exchange-folder.c
--- camel/camel-exchange-folder.c       8 Feb 2005 13:18:41 -0000       1.13
+++ camel/camel-exchange-folder.c       23 Feb 2005 07:00:52 -0000
@@ -399,6 +399,7 @@ get_message (CamelFolder *folder, const 
        ba = get_message_data (folder, uid, ex);
        if (!ba)
                return NULL;
+
        stream = camel_stream_mem_new_with_byte_array (ba);
 
        crlffilter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE, 
CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
@@ -896,6 +897,7 @@ camel_exchange_folder_update_message_tag
  * @name: the full name of the folder
  * @camel_flags: the folder flags passed to camel_store_get_folder().
  * @folder_dir: local directory this folder can cache data into
+ * @offline_state : offline status
  * @stub: the #CamelStub.
  * @ex: a #CamelException
  *
@@ -907,7 +909,7 @@ camel_exchange_folder_update_message_tag
 gboolean
 camel_exchange_folder_construct (CamelFolder *folder, CamelStore *parent,
                                 const char *name, guint32 camel_flags,
-                                const char *folder_dir,
+                                const char *folder_dir, int offline_state,
                                 CamelStub *stub, CamelException *ex)
 {
        CamelExchangeFolder *exch = (CamelExchangeFolder *)folder;
@@ -1019,6 +1021,8 @@ camel_exchange_folder_construct (CamelFo
 
                camel_exchange_summary_set_readonly (folder->summary, 
folder_flags & CAMEL_STUB_FOLDER_READONLY);
 
+               if (offline_state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL )
+                       return TRUE;
                camel_operation_start (NULL, _("Fetching summary information 
for new messages"));
                ok = camel_stub_send (exch->stub, ex, 
CAMEL_STUB_CMD_REFRESH_FOLDER,
                                      CAMEL_STUB_ARG_FOLDER, folder->full_name,
Index: camel/camel-exchange-folder.h
===================================================================
RCS file: /cvs/gnome/evolution-exchange/camel/camel-exchange-folder.h,v
retrieving revision 1.6
diff -u -p -u -r1.6 camel-exchange-folder.h
--- camel/camel-exchange-folder.h       11 Jan 2005 11:05:45 -0000      1.6
+++ camel/camel-exchange-folder.h       23 Feb 2005 07:00:54 -0000
@@ -50,6 +50,7 @@ gboolean camel_exchange_folder_construct
                                                     const char *name,
                                                     guint32 camel_flags,
                                                     const char *folder_dir,
+                                                    int offline_state,
                                                     CamelStub *stub,
                                                     CamelException *ex);
 
Index: camel/camel-exchange-store.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/camel/camel-exchange-store.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 camel-exchange-store.c
--- camel/camel-exchange-store.c        4 Feb 2005 11:29:45 -0000       1.12
+++ camel/camel-exchange-store.c        23 Feb 2005 07:00:54 -0000
@@ -289,7 +289,7 @@ exchange_connect (CamelService *service,
        
        store->stub = camel_stub_new (socket_path, _("Evolution Exchange 
backend process"), ex);
        g_free (socket_path);
-       if (!store->stub) 
+       if (!store->stub)
                return FALSE;
 
        /* Initialize the stub connection */
@@ -306,7 +306,7 @@ exchange_connect (CamelService *service,
 
        camel_object_hook_event (CAMEL_OBJECT (store->stub), "notification",
                                 stub_notification, store);
-       
+
        return TRUE;
 }
 
@@ -342,12 +342,9 @@ exchange_get_folder (CamelStore *store, 
        
        folder_dir = exchange_path_to_physical (exch->storage_path, 
folder_name);
        
-       printf ("folder_name : %s\n", folder_name );
-
        if (((CamelOfflineStore *) store)->state == 
CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
                if (!folder_dir || access (folder_dir, F_OK) != 0) {
                        g_free (folder_dir);
-                       printf ("no folder_dir or no write access\n");
                        camel_exception_setv (ex, 
CAMEL_EXCEPTION_STORE_NO_FOLDER,
                                              _("No such folder %s"), 
folder_name);
                        return NULL;
@@ -371,7 +368,7 @@ exchange_get_folder (CamelStore *store, 
        g_mutex_unlock (exch->folders_lock);
        
        if (!camel_exchange_folder_construct (folder, store, folder_name,
-                                             flags, folder_dir,
+                                             flags, folder_dir, 
((CamelOfflineStore *) store)->state,
                                              exch->stub, ex)) {
                g_free (folder_dir);
                camel_object_unref (CAMEL_OBJECT (folder));
@@ -538,11 +535,12 @@ exchange_create_folder (CamelStore *stor
        guint32 unread_count, flags;
        CamelFolderInfo *info;
        
+/*
        if (((CamelOfflineStore *) store)->state == 
CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
                camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot 
create folder in offline mode."));
                return NULL;
        }
-
+*/
        if (!camel_stub_send (exch->stub, ex, CAMEL_STUB_CMD_CREATE_FOLDER,
                              CAMEL_STUB_ARG_FOLDER, parent_name,
                              CAMEL_STUB_ARG_STRING, folder_name,
Index: mail/mail-stub-exchange.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/mail/mail-stub-exchange.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 mail-stub-exchange.c
--- mail/mail-stub-exchange.c   4 Feb 2005 11:29:45 -0000       1.12
+++ mail/mail-stub-exchange.c   23 Feb 2005 07:00:54 -0000
@@ -537,7 +537,7 @@ get_folder (MailStub *stub, const char *
        E2kResult *result;
        const char *prop, *uid;
        guint32 article_num, camel_flags;
-       int i, m, total = -1;
+       int i, m, total = -1, mode;
        ExchangeHierarchy *hier;
 
        path = g_strdup_printf ("/%s", name);
@@ -591,7 +591,8 @@ get_folder (MailStub *stub, const char *
                if (!(mmsg->flags & MAIL_STUB_MESSAGE_SEEN))
                        mfld->unread_count++;
        }
-       if (!exchange_account_is_offline (mse->account)) {
+       exchange_account_is_offline (mse->account, &mode);
+       if (mode == ONLINE_MODE) {
                mfld->changed_messages = g_ptr_array_new ();
 
                status = e_folder_exchange_propfind (mfld->folder, NULL,
@@ -812,7 +813,7 @@ sync_deletions (MailStubExchange *mse, M
        E2kResult *results;
        int nresults;
        const char *prop;
-       int deleted_count = -1, new_deleted_count, visible_count = -1;
+       int deleted_count = -1, new_deleted_count, visible_count = -1, mode;
        E2kRestriction *rn;
        E2kResultIter *iter;
        E2kResult *result;
@@ -820,7 +821,8 @@ sync_deletions (MailStubExchange *mse, M
        MailStubExchangeMessage *mmsg, *my_mmsg;
        gboolean changes = FALSE;
 
-       if (exchange_account_is_offline (mse->account))
+       exchange_account_is_offline (mse->account, &mode);
+       if (mode != ONLINE_MODE)
                return;
 
        status = e_folder_exchange_propfind (mfld->folder, NULL,
@@ -990,16 +992,25 @@ refresh_folder_internal (MailStub *stub,
        char *prop, *uid, *href;
        struct refresh_message rm, *rmp;
        E2kHTTPStatus status;
-       int got, total, i, n;
+       int got, total, i, n, mode;
        gpointer key, value;
        MailStubExchangeMessage *mmsg;
        MailStubExchange *mse = MAIL_STUB_EXCHANGE (stub);
 
-       if (exchange_account_is_offline (mse->account))
-               return;
 
        g_object_ref (stub);
 
+       exchange_account_is_offline (mse->account, &mode);
+       if (mode == OFFLINE_MODE) {
+               if (background)
+                       mail_stub_push_changes (stub);
+               else
+                       mail_stub_return_ok (stub);
+
+               g_object_unref (stub); /* Is this needed ? */
+               return;
+       }
+
        messages = g_array_new (FALSE, FALSE, sizeof (struct refresh_message));
        mapi_message_hash = g_hash_table_new (g_str_hash, g_str_equal);
        mapi_hrefs = g_ptr_array_new ();
@@ -1841,7 +1852,7 @@ get_message (MailStub *stub, const char 
        MailStubExchangeMessage *mmsg;
        E2kHTTPStatus status;
        char *body = NULL, *content_type = NULL;
-       int len;
+       int len = 0, mode;
 
        mfld = folder_from_name (mse, folder_name, MAPI_ACCESS_READ, FALSE);
        if (!mfld)
@@ -1856,6 +1867,15 @@ get_message (MailStub *stub, const char 
                mail_stub_return_error (stub, _("No such message"));
                return;
        }
+       
+       exchange_account_is_offline (mse->account, &mode);
+       if (mode != ONLINE_MODE) {
+               mail_stub_return_data (stub, CAMEL_STUB_RETVAL_RESPONSE,
+                              CAMEL_STUB_ARG_BYTEARRAY, body, len,
+                              CAMEL_STUB_ARG_END);
+               mail_stub_return_ok (stub);
+               return;
+       }
 
        if (mfld->type == MAIL_STUB_EXCHANGE_FOLDER_NOTES) {
                status = get_stickynote (mse->ctx, NULL, mmsg->href,
@@ -2439,13 +2459,15 @@ mail_stub_exchange_new (ExchangeAccount 
        MailStubExchange *mse;
        MailStub *stub;
        const char *uri;
+       int mode;
 
        stub = g_object_new (MAIL_TYPE_STUB_EXCHANGE, NULL);
        mail_stub_construct (stub, cmd_fd, status_fd);
+       exchange_account_is_offline (account, &mode);
 
        mse = (MailStubExchange *)stub;
        mse->account = account;
-       if (!exchange_account_is_offline (account)) {
+       if (mode == ONLINE_MODE) {
                mse->ctx = exchange_account_get_context (account);
                g_object_ref (mse->ctx);
 
Index: storage/exchange-account.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-account.c,v
retrieving revision 1.33
diff -u -p -u -r1.33 exchange-account.c
--- storage/exchange-account.c  21 Feb 2005 05:50:58 -0000      1.33
+++ storage/exchange-account.c  23 Feb 2005 07:00:54 -0000
@@ -32,7 +32,6 @@
 #include "exchange-hierarchy-favorites.h"
 #include "exchange-hierarchy-foreign.h"
 #include "exchange-hierarchy-gal.h"
-#include "exchange-offline-listener.h"
 #include "e-folder-exchange.h"
 #include "e2k-autoconfig.h"
 #include "e2k-encoding-utils.h"
@@ -710,7 +709,7 @@ exchange_account_open_folder (ExchangeAc
 {
        ExchangeHierarchy *hier;
        EFolder *folder;
-       gboolean offline = exchange_account_is_offline (account);
+       int offline;
 
        g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), 
                                EXCHANGE_ACCOUNT_FOLDER_GENERIC_ERROR);
@@ -718,7 +717,8 @@ exchange_account_open_folder (ExchangeAc
        if (!get_folder (account, path, &folder, &hier))
                return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
 
-       if (!offline && !account->priv->connected &&
+       exchange_account_is_offline (account, &offline);
+       if (offline == ONLINE_MODE && !account->priv->connected &&
            hier == (ExchangeHierarchy *)account->priv->hierarchies->pdata[0] &&
            folder == hier->toplevel) {
                /* The shell is asking us to open the personal folders
@@ -727,8 +727,11 @@ exchange_account_open_folder (ExchangeAc
                 */
                return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
        }               
+       
+       if (offline == UNSUPPORTED_MODE)
+               return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
 
-       return exchange_hierarchy_scan_subtree (hier, folder, offline);
+       return exchange_hierarchy_scan_subtree (hier, folder, (offline == 
OFFLINE_MODE));
 }
 
 ExchangeAccountFolderResult
@@ -1099,15 +1102,18 @@ exchange_account_set_offline (ExchangeAc
 gboolean
 exchange_account_set_online (ExchangeAccount *account)
 {
-               
        g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), FALSE);
 
-       account->priv->account_online = TRUE;
+       if (!account->priv->account_online) {
+               account->priv->account_online = TRUE;
 
-       if (exchange_account_connect (account))
+               if (exchange_account_connect (account))
+                       return TRUE;
+               else
+                       return FALSE;
+       } else {
                return TRUE;
-       else
-               return FALSE;
+       }
 }
 
 /**
@@ -1116,10 +1122,14 @@ exchange_account_set_online (ExchangeAcc
  *
  * Return value: Returns TRUE if account is offline
  **/
-gboolean
-exchange_account_is_offline (ExchangeAccount *account)
+void
+exchange_account_is_offline (ExchangeAccount *account, int *state)
 {
-       return exchange_component_is_offline (global_exchange_component);
+       *state = UNSUPPORTED_MODE;
+
+       g_return_if_fail (EXCHANGE_IS_ACCOUNT (account));
+
+       exchange_component_is_offline (global_exchange_component, state);
 }
 
 
@@ -1131,7 +1141,12 @@ setup_account_hierarchies (ExchangeAccou
        char *phys_uri_prefix, *dir;
        DIR *d;
        struct dirent *dent;
-       gboolean offline = exchange_account_is_offline (account);
+       int offline;
+
+       exchange_account_is_offline (account, &offline);
+
+       if (offline == UNSUPPORTED_MODE)
+               return FALSE;
 
        /* Set up Personal Folders hierarchy */
        phys_uri_prefix = g_strdup_printf ("exchange://%s/personal",
@@ -1213,7 +1228,7 @@ setup_account_hierarchies (ExchangeAccou
         */
        fresult = exchange_hierarchy_scan_subtree (personal_hier,
                                                   personal_hier->toplevel,
-                                                  offline);
+                                                  (offline == OFFLINE_MODE));
        if (fresult != EXCHANGE_ACCOUNT_FOLDER_OK) {
                account->priv->connecting = FALSE;
                return FALSE;
@@ -1222,7 +1237,7 @@ setup_account_hierarchies (ExchangeAccou
        fresult = exchange_hierarchy_scan_subtree (
                account->priv->favorites_hierarchy,
                account->priv->favorites_hierarchy->toplevel,
-               offline);
+               (offline == OFFLINE_MODE));
        if (fresult != EXCHANGE_ACCOUNT_FOLDER_OK) {
                account->priv->connecting = FALSE;
                return FALSE;
@@ -1260,15 +1275,16 @@ exchange_account_connect (ExchangeAccoun
        E2kOperation gcop;
        const char *quota_msg = NULL;
        char *user_name = NULL;
-       int offline = exchange_component_is_offline (global_exchange_component);
+       int offline;
 
        g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), NULL);
 
+       exchange_account_is_offline (account, &offline);
        g_mutex_lock (account->priv->connect_lock);
-       //if ((account->priv->connecting) || (!account->priv->account_online)){
-       if ((account->priv->connecting) || offline){
+
+       if ((account->priv->connecting) || (offline == OFFLINE_MODE)){
                g_mutex_unlock (account->priv->connect_lock);
-               if (offline) {
+               if (offline == OFFLINE_MODE) {
                        setup_account_hierarchies (account);
                        e_notice (NULL, GTK_MESSAGE_ERROR, _("Exchange Account 
is offline. Cannot display folders\n"));
                }
@@ -1451,6 +1467,9 @@ exchange_account_connect (ExchangeAccoun
                        account->default_timezone = g_strdup (timezone);
        }
 
+       if (!setup_account_hierarchies (account)) 
+               return NULL;
+       
        /* Find the password expiery peripod and display warning */
        find_passwd_exp_period(account, entry);
        
@@ -1477,9 +1496,6 @@ exchange_account_connect (ExchangeAccoun
                        e_notice (NULL, GTK_MESSAGE_INFO, quota_msg);
        }
        
-       if (!setup_account_hierarchies (account)) 
-               return NULL;
-       
        account->priv->connected = TRUE;
        account->priv->account_online = TRUE;
        account->priv->connecting = FALSE;
@@ -1500,7 +1516,7 @@ exchange_account_connect (ExchangeAccoun
 gboolean
 exchange_account_is_offline_sync_set (ExchangeAccount *account)
 {
-       g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), NULL);
+       g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), FALSE);
 
        return account->priv->offline_sync;
 }
Index: storage/exchange-account.h
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-account.h,v
retrieving revision 1.10
diff -u -p -u -r1.10 exchange-account.h
--- storage/exchange-account.h  20 Feb 2005 06:43:31 -0000      1.10
+++ storage/exchange-account.h  23 Feb 2005 07:00:54 -0000
@@ -10,6 +10,7 @@
 #include "e2k-global-catalog.h"
 #include "e2k-security-descriptor.h"
 #include "e-folder.h"
+#include "exchange-offline-listener.h"
 #include <e-util/e-account-list.h>
 
 #ifdef __cplusplus
@@ -84,7 +85,7 @@ gboolean               exchange_account_set_offline 
 
 gboolean                exchange_account_set_online (ExchangeAccount *account);
 
-gboolean                exchange_account_is_offline (ExchangeAccount *account);
+void            exchange_account_is_offline (ExchangeAccount *account, int 
*mode);
 
 gboolean               exchange_account_is_offline_sync_set (ExchangeAccount 
*account);
 
Index: storage/exchange-component.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-component.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 exchange-component.c
--- storage/exchange-component.c        4 Feb 2005 11:29:45 -0000       1.5
+++ storage/exchange-component.c        23 Feb 2005 07:00:54 -0000
@@ -248,10 +248,12 @@ new_connection (MailStubListener *listen
 {
        MailStub *mse;
        ExchangeAccount *account = baccount->account;
+       int mode;
 
        g_object_ref (account);
 
-       if (exchange_account_is_offline (account)) {
+       exchange_account_is_offline (account, &mode);
+       if (mode != ONLINE_MODE) {
                mse = mail_stub_exchange_new (account, cmd_fd, status_fd);
                goto end;
        }
@@ -421,24 +423,22 @@ exchange_component_get_account_for_uri (
                baccount = acc->data;
 
                /* Kludge for while we don't support multiple accounts */
-               //if (!exchange_is_offline (priv->offline_listener)) {
-                       if (!uri)
-                               return baccount->account;
-
-                       if (exchange_account_get_folder (baccount->account, 
uri))
-                               return baccount->account;
-               //} else {
-                       ///* FIXME : Handle multiple accounts */
-                       //return baccount->account;
-               //}
+               if (!uri)
+                       return baccount->account;
+
+               if (exchange_account_get_folder (baccount->account, uri))
+                       return baccount->account;
+               /* FIXME : Handle multiple accounts */
        }
        return NULL;
 }
 
-gboolean
-exchange_component_is_offline (ExchangeComponent *component)
+void
+exchange_component_is_offline (ExchangeComponent *component, int *state)
 {
-       return exchange_is_offline (component->priv->offline_listener);
+       g_return_if_fail (EXCHANGE_IS_COMPONENT (component));
+
+       exchange_is_offline (component->priv->offline_listener, state);
 }
 
 gboolean
Index: storage/exchange-component.h
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-component.h,v
retrieving revision 1.5
diff -u -p -u -r1.5 exchange-component.h
--- storage/exchange-component.h        4 Feb 2005 11:29:45 -0000       1.5
+++ storage/exchange-component.h        23 Feb 2005 07:00:54 -0000
@@ -44,7 +44,7 @@ ExchangeComponent *exchange_component_ne
 ExchangeAccount   *exchange_component_get_account_for_uri (ExchangeComponent 
*component,
                                                           const char        
*uri);
 gboolean           exchange_component_is_interactive      (ExchangeComponent 
*component);
-gboolean           exchange_component_is_offline      (ExchangeComponent 
*component);
+void           exchange_component_is_offline      (ExchangeComponent 
*component, int *state);
 
 void exchange_component_set_offline_listener (ExchangeComponent *component, 
                                                ExchangeOfflineListener 
*listener);
Index: storage/exchange-hierarchy-favorites.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-hierarchy-favorites.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 exchange-hierarchy-favorites.c
--- storage/exchange-hierarchy-favorites.c      4 Feb 2005 11:29:45 -0000       
1.13
+++ storage/exchange-hierarchy-favorites.c      23 Feb 2005 07:00:54 -0000
@@ -121,11 +121,12 @@ get_hrefs (ExchangeHierarchySomeDAV *hsd
        GByteArray *source_key;
        const char *prop = E2K_PR_DAV_HREF, *shortcut_uri;
        char *perm_url, *folder_uri;
-       int i, nresults;
+       int i, nresults, mode;
 
        hrefs = g_ptr_array_new ();
 
-       if (exchange_account_is_offline (hier->account)) {
+       exchange_account_is_offline (hier->account, &mode);
+       if (mode != ONLINE_MODE) {
                exchange_hierarchy_webdav_offline_scan_subtree 
(EXCHANGE_HIERARCHY (hfav), add_hrefs, hrefs);
                return hrefs;
        }
Index: storage/exchange-hierarchy-somedav.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-hierarchy-somedav.c,v
retrieving revision 1.6
diff -u -p -u -r1.6 exchange-hierarchy-somedav.c
--- storage/exchange-hierarchy-somedav.c        4 Feb 2005 11:29:45 -0000       
1.6
+++ storage/exchange-hierarchy-somedav.c        23 Feb 2005 07:00:54 -0000
@@ -128,7 +128,7 @@ scan_subtree (ExchangeHierarchy *hier, E
        GPtrArray *hrefs;
        E2kResultIter *iter;
        E2kResult *result;
-       int folders_returned=0, folders_added=0, i;
+       int folders_returned=0, folders_added=0, i, mode;
        E2kHTTPStatus status;
        ExchangeAccountFolderResult folder_result;
        EFolder *iter_folder = NULL;
@@ -145,7 +145,8 @@ scan_subtree (ExchangeHierarchy *hier, E
                return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
        }
        /*FIXME : Not sure if this is the right place for this */
-       if (exchange_account_is_offline (hier->account))
+       exchange_account_is_offline (hier->account, &mode);
+       if (mode != ONLINE_MODE)
                return EXCHANGE_ACCOUNT_FOLDER_OK;
 
        iter = e_folder_exchange_bpropfind_start (hier->toplevel, NULL,
Index: storage/exchange-hierarchy-webdav.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-hierarchy-webdav.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 exchange-hierarchy-webdav.c
--- storage/exchange-hierarchy-webdav.c 4 Feb 2005 11:29:45 -0000       1.22
+++ storage/exchange-hierarchy-webdav.c 23 Feb 2005 07:00:54 -0000
@@ -297,10 +297,11 @@ create_folder (ExchangeHierarchy *hier, 
        E2kProperties *props;
        E2kHTTPStatus status;
        char *permanent_url = NULL;
-       int i;
+       int i, mode;
 
-       if (exchange_account_is_offline (hier->account))
-               return EXCHANGE_ACCOUNT_FOLDER_OFFLINE;
+       exchange_account_is_offline (hier->account, &mode);
+        if (mode != ONLINE_MODE)
+                return EXCHANGE_ACCOUNT_FOLDER_OFFLINE;
 
        for (i = 0; folder_types[i].component; i++) {
                if (!strcmp (folder_types[i].component, type))
@@ -344,9 +345,12 @@ static ExchangeAccountFolderResult
 remove_folder (ExchangeHierarchy *hier, EFolder *folder)
 {
        E2kHTTPStatus status;
+       int mode;
 
-       if (exchange_account_is_offline (hier->account))
-               return EXCHANGE_ACCOUNT_FOLDER_OFFLINE;
+        exchange_account_is_offline (hier->account, &mode);
+
+        if (mode != ONLINE_MODE)
+                return EXCHANGE_ACCOUNT_FOLDER_OFFLINE; 
 
        if (folder == hier->toplevel)
                return EXCHANGE_ACCOUNT_FOLDER_PERMISSION_DENIED;
@@ -370,11 +374,11 @@ xfer_folder (ExchangeHierarchy *hier, EF
        ESourceList *cal_source_list, *task_source_list, *cont_source_list;
        const char *folder_type = NULL;
        ExchangeAccountFolderResult ret_code;
-       gboolean offline;
-
-       offline = exchange_account_is_offline (hier->account);
-       if (offline)
-               return EXCHANGE_ACCOUNT_FOLDER_OFFLINE;
+       int offline;
+       
+       exchange_account_is_offline (hier->account, &offline);
+        if (offline != ONLINE_MODE)
+                return EXCHANGE_ACCOUNT_FOLDER_OFFLINE;
 
        if (source == hier->toplevel)
                return EXCHANGE_ACCOUNT_FOLDER_GENERIC_ERROR;
@@ -396,7 +400,7 @@ xfer_folder (ExchangeHierarchy *hier, EF
                if (remove_source)
                        exchange_hierarchy_removed_folder (hier, source);
                exchange_hierarchy_new_folder (hier, dest);
-               scan_subtree (hier, dest, offline);
+               scan_subtree (hier, dest, (offline == OFFLINE_MODE));
                physical_uri = (char *) e_folder_get_physical_uri (source);
                g_object_unref (dest);
                ret_code = EXCHANGE_ACCOUNT_FOLDER_OK;
@@ -482,11 +486,12 @@ rescan (ExchangeHierarchy *hier)
        E2kResultIter *iter;
        E2kResult *result;
        EFolder *folder;
-       int unread;
+       int unread, offline;
 
-       if ( exchange_account_is_offline (hier->account) ||
-           hier->type == EXCHANGE_HIERARCHY_PUBLIC)
-               return;
+       exchange_account_is_offline (hier->account, &offline);
+        if ( (offline != ONLINE_MODE) ||
+            hier->type == EXCHANGE_HIERARCHY_PUBLIC)
+                return;
 
        hrefs = g_ptr_array_new ();
        g_hash_table_foreach (hwd->priv->folders_by_internal_path,
@@ -606,7 +611,7 @@ exchange_hierarchy_webdav_parse_folder (
                e_folder_exchange_set_has_subfolders (folder, TRUE);
        if (permanenturl) {
                e_folder_exchange_set_permanent_uri (folder, permanenturl);
-               exchange_folder_size_update (hwd->priv->foldersize, 
permanenturl, name, folder_size);
+               //exchange_folder_size_update (hwd->priv->foldersize, 
permanenturl, name, folder_size);
        }
 
        return folder;
Index: storage/exchange-offline-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-offline-listener.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 exchange-offline-listener.c
--- storage/exchange-offline-listener.c 20 Jan 2005 09:23:58 -0000      1.5
+++ storage/exchange-offline-listener.c 23 Feb 2005 07:00:54 -0000
@@ -30,11 +30,6 @@
 #include <libedata-cal/e-data-cal-factory.h>
 #include <gconf/gconf-client.h>
 
-enum {
-        OFFLINE_MODE=1,
-        ONLINE_MODE
-};
-
 static GObjectClass *parent_class = NULL;
 
 struct _ExchangeOfflineListenerPrivate 
@@ -120,16 +115,19 @@ exchange_offline_listener_new (EDataBook
 }
 
 /* This returns TRUE if exchange is set offline */
-gboolean
-exchange_is_offline (ExchangeOfflineListener *ex_offline_listener)
+void
+exchange_is_offline (ExchangeOfflineListener *ex_offline_listener, int *state)
 {
        ExchangeOfflineListenerPrivate * priv;
 
-       g_return_val_if_fail (EXCHANGE_IS_OFFLINE_LISTENER 
(ex_offline_listener), FALSE);
+       g_return_if_fail (EXCHANGE_IS_OFFLINE_LISTENER (ex_offline_listener));
 
        priv = ex_offline_listener->priv;
        
-       return priv->offline;
+       if (priv->offline)
+               *state = OFFLINE_MODE;
+       else
+               *state = ONLINE_MODE;
 }
 
 static void
Index: storage/exchange-offline-listener.h
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-offline-listener.h,v
retrieving revision 1.2
diff -u -p -u -r1.2 exchange-offline-listener.h
--- storage/exchange-offline-listener.h 9 Dec 2004 10:55:45 -0000       1.2
+++ storage/exchange-offline-listener.h 23 Feb 2005 07:00:54 -0000
@@ -40,6 +40,11 @@ G_BEGIN_DECLS
 #define EXCHANGE_IS_OFFLINE_LISTENER(obj)              
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXCHANGE_OFFLINE_TYPE_LISTENER))
 #define EXCHANGE_IS_OFFLINE_LISTENER_CLASS(klass)      
(G_TYPE_CHECK_CLASS_TYPE ((obj), EXCHANGE_OFFLINE_TYPE_LISTENER)
 
+enum {
+       UNSUPPORTED_MODE = 0,
+        OFFLINE_MODE,
+        ONLINE_MODE
+};
 
 typedef struct _ExchangeOfflineListener        ExchangeOfflineListener;
 typedef struct _ExchangeOfflineListenerPrivate  ExchangeOfflineListenerPrivate;
@@ -59,7 +64,7 @@ GType exchange_offline_listener_get_type
 
 ExchangeOfflineListener  *exchange_offline_listener_new (EDataBookFactory 
*book_factory, EDataCalFactory *cal_factory);
 
-gboolean exchange_is_offline (ExchangeOfflineListener *offline_listener);
+void exchange_is_offline (ExchangeOfflineListener *offline_listener, int 
*state);
 
 G_END_DECLS
 

--- End Message ---
_______________________________________________
gnome-i18n mailing list
gnome-i18n@gnome.org
http://mail.gnome.org/mailman/listinfo/gnome-i18n

Reply via email to