CVS: sylpheedclaws/plugins/vcalendar/src vcal_folder.c,1.2.2.50,1.2.2.51 vcal_folder.h,1.1.2.6,1.1.2.7 vcal_manager.c,1.1.2.47,1.1.2.48 vcal_manager.h,1.1.2.9,1.1.2.10 vcal_meeting_gtk.c,1.1.2.46,1.1.2.47 vcalendar.c,1.2.2.44,1.2.2.45
[email protected] Wed, 27 Dec 2006 20:46:02 +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-serv11755/src
Modified Files:
Tag: gtk2
vcal_folder.c vcal_folder.h vcal_manager.c vcal_manager.h
vcal_meeting_gtk.c vcalendar.c
Log Message:
2006-12-27 [colin] 1.91.0cvs6
* src/vcal_folder.c
* src/vcal_folder.h
* src/vcal_manager.c
* src/vcal_manager.h
* src/vcal_meeting_gtk.c
* src/vcalendar.c
Add recurrence support in meetings
Index: vcal_folder.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_folder.c,v
retrieving revision 1.2.2.50
retrieving revision 1.2.2.51
diff -u -d -r1.2.2.50 -r1.2.2.51
--- vcal_folder.c 2006/11/27 08:24:31 1.2.2.50
+++ vcal_folder.c 2006/12/27 20:45:56 1.2.2.51
@@ -441,6 +441,7 @@
item->evtlist = NULL;
}
+ vcal_folder_block_export(TRUE);
while (evt) {
icalproperty *prop = icalcomponent_get_first_property(evt, ICAL_UID_PROPERTY);
EventTime days;
@@ -498,9 +499,44 @@
}
*list = item->numlist ? g_slist_copy(item->numlist) : NULL;
debug_print("return %d\n", num);
+ vcal_folder_block_export(FALSE);
return num;
}
+#define VCAL_FOLDER_ADD_EVENT(event) \
+{ \
+ \
+ if (status == ICAL_PARTSTAT_ACCEPTED \
+ || status == ICAL_PARTSTAT_TENTATIVE) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ debug_print("add %d\n", n_msg); \
+ n_msg++; \
+ } \
+ days = event_to_today(event, 0); \
+ \
+ if (days == EVENT_PAST && past_msg == -1) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ past_msg = n_msg++; \
+ g_hash_table_insert(hash_uids, g_strdup_printf("%d", past_msg), g_strdup(EVENT_PAST_ID)); \
+ } else if (days == EVENT_TODAY && today_msg == -1) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ today_msg = n_msg++; \
+ g_hash_table_insert(hash_uids, g_strdup_printf("%d", today_msg), g_strdup(EVENT_TODAY_ID)); \
+ } else if (days == EVENT_TOMORROW && tomorrow_msg == -1) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ tomorrow_msg = n_msg++; \
+ g_hash_table_insert(hash_uids, g_strdup_printf("%d", tomorrow_msg), g_strdup(EVENT_TOMORROW_ID)); \
+ } else if (days == EVENT_THISWEEK && thisweek_msg == -1) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ thisweek_msg = n_msg++; \
+ g_hash_table_insert(hash_uids, g_strdup_printf("%d", thisweek_msg), g_strdup(EVENT_THISWEEK_ID)); \
+ } else if (days == EVENT_LATER && later_msg == -1) { \
+ *list = g_slist_append(*list, GINT_TO_POINTER(n_msg)); \
+ later_msg = n_msg++; \
+ g_hash_table_insert(hash_uids, g_strdup_printf("%d", later_msg), g_strdup(EVENT_LATER_ID)); \
+ } \
+}
+
static gint vcal_get_num_list(Folder *folder, FolderItem *item,
MsgNumberList ** list, gboolean *old_uids_valid)
{
@@ -512,7 +548,7 @@
thisweek_msg = -1, later_msg = -1;
debug_print(" num for %s\n", ((VCalFolderItem *)item)->uri);
-
+
*old_uids_valid = FALSE;
if (((VCalFolderItem *)item)->uri)
@@ -531,7 +567,8 @@
hash_uids = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, g_free);
-
+
+ vcal_folder_block_export(TRUE);
while ((d = readdir(dp)) != NULL) {
VCalEvent *event = NULL;
if (d->d_name[0] == '.' || strstr(d->d_name, ".bak")
@@ -544,48 +581,75 @@
g_hash_table_insert(hash_uids, snmsg, g_strdup(d->d_name));
event = vcal_manager_load_event(d->d_name);
+ if (event->rec_occurence) {
+ vcal_manager_free_event(event);
+ g_unlink(d->d_name);
+ continue;
+ }
if (event && event->method != ICAL_METHOD_CANCEL) {
- EventTime days;
- PrefsAccount *account = vcal_manager_get_account_from_event(event);
- enum icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION;
- status = account ? vcal_manager_get_reply_for_attendee(event, account->address): ICAL_PARTSTAT_NEEDSACTION;
+ EventTime days; \
+ PrefsAccount *account = vcal_manager_get_account_from_event(event); \
+ enum icalparameter_partstat status = \
+ account ? vcal_manager_get_reply_for_attendee(event, account->address): ICAL_PARTSTAT_NEEDSACTION; \
+ VCAL_FOLDER_ADD_EVENT(event);
+ if (event->recur && strlen(event->recur)) {
+ struct icalrecurrencetype recur;
+ struct icaltimetype dtstart;
+ struct icaltimetype next;
+ icalrecur_iterator* ritr;
+ time_t duration = (time_t) NULL;
+ struct icaldurationtype ical_dur;
+ int i = 0;
- if (status == ICAL_PARTSTAT_ACCEPTED
- || status == ICAL_PARTSTAT_TENTATIVE) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- debug_print("add %d:%s\n", n_msg, d->d_name);
- n_msg++;
- }
- days = event_to_today(event, 0);
-
- if (days == EVENT_PAST && past_msg == -1) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- past_msg = n_msg++;
- g_hash_table_insert(hash_uids, g_strdup_printf("%d", past_msg), g_strdup(EVENT_PAST_ID));
- } else if (days == EVENT_TODAY && today_msg == -1) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- today_msg = n_msg++;
- g_hash_table_insert(hash_uids, g_strdup_printf("%d", today_msg), g_strdup(EVENT_TODAY_ID));
- } else if (days == EVENT_TOMORROW && tomorrow_msg == -1) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- tomorrow_msg = n_msg++;
- g_hash_table_insert(hash_uids, g_strdup_printf("%d", tomorrow_msg), g_strdup(EVENT_TOMORROW_ID));
- } else if (days == EVENT_THISWEEK && thisweek_msg == -1) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- thisweek_msg = n_msg++;
- g_hash_table_insert(hash_uids, g_strdup_printf("%d", thisweek_msg), g_strdup(EVENT_THISWEEK_ID));
- } else if (days == EVENT_LATER && later_msg == -1) {
- *list = g_slist_append(*list, GINT_TO_POINTER(n_msg));
- later_msg = n_msg++;
- g_hash_table_insert(hash_uids, g_strdup_printf("%d", later_msg), g_strdup(EVENT_LATER_ID));
+ debug_print("dumping recurring events from main event\n");
+ recur = icalrecurrencetype_from_string(event->recur);
+ dtstart = icaltime_from_string(event->dtstart);
+
+ duration = icaltime_as_timet(icaltime_from_string(event->dtend))
+ - icaltime_as_timet(icaltime_from_string(event->dtstart));
+
+ ical_dur = icaldurationtype_from_int(duration);
+
+ ritr = icalrecur_iterator_new(recur, dtstart);
+
+ next = icalrecur_iterator_next(ritr); /* skip first one */
+ if (!icaltime_is_null_time(next))
+ next = icalrecur_iterator_next(ritr);
+ debug_print("next time is %snull\n", icaltime_is_null_time(next)?"":"not ");
+ while (!icaltime_is_null_time(next) && i < 100) {
+ gchar *new_start = NULL, *new_end = NULL;
+ VCalEvent *nevent = NULL;
+ gchar *uid = g_strdup_printf("%s-%d", event->uid, i);
+ new_start = icaltime_as_ical_string(next);
+ new_end = icaltime_as_ical_string(
+ icaltime_add(next, ical_dur));
+ debug_print("adding with start/end %s:%s\n", new_start, new_end);
+ nevent = vcal_manager_new_event(uid, event->organizer, event->orgname,
+ event->summary, event->description,
+ new_start, new_end, NULL,
+ event->tzid, event->url, event->method,
+ event->sequence, event->type);
+ vcal_manager_copy_attendees(event, nevent);
+ nevent->rec_occurence = TRUE;
+ vcal_manager_save_event(nevent);
+ snmsg = g_strdup_printf("%d",n_msg);
+ g_hash_table_insert(hash_uids, snmsg, g_strdup(uid));
+ VCAL_FOLDER_ADD_EVENT(nevent);
+ vcal_manager_free_event(nevent);
+ next = icalrecur_iterator_next(ritr);
+ debug_print("next time is %snull\n", icaltime_is_null_time(next)?"":"not ");
+ i++;
+ }
}
}
if (event)
vcal_manager_free_event(event);
+
+
}
closedir(dp);
-
+ vcal_folder_block_export(FALSE);
return g_slist_length(*list);
}
@@ -728,6 +792,7 @@
if (filename) {
created_files = g_slist_prepend(created_files, g_strdup(filename));
}
+
vcal_manager_free_event(event);
}
@@ -815,8 +880,18 @@
return TRUE;
}
+static gboolean vcal_folder_no_export;
+void vcal_folder_block_export(gboolean block)
+{
+ vcal_folder_no_export = block;
+ if (block == FALSE)
+ vcal_folder_export();
+}
+
void vcal_folder_export(void)
{
+ if (vcal_folder_no_export)
+ return;
if (vcal_meeting_export_calendar(vcalprefs.export_path, TRUE)) {
debug_print("exporting calendar\n");
if (vcalprefs.export_enable &&
@@ -1187,7 +1262,7 @@
res = curl_easy_perform(curl_ctx);
if (res != 0) {
- printf("res %d %s\n", res, curl_easy_strerror(res));
+ debug_print("res %d %s\n", res, curl_easy_strerror(res));
td->error = g_strdup(curl_easy_strerror(res));
}
@@ -1312,7 +1387,7 @@
res = curl_easy_perform(curl_ctx);
if (res != 0) {
- printf("res %d %s\n", res, curl_easy_strerror(res));
+ debug_print("res %d %s\n", res, curl_easy_strerror(res));
} else {
res = TRUE;
}
Index: vcal_folder.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_folder.h,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -d -r1.1.2.6 -r1.1.2.7
--- vcal_folder.h 2006/11/07 11:01:47 1.1.2.6
+++ vcal_folder.h 2006/12/27 20:45:56 1.1.2.7
@@ -38,4 +38,5 @@
void (*callback)(const gchar *url, gchar *data, gboolean verbose, gchar
*error));
gchar* get_item_event_list_for_date(FolderItem *item, EventTime date);
+void vcal_folder_block_export(gboolean block);
#endif
Index: vcal_manager.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_manager.c,v
retrieving revision 1.1.2.47
retrieving revision 1.1.2.48
diff -u -d -r1.1.2.47 -r1.1.2.48
--- vcal_manager.c 2006/12/15 12:22:57 1.1.2.47
+++ vcal_manager.c 2006/12/27 20:45:56 1.1.2.48
@@ -84,6 +84,17 @@
return NULL;
}
+void vcal_manager_copy_attendees(VCalEvent *src, VCalEvent *dest)
+{
+ GSList *cur = src->answers;
+ while (cur && cur->data) {
+ Answer *a = (Answer *)cur->data;
+ Answer *b = answer_new(a->attendee, a->name, a->answer, a->cutype);
+ dest->answers = g_slist_append(dest->answers, b);
+ cur = cur->next;
+ }
+}
+
gchar *vcal_manager_answer_get_text(enum icalparameter_partstat ans)
{
static gchar *replies[5]={
@@ -247,6 +258,7 @@
"event->url\t%s\n"
"event->dtstart\t\t%s\n"
"event->dtend\t\t%s\n"
+ "event->recur\t\t%s\n"
"event->tzid\t\t%s\n"
"event->method\t\t%d\n"
"event->sequence\t\t%d\n",
@@ -259,6 +271,7 @@
event->url,
event->dtstart,
event->dtend,
+ event->recur,
event->tzid,
event->method,
event->sequence);
@@ -387,6 +400,10 @@
icalproperty_vanew_dtstart((icaltime_from_string(event->dtstart)), 0));
icalcomponent_add_property(ievent,
icalproperty_vanew_dtend((icaltime_from_string(event->dtend)), 0));
+ if (event->recur && strlen(event->recur)) {
+ icalcomponent_add_property(ievent,
+ icalproperty_vanew_rrule((icalrecurrencetype_from_string(event->recur)), 0));
+ }
icalcomponent_add_property(ievent,
icalproperty_new_description(event->description));
icalcomponent_add_property(ievent,
@@ -746,6 +763,7 @@
const gchar *description,
const gchar *dtstart,
const gchar *dtend,
+ const gchar *recur,
const gchar *tzid,
const gchar *url,
enum icalproperty_method method,
@@ -770,6 +788,7 @@
}
event->dtstart = g_strdup(dtstart?dtstart:"");
event->dtend = g_strdup(dtend?dtend:"");
+ event->recur = g_strdup(recur?recur:"");
event->summary = g_strdup(summary?summary:"");
event->description = g_strdup(description?description:"");
event->url = g_strdup(url?url:"");
@@ -777,6 +796,7 @@
event->method = method;
event->sequence = sequence;
event->type = type;
+ event->rec_occurence = FALSE;
return event;
}
@@ -792,6 +812,7 @@
g_free(event->summary);
g_free(event->dtstart);
g_free(event->dtend);
+ g_free(event->recur);
g_free(event->tzid);
g_free(event->description);
g_free(event->url);
@@ -857,6 +878,7 @@
xml_tag_add_attr(tag, xml_attr_new("url", event->url));
xml_tag_add_attr(tag, xml_attr_new("dtstart", event->dtstart));
xml_tag_add_attr(tag, xml_attr_new("dtend", event->dtend));
+ xml_tag_add_attr(tag, xml_attr_new("recur", event->recur));
xml_tag_add_attr(tag, xml_attr_new("tzid", event->tzid));
/* updating answers saves events, don't save them with reply type */
@@ -879,6 +901,10 @@
xml_tag_add_attr(tag, xml_attr_new("postponed", tmp));
g_free(tmp);
+ tmp = g_strdup_printf("%lu", event->rec_occurence);
+ xml_tag_add_attr(tag, xml_attr_new("rec_occurence", tmp));
+ g_free(tmp);
+
xmlnode = xml_node_new(tag, NULL);
rootnode = g_node_new(xmlnode);
@@ -929,11 +955,12 @@
XMLNode *xmlnode;
GList *list;
gchar *org = NULL, *summary = NULL, *orgname = NULL;
- gchar *dtstart = NULL, *dtend = NULL, *tzid = NULL, *description = NULL, *url = NULL;
+ gchar *dtstart = NULL, *dtend = NULL, *tzid = NULL;
+ gchar *description = NULL, *url = NULL, *recur = NULL;
VCalEvent *event = NULL;
enum icalproperty_method method = ICAL_METHOD_REQUEST;
enum icalproperty_kind type = ICAL_VEVENT_COMPONENT;
- gint sequence = 0;
+ gint sequence = 0, rec_occurence = 0;
time_t postponed = (time_t)0;
g_return_val_if_fail(node->data != NULL, NULL);
@@ -963,6 +990,8 @@
dtstart = g_strdup(attr->value);
if (!strcmp(attr->name, "dtend"))
dtend = g_strdup(attr->value);
+ if (!strcmp(attr->name, "recur"))
+ recur = g_strdup(attr->value);
if (!strcmp(attr->name, "tzid"))
tzid = g_strdup(attr->value);
if (!strcmp(attr->name, "type"))
@@ -973,13 +1002,16 @@
sequence = atoi(attr->value);
if (!strcmp(attr->name, "postponed"))
postponed = atoi(attr->value);
+ if (!strcmp(attr->name, "rec_occurence"))
+ rec_occurence = atoi(attr->value);
}
event = vcal_manager_new_event(uid, org, orgname, summary, description,
- dtstart, dtend, tzid, url, method,
+ dtstart, dtend, recur, tzid, url, method,
sequence, type);
event->postponed = postponed;
+ event->rec_occurence = rec_occurence;
g_free(org);
g_free(orgname);
@@ -988,6 +1020,7 @@
g_free(url);
g_free(dtstart);
g_free(dtend);
+ g_free(recur);
g_free(tzid);
node = node->children;
@@ -1395,9 +1428,19 @@
}
} else if (today.tm_year > evtstart.tm_year) {
return EVENT_PAST;
- } else {
+ } else if (today.tm_year < evtstart.tm_year) {
+ int days = ((365 - today.tm_yday) + evtstart.tm_yday);
+ if (days == 0) {
+ return EVENT_TODAY;
+ } else if (days == 1) {
+ return EVENT_TOMORROW;
+ } else if (days > 1 && days < 7) {
+ return EVENT_THISWEEK;
+ } else {
+ return EVENT_LATER;
+ }
+ } else
return EVENT_LATER;
- }
}
const gchar *event_to_today_str(VCalEvent *event, time_t t)
Index: vcal_manager.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_manager.h,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -d -r1.1.2.9 -r1.1.2.10
--- vcal_manager.h 2006/11/07 11:01:48 1.1.2.9
+++ vcal_manager.h 2006/12/27 20:45:57 1.1.2.10
@@ -41,6 +41,7 @@
gchar *end;
gchar *dtstart;
gchar *dtend;
+ gchar *recur;
gchar *tzid;
gchar *summary;
gchar *description;
@@ -50,6 +51,7 @@
gchar *url;
enum icalproperty_kind type;
time_t postponed;
+ gboolean rec_occurence;
};
typedef enum {
@@ -66,6 +68,7 @@
const gchar *description,
const gchar *dtstart,
const gchar *dtend,
+ const gchar *recur,
const gchar *tzid,
const gchar *url,
enum icalproperty_method method,
@@ -107,4 +110,5 @@
void vcal_manager_event_print(VCalEvent *event);
EventTime event_to_today(VCalEvent *event, time_t t);
const gchar *event_to_today_str(VCalEvent *event, time_t t);
+void vcal_manager_copy_attendees(VCalEvent *src, VCalEvent *dest);
#endif
Index: vcal_meeting_gtk.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcal_meeting_gtk.c,v
retrieving revision 1.1.2.46
retrieving revision 1.1.2.47
diff -u -d -r1.1.2.46 -r1.1.2.47
--- vcal_meeting_gtk.c 2006/11/07 11:01:48 1.1.2.46
+++ vcal_meeting_gtk.c 2006/12/27 20:45:57 1.1.2.47
@@ -993,7 +993,7 @@
description = get_description(meet);
event = vcal_manager_new_event(uid, organizer, organizer_name, summary, description,
- dtstart, dtend, tzid, NULL, meet->method,
+ dtstart, dtend, NULL, tzid, NULL, meet->method,
meet->sequence,
ICAL_VEVENT_COMPONENT);
@@ -1651,8 +1651,11 @@
&& strncmp(file, "https://", 8)
&& strncmp(file, "webdav://", 9)
&& strncmp(file, "ftp://", 6)) {
- if (move_file(tmpfile, file, TRUE) != 0)
+ if (move_file(tmpfile, file, TRUE) != 0) {
+ log_error(_("Couldn't export calendar to '%s'\n"),
+ file);
res = FALSE;
+ }
g_free(file);
} else if (file) {
FILE *fp = fopen(tmpfile, "rb");
@@ -1931,8 +1934,11 @@
&& strncmp(file, "https://", 8)
&& strncmp(file, "webdav://", 9)
&& strncmp(file, "ftp://", 6)) {
- if (move_file(tmpfile, file, TRUE) != 0)
+ if (move_file(tmpfile, file, TRUE) != 0) {
+ log_error(_("Couldn't export free/busy to '%s'\n"),
+ file);
res = FALSE;
+ }
g_free(file);
} else if (file) {
FILE *fp = fopen(tmpfile, "rb");
Index: vcalendar.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/plugins/vcalendar/src/vcalendar.c,v
retrieving revision 1.2.2.44
retrieving revision 1.2.2.45
diff -u -d -r1.2.2.44 -r1.2.2.45
--- vcalendar.c 2006/12/15 12:22:57 1.2.2.44
+++ vcalendar.c 2006/12/27 20:45:57 1.2.2.45
@@ -420,6 +420,19 @@
return account;
}
+static gchar *vcalviewer_get_recurrence(VCalViewer *vcalviewer)
+{
+ gchar *rrule = NULL;
+ icalproperty *iprop = vcalviewer_get_property(vcalviewer, ICAL_RRULE_PROPERTY);
+ if (iprop) {
+ struct icalrecurrencetype recur = icalproperty_get_rrule(iprop);
+ rrule = g_strdup(icalrecurrencetype_as_string(&recur));
+ icalproperty_free(iprop);
+ }
+ printf("got rrule %s\n", rrule);
+ return rrule;
+}
+
static gchar *vcalviewer_get_dtstart(VCalViewer *vcalviewer)
{
gchar *dtstart = NULL;
@@ -466,7 +479,7 @@
vcalviewer_show_unavailable(vcalviewer, FALSE);
- if (method == ICAL_METHOD_REQUEST) {
+ if (method == ICAL_METHOD_REQUEST && event && !event->rec_occurence) {
PrefsAccount *account = get_account_from_attendees(vcalviewer);
if (!account && event) {
account = account_get_default();
@@ -620,7 +633,21 @@
}
if (event->start && strlen(event->start)) {
- GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), event->start);
+ if (event->recur && strlen(event->recur)) {
+ gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event recurs)</span>"),
+ event->start);
+ GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp);
+ gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE);
+ g_free(tmp);
+ } else if (event->rec_occurence) {
+ gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event is part of a recurring event)</span>"),
+ event->start);
+ GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp);
+ gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE);
+ g_free(tmp);
+ } else {
+ GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), event->start);
+ }
} else {
GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), "-");
}
@@ -734,6 +761,7 @@
icalproperty *iprop = NULL;
gchar *org = NULL, *summary = NULL, *description = NULL, *url = NULL;
gchar *dtstart = NULL, *dtend = NULL, *tzid = NULL, *orgname = NULL;
+ gchar *recur = NULL;
enum icalproperty_method method = ICAL_METHOD_REQUEST;
VCalEvent *event = NULL;
gchar *tmp;
@@ -821,6 +849,7 @@
}
dtstart = vcalviewer_get_dtstart(vcalviewer);
dtend = vcalviewer_get_dtend(vcalviewer);
+ recur = vcalviewer_get_recurrence(vcalviewer);
iprop = vcalviewer_get_property(vcalviewer, ICAL_TZID_PROPERTY);
if (iprop) {
@@ -836,7 +865,7 @@
event = vcal_manager_new_event( uid,
org, orgname, summary, description,
- dtstart, dtend, tzid, url, method, sequence,
+ dtstart, dtend, recur, tzid, url, method, sequence,
is_todo?ICAL_VTODO_COMPONENT:ICAL_VEVENT_COMPONENT);
vcalviewer_get_attendees(vcalviewer, event);
if (!saveme || strcmp(saveme,"no"))
@@ -850,6 +879,7 @@
g_free(uid);
g_free(dtstart);
g_free(dtend);
+ g_free(recur);
g_free(tzid);
vcalviewer_display_event(vcalviewer, event);
vcal_manager_free_event(event);