2005-02-16 [colin] 1.0.1cvs11.1
authorColin Leroy <colin@colino.net>
Wed, 16 Feb 2005 07:35:34 +0000 (07:35 +0000)
committerColin Leroy <colin@colino.net>
Wed, 16 Feb 2005 07:35:34 +0000 (07:35 +0000)
* src/mh.c
Sync with HEAD (MH scan required function)

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/mh.c

index 2f9be2d..33a74b1 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-16 [colin]     1.0.1cvs11.1
+
+       * src/mh.c
+               Sync with HEAD (MH scan required function)
+
 2005-02-15 [colin]     1.0.1cvs8.1
 
        * src/mimeview.c
index d1496bd..c12d47b 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.83.2.29 -r 1.83.2.30 src/mimeview.c; ) > 1.0.1cvs7.2.patchset
 ( cvs diff -u -r 1.5.2.11 -r 1.5.2.12 src/gtk/pluginwindow.c; ) > 1.0.1cvs7.3.patchset
 ( cvs diff -u -r 1.83.2.30 -r 1.83.2.31 src/mimeview.c; cvs diff -u -r 1.36.2.23 -r 1.36.2.25 src/common/utils.c; ) > 1.0.1cvs8.1.patchset
+( cvs diff -u -r 1.79.2.8 -r 1.79.2.9 src/mh.c; ) > 1.0.1cvs11.1.patchset
index 2a05549..4523749 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=8
+EXTRA_VERSION=11
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=.1
 
index 1918c98..eb69f4c 100644 (file)
--- a/src/mh.c
+++ b/src/mh.c
@@ -107,6 +107,9 @@ static gboolean mh_rename_folder_func               (GNode          *node,
 static gchar   *mh_item_get_path               (Folder *folder, 
                                                 FolderItem *item);
 
+static gboolean mh_scan_required       (Folder         *folder,
+                                        FolderItem     *item);
+
 static FolderClass mh_class;
 
 FolderClass *mh_get_class(void)
@@ -130,6 +133,7 @@ FolderClass *mh_get_class(void)
                mh_class.rename_folder = mh_rename_folder;
                mh_class.remove_folder = mh_remove_folder;
                mh_class.get_num_list = mh_get_num_list;
+               mh_class.scan_required = mh_scan_required;
                
                /* Message functions */
                mh_class.get_msginfo = mh_get_msginfo;
@@ -167,6 +171,37 @@ static void mh_folder_init(Folder *folder, const gchar *name, const gchar *path)
 
 }
 
+gboolean mh_scan_required(Folder *folder, FolderItem *item)
+{
+       gchar *path;
+       struct stat s;
+
+       path = folder_item_get_path(item);
+       g_return_val_if_fail(path != NULL, FALSE);
+
+       if (stat(path, &s) < 0) {
+               FILE_OP_ERROR(path, "stat");
+               g_free(path);
+               return FALSE;
+       }
+
+       if (s.st_mtime > item->mtime) {
+               debug_print("MH scan required, folder updated: %s (%ld > %ld)\n",
+                           path,
+                           s.st_mtime,
+                           item->mtime);
+               g_free(path);
+               return TRUE;
+       }
+
+       debug_print("MH scan not required: %s (%ld <= %ld)\n",
+                   path,
+                   s.st_mtime,
+                   item->mtime);
+       g_free(path);
+       return FALSE;
+}
+
 void mh_get_last_num(Folder *folder, FolderItem *item)
 {
        gchar *path;
@@ -215,7 +250,7 @@ gint mh_get_num_list(Folder *folder, FolderItem *item, GSList **list, gboolean *
 
        g_return_val_if_fail(item != NULL, -1);
 
-       debug_print("mh_get_last_num(): Scanning %s ...\n", item->path);
+       debug_print("mh_get_num_list(): Scanning %s ...\n", item->path);
 
        *old_uids_valid = TRUE;
 
@@ -240,6 +275,7 @@ gint mh_get_num_list(Folder *folder, FolderItem *item, GSList **list, gboolean *
        }
        closedir(dp);
 
+       item->mtime = time(NULL);
        return nummsgs;
 }
 
@@ -366,6 +402,7 @@ static gint mh_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list,
 
 static gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
 {
+       gboolean dest_need_scan = FALSE;
        gchar *srcfile;
        gchar *destfile;
        gint filemode = 0;
@@ -412,6 +449,10 @@ static gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
                return -1;
        }
 
+       dest_need_scan = mh_scan_required(dest->folder, dest);
+       if (!dest_need_scan)
+               dest->mtime = time(NULL);
+
 
        if (prefs && prefs->enable_folder_chmod && prefs->folder_chmod) {
                if (chmod(destfile, prefs->folder_chmod) < 0)
@@ -432,6 +473,7 @@ static gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
 
 static gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
 {
+       gboolean need_scan = FALSE;
        gchar *file;
 
        g_return_val_if_fail(item != NULL, -1);
@@ -439,12 +481,17 @@ static gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
        file = mh_fetch_msg(folder, item, num);
        g_return_val_if_fail(file != NULL, -1);
 
+       need_scan = mh_scan_required(folder, item);
+
        if (unlink(file) < 0) {
                FILE_OP_ERROR(file, "unlink");
                g_free(file);
                return -1;
        }
 
+       if (!need_scan)
+               item->mtime = time(NULL);
+
        g_free(file);
        return 0;
 }
@@ -888,6 +935,8 @@ static void mh_scan_tree_recursive(FolderItem *item)
 
        closedir(dp);
 
+       item->mtime = time(NULL);
+
 /*
        if (item->path) {
                gint new, unread, total, min, max;