2006-08-24 [colin] 2.4.0cvs81
authorColin Leroy <colin@colino.net>
Thu, 24 Aug 2006 06:34:54 +0000 (06:34 +0000)
committerColin Leroy <colin@colino.net>
Thu, 24 Aug 2006 06:34:54 +0000 (06:34 +0000)
* src/folder.c
* src/mh.c
Fix possible problems with local delivery. Check the folder doesn't
need scan before setting its mtime when saving cache (which can be
done long after the folder's been modified by an external process);
Check that the stored item's mtime didn't change in mh functions.

ChangeLog
PATCHSETS
configure.ac
src/folder.c
src/mh.c

index 9638f9f0d976d211ab849f6981d48d3da52cdf2a..abe36e97db98e19c21a79a8b62203b2f3303173e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-08-24 [colin]     2.4.0cvs81
+
+       * src/folder.c
+       * src/mh.c
+               Fix possible problems with local delivery. Check the folder doesn't
+               need scan before setting its mtime when saving cache (which can be
+               done long after the folder's been modified by an external process);
+               Check that the stored item's mtime didn't change in mh functions.
+
 2006-08-24 [mones]     2.4.0cvs80
 
        * manual/advanced.xml
index 43ceb8c680fe6fcdd93694365ff128962417773d..6d5bb450098cad96f56e77744aca4631669f2e8d 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.94.2.97 -r 1.94.2.98 src/messageview.c;  cvs diff -u -r 1.83.2.81 -r 1.83.2.82 src/mimeview.c;  cvs diff -u -r 1.20.2.13 -r 1.20.2.14 src/mimeview.h;  cvs diff -u -r 1.12.2.12 -r 1.12.2.13 src/plugins/dillo_viewer/dillo_viewer.c;  ) > 2.4.0cvs78.patchset
 ( cvs diff -u -r 1.1.4.22 -r 1.1.4.23 src/gtk/gtksctree.c;  ) > 2.4.0cvs79.patchset
 ( cvs diff -u -r 1.1.2.22 -r 1.1.2.23 manual/advanced.xml;  ) > 2.4.0cvs80.patchset
+( cvs diff -u -r 1.213.2.107 -r 1.213.2.108 src/folder.c;  cvs diff -u -r 1.79.2.37 -r 1.79.2.38 src/mh.c;  ) > 2.4.0cvs81.patchset
index 47a4ceb4b37137f7cb3673123ea13bf2677ac582..f8f9cb853d395d5a5a2d5bc7d42dd7a234107aad 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=4
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=80
+EXTRA_VERSION=81
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 8793a75392feb648f141dbfa4ad0ed7156d61c87..dae3b4cbce4e9507b81d0941bc119d4f32fc2882 100644 (file)
@@ -2256,10 +2256,17 @@ void folder_item_write_cache(FolderItem *item)
        FolderItemPrefs *prefs;
        gint filemode = 0;
        gchar *id;
+       time_t last_mtime = (time_t)0;
+       gboolean need_scan = FALSE;
        
        if (!item || !item->path || !item->cache)
                return;
 
+       if (FOLDER_TYPE(item->folder) == F_MH) {
+               last_mtime = item->mtime;
+               need_scan = item->folder->klass->scan_required(item->folder, item);
+       }
+
        id = folder_item_get_identifier(item);
        debug_print("Save cache for folder %s\n", id);
        g_free(id);
@@ -2277,8 +2284,10 @@ void folder_item_write_cache(FolderItem *item)
                }
         }
 
-       if (FOLDER_TYPE(item->folder) == F_MH)
-               item->mtime = time(NULL);
+       if (!need_scan && FOLDER_TYPE(item->folder) == F_MH) {
+               if (item->mtime == last_mtime)
+                       item->mtime = time(NULL);
+       }
 
        g_free(cache_file);
        g_free(mark_file);
index e0b7edd61a0917a1f86e90d59af7878addc454b8..e00fb078a000fa435cff5e7e256ce30039f3d236 100644 (file)
--- a/src/mh.c
+++ b/src/mh.c
@@ -467,6 +467,7 @@ static gint mh_copy_msgs(Folder *folder, FolderItem *dest, MsgInfoList *msglist,
        gint curnum = 0, total = 0;
        gchar *srcpath = NULL;
        gboolean full_fetch = FALSE;
+       time_t last_mtime = (time_t)0;
 
        g_return_val_if_fail(dest != NULL, -1);
        g_return_val_if_fail(msglist != NULL, -1);
@@ -493,6 +494,7 @@ static gint mh_copy_msgs(Folder *folder, FolderItem *dest, MsgInfoList *msglist,
        srcpath = folder_item_get_path(msginfo->folder);
 
        dest_need_scan = mh_scan_required(dest->folder, dest);
+       last_mtime = dest->mtime;
 
        total = g_slist_length(msglist);
        if (total > 100) {
@@ -569,7 +571,7 @@ static gint mh_copy_msgs(Folder *folder, FolderItem *dest, MsgInfoList *msglist,
        g_free(srcpath);
        mh_write_sequences(dest, TRUE);
 
-       if (!dest_need_scan)
+       if (dest->mtime == last_mtime && !dest_need_scan)
                dest->mtime = time(NULL);
        
        if (total > 100) {
@@ -591,6 +593,7 @@ err_reset_status:
 static gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
 {
        gboolean need_scan = FALSE;
+       time_t last_mtime = (time_t)0;
        gchar *file;
 
        g_return_val_if_fail(item != NULL, -1);
@@ -599,6 +602,7 @@ static gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
        g_return_val_if_fail(file != NULL, -1);
 
        need_scan = mh_scan_required(folder, item);
+       last_mtime = item->mtime;
 
        if (g_unlink(file) < 0) {
                FILE_OP_ERROR(file, "unlink");
@@ -606,7 +610,7 @@ static gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
                return -1;
        }
 
-       if (!need_scan)
+       if (item->mtime == last_mtime && !need_scan)
                item->mtime = time(NULL);
 
        g_free(file);
@@ -618,6 +622,7 @@ static gint mh_remove_msgs(Folder *folder, FolderItem *item,
 {
        gboolean need_scan = FALSE;
        gchar *path, *file;
+       time_t last_mtime = (time_t)0;
        MsgInfoList *cur;
 
        g_return_val_if_fail(item != NULL, -1);
@@ -625,6 +630,7 @@ static gint mh_remove_msgs(Folder *folder, FolderItem *item,
        path = folder_item_get_path(item);
        
        need_scan = mh_scan_required(folder, item);
+       last_mtime = item->mtime;
 
        for (cur = msglist; cur; cur = cur->next) {
                MsgInfo *msginfo = (MsgInfo *)cur->data;
@@ -642,7 +648,7 @@ static gint mh_remove_msgs(Folder *folder, FolderItem *item,
                g_free(file);
        }
 
-       if (!need_scan)
+       if (item->mtime == last_mtime && !need_scan)
                item->mtime = time(NULL);
 
        g_free(path);