aboutsummaryrefslogtreecommitdiff
path: root/mail/mutt/files/patch-date-conditional
blob: 8bbad9b84ef1d65e67d616247b8a85a3222c9b2b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
--- PATCHES.orig	2020-05-05 02:09:34 UTC
+++ PATCHES
@@ -0,0 +1 @@
+patch-1.5.0.ats.date_conditional.1
--- hdrline.c.orig	2020-05-05 02:09:33 UTC
+++ hdrline.c
@@ -428,6 +428,53 @@ 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;
+	  T = time(NULL);
+	  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 '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;
 
--- muttlib.c.orig	2020-05-02 21:08:56 UTC
+++ muttlib.c
@@ -1667,7 +1667,16 @@ void mutt_FormatString (char *dest,		/* output buffer 
       if (*src == '?')
       {
 	flags |= MUTT_FORMAT_OPTIONAL;
-	src++;
+	ch = *(++src); /* save the character to switch on */
+	cp = prefix;
+	++src;
+	count = 0;
+	while (count < sizeof (prefix) && *src != '?')
+	{
+	  *cp++ = *src++;
+	  count++;
+	}
+	*cp = 0;
       }
       else
       {
@@ -1683,12 +1692,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 & MUTT_FORMAT_OPTIONAL)
       {