mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-29 10:18:30 +00:00
9f2ff2b76e
While here: * Remove MUTT_LITE parts * pet portlint - NNTP broken for 1.11.0 * Add patch-qresync-crash fixes a crash coming in 1.11.1 PR: 233680 Submitted by: Derek Schrock <dereks@lifeofadishwasher.com> (maintainer)
127 lines
3.8 KiB
Plaintext
127 lines
3.8 KiB
Plaintext
--- hdrline.c.orig 2018-11-29 23:19:39 UTC
|
|
+++ hdrline.c
|
|
@@ -249,6 +249,89 @@ static char *apply_subject_mods (ENVELOP
|
|
* %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label)
|
|
* %Z = status flags */
|
|
|
|
+static void
|
|
+format_smartdate( char *buf, size_t max, struct tm *tm, smartdate_type type )
|
|
+{
|
|
+ char *strftime_fmt = NULL;
|
|
+
|
|
+ switch( type ) {
|
|
+ case FUTURE: /* Date in the future */
|
|
+ strftime_fmt = "%d%h%y!";
|
|
+ break;
|
|
+ case SMARTTIME: /* Today */
|
|
+ strftime_fmt = "%I:%M %p";
|
|
+ break;
|
|
+ case YESTERDAY: /* Yesterday */
|
|
+ strncpy( buf, "Yesterday", max );
|
|
+ break;
|
|
+ case WEEKDAY: /* Within the last 7 days */
|
|
+ strftime_fmt = "%A";
|
|
+ break;
|
|
+ case STANDARD: /* Within the last six months */
|
|
+ strftime_fmt = "%h %d";
|
|
+ break;
|
|
+ case ANCIENT: /* Older than 6 months */
|
|
+ strftime_fmt = "%h %Y";
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if( strftime_fmt != NULL ) {
|
|
+ strftime( buf, max, strftime_fmt, tm );
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+smartdate( char *buf, size_t max, struct tm *tm )
|
|
+{
|
|
+ smartdate_type type = 0;
|
|
+
|
|
+ struct tm now;
|
|
+
|
|
+ time_t sse = mktime( tm ); /* Seconds since epoch */
|
|
+ time_t sse_now = time(NULL); /* Seconds since epoch until now */
|
|
+
|
|
+ int dse = 0; /* Days since epoch */
|
|
+ int dse_now = 0; /* Days since epoch until today */
|
|
+
|
|
+ /* Calculate the number of days since epoch */
|
|
+ dse = sse / (60*60*24);
|
|
+ dse_now = sse_now / (60*60*24);
|
|
+
|
|
+ /* Default display type */
|
|
+ type = STANDARD;
|
|
+
|
|
+ /* Check if the date is in the future */
|
|
+ if( dse > dse_now ) {
|
|
+ type = FUTURE;
|
|
+ }
|
|
+ else {
|
|
+ int diff = dse_now - dse;
|
|
+ if( diff == 0 ) type = SMARTTIME;
|
|
+ else if( diff == 1 ) type = YESTERDAY;
|
|
+ else if( diff < 7 ) type = WEEKDAY;
|
|
+ else if( diff > 215 ) type = ANCIENT; /* Surely older than six
|
|
+ months */
|
|
+ else if( diff > 180 ) {
|
|
+ /*
|
|
+ * Slightly heavy calculation to check if the date is more
|
|
+ * than six months in the past. This calculation uses
|
|
+ * calendar months and not the exact number of days. So,
|
|
+ * January 31, 2003 would be considered more than six months
|
|
+ * old whether today's date is August 1 or August 31, 2003
|
|
+ */
|
|
+ int monthdiff;
|
|
+ localtime_r( &sse_now, &now );
|
|
+ monthdiff = ( now.tm_mon - tm->tm_mon )
|
|
+ + ( ( now.tm_year - tm->tm_year ) * 12 );
|
|
+ if( monthdiff > 6 ) {
|
|
+ type = ANCIENT;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ format_smartdate( buf, max, tm, type );
|
|
+}
|
|
+
|
|
static const char *
|
|
hdr_format_str (char *dest,
|
|
size_t destlen,
|
|
@@ -422,7 +505,13 @@ hdr_format_str (char *dest,
|
|
|
|
if (!do_locales)
|
|
setlocale (LC_TIME, "C");
|
|
- strftime (buf2, sizeof (buf2), dest, tm);
|
|
+ /* Identify the non-strftime smartdate pattern (%@) */
|
|
+ if( strncmp( dest, "%@", 2 ) == 0 ) {
|
|
+ smartdate( buf2, sizeof( buf2 ), tm );
|
|
+ }
|
|
+ else {
|
|
+ strftime (buf2, sizeof (buf2), dest, tm);
|
|
+ }
|
|
if (!do_locales)
|
|
setlocale (LC_TIME, "");
|
|
|
|
--- mutt.h.orig 2018-11-29 23:17:47 UTC
|
|
+++ mutt.h
|
|
@@ -156,6 +156,16 @@ typedef enum
|
|
MUTT_FORMAT_NOFILTER = (1<<7) /* do not allow filtering on this pass */
|
|
} format_flag;
|
|
|
|
+/* flags for SmartDate */
|
|
+typedef enum {
|
|
+ FUTURE = 1,
|
|
+ SMARTTIME = 2,
|
|
+ YESTERDAY = 3,
|
|
+ WEEKDAY = 4,
|
|
+ STANDARD = 5,
|
|
+ ANCIENT = 6
|
|
+} smartdate_type;
|
|
+
|
|
/* types for mutt_add_hook() */
|
|
#define MUTT_FOLDERHOOK 1
|
|
#define MUTT_MBOXHOOK (1<<1)
|