diff options
author | Eduardo Chappa <chappa@washington.edu> | 2018-05-13 23:27:39 -0600 |
---|---|---|
committer | Eduardo Chappa <chappa@washington.edu> | 2018-05-13 23:27:39 -0600 |
commit | ae4bbcf4e8bb991ad3106ff0d7799276912c5815 (patch) | |
tree | 9d97791fdc05afd560be33c9d46bfffaaa42739b /pith/mailview.c | |
parent | aac7b10863bcfabe936feb5151e7e11123e13306 (diff) | |
download | alpine-ae4bbcf4e8bb991ad3106ff0d7799276912c5815.tar.xz |
* For a calendar entry with method PUBLISH, we show all entries in the calendar.
When "More Details" is selected for each individual event, the description
of that entry is shown only. When the calendar is opened from the view
attachment list screen, all entries will be shown. Mske sure there are no
memory leaks.
* Reverse some of the changes to make valgrind happy, as this may make Alpine crash
by using memory that was released.
Diffstat (limited to 'pith/mailview.c')
-rw-r--r-- | pith/mailview.c | 319 |
1 files changed, 162 insertions, 157 deletions
diff --git a/pith/mailview.c b/pith/mailview.c index 39fcfff6..c438371c 100644 --- a/pith/mailview.c +++ b/pith/mailview.c @@ -224,90 +224,90 @@ void format_calendar_vevent(VCALENDAR_S *vcal, ATTACH_S *a, HANDLE_S **handlesp, int flgs, int width, gf_io_t pc, int cflags) { int avail, m1, m2, hwid, i, partwid, padwid; - int s1, s2, dwid; + int s1, s2, dwid, minkey; int *margin; char padding[1024]; - VEVENT_SUMMARY_S *vesy; /* vevent summary */ + VEVENT_SUMMARY_S *vesy, *vesummary; /* vevent summary */ - vesy = ical_vevent_summary(vcal); + vesummary = vesy = ical_vevent_summary(vcal); if(vesy == NULL) return; if((cflags & FC_SUMMARY) && (cflags & FC_FULL)) cflags |= ~FC_FULL; - avail = width; - margin = (cflags & FC_FULL) ? NULL + minkey = -1; /* initialize to something negative */ + + for(; vesy != NULL ; vesy = vesy->next){ + avail = width; + margin = (cflags & FC_FULL) ? NULL : (flgs & FM_NOINDENT) ? NULL : format_view_margin(); - m1 = MAX(MIN(margin ? margin[0] : 0, avail), 0); - avail -= m1; + m1 = MAX(MIN(margin ? margin[0] : 0, avail), 0); + avail -= m1; - m2 = MAX(MIN(margin ? margin[1] : 0, avail), 0); - avail -= m2; + m2 = MAX(MIN(margin ? margin[1] : 0, avail), 0); + avail -= m2; - hwid = MAX(avail, 0); - padwid = 0; + hwid = MAX(avail, 0); + padwid = 0; - if(ps_global->atmts[1].description == NULL){ -// && (!ps_global->atmts[0].body -// || (ps_global->atmts[0].body->type == TYPETEXT))){ - avail = width - m1 -2; + if(ps_global->atmts[1].description == NULL){ + avail = width - m1 -2; - dwid = MAX(MIN(40, avail), 0); + dwid = MAX(MIN(40, avail), 0); - snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s%s", m1, m1, "", + snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s%s", m1, m1, "", repeat_char(dwid, '-')); - if(!gf_puts(tmp_20k_buf, pc) || !gf_puts(NEWLINE, pc)) + if(!gf_puts(tmp_20k_buf, pc) || !gf_puts(NEWLINE, pc)) return; - } + } - if(cflags & FC_SUMMARY){ - i = utf8_width(_("Calendar Entry:")); - partwid = MIN(i, hwid); - if(m1 > 0){ + if(cflags & FC_SUMMARY){ + i = utf8_width(_("Calendar Entry:")); + partwid = MIN(i, hwid); + if(m1 > 0){ snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s", m1, m1, ""); if(!gf_puts(tmp_20k_buf, pc)) return; - } + } - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%-*.*w%*.*s", + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%-*.*w%*.*s", partwid, partwid, _("Calendar Entry:"), padwid, padwid, ""); if(!gf_puts(tmp_20k_buf, pc) || !gf_puts(NEWLINE, pc)) return; - } - else - partwid = 0; - - if(m1 > 0){ - snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s", m1, m1, ""); - if(!gf_puts(tmp_20k_buf, pc)) - return; - } + } + else + partwid = 0; - avail = width - m1 - m2; + if(m1 > 0){ + snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s", m1, m1, ""); + if(!gf_puts(tmp_20k_buf, pc)) + return; + } - s1 = MAX(MIN(1, avail), 0); - avail -= s1; + avail = width - m1 - m2; - dwid = MAX(MIN(1, avail), 0); - avail -= dwid; + s1 = MAX(MIN(1, avail), 0); + avail -= s1; - s2 = MAX(MIN(1, avail), 0); - avail -= s2; + dwid = MAX(MIN(1, avail), 0); + avail -= dwid; + s2 = MAX(MIN(1, avail), 0); + avail -= s2; - if(cflags & FC_SUMMARY) - utf8_snprintf(padding, sizeof(padding), "%*.*s%*.*w%*.*s", + if(cflags & FC_SUMMARY) + utf8_snprintf(padding, sizeof(padding), "%*.*s%*.*w%*.*s", s1, s1, "", dwid, dwid, "", s2, s2, ""); - else - padding[0] = '\0'; + else + padding[0] = '\0'; - if(vesy->cancel){ + if(vesy->cancel){ utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s", padding, _("This event was cancelled!")); if((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDON)){ @@ -316,60 +316,60 @@ format_calendar_vevent(VCALENDAR_S *vcal, ATTACH_S *a, HANDLE_S **handlesp, int (*pc)(TAG_EMBED); (*pc)(TAG_BOLDOFF); } - } + } - if(vesy->organizer){ - if(vesy->sender != NULL){ - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", + if(vesy->organizer){ + if(vesy->sender != NULL){ + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", padding, _("Sent-by: "), vesy->sender); - gf_puts(tmp_20k_buf, pc); - gf_puts(NEWLINE, pc); - } - - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", - padding, _("Organizer: "), vesy->organizer); - gf_puts(tmp_20k_buf, pc); - gf_puts(NEWLINE, pc); - } /* end of if(organizer) */ - - if(vesy->location){ - ical_remove_escapes(&vesy->location); - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", + gf_puts(tmp_20k_buf, pc); + gf_puts(NEWLINE, pc); + } + + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", + padding, _("Organizer: "), vesy->organizer); + gf_puts(tmp_20k_buf, pc); + gf_puts(NEWLINE, pc); + } /* end of if(organizer) */ + + if(vesy->location){ + ical_remove_escapes(&vesy->location); + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", padding, _("Location: "), vesy->location); - gf_puts(tmp_20k_buf, pc); - gf_puts(NEWLINE, pc); - } /* end of if location */ + gf_puts(tmp_20k_buf, pc); + gf_puts(NEWLINE, pc); + } /* end of if location */ - if(vesy->evstart){ - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", + if(vesy->evstart){ + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", padding, _("Start Date: "), vesy->evstart); - gf_puts(tmp_20k_buf, pc); - gf_puts(NEWLINE, pc); - } /* end of if dtstart */ + gf_puts(tmp_20k_buf, pc); + gf_puts(NEWLINE, pc); + } /* end of if dtstart */ - if(vesy->duration){ - int i; + if(vesy->duration){ + int i; - for(i = 0; vesy->duration[i] != NULL; i++){ + for(i = 0; vesy->duration[i] != NULL; i++){ utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", padding, _("Duration: "), vesy->duration[i]); gf_puts(tmp_20k_buf, pc); gf_puts(NEWLINE, pc); - } - } /* end of DURATION */ - else if(vesy->evend){ + } + } /* end of DURATION */ + else if(vesy->evend){ utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s%s", padding, _("End Date: "), vesy->evend); gf_puts(tmp_20k_buf, pc); gf_puts(NEWLINE, pc); - } else { /* end of if dtend */ + } else { /* end of if dtend */ utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%s%s", padding, _("No duration nor end time found for this event")); gf_puts(tmp_20k_buf, pc); gf_puts(NEWLINE, pc); - } /* end of else for if (duration) and if (dtend) */ + } /* end of else for if (duration) and if (dtend) */ - if(vesy->attendee){ + if(vesy->attendee){ #define MAX_DISPLAYED 3 int i; @@ -383,109 +383,114 @@ format_calendar_vevent(VCALENDAR_S *vcal, ATTACH_S *a, HANDLE_S **handlesp, int gf_puts(tmp_20k_buf, pc); gf_puts(NEWLINE, pc); } - if(cflags & FC_SUMMARY){ - COLOR_PAIR *lastc = NULL; - char numbuf[50]; - int thisdescwid; - COLOR_PAIR *hdrcolor = NULL; + } /* end of ATTENDEES */ - if((flgs & FM_DISPLAY) - && !(flgs & FM_NOCOLOR) - && pico_usingcolor() - && ps_global->VAR_HEADER_GENERAL_FORE_COLOR - && ps_global->VAR_HEADER_GENERAL_BACK_COLOR - && ps_global->VAR_NORM_FORE_COLOR - && ps_global->VAR_NORM_BACK_COLOR - && (colorcmp(ps_global->VAR_HEADER_GENERAL_FORE_COLOR, + + if(cflags & FC_SUMMARY){ + COLOR_PAIR *lastc = NULL; + char numbuf[50]; + int thisdescwid; + COLOR_PAIR *hdrcolor = NULL; + + if((flgs & FM_DISPLAY) + && !(flgs & FM_NOCOLOR) + && pico_usingcolor() + && ps_global->VAR_HEADER_GENERAL_FORE_COLOR + && ps_global->VAR_HEADER_GENERAL_BACK_COLOR + && ps_global->VAR_NORM_FORE_COLOR + && ps_global->VAR_NORM_BACK_COLOR + && (colorcmp(ps_global->VAR_HEADER_GENERAL_FORE_COLOR, ps_global->VAR_NORM_FORE_COLOR) || colorcmp(ps_global->VAR_HEADER_GENERAL_BACK_COLOR, - ps_global->VAR_NORM_BACK_COLOR))){ + ps_global->VAR_NORM_BACK_COLOR))){ - if((hdrcolor = new_color_pair(ps_global->VAR_HEADER_GENERAL_FORE_COLOR, + if((hdrcolor = new_color_pair(ps_global->VAR_HEADER_GENERAL_FORE_COLOR, ps_global->VAR_HEADER_GENERAL_BACK_COLOR)) != NULL){ - if(!pico_is_good_colorpair(hdrcolor)) - free_color_pair(&hdrcolor); - } + if(!pico_is_good_colorpair(hdrcolor)) + free_color_pair(&hdrcolor); } + } - if(!(!hdrcolor || embed_color(hdrcolor, pc))) - return; - - gf_puts(padding, pc); - utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "[%s]", _("More Details")); - - if(handlesp){ - char buf[16], color[64]; - int l; - HANDLE_S *h; - - h = new_handle(handlesp); - h->type = Attach; - h->h.attach = a; - - snprintf(buf, sizeof(buf), "%d", h->key); - buf[sizeof(buf)-1] = '\0'; - - if(!(flgs & FM_NOCOLOR) - && handle_start_color(color, sizeof(color), &l, 1)){ - lastc = get_cur_embedded_color(); - if(!gf_nputs(color, (long) l, pc)) - return; - } - else if(F_OFF(F_SLCTBL_ITEM_NOBOLD, ps_global) + if(!(!hdrcolor || embed_color(hdrcolor, pc))) + return; + + gf_puts(padding, pc); + utf8_snprintf(tmp_20k_buf, SIZEOF_20KBUF, "[%s]", _("More Details")); + + if(handlesp){ + char buf[16], color[64]; + int l; + HANDLE_S *h; + + h = new_handle(handlesp); + if(minkey < 0) minkey = h->key; + h->type = iCal; + h->h.ical.attach = a; + h->h.ical.depth = h->key - minkey; + + snprintf(buf, sizeof(buf), "%d", h->key); + buf[sizeof(buf)-1] = '\0'; + + if(!(flgs & FM_NOCOLOR) + && handle_start_color(color, sizeof(color), &l, 1)){ + lastc = get_cur_embedded_color(); + if(!gf_nputs(color, (long) l, pc)) + return; + } + else if(F_OFF(F_SLCTBL_ITEM_NOBOLD, ps_global) && (!((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDON)))) return; - if(!((*pc)(TAG_EMBED) && (*pc)(TAG_HANDLE) + if(!((*pc)(TAG_EMBED) && (*pc)(TAG_HANDLE) && (*pc)(strlen(buf)) && gf_puts(buf, pc))) return; - } else - tmp_20k_buf[0] = '\0'; - - if(!format_env_puts(tmp_20k_buf, pc)) - return; - - if(handlesp){ - if(lastc){ - if(F_OFF(F_SLCTBL_ITEM_NOBOLD, ps_global)){ - if(!((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDOFF))) - return; - } + } else + tmp_20k_buf[0] = '\0'; - if(!embed_color(lastc, pc)) - return; + if(!format_env_puts(tmp_20k_buf, pc)) + return; - free_color_pair(&lastc); - } - else if(!((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDOFF))) - return; + if(handlesp){ + if(lastc){ + if(F_OFF(F_SLCTBL_ITEM_NOBOLD, ps_global)){ + if(!((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDOFF))) + return; + } - if(!((*pc)(TAG_EMBED) && (*pc)(TAG_INVOFF))) - return; - } + if(!embed_color(lastc, pc)) + return; - if(padwid > 0){ - snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s", padwid, padwid, ""); - if(!gf_puts(tmp_20k_buf, pc)) + free_color_pair(&lastc); + } + else if(!((*pc)(TAG_EMBED) && (*pc)(TAG_BOLDOFF))) return; - } - if(!gf_puts(NEWLINE, pc)) + if(!((*pc)(TAG_EMBED) && (*pc)(TAG_INVOFF))) return; } - } /* end of ATTENDEES */ - free_vevent_summary(&vesy); + if(padwid > 0){ + snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s", padwid, padwid, ""); + if(!gf_puts(tmp_20k_buf, pc)) + return; + } - avail = width - m1 -2; + if(!gf_puts(NEWLINE, pc)) + return; + } + avail = width - m1 -2; - dwid = MAX(MIN(40, avail), 0); - avail -= dwid; + dwid = MAX(MIN(40, avail), 0); + avail -= dwid; - snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s%s", m1, m1, "", + snprintf(tmp_20k_buf, SIZEOF_20KBUF, "%*.*s%s", m1, m1, "", repeat_char(dwid, '-')); - gf_puts(tmp_20k_buf, pc); + gf_puts(tmp_20k_buf, pc); + if(vesy->next) + gf_puts(NEWLINE, pc); + } + free_vevent_summary(&vesummary); } int |