char* icalperiodtype_as_ical_string_r(struct icalperiodtype p) { const char* start; const char* end; char *buf; size_t buf_size = 40; char* buf_ptr = 0; buf = (char*)icalmemory_new_buffer(buf_size); buf_ptr = buf; start = icaltime_as_ical_string_r(p.start); icalmemory_append_string(&buf, &buf_ptr, &buf_size, start); icalmemory_free_buffer(start); if(!icaltime_is_null_time(p.end)) { end = icaltime_as_ical_string_r(p.end); } else { end = icaldurationtype_as_ical_string_r(p.duration); } icalmemory_append_char(&buf, &buf_ptr, &buf_size, '/'); icalmemory_append_string(&buf, &buf_ptr, &buf_size, end); icalmemory_free_buffer(end); return buf; }
int main(int argc, char *argv[]) { struct icalrecurrencetype recur; icalrecur_iterator *ritr; struct icaltimetype dtstart, next; char *icr = "FREQ=WEEKLY;INTERVAL=2;COUNT=6;BYDAY=WE,SA,SU"; char *dtstr = "20081217T133000"; int howmany = 1; if (argc > 0) { icr = argv[1]; } if (argc > 1) { howmany = atoi(argv[2]); } if (argc > 2) { dtstr = argv[3]; } dtstart = icaltime_from_string(dtstr); recur = icalrecurrencetype_from_string(icr); ritr = icalrecur_iterator_new(recur, dtstart); printf("Using rule: %s\n", icr); printf("Iterating %d occurrences beginning from %s\n", howmany, dtstr); if (ritr) { while (howmany-- && !icaltime_is_null_time(next)) { next = icalrecur_iterator_next(ritr); printf("%s\n", icaltime_as_ical_string_r(next)); } } else { printf("Error: %d\n", icalerrno); } }
const char *icaltime_as_ical_string(const struct icaltimetype tt) { char *buf; buf = icaltime_as_ical_string_r(tt); icalmemory_add_tmp_buffer(buf); return buf; }
static void put_options_in_source (ESource *source, EGwSendOptionsGeneral *gopts, EGwSendOptionsStatusTracking *sopts) { gchar *value; const gchar *val; icaltimetype tt; if (gopts) { /* priority */ switch (gopts->priority) { case E_GW_PRIORITY_HIGH: value = g_strdup ("high"); break; case E_GW_PRIORITY_STANDARD: value = g_strdup ("standard"); break; case E_GW_PRIORITY_LOW: value = g_strdup ("low"); break; default: value = g_strdup ("undefined"); } e_source_set_property (source, "priority", value); g_free (value), value = NULL; /* Reply Requested */ /*TODO Fill the value if it is not "convinient" */ if (gopts->reply_enabled) { if (gopts->reply_convenient) value = g_strdup ("convinient"); else value = g_strdup_printf ("%d",gopts->reply_within); } else value = g_strdup ("none"); e_source_set_property (source, "reply-requested", value); g_free (value), value = NULL; /* Delay delivery */ if (gopts->delay_enabled) { tt = icaltime_today (); icaltime_adjust (&tt, gopts->delay_until, 0, 0, 0); val = icaltime_as_ical_string_r (tt); } else val = "none"; e_source_set_property (source, "delay-delivery", val); /* Expiration date */ if (gopts->expiration_enabled) value = g_strdup_printf ("%d", gopts->expire_after); else value = g_strdup ("none"); e_source_set_property (source, "expiration", value); g_free (value), value = NULL; } if (sopts) { /* status tracking */ if (sopts->tracking_enabled) { switch (sopts->track_when) { case E_GW_DELIVERED : value = g_strdup ("delivered"); break; case E_GW_DELIVERED_OPENED: value = g_strdup ("delivered-opened"); break; default: value = g_strdup ("all"); } } else value = g_strdup ("none"); e_source_set_property (source, "status-tracking", value); g_free (value), value = NULL; add_return_value (sopts->opened, source, "return-open"); add_return_value (sopts->accepted, source, "return-accept"); add_return_value (sopts->declined, source, "return-decline"); add_return_value (sopts->completed, source, "return-complete"); } }