diff options
Diffstat (limited to 'libical/src/libical/icalcomponent.c')
-rw-r--r-- | libical/src/libical/icalcomponent.c | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c index e36faae8e7..3ac0ee0663 100644 --- a/libical/src/libical/icalcomponent.c +++ b/libical/src/libical/icalcomponent.c @@ -696,8 +696,8 @@ time_t icalcomponent_convert_time(icalproperty *p) tzp = icalproperty_get_first_parameter(p,ICAL_TZID_PARAMETER); if (sict.is_utc == 1 && tzp != 0){ - icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); icalerror_warn("icalcomponent_get_span: component has a UTC DTSTART with a timezone specified "); + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } @@ -715,7 +715,7 @@ time_t icalcomponent_convert_time(icalproperty *p) /* _as_timet will use localtime() to do the conversion */ convt = icaltime_as_timet(sict); - offset = icaltime_local_utc_offset(); + offset = icaltime_utc_offset(sict,0); convt += offset; #ifdef TEST_CONVERT_TIME @@ -837,7 +837,7 @@ struct icaltime_span icalcomponent_get_span(icalcomponent* comp) dur = icalproperty_get_duration(duration); - durt = icaldurationtype_as_timet(dur); + durt = icaldurationtype_as_int(dur); span.end = span.start+durt; } @@ -1163,14 +1163,16 @@ struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp) } else if ( end_prop != 0) { return icalproperty_get_dtend(end_prop); } else if ( dur_prop != 0) { + struct icaltimetype start = icalcomponent_get_dtstart(inner); - time_t startt = icaltime_as_timet(start); struct icaldurationtype duration = icalproperty_get_duration(dur_prop); - time_t durt = icaldurationtype_as_timet(duration); - return icaltime_from_timet(startt+durt,start.is_date,start.is_utc); + struct icaltimetype end = icaltime_add(start,duration); + + return end; + } else { /* Error, both duration and dtend have been specified */ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); @@ -1200,14 +1202,12 @@ void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v) } else if ( dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); - time_t startt = icaltime_as_timet(start); struct icaltimetype end = icalcomponent_get_dtend(inner); - time_t endt = icaltime_as_timet(end); - + struct icaldurationtype dur - = icaldurationtype_from_timet(endt-startt); + = icaltime_subtract(end,start); icalproperty_set_duration(dur_prop,dur); @@ -1235,17 +1235,13 @@ void icalcomponent_set_duration(icalcomponent* comp, } else if ( end_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); - time_t startt = icaltime_as_timet(start); - time_t durt = icaldurationtype_as_timet(v); - - struct icaltimetype new_end - = icaltime_from_timet(startt+durt,start.is_date,start.is_utc); + struct icaltimetype new_end = icaltime_add(start,v); icalproperty_set_dtend(end_prop,new_end); } else if ( dur_prop != 0) { - icalproperty_set_duration(end_prop,v); + icalproperty_set_duration(dur_prop,v); } else { /* Error, both duration and dtend have been specified */ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); @@ -1277,7 +1273,7 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp) icalcomponent_get_dtend(inner); time_t endt = icaltime_as_timet(end); - return icaldurationtype_from_timet(endt-startt); + return icaldurationtype_from_int(endt-startt); } else if ( dur_prop != 0) { return icalproperty_get_duration(dur_prop); } else { @@ -1287,8 +1283,6 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp) } } - - void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method) { icalproperty *prop @@ -1348,8 +1342,34 @@ struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp) } -void icalcomponent_set_summary(icalcomponent* comp, const char* v); -const char* icalcomponent_get_summary(icalcomponent* comp); +void icalcomponent_set_summary(icalcomponent* comp, const char* v) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + icalproperty *prop + = icalcomponent_get_first_property(inner, ICAL_SUMMARY_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_summary(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_summary(prop,v); +} + + +const char* icalcomponent_get_summary(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + icalproperty *prop + = icalcomponent_get_first_property(inner,ICAL_SUMMARY_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_summary(prop); + +} void icalcomponent_set_comment(icalcomponent* comp, const char* v); const char* icalcomponent_get_comment(icalcomponent* comp); |