X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fcalendar_view.c;h=48ac994666d7fa64fe4b77293b809b101fd4d569;hb=72015d547deb7e4632f70ad8dcae2d56ed8bfcca;hp=6d71049a9b406e8120eb57017ad6220daa9a5a24;hpb=172623f613d7a063ded70251cdb18b1e38030e10;p=citadel.git diff --git a/webcit/calendar_view.c b/webcit/calendar_view.c index 6d71049a9..48ac99466 100644 --- a/webcit/calendar_view.c +++ b/webcit/calendar_view.c @@ -6,6 +6,7 @@ #include "webcit.h" #include "webserver.h" +#include "calendar.h" /* These define how high the hour rows are in the day view */ #define TIMELINE 30 @@ -1425,12 +1426,27 @@ int calendar_summary_view(void) { /* * Parse the URL variables in order to determine the scope and display of a calendar view */ -void parse_calendar_view_request(struct calview *c) { +int calendar_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len) +{ + calview *c; time_t now; struct tm tm; - char calview[32]; + char cv[32]; + int span = 3888000; + c = (calview*) malloc(sizeof(calview)); + memset(c, 0, sizeof(calview)); + *ViewSpecific = (void*)c; + + Stat->load_seen = 1; + strcpy(cmd, "MSGS ALL"); + Stat->maxmsgs = 32767; + /* In case no date was specified, go with today */ now = time(NULL); localtime_r(&now, &tm); @@ -1445,20 +1461,20 @@ void parse_calendar_view_request(struct calview *c) { /* How would you like that cooked? */ if (havebstr("calview")) { - strcpy(calview, bstr("calview")); + strcpy(cv, bstr("calview")); } else { - strcpy(calview, "month"); + strcpy(cv, "month"); } /* Display the selected view */ - if (!strcasecmp(calview, "day")) { + if (!strcasecmp(cv, "day")) { c->view = calview_day; } - else if (!strcasecmp(calview, "week")) { + else if (!strcasecmp(cv, "week")) { c->view = calview_week; } - else if (!strcasecmp(calview, "summary")) { /* shouldn't ever happen, but just in case */ + else if (!strcasecmp(cv, "summary")) { /* shouldn't ever happen, but just in case */ c->view = calview_day; } else { @@ -1487,6 +1503,7 @@ void parse_calendar_view_request(struct calview *c) { c->lower_bound = now - span; c->upper_bound = now + span; + return 200; } @@ -1494,8 +1511,12 @@ void parse_calendar_view_request(struct calview *c) { /* * Render a calendar view from data previously loaded into memory */ -void render_calendar_view(struct calview *c) +int calendar_RenderView_or_Tail(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper) { + calview *c = (calview*) *ViewSpecific; + if (c->view == calview_day) { calendar_day_view(c->year, c->month, c->day); } @@ -1513,173 +1534,10 @@ void render_calendar_view(struct calview *c) /* Free the in-memory list of calendar items */ DeleteHash(&WC->disp_cal_items); -} - - -/* - * Helper function for do_tasks_view(). Returns the due date/time of a vtodo. - */ -time_t get_task_due_date(icalcomponent *vtodo, int *is_date) { - icalproperty *p; - - if (vtodo == NULL) { - return(0L); - } - - /* - * If we're looking at a fully encapsulated VCALENDAR - * rather than a VTODO component, recurse into the data - * structure until we get a VTODO. - */ - if (icalcomponent_isa(vtodo) == ICAL_VCALENDAR_COMPONENT) { - return get_task_due_date( - icalcomponent_get_first_component( - vtodo, ICAL_VTODO_COMPONENT - ), is_date - ); - } - - p = icalcomponent_get_first_property(vtodo, ICAL_DUE_PROPERTY); - if (p != NULL) { - struct icaltimetype t = icalproperty_get_due(p); - - if (is_date) - *is_date = t.is_date; - return(icaltime_as_timet(t)); - } - else { - return(0L); - } -} - - -/* - * Compare the due dates of two tasks (this is for sorting) - */ -int task_due_cmp(const void *vtask1, const void *vtask2) { - disp_cal * Task1 = (disp_cal *)GetSearchPayload(vtask1); - disp_cal * Task2 = (disp_cal *)GetSearchPayload(vtask2); - - time_t t1; - time_t t2; - - t1 = get_task_due_date(Task1->cal, NULL); - t2 = get_task_due_date(Task2->cal, NULL); - if (t1 < t2) return(-1); - if (t1 > t2) return(1); - return(0); -} - -/* - * qsort filter to move completed tasks to bottom of task list - */ -int task_completed_cmp(const void *vtask1, const void *vtask2) { - disp_cal * Task1 = (disp_cal *)GetSearchPayload(vtask1); -/* disp_cal * Task2 = (disp_cal *)GetSearchPayload(vtask2); */ - - icalproperty_status t1 = icalcomponent_get_status((Task1)->cal); - /* icalproperty_status t2 = icalcomponent_get_status(((struct disp_cal *)task2)->cal); */ - - if (t1 == ICAL_STATUS_COMPLETED) - return 1; return 0; } -/* - * do the whole task view stuff - */ -void do_tasks_view(void) { - long hklen; - const char *HashKey; - void *vCal; - disp_cal *Cal; - HashPos *Pos; - int nItems; - time_t due; - char buf[SIZ]; - icalproperty *p; - wcsession *WCC = WC; - - wprintf("
" - "\n\n" - "\n", - _("Show All")); - - nItems = GetCount(WC->disp_cal_items); - - /* Sort them if necessary - if (nItems > 1) { - SortByPayload(WC->disp_cal_items, task_due_cmp); - } - * this shouldn't be neccessary, since we sort by the start time. - */ - - /* And then again, by completed */ - if (nItems > 1) { - SortByPayload(WC->disp_cal_items, - task_completed_cmp); - } - - Pos = GetNewHashPos(WCC->disp_cal_items, 0); - while (GetNextHashPos(WCC->disp_cal_items, Pos, &hklen, &HashKey, &vCal)) { - icalproperty_status todoStatus; - int is_date; - Cal = (disp_cal*)vCal; - wprintf("\n"); - - due = get_task_due_date(Cal->cal, &is_date); - wprintf(""); - wprintf(""); - wprintf(""); - } - - wprintf("
"); - wprintf(_("Completed?")); - wprintf(""); - wprintf(_("Name of task")); - wprintf(""); - wprintf(_("Date due")); - wprintf(""); - wprintf(_("Category")); - wprintf(" ()
"); - todoStatus = icalcomponent_get_status(Cal->cal); - wprintf("\n"); - p = icalcomponent_get_first_property(Cal->cal, - ICAL_SUMMARY_PROPERTY); - wprintf("cal_msgnum); - urlescputs(ChrPtr(WC->wc_roomname)); - wprintf("\">"); - /* wprintf(" "); */ - if (p != NULL) { - escputs((char *)icalproperty_get_comment(p)); - } - wprintf("\n"); - wprintf(" 0) { - webcit_fmt_date(buf, SIZ, due, is_date ? DATEFMT_RAWDATE : DATEFMT_FULL); - wprintf(">%s",buf); - } - else { - wprintf(">"); - } - wprintf(""); - p = icalcomponent_get_first_property(Cal->cal, - ICAL_CATEGORIES_PROPERTY); - if (p != NULL) { - escputs((char *)icalproperty_get_categories(p)); - } - wprintf("
\n"); - - /* Free the list */ - DeleteHash(&WC->disp_cal_items); - DeleteHashPos(&Pos); -}