* if an event spans this day, print it like an all day event.
authorWilfried Göesgens <willi@citadel.org>
Tue, 4 Sep 2007 19:19:04 +0000 (19:19 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 4 Sep 2007 19:19:04 +0000 (19:19 +0000)
webcit/calendar_view.c

index 25956fed5acc59d55d2c941b64e09a5d48678396..a3b28320a948200bf6ee0afbf4f6857317f6af28 100644 (file)
@@ -64,10 +64,7 @@ void calendar_month_view_display_events(time_t thetime) {
                                                ICAL_DTSTART_PROPERTY);
                pe = icalcomponent_get_first_property(WC->disp_cal[i].cal,
                                                      ICAL_DTEND_PROPERTY);
-               if ((p != NULL) && (pe != NULL)) {
-                       t = icalproperty_get_dtend(pe);
-                       event_tte = icaltime_as_timet(t);
-
+               if (p != NULL) {
                        t = icalproperty_get_dtstart(p);
                        event_tt = icaltime_as_timet(t);
 
@@ -75,12 +72,19 @@ void calendar_month_view_display_events(time_t thetime) {
                        else all_day_event = 0;
 
                        if (all_day_event) {
-                               gmtime_r(&event_tt, &event_tm);
-                               gmtime_r(&event_tte, &event_te);
+                               gmtime_r(&event_tt, &event_tm); 
+                               gmtime_r(&event_tt, &event_te);// allday events don't have end-dates.
                        }
                        else {
                                localtime_r(&event_tt, &event_tm);
-                               localtime_r(&event_tte, &event_te);
+                               if (pe != NULL)
+                               {
+                                       t = icalproperty_get_dtend(pe);
+                                       event_tte = icaltime_as_timet(t);
+                                       localtime_r(&event_tte, &event_te);
+                               }
+                               else 
+                                       localtime_r(&event_tt, &event_te);
                        }
 
                        if ((event_tm.tm_year <= today_tm.tm_year)
@@ -619,10 +623,7 @@ void calendar_day_view_display_events(int year, int month,
                                                ICAL_DTSTART_PROPERTY);
                pe = icalcomponent_get_first_property(WC->disp_cal[i].cal,
                                                      ICAL_DTEND_PROPERTY);
-               if ((p != NULL) && (pe != NULL)) {
-                       te = icalproperty_get_dtend(pe);
-                       event_tte = icaltime_as_timet(te);
-
+               if (p != NULL) {
                        t = icalproperty_get_dtstart(p);
                        event_tt = icaltime_as_timet(t);
                        if (t.is_date) {
@@ -634,21 +635,38 @@ void calendar_day_view_display_events(int year, int month,
 
                        if (all_day_event) {
                                gmtime_r(&event_tt, &event_tm);
-                               gmtime_r(&event_tte, &event_te);
+                               gmtime_r(&event_tt, &event_te);
                        }
                        else {
                                localtime_r(&event_tt, &event_tm);
-                               localtime_r(&event_tte, &event_te);
+                               if (pe != NULL)
+                               {
+                                       te = icalproperty_get_dtend(pe);
+                                       event_tte = icaltime_as_timet(te);
+                                       localtime_r(&event_tte, &event_te);
+                               }
+                               else 
+                                       localtime_r(&event_tt, &event_te);
                        }
 
-                       if ((event_tm.tm_year <= (year-1900))
-                           && (event_tm.tm_mon <= (month-1))
-                           && (event_tm.tm_mday <= day)
-                           && ( ((event_tm.tm_hour <= hour)&&(!t.is_date)) || ((hour<0)&&(t.is_date)))
-                           && (event_te.tm_year >= (year-1900))
-                           && (event_te.tm_mon >= (month-1))
-                           && (event_te.tm_mday >= day)
-                           && ( ((event_te.tm_hour >= hour)&&(!te.is_date)) || ((hour<0)&&(te.is_date)) ))
+                       if (((event_tm.tm_year <= (year-1900))
+                            && (event_tm.tm_mon <= (month-1))
+                            && (event_tm.tm_mday <= day)
+                            && (event_te.tm_year >= (year-1900))
+                            && (event_te.tm_mon >= (month-1))
+                            && (event_te.tm_mday >= day))
+                           && (
+                                 // are we in the start hour?
+                                   ((event_tm.tm_mday == day)
+                                    && (event_tm.tm_hour == hour) 
+                                    && (!t.is_date)) 
+                                 // are we an all day event?
+                                   || ((hour<0)&&(t.is_date))
+                                 // does it span multible days and we're not at the start day?
+                                   || ((hour<0)
+                                       && (event_tm.tm_mday < day) 
+                                       && (event_te.tm_mday >= day))
+                                   ))
                        {
                                p = icalcomponent_get_first_property(
                                                        WC->disp_cal[i].cal,