aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
Diffstat (limited to 'calendar')
-rw-r--r--calendar/cal-util/calobj.c86
-rw-r--r--calendar/calendar.c2
-rw-r--r--calendar/calobj.c86
-rw-r--r--calendar/gui/calendar.c2
-rw-r--r--calendar/gui/main.c6
-rw-r--r--calendar/main.c6
-rw-r--r--calendar/pcs/calobj.c86
7 files changed, 259 insertions, 15 deletions
diff --git a/calendar/cal-util/calobj.c b/calendar/cal-util/calobj.c
index 6dd7fa98db..8c5605c688 100644
--- a/calendar/cal-util/calobj.c
+++ b/calendar/cal-util/calobj.c
@@ -9,6 +9,7 @@
#include <string.h>
#include <glib.h>
#include "calobj.h"
+#include "timeutil.h"
#include "versit/vcc.h"
iCalObject *
@@ -66,9 +67,15 @@ ical_new (char *comment, char *organizer, char *summary)
}
static void
+my_free (gpointer data, gpointer user_dat_ignored)
+{
+ g_free (data);
+}
+
+static void
list_free (GList *list)
{
- g_list_foreach (list, g_free, 0);
+ g_list_foreach (list, my_free, 0);
g_list_free (list);
}
@@ -259,11 +266,37 @@ to_str (int num)
return buf;
}
+/*
+ * stores a GList in the property, using SEP as the value separator
+ */
+static void
+store_list (VObject *o, char *prop, GList *values, char sep)
+{
+ GList *l;
+ int len;
+ char *result, *p;
+
+ for (len = 0, l = values; l; l = l->next)
+ len += strlen (l->data) + 1;
+
+ result = g_malloc (len);
+ for (p = result, l = values; l; l = l->next){
+ int len = strlen (l->data);
+
+ strcpy (p, l->data);
+ p [len] = sep;
+ p += len+1;
+ }
+ addPropValue (o, prop, result);
+ g_free (p);
+}
+
VObject *
ical_object_to_vobject (iCalObject *ical)
{
VObject *o;
-
+ GList *l;
+
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
@@ -288,7 +321,54 @@ ical_object_to_vobject (iCalObject *ical)
/* completed */
if (ical->completed)
addPropValue (o, VCDTendProp, isodate_from_time_t (ical->completed));
-
+
+ /* last_mod */
+ addPropValue (o, VCLastModifiedProp, isodate_from_time_t (ical->last_mod));
+
+ /* exdate */
+ if (ical->exdate)
+ store_list (o, VCExpDateProp, ical->exdate, ',');
+
+ /* description/comment */
+ if (ical->comment)
+ addPropValue (o, VCDescriptionProp, ical->comment);
+
+ /* summary */
+ if (ical->summary)
+ addPropValue (o, VCSummaryProp, ical->summary);
+
+ /* status */
+ addPropValue (o, VCStatusProp, ical->status);
+
+ /* class */
+ addPropValue (o, VCClassProp, ical->class);
+
+ /* categories */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->categories, ',');
+
+ /* resources */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->resources, ";");
+
+ /* priority */
+ addPropValue (o, VCPriorityProp, to_str (ical->priority));
+
+ /* transparency */
+ addPropValue (o, VCTranspProp, to_str (ical->transp));
+
+ /* related */
+ store_list (o, VCRelatedToProp, ical->related, ";");
+
+ /* attach */
+ for (l = ical->attach; l; l = l->next)
+ addPropValue (o, VCAttachProp, l->data);
+
+ /* url */
+ if (ical->url)
+ addPropValue (o, VCURLProp, ical->url);
+
+ /* FIXME: alarms */
return o;
}
diff --git a/calendar/calendar.c b/calendar/calendar.c
index d2f164a49c..581a75ee2f 100644
--- a/calendar/calendar.c
+++ b/calendar/calendar.c
@@ -201,6 +201,7 @@ calendar_load (Calendar *cal, char *fname)
vcal = Parse_MIME_FromFileName (fname);
calendar_load_from_vobject (cal, vcal);
cleanVObject (vcal);
+ cleanStrTbl ();
}
void
@@ -226,5 +227,6 @@ calendar_save (Calendar *cal, char *fname)
}
writeVObjectToFile (fname, vcal);
cleanVObject (vcal);
+ cleanStrTbl ();
}
diff --git a/calendar/calobj.c b/calendar/calobj.c
index 6dd7fa98db..8c5605c688 100644
--- a/calendar/calobj.c
+++ b/calendar/calobj.c
@@ -9,6 +9,7 @@
#include <string.h>
#include <glib.h>
#include "calobj.h"
+#include "timeutil.h"
#include "versit/vcc.h"
iCalObject *
@@ -66,9 +67,15 @@ ical_new (char *comment, char *organizer, char *summary)
}
static void
+my_free (gpointer data, gpointer user_dat_ignored)
+{
+ g_free (data);
+}
+
+static void
list_free (GList *list)
{
- g_list_foreach (list, g_free, 0);
+ g_list_foreach (list, my_free, 0);
g_list_free (list);
}
@@ -259,11 +266,37 @@ to_str (int num)
return buf;
}
+/*
+ * stores a GList in the property, using SEP as the value separator
+ */
+static void
+store_list (VObject *o, char *prop, GList *values, char sep)
+{
+ GList *l;
+ int len;
+ char *result, *p;
+
+ for (len = 0, l = values; l; l = l->next)
+ len += strlen (l->data) + 1;
+
+ result = g_malloc (len);
+ for (p = result, l = values; l; l = l->next){
+ int len = strlen (l->data);
+
+ strcpy (p, l->data);
+ p [len] = sep;
+ p += len+1;
+ }
+ addPropValue (o, prop, result);
+ g_free (p);
+}
+
VObject *
ical_object_to_vobject (iCalObject *ical)
{
VObject *o;
-
+ GList *l;
+
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
@@ -288,7 +321,54 @@ ical_object_to_vobject (iCalObject *ical)
/* completed */
if (ical->completed)
addPropValue (o, VCDTendProp, isodate_from_time_t (ical->completed));
-
+
+ /* last_mod */
+ addPropValue (o, VCLastModifiedProp, isodate_from_time_t (ical->last_mod));
+
+ /* exdate */
+ if (ical->exdate)
+ store_list (o, VCExpDateProp, ical->exdate, ',');
+
+ /* description/comment */
+ if (ical->comment)
+ addPropValue (o, VCDescriptionProp, ical->comment);
+
+ /* summary */
+ if (ical->summary)
+ addPropValue (o, VCSummaryProp, ical->summary);
+
+ /* status */
+ addPropValue (o, VCStatusProp, ical->status);
+
+ /* class */
+ addPropValue (o, VCClassProp, ical->class);
+
+ /* categories */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->categories, ',');
+
+ /* resources */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->resources, ";");
+
+ /* priority */
+ addPropValue (o, VCPriorityProp, to_str (ical->priority));
+
+ /* transparency */
+ addPropValue (o, VCTranspProp, to_str (ical->transp));
+
+ /* related */
+ store_list (o, VCRelatedToProp, ical->related, ";");
+
+ /* attach */
+ for (l = ical->attach; l; l = l->next)
+ addPropValue (o, VCAttachProp, l->data);
+
+ /* url */
+ if (ical->url)
+ addPropValue (o, VCURLProp, ical->url);
+
+ /* FIXME: alarms */
return o;
}
diff --git a/calendar/gui/calendar.c b/calendar/gui/calendar.c
index d2f164a49c..581a75ee2f 100644
--- a/calendar/gui/calendar.c
+++ b/calendar/gui/calendar.c
@@ -201,6 +201,7 @@ calendar_load (Calendar *cal, char *fname)
vcal = Parse_MIME_FromFileName (fname);
calendar_load_from_vobject (cal, vcal);
cleanVObject (vcal);
+ cleanStrTbl ();
}
void
@@ -226,5 +227,6 @@ calendar_save (Calendar *cal, char *fname)
}
writeVObjectToFile (fname, vcal);
cleanVObject (vcal);
+ cleanStrTbl ();
}
diff --git a/calendar/gui/main.c b/calendar/gui/main.c
index b8e3f2fb9e..d499992b1c 100644
--- a/calendar/gui/main.c
+++ b/calendar/gui/main.c
@@ -208,13 +208,13 @@ GnomeUIInfo gnome_cal_menu [] = {
};
GnomeUIInfo gnome_toolbar [] = {
- { GNOME_APP_UI_ITEM, N_("Prev"), N_("Previous"), previous_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Prev"), NULL, previous_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
- { GNOME_APP_UI_ITEM, N_("Today"), N_("Today"), today_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Today"), NULL, today_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
- { GNOME_APP_UI_ITEM, N_("Next"), N_("Next"), next_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Next"), NULL, next_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD },
GNOMEUIINFO_END
diff --git a/calendar/main.c b/calendar/main.c
index b8e3f2fb9e..d499992b1c 100644
--- a/calendar/main.c
+++ b/calendar/main.c
@@ -208,13 +208,13 @@ GnomeUIInfo gnome_cal_menu [] = {
};
GnomeUIInfo gnome_toolbar [] = {
- { GNOME_APP_UI_ITEM, N_("Prev"), N_("Previous"), previous_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Prev"), NULL, previous_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
- { GNOME_APP_UI_ITEM, N_("Today"), N_("Today"), today_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Today"), NULL, today_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
- { GNOME_APP_UI_ITEM, N_("Next"), N_("Next"), next_clicked, 0, 0,
+ { GNOME_APP_UI_ITEM, N_("Next"), NULL, next_clicked, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD },
GNOMEUIINFO_END
diff --git a/calendar/pcs/calobj.c b/calendar/pcs/calobj.c
index 6dd7fa98db..8c5605c688 100644
--- a/calendar/pcs/calobj.c
+++ b/calendar/pcs/calobj.c
@@ -9,6 +9,7 @@
#include <string.h>
#include <glib.h>
#include "calobj.h"
+#include "timeutil.h"
#include "versit/vcc.h"
iCalObject *
@@ -66,9 +67,15 @@ ical_new (char *comment, char *organizer, char *summary)
}
static void
+my_free (gpointer data, gpointer user_dat_ignored)
+{
+ g_free (data);
+}
+
+static void
list_free (GList *list)
{
- g_list_foreach (list, g_free, 0);
+ g_list_foreach (list, my_free, 0);
g_list_free (list);
}
@@ -259,11 +266,37 @@ to_str (int num)
return buf;
}
+/*
+ * stores a GList in the property, using SEP as the value separator
+ */
+static void
+store_list (VObject *o, char *prop, GList *values, char sep)
+{
+ GList *l;
+ int len;
+ char *result, *p;
+
+ for (len = 0, l = values; l; l = l->next)
+ len += strlen (l->data) + 1;
+
+ result = g_malloc (len);
+ for (p = result, l = values; l; l = l->next){
+ int len = strlen (l->data);
+
+ strcpy (p, l->data);
+ p [len] = sep;
+ p += len+1;
+ }
+ addPropValue (o, prop, result);
+ g_free (p);
+}
+
VObject *
ical_object_to_vobject (iCalObject *ical)
{
VObject *o;
-
+ GList *l;
+
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
@@ -288,7 +321,54 @@ ical_object_to_vobject (iCalObject *ical)
/* completed */
if (ical->completed)
addPropValue (o, VCDTendProp, isodate_from_time_t (ical->completed));
-
+
+ /* last_mod */
+ addPropValue (o, VCLastModifiedProp, isodate_from_time_t (ical->last_mod));
+
+ /* exdate */
+ if (ical->exdate)
+ store_list (o, VCExpDateProp, ical->exdate, ',');
+
+ /* description/comment */
+ if (ical->comment)
+ addPropValue (o, VCDescriptionProp, ical->comment);
+
+ /* summary */
+ if (ical->summary)
+ addPropValue (o, VCSummaryProp, ical->summary);
+
+ /* status */
+ addPropValue (o, VCStatusProp, ical->status);
+
+ /* class */
+ addPropValue (o, VCClassProp, ical->class);
+
+ /* categories */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->categories, ',');
+
+ /* resources */
+ if (ical->categories)
+ store_list (o, VCCategoriesProp, ical->resources, ";");
+
+ /* priority */
+ addPropValue (o, VCPriorityProp, to_str (ical->priority));
+
+ /* transparency */
+ addPropValue (o, VCTranspProp, to_str (ical->transp));
+
+ /* related */
+ store_list (o, VCRelatedToProp, ical->related, ";");
+
+ /* attach */
+ for (l = ical->attach; l; l = l->next)
+ addPropValue (o, VCAttachProp, l->data);
+
+ /* url */
+ if (ical->url)
+ addPropValue (o, VCURLProp, ical->url);
+
+ /* FIXME: alarms */
return o;
}