}
else {
tt = icaltime_as_timet(t);
- fmt_date(buf, tt, 0);
+ webcit_fmt_date(buf, tt, 0);
wprintf("<dt>");
wprintf(_("Starting date/time:"));
wprintf("</dt><dd>%s</dd>", buf);
if (p != NULL) {
t = icalproperty_get_dtend(p);
tt = icaltime_as_timet(t);
- fmt_date(buf, tt, 0);
+ webcit_fmt_date(buf, tt, 0);
wprintf("<dt>");
wprintf(_("Ending date/time:"));
wprintf("</dt><dd>%s</dd>", buf);
wprintf("</dl>");
/** Display the Accept/Decline buttons */
- wprintf("<p id=\"%s_question\" class=\"buttons\">"
+ wprintf("<p id=\"%s_question\">"
"%s "
+ " <span class=\"button_link\"> "
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Accept');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Tentative');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Decline');\">%s</a>"
- "</p>\n",
+ "</span></p>\n",
divname,
_("How would you like to respond to this invitation?"),
divname, divname, msgnum, cal_partnum, _("Accept"),
***********/
/** Display the update buttons */
- wprintf("<p id=\"%s_question\" class=\"buttons\">"
- "%s"
+ wprintf("<p id=\"%s_question\" >"
+ "%s "
+ " <span class=\"button_link\"> "
"<a href=\"javascript:HandleRSVP('%s_question','%s_title','%ld','%s','Update');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:HandleRSVP('%s_question','%s_title','%ld','%s','Ignore');\">%s</a>"
- "</p>\n",
+ "</span></p>\n",
divname,
_("Click <i>Update</i> to accept this reply and update your calendar."),
divname, divname, msgnum, cal_partnum, _("Update"),
* \param cal Our calendar to process
* \param msgnum number of the mesage in our db
*/
-void display_individual_cal(icalcomponent *cal, long msgnum) {
-
- WC->num_cal += 1;
-
- WC->disp_cal = realloc(WC->disp_cal,
- (sizeof(struct disp_cal) * WC->num_cal) );
- WC->disp_cal[WC->num_cal - 1].cal = icalcomponent_new_clone(cal);
-
- WC->disp_cal[WC->num_cal - 1].cal_msgnum = msgnum;
+void display_individual_cal(icalcomponent *cal, long msgnum, char *from, int unread)
+{
+ struct wcsession *WCC = WC; /* stack this for faster access (WC is a function) */
+
+ WCC->num_cal += 1;
+ WCC->disp_cal = realloc(WC->disp_cal, (sizeof(struct disp_cal) * WCC->num_cal) );
+ WCC->disp_cal[WCC->num_cal - 1].cal = icalcomponent_new_clone(cal);
+ WCC->disp_cal[WCC->num_cal - 1].unread = unread;
+ WCC->disp_cal[WCC->num_cal - 1].from = malloc (strlen(from) + 1);
+ strcpy (WCC->disp_cal[WCC->num_cal - 1].from, from);
+ ical_dezonify(WCC->disp_cal[WCC->num_cal - 1].cal);
+ WCC->disp_cal[WCC->num_cal - 1].cal_msgnum = msgnum;
}
* \param supplied_vtodo the todo item we want to edit
* \param msgnum number of the mesage in our db
*/
-void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) {
+void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, char *from, int unread) {
icalcomponent *vtodo;
icalproperty *p;
struct icaltimetype t;
display_edit_individual_task(
icalcomponent_get_first_component(
vtodo, ICAL_VTODO_COMPONENT
- ), msgnum
+ ),
+ msgnum,
+ from, unread
);
return;
}
* \param supplied_vtodo the task to save
* \param msgnum number of the mesage in our db
*/
-void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) {
+void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from, int unread) {
char buf[SIZ];
int delete_existing = 0;
icalproperty *prop;
if (icalcomponent_isa(vtodo) == ICAL_VCALENDAR_COMPONENT) {
save_individual_task(
icalcomponent_get_first_component(
- vtodo, ICAL_VTODO_COMPONENT
- ), msgnum
+ vtodo, ICAL_VTODO_COMPONENT),
+ msgnum, from, unread
);
return;
}
* \param callback a funcion \todo
*
*/
-void display_using_handler(long msgnum,
- char *mimetype,
- icalcomponent_kind which_kind,
- void (*callback)(icalcomponent *, long)
+void display_using_handler(long msgnum, int unread,
+ icalcomponent_kind which_kind,
+ void (*callback)(icalcomponent *, long, char*, int)
) {
char buf[1024];
+ char from[128] = "";
char mime_partnum[256];
char mime_filename[256];
char mime_content_type[256];
char *relevant_source = NULL;
icalcomponent *cal, *c;
- sprintf(buf, "MSG0 %ld|0", msgnum); /* unfortunately we need the mime headers */
+ relevant_partnum[0] = '\0';
+ sprintf(buf, "MSG4 %ld", msgnum); /* we need the mime headers */
serv_puts(buf);
serv_getln(buf, sizeof buf);
if (buf[0] != '1') return;
extract_token(mime_content_type, &buf[5], 4, '|', sizeof mime_content_type);
mime_length = extract_int(&buf[5], 5);
- if (!strcasecmp(mime_content_type, "text/calendar")) {
- strcpy(relevant_partnum, mime_partnum);
- }
- else if (!strcasecmp(mime_content_type, "text/vtodo")) {
+ if ( (!strcasecmp(mime_content_type, "text/calendar"))
+ || (!strcasecmp(mime_content_type, "application/ics"))
+ || (!strcasecmp(mime_content_type, "text/vtodo"))
+ ) {
strcpy(relevant_partnum, mime_partnum);
}
-
+ }
+ else if (!strncasecmp(buf, "from=", 4)) {
+ extract_token(from, buf, 1, '=', sizeof(from));
}
}
/** Simple components of desired type */
if (icalcomponent_isa(cal) == which_kind) {
- callback(cal, msgnum);
+ callback(cal, msgnum, from, unread);
}
/** Subcomponents of desired type */
(c != 0);
c = icalcomponent_get_next_component(cal,
which_kind)) {
- callback(c, msgnum);
+ callback(c, msgnum, from, unread);
}
icalcomponent_free(cal);
}
free(relevant_source);
}
}
-
+ icalmemory_free_ring();
}
/**
* \brief display whole calendar
* \param msgnum number of the mesage in our db
*/
-void display_calendar(long msgnum) {
- display_using_handler(msgnum, "text/calendar",
+void display_calendar(long msgnum, int unread) {
+ display_using_handler(msgnum, unread,
ICAL_VEVENT_COMPONENT,
display_individual_cal);
}
* \brief display whole taksview
* \param msgnum number of the mesage in our db
*/
-void display_task(long msgnum) {
- display_using_handler(msgnum, "text/calendar",
+void display_task(long msgnum, int unread) {
+ display_using_handler(msgnum, unread,
ICAL_VTODO_COMPONENT,
display_individual_cal);
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
/** existing task */
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VTODO_COMPONENT,
display_edit_individual_task);
}
else {
/** new task */
- display_edit_individual_task(NULL, 0L);
+ display_edit_individual_task(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VTODO_COMPONENT,
save_individual_task);
}
else {
- save_individual_task(NULL, 0L);
+ save_individual_task(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
/* existing event */
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VEVENT_COMPONENT,
display_edit_individual_event);
}
else {
/* new event */
- display_edit_individual_event(NULL, 0L);
+ display_edit_individual_event(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VEVENT_COMPONENT,
save_individual_event);
}
else {
- save_individual_event(NULL, 0L);
+ save_individual_event(NULL, 0L, "", 0);
}
}
#endif /* WEBCIT_WITH_CALENDAR_SERVICE */
-
-/*@}*/