icalcomponent *icalmessage_new_delegate_request(icalcomponent *c, const char *user, const char *delegatee, const char *msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalparameter *delegateeParam; icalerror_check_arg_rz(c, "c"); reply = icalmessage_new_reply_base(c, user, msg); inner = icalmessage_get_inner(reply); if (reply == 0) { return 0; } icalcomponent_set_method(reply, ICAL_METHOD_REQUEST); attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED)); icalproperty_set_parameter(attendee, icalparameter_new_delegatedto(delegatee)); delegateeParam = icalparameter_new_delegatedfrom(icalproperty_get_attendee(attendee)); icalcomponent_add_property( inner, icalproperty_vanew_attendee(delegatee, delegateeParam, 0)); icalparameter_free(delegateeParam); return reply; }
nsresult calIcalProperty::setDatetime_(calIcalComponent * parent, icalproperty * prop, calIDateTime * dt) { NS_ENSURE_ARG_POINTER(prop); NS_ENSURE_ARG_POINTER(dt); nsresult rv; nsCOMPtr<calIDateTimeLibical> icaldt = do_QueryInterface(dt, &rv); NS_ENSURE_SUCCESS(rv, rv); icaltimetype itt; icaldt->ToIcalTime(&itt); if (parent) { if (!itt.is_utc) { nsCOMPtr<calITimezone> tz; rv = dt->GetTimezone(getter_AddRefs(tz)); NS_ENSURE_SUCCESS(rv, rv); if (itt.zone) { rv = parent->getParentVCalendarOrThis()->AddTimezoneReference(tz); NS_ENSURE_SUCCESS(rv, rv); icalparameter * const param = icalparameter_new_from_value_string( ICAL_TZID_PARAMETER, icaltimezone_get_tzid(const_cast<icaltimezone *>(itt.zone))); icalproperty_set_parameter(prop, param); } else { // either floating or phantom: bool b = false; if (NS_FAILED(tz->GetIsFloating(&b)) || !b) { // restore the same phantom TZID: nsAutoCString tzid; rv = tz->GetTzid(tzid); NS_ENSURE_SUCCESS(rv, rv); icalparameter * const param = icalparameter_new_from_value_string(ICAL_TZID_PARAMETER, tzid.get()); icalproperty_set_parameter(prop, param); } } } } else if (!itt.is_date && !itt.is_utc && itt.zone) { // no parent to add the CTIMEZONE to: coerce DATETIMEs to UTC, DATEs to floating icaltimezone_convert_time(&itt, const_cast<icaltimezone *>(itt.zone), icaltimezone_get_utc_timezone()); itt.zone = icaltimezone_get_utc_timezone(); itt.is_utc = 1; } icalvalue * const val = icalvalue_new_datetime(itt); CAL_ENSURE_MEMORY(val); icalproperty_set_value(prop, val); return NS_OK; }
icalcomponent *icalmessage_new_delegate_reply(icalcomponent *c, const char *user, const char *delegatee, const char *msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalerror_check_arg_rz(c, "c"); reply = icalmessage_new_reply_base(c, user, msg); inner = icalmessage_get_inner(reply); if (reply == 0) { return 0; } attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED)); icalproperty_set_parameter(attendee, icalparameter_new_delegatedto(delegatee)); return reply; }