diff options
author | Arturo Espinosa <unammx@src.gnome.org> | 1998-04-17 12:49:37 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1998-04-17 12:49:37 +0800 |
commit | 541c3a7a73e084b5ebd82aae7c3fc1f3ba4f0b72 (patch) | |
tree | a1eee2c2ff904bb8244e2a3645ecd4027615fde8 /calendar/calendar.c | |
parent | fe09695939f1d4bcf08b297cf4ade552944514ab (diff) | |
download | gsoc2013-evolution-541c3a7a73e084b5ebd82aae7c3fc1f3ba4f0b72.tar.gz gsoc2013-evolution-541c3a7a73e084b5ebd82aae7c3fc1f3ba4f0b72.tar.zst gsoc2013-evolution-541c3a7a73e084b5ebd82aae7c3fc1f3ba4f0b72.zip |
New event generation api in place -miguel
svn path=/trunk/; revision=146
Diffstat (limited to 'calendar/calendar.c')
-rw-r--r-- | calendar/calendar.c | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/calendar/calendar.c b/calendar/calendar.c index dd0a5cca3f..8ad0208ac5 100644 --- a/calendar/calendar.c +++ b/calendar/calendar.c @@ -111,6 +111,23 @@ ice (time_t t) return buffer; } +void +calendar_iterate_on_objects (GList *objects, time_t start, time_t end, calendarfn cb, void *closure) +{ + for (; objects; objects = objects->next){ + iCalObject *object = objects->data; + + if ((start <= object->dtstart) && (object->dtend <= end)) + (*cb)(object, object->dtstart, object->dtend, closure); + } +} + +void +calendar_iterate (Calendar *cal, time_t start, time_t end, calendarfn cb, void *closure) +{ + calendar_iterate_on_objects (cal->events, start, end, cb, closure); +} + GList * calendar_get_objects_in_range (GList *objects, time_t start, time_t end, GCompareFunc sort_func) { @@ -131,12 +148,6 @@ calendar_get_objects_in_range (GList *objects, time_t start, time_t end, GCompar } GList * -calendar_get_events_in_range (Calendar *cal, time_t start, time_t end, GCompareFunc sort_func) -{ - return calendar_get_objects_in_range (cal->events, start, end, sort_func); -} - -GList * calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end, GCompareFunc sort_func) { return calendar_get_objects_in_range (cal->todo, start, end, sort_func); @@ -241,3 +252,45 @@ calendar_save (Calendar *cal, char *fname) cleanStrTbl (); } +static void +calendar_object_compare_by_start (gpointer a, gpointer b) +{ + CalendarObject *ca = a; + CalendarObject *cb = b; + time_t diff; + + diff = ca->ev_start - cb->ev_start; + return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; +} + +static void +assemble_event_list (iCalObject *obj, time_t start, time_t end, void *c) +{ + CalendarObject *co; + GList **l = c; + + co = g_new (CalendarObject, 1); + co->ev_start = start; + co->ev_end = end; + co->ico = obj; + *l = g_list_insert_sorted (*l, co, calendar_object_compare_by_start); +} + +void +calendar_destroy_event_list (GList *l) +{ + GList *p; + + for (p = l; p; p = p->next) + g_free (l->data); + g_list_free (l); +} + +GList * +calendar_get_events_in_range (Calendar *cal, time_t start, time_t end) +{ + GList *l = 0; + + calendar_iterate (cal, start, end, assemble_event_list, &l); + return l; +} |