static gchar * test_get_free_busy (ECal *client) { /* TODO uses NULL for users and currently specific to file backend. */ GList *l, *freebusy = NULL; GError *error = NULL; icaltimezone *utc; time_t start, end; utc = icaltimezone_get_utc_timezone (); start = time_from_isodate ("20040212T000000Z"); end = time_add_day_with_zone (start, 2, utc); if (!e_cal_get_free_busy (client, NULL, start, end, &freebusy, &error)) { cl_printf (client, "Test free/busy : Could not retrieve free busy information : %s\n", error->message); return error->message; } if (freebusy) { cl_printf (client, "Printing free busy information\n"); for (l = freebusy; l; l = l->next) { gchar *comp_string; ECalComponent *comp = E_CAL_COMPONENT (l->data); comp_string = e_cal_component_get_as_string (comp); cl_printf (client, "%s\n\n", comp_string); g_object_unref (comp); g_free (comp_string); } } else { cl_printf (client, "free_busy was returned but NULL"); } return NULL; }
static gboolean write_calendar (gchar *uid, ESourceList *source_list, GOutputStream *stream) { ESource *source; ECal *client = NULL; GError *error = NULL; GList *objects; icaltimezone *utc; time_t start = time(NULL), end; icalcomponent *top_level; char *email = NULL; GList *users = NULL; gboolean res = FALSE; utc = icaltimezone_get_utc_timezone (); start = time_day_begin_with_zone (start, utc); end = time_add_week_with_zone (start, 6, utc); source = e_source_list_peek_source_by_uid (source_list, uid); if (source) client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_EVENT); if (!client) { g_warning (G_STRLOC ": Could not publish calendar: Calendar backend no longer exists"); return FALSE; } if (!e_cal_open (client, TRUE, &error)) { if (error) { g_warning ("%s", error->message); g_error_free (error); } g_object_unref (client); return FALSE; } if (e_cal_get_cal_address (client, &email, &error)) { if (email && *email) users = g_list_append (users, email); } top_level = e_cal_util_new_top_level (); error = NULL; if (e_cal_get_free_busy (client, users, start, end, &objects, &error)) { char *ical_string; while (objects) { ECalComponent *comp = objects->data; icalcomponent *icalcomp = e_cal_component_get_icalcomponent (comp); icalcomponent_add_component (top_level, icalcomp); objects = g_list_remove (objects, comp); } ical_string = icalcomponent_as_ical_string (top_level); res = g_output_stream_write_all (stream, ical_string, strlen (ical_string), NULL, NULL, &error); g_free (ical_string); } if (users) g_list_free (users); g_free (email); g_object_unref (client); if (error) { g_warning ("%s", error->message); g_error_free (error); } return res; }