]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/features/maildir-mtime
a07635d4539092dbdaced1b5ad5110a043ddbfb8
[software/mutt-debian.git] / debian / patches / features / maildir-mtime
1 # vi: ft=diff
2 This is the maildir mtime patch by Dale Woolridge.
3
4 The home page for this patch is:
5
6   http://www.mutt.ca/maildir-mtime.html
7
8 * Patch last synced with upstream:
9   - Date: 2004-08-10
10   - File: http://www.mutt.ca/patches/patch-1.5.6.dw.maildir-mtime.1
11
12 * Changes made:
13   - removed a spurious const in add_folder() definition.
14   - added a $maildir_mtime option to allow this patch to be disabled at
15     runtime (see Bug#253261, comments from Zephaniah E. Hull).
16   - 2007-04-03 myon: resolved conflict in browser.c
17
18 == END PATCH
19 Index: debian-mutt/buffy.c
20 ===================================================================
21 --- debian-mutt.orig/buffy.c    2007-04-03 19:17:22.000000000 +0200
22 +++ debian-mutt/buffy.c 2007-04-03 19:20:31.000000000 +0200
23 @@ -226,6 +226,7 @@ int mutt_parse_mailboxes (BUFFER *path, 
24      (*tmp)->new = 0;
25      (*tmp)->notified = 1;
26      (*tmp)->newly_created = 0;
27 +    (*tmp)->mtime = 0;
28  
29      /* for check_mbox_size, it is important that if the folder is new (tested by
30       * reading it), the size is set to 0 so that later when we check we see
31 @@ -254,6 +255,7 @@ int mutt_buffy_check (int force)
32  {
33    BUFFY *tmp;
34    struct stat sb;
35 +  struct stat smd;
36    struct dirent *de;
37    DIR *dirp;
38    char path[_POSIX_PATH_MAX];
39 @@ -298,6 +300,7 @@ int mutt_buffy_check (int force)
40      if (tmp->magic != M_IMAP)
41  #endif
42      tmp->new = 0;
43 +    tmp->mtime = 0;
44  
45  #ifdef USE_IMAP
46      if (tmp->magic != M_IMAP)
47 @@ -380,10 +383,20 @@ int mutt_buffy_check (int force)
48           if (*de->d_name != '.' && 
49               (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
50           {
51 -           /* one new and undeleted message is enough */
52 -           BuffyCount++;
53 -           tmp->new = 1;
54 -           break;
55 +           if (!tmp->new)
56 +           {
57 +             /* one new and undeleted message is enough */
58 +             BuffyCount++;
59 +             tmp->new = 1;
60 +
61 +             if (! option (OPTMAILDIRMTIME)) /* prevent stat calls */
62 +               break;
63 +           }
64 +           snprintf (path, sizeof (path), "%s/new/%s", tmp->path, de->d_name);
65 +           if (!stat (path, &smd) && smd.st_mtime > tmp->mtime)
66 +           {
67 +             tmp->mtime = smd.st_mtime;
68 +           }
69           }
70         }
71         closedir (dirp);
72 Index: debian-mutt/init.h
73 ===================================================================
74 --- debian-mutt.orig/init.h     2007-04-03 19:20:27.000000000 +0200
75 +++ debian-mutt/init.h  2007-04-03 19:20:31.000000000 +0200
76 @@ -1086,6 +1086,16 @@ struct option_t MuttVars[] = {
77    ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
78    ** DOING!\fP
79    */
80 +  { "maildir_mtime", DT_BOOL, R_NONE, OPTMAILDIRMTIME, 0 },
81 +  /*
82 +  ** .pp
83 +  ** If set, the sort-by-date option in the browser will sort maildirs
84 +  ** smartly, not using the mtime of the maildir itself but that of the
85 +  ** newest message in the new subdirectory, making the sorting by
86 +  ** reverse date much more useful. People with maildirs over NFS may
87 +  ** wish to leave this option unset.
88 +  **
89 +  */
90  #ifdef USE_HCACHE
91    { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 },
92    /*
93 Index: debian-mutt/mutt.h
94 ===================================================================
95 --- debian-mutt.orig/mutt.h     2007-04-03 19:20:27.000000000 +0200
96 +++ debian-mutt/mutt.h  2007-04-03 19:20:31.000000000 +0200
97 @@ -400,6 +400,7 @@ enum
98    OPTINCLUDEONLYFIRST,
99    OPTKEEPFLAGGED,
100    OPTMAILCAPSANITIZE,
101 +  OPTMAILDIRMTIME,
102    OPTMAILDIRTRASH,
103    OPTMARKERS,
104    OPTMARKOLD,
105 Index: debian-mutt/PATCHES
106 ===================================================================
107 --- debian-mutt.orig/PATCHES    2007-04-03 19:20:27.000000000 +0200
108 +++ debian-mutt/PATCHES 2007-04-03 19:20:31.000000000 +0200
109 @@ -1,2 +1,3 @@
110 +patch-1.5.6.dw.maildir-mtime.1
111  patch-1.5.13.cd.ifdef.2
112  patch-1.5.14.rr.compressed.1
113 Index: debian-mutt/browser.c
114 ===================================================================
115 --- debian-mutt.orig/browser.c  2007-04-03 19:20:17.000000000 +0200
116 +++ debian-mutt/browser.c       2007-04-03 19:24:32.000000000 +0200
117 @@ -32,6 +32,7 @@
118  #ifdef USE_IMAP
119  #include "imap.h"
120  #endif
121 +#include "mx.h"
122  
123  #include <stdlib.h>
124  #include <dirent.h>
125 @@ -307,8 +308,10 @@ folder_format_str (char *dest, size_t de
126  }
127  
128  static void add_folder (MUTTMENU *m, struct browser_state *state,
129 -                       const char *name, const struct stat *s, int new)
130 +                       const char *name, /*DEB const IAN*/ struct stat *s, BUFFY *mbuf)
131  {
132 +  int new = (mbuf) ? mbuf->new : 0;
133 +
134    if (state->entrylen == state->entrymax)
135    {
136      /* need to allocate more space */
137 @@ -320,6 +323,9 @@ static void add_folder (MUTTMENU *m, str
138        m->data = state->entry;
139    }
140  
141 +  if (mbuf && mbuf->magic == M_MAILDIR && mbuf->mtime)
142 +    s->st_mtime = mbuf->mtime;
143 +
144    if (s != NULL)
145    {
146      (state->entry)[state->entrylen].mode = s->st_mode;
147 @@ -414,7 +420,7 @@ static int examine_directory (MUTTMENU *
148      tmp = Incoming;
149      while (tmp && mutt_strcmp (buffer, tmp->path))
150        tmp = tmp->next;
151 -    add_folder (menu, state, de->d_name, &s, (tmp) ? tmp->new : 0);
152 +    add_folder (menu, state, de->d_name, &s, tmp);
153    }
154    closedir (dp);  
155    browser_sort (state);
156 @@ -442,14 +448,14 @@ static int examine_mailboxes (MUTTMENU *
157      if (mx_is_imap (tmp->path))
158      {
159        imap_mailbox_state (tmp->path, &mbox);
160 -      add_folder (menu, state, tmp->path, NULL, mbox.new);
161 +      add_folder (menu, state, tmp->path, NULL, &mbox);
162        continue;
163      }
164  #endif
165  #ifdef USE_POP
166      if (mx_is_pop (tmp->path))
167      {
168 -      add_folder (menu, state, tmp->path, NULL, tmp->new);
169 +      add_folder (menu, state, tmp->path, NULL, tmp);
170        continue;
171      }
172  #endif
173 @@ -463,7 +469,7 @@ static int examine_mailboxes (MUTTMENU *
174      strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
175      mutt_pretty_mailbox (buffer);
176  
177 -    add_folder (menu, state, buffer, &s, tmp->new);
178 +    add_folder (menu, state, buffer, &s, tmp);
179    }
180    while ((tmp = tmp->next));
181    browser_sort (state);
182 Index: debian-mutt/buffy.h
183 ===================================================================
184 --- debian-mutt.orig/buffy.h    2007-04-03 19:17:22.000000000 +0200
185 +++ debian-mutt/buffy.h 2007-04-03 19:20:31.000000000 +0200
186 @@ -25,6 +25,7 @@ typedef struct buffy_t
187    char *path;
188    long size;
189    struct buffy_t *next;
190 +  time_t mtime;                        /* for maildirs...time of newest entry */
191    short new;                   /* mailbox has new mail */
192    short notified;              /* user has been notified */
193    short magic;                 /* mailbox type */