aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers
diff options
context:
space:
mode:
authorMichael Zucci <zucchi@src.gnome.org>2001-09-21 11:05:03 +0800
committerMichael Zucci <zucchi@src.gnome.org>2001-09-21 11:05:03 +0800
commit7d17dc2230c4a3b650849ad6e2dcdc5ebf6cb47e (patch)
tree233272ab1dd5d9923f4d2e57d9a0e594fe10efff /camel/providers
parentf21fc37e3c2025f2a6b4ed3a24123d2a7fd5eed4 (diff)
downloadgsoc2013-evolution-7d17dc2230c4a3b650849ad6e2dcdc5ebf6cb47e.tar.gz
gsoc2013-evolution-7d17dc2230c4a3b650849ad6e2dcdc5ebf6cb47e.tar.zst
gsoc2013-evolution-7d17dc2230c4a3b650849ad6e2dcdc5ebf6cb47e.zip
New function to just load the summary. Not much use yet, until unread
* camel-folder-summary.c (camel_folder_summary_header_load): New function to just load the summary. Not much use yet, until unread counts are stored in the summary (which now looks like too much work!). * camel-mime-utils.c (header_decode_mailbox): Crappy fix for stupid mailers. If we get 'name b. name <foo>' then treat it as '"name b. name" <foo>'. See 8147. (header_decode_mailbox): Another fix for really broken mailers that have things that look like addresses followed by <address> bits. (rfc2047_encode_word): Escape ??= to avoid some bizarre warning about trigraphs. (scan_dir): If we dont have the folder open, then scan the 'new' and 'cur' folders for new and unread messages to count instead. svn path=/trunk/; revision=13040
Diffstat (limited to 'camel/providers')
-rw-r--r--camel/providers/local/camel-maildir-store.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c
index b0d4c072f8..d6392b5ac2 100644
--- a/camel/providers/local/camel-maildir-store.c
+++ b/camel/providers/local/camel-maildir-store.c
@@ -279,6 +279,33 @@ static int scan_dir(CamelStore *store, GHashTable *visited, char *root, const ch
else
unread = 0;
CAMEL_STORE_UNLOCK(store, cache_lock);
+
+ /* if we dont have a folder, then scan the directory and get the unread
+ count from there, which is reasonably cheap (on decent filesystem) */
+ /* Well we could get this from the summary, but this is more accurate */
+ if (folder == NULL) {
+ unread = 0;
+ dir = opendir(new);
+ if (dir) {
+ /* we assume that all files here are unread ones */
+ while ( (d = readdir(dir)) ) {
+ if (d->d_name[0] != '.')
+ unread++;
+ }
+ closedir(dir);
+ }
+ dir = opendir(cur);
+ if (dir) {
+ /* any files with flags but not the 'S' (seen) flag are unread */
+ while ( (d = readdir(dir)) ) {
+ char *p = strstr(d->d_name, ":2,");
+
+ if (p && strchr(p, 'S') == NULL)
+ unread++;
+ }
+ closedir(dir);
+ }
+ }
fi = camel_folder_info_new(uri, path, base, unread);
@@ -294,6 +321,8 @@ static int scan_dir(CamelStore *store, GHashTable *visited, char *root, const ch
g_free(cur);
g_free(new);
+ unread = 0;
+
/* always look further if asked */
if (((flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) || parent == NULL)) {
dir = opendir(name);