diff options
-rw-r--r-- | calendar/ChangeLog | 21 | ||||
-rw-r--r-- | calendar/cal-backend.c | 46 | ||||
-rw-r--r-- | calendar/cal-client.c | 15 | ||||
-rw-r--r-- | calendar/cal-client.h | 4 | ||||
-rw-r--r-- | calendar/cal-client/cal-client.c | 15 | ||||
-rw-r--r-- | calendar/cal-client/cal-client.h | 4 | ||||
-rw-r--r-- | calendar/cal-client/cal-listener.c | 8 | ||||
-rw-r--r-- | calendar/cal-client/cal-listener.h | 6 | ||||
-rw-r--r-- | calendar/cal-listener.c | 8 | ||||
-rw-r--r-- | calendar/cal-listener.h | 6 | ||||
-rw-r--r-- | calendar/evolution-calendar.idl | 4 | ||||
-rw-r--r-- | calendar/idl/evolution-calendar.idl | 4 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.c | 46 |
13 files changed, 149 insertions, 38 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index fdf45f6f6b..489b0f319c 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,26 @@ 2000-02-04 Federico Mena Quintero <federico@helixcode.com> + * cal-backend.c (get_calendar_base_vobject): New function to + create the base VObject for a calendar. + (cal_backend_get_object): Create the base calendar and add the + sought object to it, then stringify it. + + * evolution-calendar.idl (Listener::obj_added + Listener::obj_changed): Now these pass in just the UIDs, not the + complete objects. + + * cal-listener.c (Listener_obj_added): Changed to pass in the uid, + not the object. + (Listener_obj_changed): Likewise. + + * cal-client.h (CalClientClass): Made the obj_added and + obj_changed signals take in the UIDs, not the full objects. + + * cal-client.c (obj_added_cb): Likewise. + (obj_changed_cb): Likewise. + +2000-02-04 Federico Mena Quintero <federico@helixcode.com> + * cal-backend.c (CalBackendPrivate): Renamed the event_hash field to object_hash. Now we hash all the calendar's objects here based on their UIDs. diff --git a/calendar/cal-backend.c b/calendar/cal-backend.c index ffbbdab472..72315e3882 100644 --- a/calendar/cal-backend.c +++ b/calendar/cal-backend.c @@ -26,6 +26,11 @@ +/* VCalendar product ID */ +#define PRODID "-//Helix Code//NONSGML Tlacuache//EN" + + + /* Private part of the CalBackend structure */ typedef struct { /* URI where the calendar data is stored */ @@ -265,6 +270,35 @@ load_from_vobject (CalBackend *backend, VObject *vobject) } } +/* Creates a VObject with the base information of a calendar */ +static VObject * +get_calendar_base_vobject (CalBackend *backend) +{ + 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; +} + /** @@ -433,6 +467,7 @@ cal_backend_get_object (CalBackend *backend, const char *uid) { CalBackendPrivate *priv; iCalObject *ico; + VObject *vcalobj, *vobj; char *buf; g_return_val_if_fail (backend != NULL, NULL); @@ -450,5 +485,14 @@ cal_backend_get_object (CalBackend *backend, const char *uid) if (!ico) return NULL; - /* FIXME */ + vcalobj = get_calendar_base_vobject (backend); + vobj = ical_object_to_vobject (ico); + addVObjectProp (vcalobj, vobj); + + buf = writeMemVObject (NULL, NULL, vcalobj); + + cleanVObject (vcalobj); + cleanStrTbl (); + + return buf; } diff --git a/calendar/cal-client.c b/calendar/cal-client.c index 2125760eb0..63d33610f6 100644 --- a/calendar/cal-client.c +++ b/calendar/cal-client.c @@ -245,17 +245,17 @@ cal_loaded_cb (CalListener *listener, /* Handle the obj_added signal from the listener */ static void -obj_added_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data) +obj_added_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_ADDED], calobj); + gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_ADDED], uid); } /* Handle the obj_removed signal from the listener */ static void -obj_removed_cb (CalListener *listener, Evolution_Calendar_CalObjUID uid, gpointer data) +obj_removed_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; @@ -265,12 +265,12 @@ obj_removed_cb (CalListener *listener, Evolution_Calendar_CalObjUID uid, gpointe /* Handle the obj_changed signal from the listener */ static void -obj_changed_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data) +obj_changed_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_CHANGED], calobj); + gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_CHANGED], uid); } @@ -432,8 +432,9 @@ cal_client_load_calendar (CalClient *client, const char *str_uri) * * Queries a calendar for a calendar object based on its unique identifier. * - * Return value: The string representation of the calendar object corresponding - * to the specified @uid, or NULL if no such object was found. + * Return value: The string representation of a complete calendar wrapping the + * sought object, or NULL if no object had the specified UID. A complete + * calendar is returned because you also need the timezone data. **/ char * cal_client_get_object (CalClient *client, const char *uid) diff --git a/calendar/cal-client.h b/calendar/cal-client.h index b20a3c378c..2f9ae5e1f8 100644 --- a/calendar/cal-client.h +++ b/calendar/cal-client.h @@ -58,9 +58,9 @@ struct _CalClientClass { void (* cal_loaded) (CalClient *client, CalClientLoadStatus status); - void (* obj_added) (CalClient *client, const char *str_obj); + void (* obj_added) (CalClient *client, const char *uid); void (* obj_removed) (CalClient *client, const char *uid); - void (* obj_changed) (CalClient *client, const char *str_obj); + void (* obj_changed) (CalClient *client, const char *uid); }; GtkType cal_client_get_type (void); diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c index 2125760eb0..63d33610f6 100644 --- a/calendar/cal-client/cal-client.c +++ b/calendar/cal-client/cal-client.c @@ -245,17 +245,17 @@ cal_loaded_cb (CalListener *listener, /* Handle the obj_added signal from the listener */ static void -obj_added_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data) +obj_added_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_ADDED], calobj); + gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_ADDED], uid); } /* Handle the obj_removed signal from the listener */ static void -obj_removed_cb (CalListener *listener, Evolution_Calendar_CalObjUID uid, gpointer data) +obj_removed_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; @@ -265,12 +265,12 @@ obj_removed_cb (CalListener *listener, Evolution_Calendar_CalObjUID uid, gpointe /* Handle the obj_changed signal from the listener */ static void -obj_changed_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data) +obj_changed_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) { CalClient *client; client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_CHANGED], calobj); + gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_CHANGED], uid); } @@ -432,8 +432,9 @@ cal_client_load_calendar (CalClient *client, const char *str_uri) * * Queries a calendar for a calendar object based on its unique identifier. * - * Return value: The string representation of the calendar object corresponding - * to the specified @uid, or NULL if no such object was found. + * Return value: The string representation of a complete calendar wrapping the + * sought object, or NULL if no object had the specified UID. A complete + * calendar is returned because you also need the timezone data. **/ char * cal_client_get_object (CalClient *client, const char *uid) diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h index b20a3c378c..2f9ae5e1f8 100644 --- a/calendar/cal-client/cal-client.h +++ b/calendar/cal-client/cal-client.h @@ -58,9 +58,9 @@ struct _CalClientClass { void (* cal_loaded) (CalClient *client, CalClientLoadStatus status); - void (* obj_added) (CalClient *client, const char *str_obj); + void (* obj_added) (CalClient *client, const char *uid); void (* obj_removed) (CalClient *client, const char *uid); - void (* obj_changed) (CalClient *client, const char *str_obj); + void (* obj_changed) (CalClient *client, const char *uid); }; GtkType cal_client_get_type (void); diff --git a/calendar/cal-client/cal-listener.c b/calendar/cal-client/cal-listener.c index 62db9c287d..fee7e96024 100644 --- a/calendar/cal-client/cal-listener.c +++ b/calendar/cal-client/cal-listener.c @@ -269,14 +269,14 @@ Listener_cal_loaded (PortableServer_Servant servant, /* Listener::obj_added method */ static void Listener_obj_added (PortableServer_Servant servant, - Evolution_Calendar_CalObj calobj, + Evolution_Calendar_CalObjUID uid, CORBA_Environment *ev) { CalListener *listener; listener = CAL_LISTENER (bonobo_object_from_servant (servant)); gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_ADDED], - calobj); + uid); } /* Listener::obj_removed method */ @@ -295,14 +295,14 @@ Listener_obj_removed (PortableServer_Servant servant, /* Listener::obj_changed method */ static void Listener_obj_changed (PortableServer_Servant servant, - Evolution_Calendar_CalObj calobj, + Evolution_Calendar_CalObjUID uid, CORBA_Environment *ev) { CalListener *listener; listener = CAL_LISTENER (bonobo_object_from_servant (servant)); gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_CHANGED], - calobj); + uid); } /** diff --git a/calendar/cal-client/cal-listener.h b/calendar/cal-client/cal-listener.h index bc112091f9..8988148f34 100644 --- a/calendar/cal-client/cal-listener.h +++ b/calendar/cal-client/cal-listener.h @@ -61,9 +61,9 @@ struct _CalListenerClass { void (* cal_loaded) (CalListener *listener, CalListenerLoadStatus status, Evolution_Calendar_Cal cal); - void (* obj_added) (CalListener *listener, Evolution_Calendar_CalObj calobj); - void (* obj_removed) (CalListener *listener, Evolution_Calendar_CalObjUID uid); - void (* obj_changed) (CalListener *listener, Evolution_Calendar_CalObj calobj); + void (* obj_added) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); + void (* obj_removed) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); + void (* obj_changed) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); }; GtkType cal_listener_get_type (void); diff --git a/calendar/cal-listener.c b/calendar/cal-listener.c index 62db9c287d..fee7e96024 100644 --- a/calendar/cal-listener.c +++ b/calendar/cal-listener.c @@ -269,14 +269,14 @@ Listener_cal_loaded (PortableServer_Servant servant, /* Listener::obj_added method */ static void Listener_obj_added (PortableServer_Servant servant, - Evolution_Calendar_CalObj calobj, + Evolution_Calendar_CalObjUID uid, CORBA_Environment *ev) { CalListener *listener; listener = CAL_LISTENER (bonobo_object_from_servant (servant)); gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_ADDED], - calobj); + uid); } /* Listener::obj_removed method */ @@ -295,14 +295,14 @@ Listener_obj_removed (PortableServer_Servant servant, /* Listener::obj_changed method */ static void Listener_obj_changed (PortableServer_Servant servant, - Evolution_Calendar_CalObj calobj, + Evolution_Calendar_CalObjUID uid, CORBA_Environment *ev) { CalListener *listener; listener = CAL_LISTENER (bonobo_object_from_servant (servant)); gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_CHANGED], - calobj); + uid); } /** diff --git a/calendar/cal-listener.h b/calendar/cal-listener.h index bc112091f9..8988148f34 100644 --- a/calendar/cal-listener.h +++ b/calendar/cal-listener.h @@ -61,9 +61,9 @@ struct _CalListenerClass { void (* cal_loaded) (CalListener *listener, CalListenerLoadStatus status, Evolution_Calendar_Cal cal); - void (* obj_added) (CalListener *listener, Evolution_Calendar_CalObj calobj); - void (* obj_removed) (CalListener *listener, Evolution_Calendar_CalObjUID uid); - void (* obj_changed) (CalListener *listener, Evolution_Calendar_CalObj calobj); + void (* obj_added) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); + void (* obj_removed) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); + void (* obj_changed) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); }; GtkType cal_listener_get_type (void); diff --git a/calendar/evolution-calendar.idl b/calendar/evolution-calendar.idl index 2ccfc0ec80..6746eb66a1 100644 --- a/calendar/evolution-calendar.idl +++ b/calendar/evolution-calendar.idl @@ -51,13 +51,13 @@ module Calendar { void cal_loaded (in LoadStatus status, in Cal cal); /* Called from a Calendar when an object is added */ - void obj_added (in CalObj calobj); + void obj_added (in CalObjUID uid); /* Called from a Calendar when an object is removed */ void obj_removed (in CalObjUID uid); /* Called from a Calendar when an object is changed */ - void obj_changed (in CalObj calobj); + void obj_changed (in CalObjUID uid); }; /* A calendar factory, can load and create calendars */ diff --git a/calendar/idl/evolution-calendar.idl b/calendar/idl/evolution-calendar.idl index 2ccfc0ec80..6746eb66a1 100644 --- a/calendar/idl/evolution-calendar.idl +++ b/calendar/idl/evolution-calendar.idl @@ -51,13 +51,13 @@ module Calendar { void cal_loaded (in LoadStatus status, in Cal cal); /* Called from a Calendar when an object is added */ - void obj_added (in CalObj calobj); + void obj_added (in CalObjUID uid); /* Called from a Calendar when an object is removed */ void obj_removed (in CalObjUID uid); /* Called from a Calendar when an object is changed */ - void obj_changed (in CalObj calobj); + void obj_changed (in CalObjUID uid); }; /* A calendar factory, can load and create calendars */ diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index ffbbdab472..72315e3882 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -26,6 +26,11 @@ +/* VCalendar product ID */ +#define PRODID "-//Helix Code//NONSGML Tlacuache//EN" + + + /* Private part of the CalBackend structure */ typedef struct { /* URI where the calendar data is stored */ @@ -265,6 +270,35 @@ load_from_vobject (CalBackend *backend, VObject *vobject) } } +/* Creates a VObject with the base information of a calendar */ +static VObject * +get_calendar_base_vobject (CalBackend *backend) +{ + 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; +} + /** @@ -433,6 +467,7 @@ cal_backend_get_object (CalBackend *backend, const char *uid) { CalBackendPrivate *priv; iCalObject *ico; + VObject *vcalobj, *vobj; char *buf; g_return_val_if_fail (backend != NULL, NULL); @@ -450,5 +485,14 @@ cal_backend_get_object (CalBackend *backend, const char *uid) if (!ico) return NULL; - /* FIXME */ + vcalobj = get_calendar_base_vobject (backend); + vobj = ical_object_to_vobject (ico); + addVObjectProp (vcalobj, vobj); + + buf = writeMemVObject (NULL, NULL, vcalobj); + + cleanVObject (vcalobj); + cleanStrTbl (); + + return buf; } |