From: Colin Leroy Date: Wed, 16 Feb 2005 07:35:34 +0000 (+0000) Subject: 2005-02-16 [colin] 1.0.1cvs11.1 X-Git-Tag: rel_1_9_6~37 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=e4b61177ecda4896a65a56b659a4b0baf6868d9b 2005-02-16 [colin] 1.0.1cvs11.1 * src/mh.c Sync with HEAD (MH scan required function) --- diff --git a/ChangeLog-gtk2.claws b/ChangeLog-gtk2.claws index 2f9be2d57..33a74b166 100644 --- a/ChangeLog-gtk2.claws +++ b/ChangeLog-gtk2.claws @@ -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 diff --git a/PATCHSETS b/PATCHSETS index d1496bd0d..c12d47bd6 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -382,3 +382,4 @@ ( 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 diff --git a/configure.ac b/configure.ac index 2a0554988..452374942 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/src/mh.c b/src/mh.c index 1918c9872..eb69f4cf0 100644 --- 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;