aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util/calobj.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-03-28 16:05:08 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2000-03-28 16:05:08 +0800
commit8f6adf987eabf47bbe8266f6a0f29de1e7ce2e68 (patch)
tree5d1d1b5f14f7f5f28893bf4f2a3cd14541642b58 /calendar/cal-util/calobj.c
parent8b355664ab9cabed3c0dd1ec25dba20a8e2827a9 (diff)
downloadgsoc2013-evolution-8f6adf987eabf47bbe8266f6a0f29de1e7ce2e68.tar.gz
gsoc2013-evolution-8f6adf987eabf47bbe8266f6a0f29de1e7ce2e68.tar.zst
gsoc2013-evolution-8f6adf987eabf47bbe8266f6a0f29de1e7ce2e68.zip
Use ical_object_to_string().
2000-03-27 Federico Mena Quintero <federico@helixcode.com> * pcs/cal-backend.c (cal_backend_get_object): Use ical_object_to_string(). * cal-util/calobj.c (ical_object_to_string): Moved over from pcs/cal-backend.c (was string_from_ical_object). (get_calendar_base_vobject): Likewise, moved over from pcs/cal-backend.c. * cal-util/cal-util.c: Removed string_to_ical_object(); the correct function is in calobj.[ch], called ical_object_find_in_string(). Removed ical_object_to_string, since we now implement it in calobj.c. * cal-util/calobj.c: Removed ical_object_new_from_string(); see above. * idl/evolution-calendar.idl (CalObjInstance): Calendar object instances now contain only the UID for the object, not the whole string representation of the object. This allows clients to implement caching of objects if they wish. * pcs/cal.c (Cal_get_events_in_range): Likewise. * pcs/cal-backend.c (build_event_list): Likewise. * cal-client/cal-client.c (cal_client_get_events_in_range): Likewise. * cal-util/cal-util.h (CalObjInstance): Likewise. * cal-util/cal-util.c (cal_obj_instance_list_free): Likewise. (cal_obj_uid_list_free): Assert that the UIDs in the list are not NULL. * pcs/tlacuache.gnorba (repo_id): The calendar factory also supports the Unknown interface. svn path=/trunk/; revision=2211
Diffstat (limited to 'calendar/cal-util/calobj.c')
-rw-r--r--calendar/cal-util/calobj.c97
1 files changed, 68 insertions, 29 deletions
diff --git a/calendar/cal-util/calobj.c b/calendar/cal-util/calobj.c
index 2aa8b434a8..53be88f362 100644
--- a/calendar/cal-util/calobj.c
+++ b/calendar/cal-util/calobj.c
@@ -17,6 +17,11 @@
+/* VCalendar product ID */
+#define PRODID "-//Helix Code//NONSGML Evolution Calendar//EN"
+
+
+
static char *
ical_gen_uid (void)
{
@@ -1493,35 +1498,6 @@ alarm_compute_offset (CalendarAlarm *a)
return a->offset;
}
-iCalObject *
-ical_object_new_from_string (const char *vcal_string)
-{
- iCalObject *ical = NULL;
- VObject *cal, *event;
- VObjectIterator i;
- const char *object_name;
-
- cal = Parse_MIME (vcal_string, strlen (vcal_string));
-
- initPropIterator (&i, cal);
-
- while (moreIteration (&i)){
- event = nextVObject (&i);
-
- object_name = vObjectName (event);
-
- if (strcmp (object_name, VCEventProp) == 0){
- ical = ical_object_create_from_vobject (event, object_name);
- break;
- }
- }
-
- cleanVObject (cal);
- cleanStrTbl ();
-
- return ical;
-}
-
/**
* ical_object_find_in_string:
* @uid: Unique identifier of the sought object.
@@ -1593,3 +1569,66 @@ ical_object_find_in_string (const char *uid, const char *vcalobj, iCalObject **i
return status;
}
+
+/* Creates a VObject with the base information of a calendar */
+static VObject *
+get_calendar_base_vobject (void)
+{
+ VObject *vobj;
+ time_t now;
+ struct tm tm;
+
+ /* We call localtime for the side effect of setting tzname */
+
+ now = time (NULL);
+ tm = *localtime (&now);
+
+ vobj = newVObject (VCCalProp);
+
+ addPropValue (vobj, VCProdIdProp, PRODID);
+
+#if defined (HAVE_TM_ZONE)
+ addPropValue (vobj, VCTimeZoneProp, tm.tm_zone);
+#elif defined (HAVE_TZNAME)
+ addPropValue (vobj, VCTimeZoneProp, tzname[0]);
+#endif
+
+ /* Per the vCalendar spec, this must be "1.0" */
+ addPropValue (vobj, VCVersionProp, "1.0");
+
+ return vobj;
+}
+
+/**
+ * ical_object_to_string:
+ * @ico: A calendar object.
+ *
+ * Converts a vCalendar object to its string representation. It is wrapped
+ * inside a complete VCALENDAR object because other auxiliary information such
+ * as timezones may appear there.
+ *
+ * Return value: String representation of the object.
+ **/
+char *
+ical_object_to_string (iCalObject *ico)
+{
+ VObject *vcalobj, *vobj;
+ char *buf, *gbuf;
+
+ vcalobj = get_calendar_base_vobject ();
+ vobj = ical_object_to_vobject (ico);
+ addVObjectProp (vcalobj, vobj);
+
+ buf = writeMemVObject (NULL, NULL, vcalobj);
+
+ cleanVObject (vcalobj);
+ cleanStrTbl ();
+
+ /* We have to g_strdup() it because libversit uses malloc()/realloc(),
+ * and we want clients to be able to use g_free(). Sigh.
+ */
+ gbuf = g_strdup (buf);
+ free (buf);
+
+ return gbuf;
+}