*
* Now both the proposed and existing events have been boiled down to start and end times.
* Check for overlap and output any conflicts.
+ *
+ * Returns nonzero if a conflict was reported. This allows the caller to stop iterating.
*/
-void ical_conflicts_phase6(struct icaltimetype t1start,
+int ical_conflicts_phase6(struct icaltimetype t1start,
struct icaltimetype t1end,
struct icaltimetype t2start,
struct icaltimetype t2end,
char *conflict_event_summary,
char *compare_uid)
{
+ int conflict_reported = 0;
/* debugging cruft */
- // time_t tt;
- // tt = icaltime_as_timet(t1start);
- // CtdlLogPrintf(CTDL_DEBUG, "PROPOSED START: %s", ctime(&tt));
- // tt = icaltime_as_timet(t1end);
- // CtdlLogPrintf(CTDL_DEBUG, " PROPOSED END: %s", ctime(&tt));
- // tt = icaltime_as_timet(t2start);
- // CtdlLogPrintf(CTDL_DEBUG, "EXISTING START: %s", ctime(&tt));
- // tt = icaltime_as_timet(t2end);
- // CtdlLogPrintf(CTDL_DEBUG, " EXISTING END: %s", ctime(&tt));
+ time_t tt;
+ tt = icaltime_as_timet(t1start);
+ CtdlLogPrintf(CTDL_DEBUG, "PROPOSED START: %s", ctime(&tt));
+ tt = icaltime_as_timet(t1end);
+ CtdlLogPrintf(CTDL_DEBUG, " PROPOSED END: %s", ctime(&tt));
+ tt = icaltime_as_timet(t2start);
+ CtdlLogPrintf(CTDL_DEBUG, "EXISTING START: %s", ctime(&tt));
+ tt = icaltime_as_timet(t2end);
+ CtdlLogPrintf(CTDL_DEBUG, " EXISTING END: %s", ctime(&tt));
+ /* debugging cruft */
/* compare and output */
conflict_event_uid))) ? 1 : 0
)
);
+ conflict_reported = 1;
}
+ return(conflict_reported);
}
strcpy(conflict_event_summary, icalproperty_get_comment(p));
}
- ical_conflicts_phase6(t1start, t1end, t2start, t2end,
- existing_msgnum, conflict_event_uid, conflict_event_summary, compare_uid
- );
+ if (ical_conflicts_phase6(t1start, t1end, t2start, t2end,
+ existing_msgnum, conflict_event_uid, conflict_event_summary, compare_uid))
+ {
+ CtdlLogPrintf(CTDL_DEBUG, "Hit a conflict after %d iterations\n", num_recur);
+ num_recur = MAX_RECUR + 1; /* force it out of scope */
+ }
if (rrule) {
t2start = icalrecur_iterator_next(ritr);
++num_recur;
}
+ if (icaltime_compare(t2start, t1end) < 0) {
+ CtdlLogPrintf(CTDL_DEBUG, "Went out of scope after %d iterations\n", num_recur);
+ num_recur = MAX_RECUR + 1; /* force it out of scope */
+ }
+
} while ( (rrule) && (!icaltime_is_null_time(t2start)) && (num_recur < MAX_RECUR) );
icalrecur_iterator_free(ritr);
if (num_recur > 0) CtdlLogPrintf(CTDL_DEBUG, "Iterated over existing event %d times.\n", num_recur);
msg = CtdlFetchMessage(msgnum, 1);
if (msg == NULL) {
- cprintf("%d Message %ld not found.\n",
+ cprintf("%d Message %ld not found\n",
ERROR + ILLEGAL_VALUE,
(long)msgnum
);
icalcomponent_free(ird.cal);
return;
}
- else {
- cprintf("%d No calendar object found\n", ERROR + ROOM_NOT_FOUND);
- return;
- }
- /* should never get here */
+ cprintf("%d No calendar object found\n", ERROR + ROOM_NOT_FOUND);
}