2005-12-29 [colin] 1.9.100cvs114
authorColin Leroy <colin@colino.net>
Thu, 29 Dec 2005 17:46:25 +0000 (17:46 +0000)
committerColin Leroy <colin@colino.net>
Thu, 29 Dec 2005 17:46:25 +0000 (17:46 +0000)
* src/imap.c
Fix occasional failure in fetching a mail over
IMAP

ChangeLog
PATCHSETS
configure.ac
src/imap.c

index cb843e92b2a6ea914c8c25df55e4af5ac5327e87..80a4468980527f1af9b94a4d1e41abd3a7216402 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-12-29 [colin]     1.9.100cvs114
+
+       * src/imap.c
+               Fix occasional failure in fetching a mail over
+               IMAP
+
 2005-12-29 [cleroy]    1.9.100cvs113
 
        * src/compose.c
index ca6049e3e842d6412b43b428eb8e04a07ec3af31..612adeee4d521655c51276d3edbd5d33b0c7d798 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/de/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/en/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/es/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/fr/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/faq/it/.cvsignore;  cvs diff -u -r -1.2.16.2 -r -1.2.16.3 doc/manual/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/manual/de/.cvsignore;  cvs diff -u -r -1.1.16.2 -r -1.1.16.3 doc/manual/en/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/manual/es/.cvsignore;  cvs diff -u -r -1.1.14.2 -r -1.1.14.3 doc/manual/fr/.cvsignore;  cvs diff -u -r -1.2.16.2 -r -1.2.16.3 doc/manual/ja/.cvsignore;  cvs diff -u -r -1.1.4.2 -r -1.1.4.3 src/plugins/mathml_viewer/.cvsignore;  ) > 1.9.100cvs111.patchset
 ( cvs diff -u -r 1.395.2.152 -r 1.395.2.153 src/summaryview.c;  ) > 1.9.100cvs112.patchset
 ( cvs diff -u -r 1.382.2.211 -r 1.382.2.212 src/compose.c;  ) > 1.9.100cvs113.patchset
+( cvs diff -u -r 1.179.2.85 -r 1.179.2.86 src/imap.c;  ) > 1.9.100cvs114.patchset
index a04ab1aaba0a3f910df6342fdcba296bc2ac30c0..a94b03e120666ce5feb109e71ad5c2fe61b1bd33 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=100
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=113
+EXTRA_VERSION=114
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 2fa20c8d470e3c6492a2f6906eaf3deef72f834e..e02a2fad77e61928ae9f9b6dfda2b769daa15831 100644 (file)
@@ -2321,45 +2321,6 @@ static gint imap_status(IMAPSession *session, IMAPFolder *folder,
        
        real_path = imap_get_real_path(folder, path);
 
-#if 0
-       if (time(NULL) - item->last_update >= 5 && item->last_update != 1) {
-               /* do the full stuff */
-               item->last_update = 1; /* force update */
-               debug_print("updating everything\n");
-               r = imap_status(session, folder, path, item,
-               &item->c_messages, &item->c_uid_next,
-               &item->c_uid_validity, &item->c_unseen, block);
-               if (r != MAILIMAP_NO_ERROR) {
-                       debug_print("status err %d\n", r);
-                       return IMAP_ERROR;
-               }
-               item->last_update = time(NULL);
-               if (messages) 
-                       *messages = item->c_messages;
-               if (uid_next)
-                       *uid_next = item->c_uid_next;
-               if (uid_validity)
-                       *uid_validity = item->c_uid_validity;
-               if (unseen)
-                       *unseen = item->c_unseen;
-               return 0;
-       } else if (time(NULL) - item->last_update < 5) {
-               /* return cached stuff */
-               debug_print("using cache\n");
-               if (messages) 
-                       *messages = item->c_messages;
-               if (uid_next)
-                       *uid_next = item->c_uid_next;
-               if (uid_validity)
-                       *uid_validity = item->c_uid_validity;
-               if (unseen)
-                       *unseen = item->c_unseen;
-               return 0;
-       }
-#endif
-
-       /* if we get there, we're updating cache */
-
        if (messages) {
                mask |= 1 << 0;
        }
@@ -3108,7 +3069,7 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list,
 
        selected_folder = (session->mbox != NULL) &&
                          (!strcmp(session->mbox, item->item.path));
-       if (selected_folder) {
+       if (selected_folder && time(NULL) - item->use_cache < 2) {
                ok = imap_cmd_noop(session);
                if (ok != IMAP_SUCCESS) {
                        debug_print("disconnected!\n");
@@ -3155,9 +3116,6 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list,
                }
        }
 
-       if (!selected_folder)
-               item->uid_next = uid_next;
-
        /* If old uid_next matches new uid_next we can be sure no message
           was added to the folder */
        if (( selected_folder && !session->folder_content_changed) ||
@@ -3170,6 +3128,7 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list,
                   we discard our cache to start a new scan to find
                   out which numbers have been removed */
                if (exists == nummsgs) {
+                       debug_print("exists == nummsgs\n");
                        *msgnum_list = g_slist_copy(item->uid_list);
                        statusbar_pop_all();
                        unlock_session();
@@ -3219,6 +3178,8 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list,
        remove_numbered_files_not_in_list(dir, *msgnum_list);
        g_free(dir);
        
+       item->uid_next = uid_next;
+       
        debug_print("get_num_list - ok - %i\n", nummsgs);
        statusbar_pop_all();
        unlock_session();
@@ -3362,7 +3323,7 @@ gboolean imap_scan_required(Folder *folder, FolderItem *_item)
        lock_session();
        selected_folder = (session->mbox != NULL) &&
                          (!strcmp(session->mbox, item->item.path));
-       if (selected_folder) {
+       if (selected_folder && time(NULL) - item->use_cache < 2) {
                ok = imap_cmd_noop(session);
                if (ok != IMAP_SUCCESS) {
                        debug_print("disconnected!\n");
@@ -3390,7 +3351,8 @@ gboolean imap_scan_required(Folder *folder, FolderItem *_item)
                item->c_uid_next = uid_next;
                item->c_uid_validity = uid_val;
                item->c_unseen = unseen;
-
+               debug_print("uidnext %d, item->uid_next %d, exists %d, item->item.total_msgs %d\n", 
+                       uid_next, item->uid_next, exists, item->item.total_msgs);
                if ((uid_next != item->uid_next) || (exists != item->item.total_msgs)) {
                        unlock_session();
                        return TRUE;