]> granicus.if.org Git - neomutt/commitdiff
feature: conditional dates
authorAaron Schrab <aaron@schrab.com>
Mon, 1 Feb 2016 01:04:48 +0000 (01:04 +0000)
committerRichard Russon <rich@flatcap.org>
Mon, 4 Apr 2016 02:33:06 +0000 (03:33 +0100)
Use rules to choose date format

hdrline.c
muttlib.c

index b844411e5f5e29cac4311c9dc85c2e1e66457c5b..c1ef190e458540c1a28df71f583b9a7254e88b2e 100644 (file)
--- a/hdrline.c
+++ b/hdrline.c
@@ -327,6 +327,64 @@ hdr_format_str (char *dest,
        const char *cp;
        struct tm *tm; 
        time_t T;
+       int i = 0, invert = 0;
+
+       if (optional && (op == '[' || op == '(')) {
+         char *is;
+          int d;
+         T = time(NULL);
+         tm = localtime(&T);
+         d = (T + tm->tm_gmtoff) % 86400;
+         T -= (op == '(') ? hdr->received : hdr->date_sent;
+
+         is = (char *)prefix;
+         if( *is == '>' ) {
+           invert = 1;
+           ++is;
+         }
+
+         while( *is && *is != '?' ) {
+           int t = strtol (is, &is, 10);
+           switch (*(is++)) {
+             case '?':
+               break;
+             case 'y':
+               t *= 365 * 24 * 60 * 60;
+               break;
+             case 'M':
+               t *= 30 * 24 * 60 * 60;
+               break;
+             case 'w':
+               t *= 7 * 24 * 60 * 60;
+               break;
+             case 'd':
+               t *= 24 * 60 * 60;
+               break;
+             case 't':
+               if (t > 1) {
+                 t = (t-1) * 24 * 60 * 60;
+               } else {
+                 t = 0;
+               }
+               t += d;
+               break;
+             case 'h':
+               t *= 60 * 60;
+               break;
+             case 'm':
+               t *= 60;
+               break;
+           }
+           i += t;
+         }
+
+         if (i < 0)
+           i *= -1;
+
+         if( (T > i || T < -1*i) ^ invert )
+           optional = 0;
+         break;
+       }
 
        p = dest;
 
index a57dbf4a790028ee8b9b5103560c3cb7eca127e5..3b4579936ef8630d85684cc28c4d87c24e68bccb 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -1214,7 +1214,16 @@ void mutt_FormatString (char *dest,              /* output buffer */
       if (*src == '?')
       {
        flags |= M_FORMAT_OPTIONAL;
+       ch = *(++src); /* save the character to switch on */
        src++;
+       cp = prefix;
+       count = 0;
+       while (count < sizeof (prefix) && *src != '?')
+       {
+         *cp++ = *src++;
+         count++;
+       }
+       *cp = 0;
       }
       else
       {
@@ -1230,12 +1239,12 @@ void mutt_FormatString (char *dest,             /* output buffer */
          count++;
        }
        *cp = 0;
-      }
 
-      if (!*src)
-       break; /* bad format */
+       if (!*src)
+         break; /* bad format */
 
-      ch = *src++; /* save the character to switch on */
+       ch = *src++; /* save the character to switch on */
+      }
 
       if (flags & M_FORMAT_OPTIONAL)
       {