diff options
Diffstat (limited to 'calendar/pcs')
-rw-r--r-- | calendar/pcs/cal-backend-file.c | 25 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.c | 27 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.h | 3 | ||||
-rw-r--r-- | calendar/pcs/query.c | 17 |
4 files changed, 51 insertions, 21 deletions
diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c index bda5f5f825..9e090a6781 100644 --- a/calendar/pcs/cal-backend-file.c +++ b/calendar/pcs/cal-backend-file.c @@ -86,6 +86,7 @@ static gboolean cal_backend_file_is_loaded (CalBackend *backend); static int cal_backend_file_get_n_objects (CalBackend *backend, CalObjType type); static char *cal_backend_file_get_object (CalBackend *backend, const char *uid); +static CalComponent *cal_backend_file_get_object_component (CalBackend *backend, const char *uid); static char *cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid); static CalObjType cal_backend_file_get_type_by_uid (CalBackend *backend, const char *uid); static GList *cal_backend_file_get_uids (CalBackend *backend, CalObjType type); @@ -163,6 +164,7 @@ cal_backend_file_class_init (CalBackendFileClass *class) backend_class->is_loaded = cal_backend_file_is_loaded; backend_class->get_n_objects = cal_backend_file_get_n_objects; backend_class->get_object = cal_backend_file_get_object; + backend_class->get_object_component = cal_backend_file_get_object_component; backend_class->get_timezone_object = cal_backend_file_get_timezone_object; backend_class->get_type_by_uid = cal_backend_file_get_type_by_uid; backend_class->get_uids = cal_backend_file_get_uids; @@ -941,6 +943,24 @@ cal_backend_file_get_object (CalBackend *backend, const char *uid) } /* Get_object handler for the file backend */ +static CalComponent * +cal_backend_file_get_object_component (CalBackend *backend, const char *uid) +{ + CalBackendFile *cbfile; + CalBackendFilePrivate *priv; + + cbfile = CAL_BACKEND_FILE (backend); + priv = cbfile->priv; + + g_return_val_if_fail (uid != NULL, NULL); + + g_return_val_if_fail (priv->icalcomp != NULL, NULL); + g_assert (priv->comp_uid_hash != NULL); + + return lookup_component (cbfile, uid); +} + +/* Get_object handler for the file backend */ static char * cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid) { @@ -953,24 +973,19 @@ cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid) cbfile = CAL_BACKEND_FILE (backend); priv = cbfile->priv; - g_print ("In cal_backend_file_get_timezone_object: %s\n", tzid); - g_return_val_if_fail (tzid != NULL, NULL); g_return_val_if_fail (priv->icalcomp != NULL, NULL); g_assert (priv->comp_uid_hash != NULL); - g_print (" getting icaltz\n"); icaltz = icalcomponent_get_timezone (priv->icalcomp, tzid); if (!icaltz) return NULL; - g_print (" getting icalcomp\n"); icalcomp = icaltimezone_get_component (icaltz); if (!icalcomp) return NULL; - g_print (" getting ical_string\n"); ical_string = icalcomponent_as_ical_string (icalcomp); /* We dup the string; libical owns that memory. */ if (ical_string) diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index ad56462565..b67fce3b9a 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -138,6 +138,7 @@ cal_backend_class_init (CalBackendClass *class) class->is_loaded = NULL; class->get_n_objects = NULL; class->get_object = NULL; + class->get_object_component = NULL; class->get_timezone_object = NULL; class->get_type_by_uid = NULL; class->get_uids = NULL; @@ -267,8 +268,7 @@ cal_backend_get_n_objects (CalBackend *backend, CalObjType type) * identifier. * * Return value: The string representation of a complete calendar wrapping the - * the sought object, or NULL if no object had the specified UID. A complete - * calendar is returned because you also need the timezone data. + * the sought object, or NULL if no object had the specified UID. **/ char * cal_backend_get_object (CalBackend *backend, const char *uid) @@ -282,6 +282,29 @@ cal_backend_get_object (CalBackend *backend, const char *uid) } /** + * cal_backend_get_object_component: + * @backend: A calendar backend. + * @uid: Unique identifier for a calendar object. + * + * Queries a calendar backend for a calendar object based on its unique + * identifier. It returns the CalComponent rather than the string + * representation. + * + * Return value: The CalComponent of the sought object, or NULL if no object + * had the specified UID. + **/ +CalComponent * +cal_backend_get_object_component (CalBackend *backend, const char *uid) +{ + g_return_val_if_fail (backend != NULL, NULL); + g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); + g_return_val_if_fail (uid != NULL, NULL); + + g_assert (CLASS (backend)->get_object_component != NULL); + return (* CLASS (backend)->get_object_component) (backend, uid); +} + +/** * cal_backend_get_timezone_object: * @backend: A calendar backend. * @tzid: Unique identifier for a calendar VTIMEZONE object. diff --git a/calendar/pcs/cal-backend.h b/calendar/pcs/cal-backend.h index a1ba2af4c2..4af8befa84 100644 --- a/calendar/pcs/cal-backend.h +++ b/calendar/pcs/cal-backend.h @@ -84,6 +84,7 @@ struct _CalBackendClass { /* General object acquirement and information related virtual methods */ int (* get_n_objects) (CalBackend *backend, CalObjType type); char *(* get_object) (CalBackend *backend, const char *uid); + CalComponent *(* get_object_component) (CalBackend *backend, const char *uid); char *(* get_timezone_object) (CalBackend *backend, const char *tzid); CalObjType(* get_type_by_uid) (CalBackend *backend, const char *uid); GList *(* get_uids) (CalBackend *backend, CalObjType type); @@ -126,6 +127,8 @@ int cal_backend_get_n_objects (CalBackend *backend, CalObjType type); char *cal_backend_get_object (CalBackend *backend, const char *uid); +CalComponent *cal_backend_get_object_component (CalBackend *backend, const char *uid); + char *cal_backend_get_timezone_object (CalBackend *backend, const char *tzid); GList *cal_backend_get_uids (CalBackend *backend, CalObjType type); diff --git a/calendar/pcs/query.c b/calendar/pcs/query.c index 94a998aa44..7e9a712825 100644 --- a/calendar/pcs/query.c +++ b/calendar/pcs/query.c @@ -921,25 +921,14 @@ match_component (Query *query, const char *uid, gboolean query_in_progress, int n_scanned, int total) { QueryPrivate *priv; - char *comp_str; CalComponent *comp; - icalcomponent *icalcomp; - gboolean set_succeeded; ESExpResult *result; priv = query->priv; - comp_str = cal_backend_get_object (priv->backend, uid); - g_assert (comp_str != NULL); - - icalcomp = icalparser_parse_string (comp_str); - g_assert (icalcomp != NULL); - - g_free (comp_str); - - comp = cal_component_new (); - set_succeeded = cal_component_set_icalcomponent (comp, icalcomp); - g_assert (set_succeeded); + comp = cal_backend_get_object_component (priv->backend, uid); + g_assert (comp != NULL); + gtk_object_ref (GTK_OBJECT (comp)); /* Eval the sexp */ |