void dates_new_cb (GtkWidget *source, DatesData *d) { icalcomponent *comp; struct icalperiodtype period; if (!dates_view_get_selected_period (d->view, &period)) { struct icaltimetype date, now; /* Create a default time event */ date = *(dates_view_get_date (d->view)); now = icaltime_current_time_with_zone (date.zone); date.is_date = FALSE; now.is_date = FALSE; period.duration = icaldurationtype_null_duration (); period.duration.minutes = 0; /* New events default to starting at 9am */ period.duration.hours = 9; period.start = icaltime_add ( date, period.duration); /* NOTE: 11 is the magic number where we're viewing a * month or more. See dates_zoom_change. */ period.duration.hours = (d->zoom >= 11) ? 8 : 2; period.end = icaltime_add (period.start, period.duration); } comp = icalcomponent_new_vevent (); icalcomponent_set_dtstart (comp, period.start); icalcomponent_set_dtend (comp, period.end); icalcomponent_set_summary (comp, _("New event")); dates_new (d, comp, TRUE); }
static uint8_t exchange2ical_exception_from_ExceptionInfo(struct exchange2ical *exchange2ical, struct exchange2ical_check *exchange2ical_check) { uint32_t i; icalproperty *prop; icalparameter *param; icaltimetype icaltime; /*sanity checks*/ if(!exchange2ical->AppointmentRecurrencePattern) return 1; if(!exchange2ical->AppointmentRecurrencePattern->ExceptionInfo) return 1; if(!exchange2ical->AppointmentRecurrencePattern->ExceptionCount) return 1; for(i=0; i<exchange2ical->AppointmentRecurrencePattern->ExceptionCount; i++) { /*Check to see if event is acceptable*/ struct tm apptStart=get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->StartDateTime); if (!checkEvent(exchange2ical, exchange2ical_check, &apptStart)){ return 0; } /*Create a new vevent*/ exchange2ical->vevent = icalcomponent_new_vevent(); if ( ! (exchange2ical->vevent) ) { return 1; } icalcomponent_add_component(exchange2ical->vcalendar, exchange2ical->vevent); /*dtstart from StartDateTime*/ if (exchange2ical->apptSubType && (*exchange2ical->apptSubType == 0x1)) { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->StartDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtstart(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); }else { if(exchange2ical->TimeZoneDesc){ struct tm tm; tm = get_tm_from_minutes(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->StartDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtstart(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); param = icalparameter_new_tzid(exchange2ical->TimeZoneDesc); icalproperty_add_parameter(prop, param); } else { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->StartDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtstart(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); } } /*dtend from EndDateTime*/ if (exchange2ical->apptSubType && (*exchange2ical->apptSubType == 0x1)) { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->EndDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtend(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); }else { if(exchange2ical->TimeZoneDesc){ struct tm tm; tm = get_tm_from_minutes(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->EndDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtend(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); param = icalparameter_new_tzid(exchange2ical->TimeZoneDesc); icalproperty_add_parameter(prop, param); } else { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->EndDateTime); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_dtend(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); } } /*recurrence-id from OriginalStartDate*/ if (exchange2ical->apptSubType && (*exchange2ical->apptSubType == 0x1)) { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OriginalStartDate); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_recurrenceid(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); }else { if(exchange2ical->TimeZoneDesc){ struct tm tm; tm = get_tm_from_minutes(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OriginalStartDate); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_recurrenceid(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); param = icalparameter_new_tzid(exchange2ical->TimeZoneDesc); icalproperty_add_parameter(prop, param); } else { struct tm tm; tm = get_tm_from_minutes_UTC(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OriginalStartDate); icaltime= get_icaldate_from_tm(&tm); prop = icalproperty_new_recurrenceid(icaltime); icalcomponent_add_property(exchange2ical->vevent, prop); } } /*summary from Subject if subject is set*/ if (exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OverrideFlags & 0x0001) { exchange2ical->Subject=(const char *) &exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->Subject.subjectMsg.msg; ical_property_SUMMARY(exchange2ical); } /*Valarm*/ /*ReminderSet*/ if(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OverrideFlags & 0x0008){ exchange2ical->ReminderSet=(uint8_t *) &exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->ReminderDelta.rSet; /*Reminder Delta*/ if(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OverrideFlags & 0x0004){ exchange2ical->ReminderDelta=&exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->ReminderDelta.rDelta; } else { exchange2ical->ReminderDelta=NULL; } ical_component_VALARM(exchange2ical); } /*Location*/ if(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OverrideFlags & 0x0010){ exchange2ical->Location=(const char *) &exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->Location.locationMsg.msg; ical_property_LOCATION(exchange2ical); } /*Busy Status*/ if(exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->OverrideFlags & 0x0020){ exchange2ical->BusyStatus=&exchange2ical->AppointmentRecurrencePattern->ExceptionInfo->BusyStatus.bStatus; ical_property_X_MICROSOFT_CDO_BUSYSTATUS(exchange2ical); } } return 0; }
static void ical2exchange_get_properties(struct ical2exchange *ical2exchange, icalcomponent *vevent){ icalproperty *icalProp = NULL; icalproperty *prop = NULL; const char *xname; enum icalproperty_kind propType; icalProp=icalcomponent_get_first_property(vevent, ICAL_ANY_PROPERTY); while(icalProp!=0){ propType=icalproperty_isa(icalProp); switch (propType){ case ICAL_ATTACH_PROPERTY: if(!ical2exchange->attachEvent){ ical2exchange->attachEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); icalcomponent_add_property(ical2exchange->attachEvent, prop); break; case ICAL_ATTENDEE_PROPERTY: if(!ical2exchange->attendeeEvent){ ical2exchange->attendeeEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); icalcomponent_add_property(ical2exchange->attendeeEvent, prop); break; case ICAL_CATEGORIES_PROPERTY: if(!ical2exchange->categoriesEvent){ ical2exchange->categoriesEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); icalcomponent_add_property(ical2exchange->categoriesEvent, prop); break; case ICAL_CLASS_PROPERTY: ical2exchange->classProp=icalProp; break; case ICAL_COMMENT_PROPERTY: ical2exchange->commentProp=icalProp; break; case ICAL_CONTACT_PROPERTY: if(!ical2exchange->contactEvent){ ical2exchange->contactEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); icalcomponent_add_property(ical2exchange->contactEvent, prop); break; case ICAL_CREATED_PROPERTY: break; case ICAL_DESCRIPTION_PROPERTY: ical2exchange->descriptionProp=icalProp; break; case ICAL_DTEND_PROPERTY: ical2exchange->dtendProp=icalProp; break; case ICAL_DTSTAMP_PROPERTY: ical2exchange->dtstampProp=icalProp; break; case ICAL_DTSTART_PROPERTY: ical2exchange->dtstartProp=icalProp; break; case ICAL_DURATION_PROPERTY: ical2exchange->durationProp=icalProp; break; case ICAL_EXDATE_PROPERTY: if(!ical2exchange->exdateEvent){ ical2exchange->exdateEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); ical2exchange->exdateCount ++; icalcomponent_add_property(ical2exchange->exdateEvent, prop); break; case ICAL_LASTMODIFIED_PROPERTY: break; case ICAL_LOCATION_PROPERTY: ical2exchange->locationProp=icalProp; break; case ICAL_ORGANIZER_PROPERTY: //TODO: figure out how to MS-OXOABK ical2exchange->organizerProp=icalProp; break; case ICAL_PRIORITY_PROPERTY: ical2exchange->priorityProp=icalProp; break; case ICAL_RDATE_PROPERTY: if(!ical2exchange->rdateEvent){ ical2exchange->rdateEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); ical2exchange->rdateCount ++; icalcomponent_add_property(ical2exchange->rdateEvent, prop); break; case ICAL_RECURRENCEID_PROPERTY: ical2exchange->recurrenceidProp=icalProp; break; case ICAL_RESOURCES_PROPERTY: if(!ical2exchange->resourcesEvent){ ical2exchange->resourcesEvent=icalcomponent_new_vevent(); } prop = icalproperty_new_clone(icalProp); icalcomponent_add_property(ical2exchange->resourcesEvent, prop); break; case ICAL_RRULE_PROPERTY: ical2exchange->rruleProp=icalProp; break; case ICAL_SEQUENCE_PROPERTY: ical2exchange->sequenceProp=icalProp; break; case ICAL_STATUS_PROPERTY: ical2exchange->statusProp=icalProp; break; case ICAL_SUMMARY_PROPERTY: ical2exchange->summaryProp=icalProp; break; case ICAL_TRANSP_PROPERTY: ical2exchange->transpProp=icalProp; break; case ICAL_UID_PROPERTY: //TODO ical2exchange->uidProp=icalProp; break; case ICAL_X_PROPERTY: xname=icalproperty_get_x_name(icalProp); if(!strcmp(xname,"X-MICROSOFT-CDO-BUSYSTATUS")){ ical2exchange->x_busystatusProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-MSNCALENDAR-BUSYSTATUS")){ ical2exchange->x_busystatusProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-APPT-SEQUENCE")){ ical2exchange->x_sequenceProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-IMPORTANCE")){ ical2exchange->x_importanceProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-MSNCALENDAR-IMPORTANCE")){ ical2exchange->x_importanceProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-INTENDEDSTATUS")){ ical2exchange->x_intendedProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-MSNCALENDAR-INTENDEDSTATUS")){ ical2exchange->x_intendedProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-OWNERAPPTID")){ ical2exchange->x_ownerapptidProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE")){ ical2exchange->x_attendeecriticalchangeProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE")){ ical2exchange->x_ownercriticalchangeProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-CDO-REPLYTIME")){ ical2exchange->x_replytimeProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-DISALLOW-COUNTER")){ ical2exchange->x_disallowcounterProp=icalProp; } else if(!strcmp(xname,"X-MICROSOFT-ISDRAFT")){ ical2exchange->x_isdraftProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-ALLOWEXTERNCHECK")){ ical2exchange->x_allowexterncheckProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-APPTLASTSEQUENCE")){ ical2exchange->x_apptlastsequenceProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-APPTSEQTIME")){ ical2exchange->x_apptseqtimeProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-AUTOFILLLOCATION")){ ical2exchange->x_autofilllocationProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-AUTOSTARTCHECK")){ ical2exchange->x_autostartcheckProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-CONFCHECK")){ ical2exchange->x_confcheckProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-COLLABORATEDDOC")){ ical2exchange->x_collaborateddocProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-CONFTYPE")){ ical2exchange->x_conftypeProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-MWSURL")){ ical2exchange->x_mwsurlProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-NETSHOWURL")){ ical2exchange->x_netshowurlProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-ONLINEPASSWORD")){ ical2exchange->x_onlinepasswordProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-ORGALIAS")){ ical2exchange->x_orgaliasProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-ORIGINALEND")){ ical2exchange->x_originalendProp=icalProp; } else if(!strcmp(xname,"X-MS-OLK-ORIGINALSTART")){ ical2exchange->x_originalstartProp=icalProp; } break; default: break; } icalProp=icalcomponent_get_next_property(vevent, ICAL_ANY_PROPERTY); } ical2exchange->valarmEvent = icalcomponent_get_first_component(vevent,ICAL_VALARM_COMPONENT); }