From 4d792a3852b85c3dc1c162d58b80f93902437c04 Mon Sep 17 00:00:00 2001 From: Christoph Hohmann Date: Sat, 5 Oct 2002 13:02:50 +0000 Subject: [PATCH] * src/imap.c * src/news.c * src/utils.c * src/utils.h implement cache cleanups for claws' folder system --- ChangeLog.claws | 8 ++++++++ configure.in | 2 +- src/imap.c | 6 ++++++ src/news.c | 6 ++++++ src/utils.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/utils.h | 2 ++ 6 files changed, 68 insertions(+), 1 deletion(-) diff --git a/ChangeLog.claws b/ChangeLog.claws index 48d94b769..41104688f 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,11 @@ +2002-10-05 [christoph] 0.8.3claws48 + + * src/imap.c + * src/news.c + * src/utils.c + * src/utils.h + implement cache cleanups for claws' folder system + 2002-10-05 [melvin] 0.8.3claws47 * src/prefs_actions.c diff --git a/configure.in b/configure.in index 2e878e6ff..0285b232b 100644 --- a/configure.in +++ b/configure.in @@ -10,7 +10,7 @@ MINOR_VERSION=8 MICRO_VERSION=3 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws47 +EXTRA_VERSION=claws48 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl set $target diff --git a/src/imap.c b/src/imap.c index 7ae80f2dd..672e15ef9 100644 --- a/src/imap.c +++ b/src/imap.c @@ -3136,6 +3136,7 @@ GSList *imap_get_num_list(Folder *folder, FolderItem *_item) guint32 uid_validity = 0; GPtrArray *argbuf; gchar *cmdbuf = NULL; + gchar *dir; g_return_val_if_fail(folder != NULL, NULL); g_return_val_if_fail(item != NULL, NULL); @@ -3183,6 +3184,11 @@ GSList *imap_get_num_list(Folder *folder, FolderItem *_item) } } + dir = folder_item_get_path((FolderItem *)item); + debug_print("removing old messages from %s\n", dir); + remove_numbered_files_not_in_list(dir, msgnum_list); + g_free(dir); + return msgnum_list; } diff --git a/src/news.c b/src/news.c index 9876a67ee..d35e61c49 100644 --- a/src/news.c +++ b/src/news.c @@ -1049,6 +1049,7 @@ GSList *news_get_num_list(Folder *folder, FolderItem *item) NNTPSession *session; gint i, ok, num, first, last; GSList *msgnum_list = NULL; + gchar *dir; session = news_session_get(folder); g_return_val_if_fail(session != NULL, NULL); @@ -1072,6 +1073,11 @@ GSList *news_get_num_list(Folder *folder, FolderItem *item) msgnum_list = g_slist_prepend(msgnum_list, GINT_TO_POINTER(i)); } + dir = folder_item_get_path(item); + debug_print("removing old messages from %d to %d in %s\n", first, last, dir); + remove_numbered_files(dir, 1, first - 1); + g_free(dir); + return msgnum_list; } diff --git a/src/utils.c b/src/utils.c index bd6331d84..ff10b1d11 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1827,6 +1827,51 @@ gint remove_numbered_files(const gchar *dir, guint first, guint last) return 0; } +gint remove_numbered_files_not_in_list(const gchar *dir, GSList *numberlist) +{ + DIR *dp; + struct dirent *d; + gchar *prev_dir; + gint fileno; + + prev_dir = g_get_current_dir(); + + if (chdir(dir) < 0) { + FILE_OP_ERROR(dir, "chdir"); + g_free(prev_dir); + return -1; + } + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(dir, "opendir"); + g_free(prev_dir); + return -1; + } + + while ((d = readdir(dp)) != NULL) { + fileno = to_number(d->d_name); + if (fileno >= 0 && (g_slist_find(numberlist, GINT_TO_POINTER(fileno)) == NULL)) { + debug_print("removing unwanted file %d from %s\n", fileno, dir); + if (is_dir_exist(d->d_name)) + continue; + if (unlink(d->d_name) < 0) + FILE_OP_ERROR(d->d_name, "unlink"); + } + } + + closedir(dp); + + if (chdir(prev_dir) < 0) { + FILE_OP_ERROR(prev_dir, "chdir"); + g_free(prev_dir); + return -1; + } + + g_free(prev_dir); + + return 0; +} + gint remove_all_numbered_files(const gchar *dir) { return remove_numbered_files(dir, 0, UINT_MAX); diff --git a/src/utils.h b/src/utils.h index 85cd4ce6b..0383a780a 100644 --- a/src/utils.h +++ b/src/utils.h @@ -332,6 +332,8 @@ gint remove_all_files (const gchar *dir); gint remove_numbered_files (const gchar *dir, guint first, guint last); +gint remove_numbered_files_not_in_list(const gchar *dir, + GSList *numberlist); gint remove_all_numbered_files (const gchar *dir); gint remove_expired_files (const gchar *dir, guint hours); -- 2.25.1