Changeset 3721
- Timestamp:
- 07/16/08 15:39:39
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c (modified) (11 diffs)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r3720 r3721 1 2008-07-16 Jose Dapena Paz <jdapena@igalia.com> 2 3 * libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.[ch]: 4 Added fetching aol specific imap capability. 5 6 * libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.[ch]: 7 Now we use FETCH instead of SEARCH for getting the UID's 8 when the server is AOL. 9 Added an extra check in imap_get_uids. If server gives a list 10 including sequence numbers we didn't request, we ignore them. 11 This should fix the AOL problem fetching headers. 12 1 13 2008-07-16 Sergio Villar Senin <svillar@igalia.com> 2 14 trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c
r3715 r3721 182 182 static void stop_gmsgstore_from_idle (CamelImapFolder *imap_folder); 183 183 184 static const gchar *imap_search_request_string (CamelImapFolder *imap_folder); 185 184 186 #ifdef G_OS_WIN32 185 187 /* The strtok() in Microsoft's C library is MT-safe (but still uses … … 3190 3192 3191 3193 static guint32 3192 imap_get_uids (CamelFolder *folder, CamelImapStore *store, CamelException *ex, GPtrArray *needheaders, int size)3194 imap_get_uids (CamelFolder *folder, CamelImapStore *store, CamelException *ex, GPtrArray *needheaders, int greater_than, int size) 3193 3195 { 3194 3196 char *resp = NULL; … … 3216 3218 } else { 3217 3219 GData *data = parse_fetch_response ((CamelImapFolder *)folder, resp); 3220 int sequence = GPOINTER_TO_INT (g_datalist_get_data (&data, "SEQUENCE")); 3218 3221 char *uid = g_datalist_get_data (&data, "UID"); 3219 if ( uid) {3222 if (sequence > greater_than && uid) { 3220 3223 g_ptr_array_add (needheaders, g_strdup (uid)); 3221 3224 cnt++; … … 3242 3245 3243 3246 } 3247 3248 static const gchar * 3249 imap_search_request_string (CamelImapFolder *imap_folder) 3250 { 3251 CamelImapStore *store = CAMEL_IMAP_STORE (CAMEL_FOLDER (imap_folder)->parent_store); 3252 3253 if (store->capabilities & IMAP_CAPABILITY_XAOLNETMAIL) { 3254 return "UID FETCH %d:* (UID)"; 3255 } else { 3256 return "UID SEARCH %d:* ALL"; 3257 } 3258 } 3259 3244 3260 3245 3261 static void … … 3304 3320 3305 3321 if (!camel_imap_command_start (store, folder, ex, 3306 "UID SEARCH %d:%d ALL", seq + 1, MAX (1, MIN (seq + 1 + nextn, exists)))) 3322 imap_search_request_string ((CamelImapFolder *) folder), 3323 seq + 1, MAX (1, MIN (seq + 1 + nextn, exists)))) 3307 3324 { 3308 3325 if (camel_operation_cancel_check (NULL)) … … 3316 3333 more = FALSE; 3317 3334 needheaders = g_ptr_array_new (); 3318 cnt = imap_get_uids (folder, store, ex, needheaders, (exists - seq));3335 cnt = imap_get_uids (folder, store, ex, needheaders, seq, (exists - seq)); 3319 3336 3320 3337 if (cnt == 0 && camel_exception_get_id (ex) == CAMEL_EXCEPTION_USER_CANCEL) … … 3361 3378 } 3362 3379 3363 tcnt = cnt = imap_get_uids (folder, store, ex, needheaders, (exists - seq) - tcnt);3380 tcnt = cnt = imap_get_uids (folder, store, ex, needheaders, seq + tcnt, (exists - seq) - tcnt); 3364 3381 3365 3382 if (cnt == 0 && camel_exception_get_id (ex) == CAMEL_EXCEPTION_USER_CANCEL) … … 3389 3406 { 3390 3407 if (!camel_imap_command_start (store, folder, ex, 3391 "UID SEARCH %d:* ALL", seq + 1 + cnt))3408 imap_search_request_string ((CamelImapFolder *) folder), seq + 1 + cnt)) 3392 3409 { 3393 3410 if (camel_operation_cancel_check (NULL)) … … 3402 3419 camel_folder_summary_dispose_all (folder->summary); 3403 3420 3404 cnt = imap_get_uids (folder, store, ex, needheaders, (exists - seq) - cnt);3421 cnt = imap_get_uids (folder, store, ex, needheaders, seq + cnt, (exists - seq) - cnt); 3405 3422 3406 3423 if (cnt == 0 && camel_exception_get_id (ex) == CAMEL_EXCEPTION_USER_CANCEL) … … 3444 3461 camel_folder_summary_dispose_all (folder->summary); 3445 3462 3446 tcnt = cnt = imap_get_uids (folder, store, ex, needheaders, (exists - seq) - tcnt);3463 tcnt = cnt = imap_get_uids (folder, store, ex, needheaders, seq + tcnt, (exists - seq) - tcnt); 3447 3464 3448 3465 if (cnt == 0 && camel_exception_get_id (ex) == CAMEL_EXCEPTION_USER_CANCEL) … … 3556 3573 if (sequence > 0 && sequence <= exists && sequence != curlen) 3557 3574 { 3558 int r;3559 if (curlen > sequence)3560 {3561 for (r = curlen-1; r >= sequence -1; r--)3562 {3563 CamelMessageInfo *ri;3564 g_warning ("Problem with your local summary store (too much), correcting: curlen=%d, r=%d, seq=%d\n", curlen, r, sequence);3565 ri = g_ptr_array_index (folder->summary->messages, r);3566 if (ri) {3567 /* camel_folder_change_info_remove_uid (mchange, camel_message_info_uid (mi)); */3568 ((CamelMessageInfoBase*)ri)->flags |= CAMEL_MESSAGE_EXPUNGED;3569 ((CamelMessageInfoBase*)ri)->flags |= CAMEL_MESSAGE_FREED;3570 camel_folder_summary_remove (folder->summary, ri);3571 }3572 }3573 } else {3574 for (r=0; r < sequence - curlen - 1; r++)3575 {3576 CamelMessageInfo *ni = camel_message_info_clone (mi);3577 if (ni) {3578 g_warning ("Problem with your local summary store (too few), correcting: curlen=%d, r=%d, seq=%d\n", curlen, r, sequence);3579 camel_folder_summary_add (folder->summary, (CamelMessageInfo *)ni);3580 /* camel_folder_change_info_add_uid (mchanges, camel_message_info_uid (ni)); */3581 }3582 }3583 }3584 oosync = TRUE;3575 int r; 3576 if (curlen > sequence) 3577 { 3578 for (r = curlen-1; r >= sequence -1; r--) 3579 { 3580 CamelMessageInfo *ri; 3581 g_warning ("Problem with your local summary store (too much), correcting: curlen=%d, r=%d, seq=%d\n", curlen, r, sequence); 3582 ri = g_ptr_array_index (folder->summary->messages, r); 3583 if (ri) { 3584 /* camel_folder_change_info_remove_uid (mchange, camel_message_info_uid (mi)); */ 3585 ((CamelMessageInfoBase*)ri)->flags |= CAMEL_MESSAGE_EXPUNGED; 3586 ((CamelMessageInfoBase*)ri)->flags |= CAMEL_MESSAGE_FREED; 3587 camel_folder_summary_remove (folder->summary, ri); 3588 } 3589 } 3590 } else { 3591 for (r=0; r < sequence - curlen - 1; r++) 3592 { 3593 CamelMessageInfo *ni = camel_message_info_clone (mi); 3594 if (ni) { 3595 g_warning ("Problem with your local summary store (too few), correcting: curlen=%d, r=%d, seq=%d\n", curlen, r, sequence); 3596 camel_folder_summary_add (folder->summary, (CamelMessageInfo *)ni); 3597 /* camel_folder_change_info_add_uid (mchanges, camel_message_info_uid (ni)); */ 3598 } 3599 } 3600 } 3601 oosync = TRUE; 3585 3602 } 3586 3603 trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c
r3708 r3721 774 774 { "LIST-EXTENDED", IMAP_CAPABILITY_LISTEXT }, 775 775 { "COMPRESS=DEFLATE", IMAP_CAPABILITY_COMPRESS }, 776 { "XAOL-NETMAIL", IMAP_CAPABILITY_XAOLNETMAIL }, 776 777 { NULL, 0 } 777 778 }; trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.h
r3565 r3721 126 126 #define IMAP_CAPABILITY_LISTEXT (1 << 19) 127 127 #define IMAP_CAPABILITY_COMPRESS (1 << 20) 128 #define IMAP_CAPABILITY_XAOLNETMAIL (1 << 21) 128 129 129 130 #define IMAP_PARAM_OVERRIDE_NAMESPACE (1 << 0)
