CVS: sylpheedclaws/plugins/vcalendar/src vcal_folder.c,1.2.2.51,1.2.2.52 vcal_manager.c,1.1.2.48,1.1.2.49 vcalendar.c,1.2.2.45,1.2.2.46
[email protected] Wed, 27 Dec 2006 22:06:23 +0000
| Newsgroups | gmane.mail.sylpheed.claws.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src
In directory sunsite.dk:/tmp/cvs-serv29937/src
Modified Files:
Tag: gtk2
vcal_folder.c vcal_manager.c vcalendar.c
Log Message:
2006-12-27 [colin] 1.91.0cvs7
* src/vcal_folder.c
* src/vcal_manager.c
* src/vcalendar.c
Add recurrence support to webcal feeds
Index: vcal_folder.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_folder.c,v
retrieving revision 1.2.2.51
retrieving revision 1.2.2.52
diff -u -d -r1.2.2.51 -r1.2.2.52
--- vcal_folder.c 2006/12/27 20:45:56 1.2.2.51
+++ vcal_folder.c 2006/12/27 22:06:19 1.2.2.52
@@ -443,18 +443,41 @@
vcal_folder_block_export(TRUE);
while (evt) {
- icalproperty *prop = icalcomponent_get_first_property(evt, ICAL_UID_PROPERTY);
+ icalproperty *prop;
+ icalproperty *rprop = icalcomponent_get_first_property(evt, ICAL_RRULE_PROPERTY);
+ struct icalrecurrencetype recur;
+ struct icaltimetype next;
+ icalrecur_iterator* ritr;
EventTime days;
+
+ if (rprop) {
+ icalproperty *rprop2;
+ recur = icalproperty_get_rrule(rprop);
+ rprop2 = icalproperty_new_rrule(recur);
+ prop = icalcomponent_get_first_property(evt, ICAL_DTSTART_PROPERTY);
+ if (prop) {
+ ritr = icalrecur_iterator_new(recur, icalproperty_get_dtstart(prop));
+ next = icalrecur_iterator_next(ritr); /* skip first one */
+ }
+
+ rprop = rprop2;
+ }
+
+ prop = icalcomponent_get_first_property(evt, ICAL_UID_PROPERTY);
if (prop) {
+ gchar *orig_uid = NULL;
gchar *uid = g_strdup(icalproperty_get_uid(prop));
IcalFeedData *data = icalfeeddata_new(evt, NULL);
+ int i = 0;
+ orig_uid = g_strdup(uid);
+
+add_new:
item->numlist = g_slist_append(item->numlist, GINT_TO_POINTER(num));
item->evtlist = g_slist_append(item->evtlist, data);
data = NULL;
debug_print("add %d : %s\n", num, uid);
g_free(uid);
num++;
-
prop = icalcomponent_get_first_property(evt, ICAL_DTSTART_PROPERTY);
if (prop) {
struct icaltimetype itt = icalproperty_get_dtstart(prop);
@@ -491,9 +514,44 @@
item->evtlist = g_slist_append(item->evtlist, data);
data = NULL;
}
+ if (rprop) {
+ struct icaldurationtype ical_dur;
+ struct icaltimetype dtstart, dtend;
+ evt = icalcomponent_new_clone(evt);
+ prop = icalcomponent_get_first_property(evt, ICAL_RRULE_PROPERTY);
+ if (prop)
+ icalcomponent_remove_property(evt, prop);
+ prop = icalcomponent_get_first_property(evt, ICAL_DTSTART_PROPERTY);
+ if (prop)
+ dtstart = icalproperty_get_dtstart(prop);
+ prop = icalcomponent_get_first_property(evt, ICAL_DTEND_PROPERTY);
+ if (prop)
+ dtend = icalproperty_get_dtend(prop);
+ ical_dur = icaltime_subtract(dtend, dtstart);
+ next = icalrecur_iterator_next(ritr);
+ if (!icaltime_is_null_time(next) &&
+ !icaltime_is_null_time(dtstart) && i < 100) {
+ prop = icalcomponent_get_first_property(evt, ICAL_DTSTART_PROPERTY);
+ icalproperty_set_dtstart(prop, next);
+
+ prop = icalcomponent_get_first_property(evt, ICAL_DTEND_PROPERTY);
+ if (prop)
+ icalproperty_set_dtend(prop, icaltime_add(next, ical_dur));
+
+ prop = icalcomponent_get_first_property(evt, ICAL_UID_PROPERTY);
+ uid = g_strdup_printf("%s-%d", orig_uid, i);
+ icalproperty_set_uid(prop, uid);
+ data = icalfeeddata_new(evt, NULL);
+ i++;
+ goto add_new;
+ }
+ }
+ g_free(orig_uid);
} else {
debug_print("no uid!\n");
}
+ if (rprop)
+ icalproperty_free(rprop);
evt = icalcomponent_get_next_component(
item->cal, type);
}
Index: vcal_manager.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_manager.c,v
retrieving revision 1.1.2.48
retrieving revision 1.1.2.49
diff -u -d -r1.1.2.48 -r1.1.2.49
--- vcal_manager.c 2006/12/27 20:45:56 1.1.2.48
+++ vcal_manager.c 2006/12/27 22:06:19 1.1.2.49
@@ -1428,7 +1428,7 @@
}
} else if (today.tm_year > evtstart.tm_year) {
return EVENT_PAST;
- } else if (today.tm_year < evtstart.tm_year) {
+ } else if (today.tm_year == evtstart.tm_year - 1) {
int days = ((365 - today.tm_yday) + evtstart.tm_yday);
if (days == 0) {
return EVENT_TODAY;
Index: vcalendar.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcalendar.c,v
retrieving revision 1.2.2.45
retrieving revision 1.2.2.46
diff -u -d -r1.2.2.45 -r1.2.2.46
--- vcalendar.c 2006/12/27 20:45:57 1.2.2.45
+++ vcalendar.c 2006/12/27 22:06:19 1.2.2.46
@@ -429,7 +429,6 @@
rrule = g_strdup(icalrecurrencetype_as_string(&recur));
icalproperty_free(iprop);
}
- printf("got rrule %s\n", rrule);
return rrule;
}
@@ -453,7 +452,20 @@
struct icaltimetype itt = icalproperty_get_dtend(iprop);
dtend = g_strdup(icaltime_as_ical_string(itt));
icalproperty_free(iprop);
- }
+ } else {
+ iprop = vcalviewer_get_property(vcalviewer, ICAL_DURATION_PROPERTY);
+ if (iprop) {
+ struct icaldurationtype duration = icalproperty_get_duration(iprop);
+ struct icaltimetype itt;
+ icalproperty_free(iprop);
+ iprop = vcalviewer_get_property(vcalviewer, ICAL_DTSTART_PROPERTY);
+ itt = icalproperty_get_dtstart(iprop);
+ if (iprop) {
+ icalproperty_free(iprop);
+ dtend = g_strdup(icaltime_as_ical_string(icaltime_add(itt,duration)));
+ }
+ }
+ }
return dtend;
}