static void change_status (icalcomponent *ical_comp, const char *address, icalparameter_partstat status) { icalproperty *prop; prop = find_attendee (ical_comp, address); if (prop) { icalparameter *param; icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER); param = icalparameter_new_partstat (status); icalproperty_add_parameter (prop, param); } else { icalparameter *param; prop = icalproperty_new_attendee (address); icalcomponent_add_property (ical_comp, prop); param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); icalproperty_add_parameter (prop, param); param = icalparameter_new_partstat (status); icalproperty_add_parameter (prop, param); } }
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; }
void update_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; assert(event != 0); assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); if (parameter == 0) { /* There was no PARTSTAT parameter, so add one. */ icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { /* Remove the NEEDSACTION parameter and replace it with TENTATIVE */ icalproperty_remove_parameter_by_kind(p,ICAL_PARTSTAT_PARAMETER); /* Don't forget to free it */ icalparameter_free(parameter); /* Add a new one */ icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } } }
icalcomponent *icalmessage_new_decline_reply(icalcomponent *c, const char *user, 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_DECLINED)); return reply; }
// TODO: check this - need an example void ical_property_ATTENDEE(struct exchange2ical *exchange2ical) { uint32_t i; const char *smtp; const char *display_name; uint32_t *RecipientFlags; uint32_t *RecipientType; uint32_t *TrackStatus; struct SRowSet *SRowSet; /* Sanity check */ if (!exchange2ical->apptStateFlags) return; if (!(*exchange2ical->apptStateFlags & 0x1)) return; SRowSet = &(exchange2ical->Recipients.SRowSet); /* Loop over the recipient table */ for (i = 0; i < SRowSet->cRows; i++) { smtp = (const char *) octool_get_propval(&(SRowSet->aRow[i]), PR_SMTP_ADDRESS); display_name = (const char *) octool_get_propval(&(SRowSet->aRow[i]), PR_RECIPIENT_DISPLAY_NAME); RecipientFlags = (uint32_t *) octool_get_propval(&(SRowSet->aRow[i]), PR_RECIPIENT_FLAGS); RecipientType = (uint32_t *) octool_get_propval(&(SRowSet->aRow[i]), PR_RECIPIENT_TYPE); TrackStatus = (uint32_t *) octool_get_propval(&(SRowSet->aRow[i]), PR_RECIPIENT_TRACKSTATUS); if (RecipientFlags && !(*RecipientFlags & 0x20) && !(*RecipientFlags & 0x2) && (RecipientType && *RecipientType)) { icalproperty *prop; icalparameter *cn; icalparameter *participantType; enum icalparameter_partstat partstat = ICAL_PARTSTAT_NONE; if (smtp) { char *mailtoURL; mailtoURL = talloc_strdup(exchange2ical->mem_ctx, "mailto:"); mailtoURL = talloc_strdup_append(mailtoURL, smtp); prop = icalproperty_new_attendee(mailtoURL); icalcomponent_add_property(exchange2ical->vevent, prop); } else { prop = icalproperty_new_attendee("invalid:nomail"); icalcomponent_add_property(exchange2ical->vevent, prop); } if (display_name) { cn = icalparameter_new_cn(display_name); icalproperty_add_parameter(prop, cn); } if (*RecipientType == 0x3) { icalparameter *cutype = icalparameter_new_cutype(ICAL_CUTYPE_RESOURCE); icalproperty_add_parameter(prop, cutype); } switch (*RecipientType) { case 0x00000002: participantType = icalparameter_new_role(ICAL_ROLE_OPTPARTICIPANT); icalproperty_add_parameter(prop, participantType); break; case 0x00000003: participantType = icalparameter_new_role(ICAL_ROLE_NONPARTICIPANT); icalproperty_add_parameter(prop, participantType); break; } if((exchange2ical->method==ICAL_METHOD_REPLY) || (exchange2ical->method==ICAL_METHOD_COUNTER)){ partstat = exchange2ical->partstat; }else if(exchange2ical->method==ICAL_METHOD_PUBLISH){ if(TrackStatus){ partstat = get_ical_partstat_from_status(*TrackStatus); }else if(exchange2ical->ResponseStatus){ partstat = get_ical_partstat_from_status(*exchange2ical->ResponseStatus); } } if (partstat != ICAL_PARTSTAT_NONE) { icalparameter *param; param = icalparameter_new_partstat(partstat); icalproperty_add_parameter(prop, param); } if (exchange2ical->ResponseRequested) { icalparameter *rsvp; if (*(exchange2ical->ResponseRequested)) { rsvp = icalparameter_new_rsvp(ICAL_RSVP_TRUE); } else { rsvp = icalparameter_new_rsvp(ICAL_RSVP_FALSE); } icalproperty_add_parameter(prop, rsvp); } } } }