From: Chenthill Palanisamy Date: Sun, 19 Jul 2009 19:46:04 +0000 (+0530) Subject: Fixed some bugs found in api testing and added some missing api's X-Git-Tag: upstream/3.7.4~3895 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e8c5e6592ff4a5855120621c70f91099cc8c6296;p=platform%2Fupstream%2Fevolution-data-server.git Fixed some bugs found in api testing and added some missing api's store_get_components, store_remove. --- diff --git a/calendar/libedata-cal/e-cal-backend-file-store.c b/calendar/libedata-cal/e-cal-backend-file-store.c index 718eecf..509e416 100644 --- a/calendar/libedata-cal/e-cal-backend-file-store.c +++ b/calendar/libedata-cal/e-cal-backend-file-store.c @@ -62,6 +62,7 @@ create_new_full_object (void) FullCompObject *obj; obj = g_new0 (FullCompObject, 1); + obj->comp = NULL; obj->recurrences = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); return obj; @@ -75,7 +76,10 @@ destroy_full_object (FullCompObject *obj) if (obj->comp) g_object_unref (obj->comp); + obj->comp = NULL; + g_hash_table_destroy (obj->recurrences); + obj->recurrences = NULL; g_free (obj); obj = NULL; @@ -104,6 +108,7 @@ put_component (ECalBackendFileStore *fstore, ECalComponent *comp) if (obj == NULL) { obj = create_new_full_object (); + g_hash_table_insert (priv->comp_uid_hash, g_strdup (uid), obj); } if (!e_cal_component_is_instance (comp)) { @@ -111,10 +116,11 @@ put_component (ECalBackendFileStore *fstore, ECalComponent *comp) g_object_unref (obj->comp); obj->comp = comp; - g_hash_table_insert (priv->comp_uid_hash, g_strdup (uid), obj); + g_object_ref (comp); } else { gchar *rid = e_cal_component_get_recurid_as_string (comp); + g_object_ref (comp); g_hash_table_insert (obj->recurrences, g_strdup (rid), comp); } @@ -150,7 +156,7 @@ remove_component (ECalBackendFileStore *fstore, const gchar *uid, const gchar *r remove_completely = TRUE; if (remove_completely) - destroy_full_object (obj); + g_hash_table_remove (priv->comp_uid_hash, uid); end: g_static_rw_lock_writer_unlock (&priv->lock); @@ -260,11 +266,13 @@ e_cal_backend_file_store_put_timezone (ECalBackendStore *store, const icaltimezo ECalBackendFileStore *fstore = E_CAL_BACKEND_FILE_STORE (store); ECalBackendFileStorePrivate *priv; gboolean ret_val = FALSE; + icaltimezone *copy; priv = GET_PRIVATE (fstore); g_static_rw_lock_writer_lock (&priv->lock); - g_hash_table_insert (priv->timezones, g_strdup (icaltimezone_get_tzid ((icaltimezone *) zone)), (icaltimezone *) zone); + copy = icaltimezone_copy ((icaltimezone *) zone); + g_hash_table_insert (priv->timezones, g_strdup (icaltimezone_get_tzid ((icaltimezone *) zone)), copy); g_static_rw_lock_writer_unlock (&priv->lock); if (ret_val) { @@ -326,7 +334,12 @@ e_cal_backend_file_store_put_key_value (ECalBackendStore *store, const gchar *ke priv = GET_PRIVATE (fstore); g_static_rw_lock_writer_lock (&priv->lock); - ret_val = e_file_cache_replace_object (priv->keys_cache, key, value); + + if (e_file_cache_get_object (priv->keys_cache, key)) + ret_val = e_file_cache_replace_object (priv->keys_cache, key, value); + else + ret_val = e_file_cache_add_object (priv->keys_cache, key, value); + g_static_rw_lock_writer_unlock (&priv->lock); return ret_val; @@ -359,14 +372,22 @@ e_cal_backend_file_store_set_default_timezone (ECalBackendStore *store, const ic ECalBackendFileStore *fstore = E_CAL_BACKEND_FILE_STORE (store); ECalBackendFileStorePrivate *priv; const gchar *tzid; + icaltimezone *copy; + const char *key = "default-zone"; + gboolean ret_val; priv = GET_PRIVATE (fstore); g_static_rw_lock_writer_lock (&priv->lock); tzid = icaltimezone_get_tzid ((icaltimezone*) zone); - g_hash_table_insert (priv->timezones, g_strdup (tzid), (icaltimezone *) zone); - e_file_cache_replace_object (priv->keys_cache, "default-zone", tzid); + copy = icaltimezone_copy ((icaltimezone *) zone); + g_hash_table_insert (priv->timezones, g_strdup (tzid), copy); + + if (e_file_cache_get_object (priv->keys_cache, key)) + ret_val = e_file_cache_replace_object (priv->keys_cache, key, tzid); + else + ret_val = e_file_cache_add_object (priv->keys_cache, key, tzid); g_static_rw_lock_writer_unlock (&priv->lock); @@ -440,6 +461,37 @@ end: } static void +add_full_comp_to_slist (gpointer key, gpointer value, gpointer user_data) +{ + GSList **slist = (GSList **) user_data; + FullCompObject *obj = NULL; + + obj = value; + if (obj->comp) { + g_object_ref (obj->comp); + *slist = g_slist_prepend (*slist, obj->comp); + } + + g_hash_table_foreach (obj->recurrences, (GHFunc) add_comp_to_slist, slist); +} + +static GSList * +e_cal_backend_file_store_get_components (ECalBackendStore *store) +{ + ECalBackendFileStore *fstore = E_CAL_BACKEND_FILE_STORE (store); + ECalBackendFileStorePrivate *priv; + GSList *comps = NULL; + + priv = GET_PRIVATE (fstore); + + g_static_rw_lock_reader_lock (&priv->lock); + g_hash_table_foreach (priv->comp_uid_hash, (GHFunc) add_full_comp_to_slist, &comps); + g_static_rw_lock_reader_unlock (&priv->lock); + + return comps; +} + +static void add_timezone (ECalBackendFileStore *fstore, icalcomponent *vtzcomp) { ECalBackendFileStorePrivate *priv; @@ -447,6 +499,8 @@ add_timezone (ECalBackendFileStore *fstore, icalcomponent *vtzcomp) icaltimezone *zone; const gchar *tzid; + priv = GET_PRIVATE(fstore); + prop = icalcomponent_get_first_property (vtzcomp, ICAL_TZID_PROPERTY); if (!prop) return; @@ -498,7 +552,7 @@ scan_vcalendar (ECalBackendFileStore *fstore, icalcomponent *top_icalcomp) comp = e_cal_component_new (); - if (!e_cal_component_set_icalcomponent (comp, icalcomp)) + if (!e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp))) continue; put_component (fstore, comp); @@ -532,10 +586,17 @@ e_cal_backend_file_store_load (ECalBackendStore *store) } scan_vcalendar (fstore, icalcomp); + icalcomponent_free (icalcomp); return TRUE; } +static gboolean +e_cal_backend_file_store_remove (ECalBackendStore *store) +{ + +} + static void save_instance (gpointer key, gpointer value, gpointer user_data) { @@ -629,6 +690,14 @@ save_cache (ECalBackendFileStore *store) } static void +free_timezone (gpointer data) +{ + icaltimezone *zone = data; + + icaltimezone_free (zone, 1); +} + +static void e_cal_backend_file_store_construct (ECalBackendFileStore *fstore) { ECalBackendFileStorePrivate *priv; @@ -705,6 +774,7 @@ e_cal_backend_file_store_class_init (ECalBackendFileStoreClass *klass) object_class->finalize = e_cal_backend_file_store_finalize; store_class->load = e_cal_backend_file_store_load; + store_class->remove = e_cal_backend_file_store_remove; store_class->get_component = e_cal_backend_file_store_get_component; store_class->put_component = e_cal_backend_file_store_put_component; store_class->remove_component = e_cal_backend_file_store_remove_component; @@ -718,6 +788,7 @@ e_cal_backend_file_store_class_init (ECalBackendFileStoreClass *klass) store_class->put_key = e_cal_backend_file_store_put_key_value; store_class->thaw_changes = e_cal_backend_file_store_thaw_changes; store_class->freeze_changes = e_cal_backend_file_store_freeze_changes; + store_class->get_components = e_cal_backend_file_store_get_components; } static void @@ -728,7 +799,8 @@ e_cal_backend_file_store_init (ECalBackendFileStore *self) priv = GET_PRIVATE(self); self->priv = priv; - priv->timezones = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + priv->timezones = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) free_timezone); priv->comp_uid_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) destroy_full_object); priv->keys_cache = NULL; g_static_rw_lock_init (&priv->lock); @@ -744,7 +816,7 @@ e_cal_backend_file_store_new (const gchar *uri, ECalSourceType source_type) { ECalBackendFileStore *fstore; - fstore = g_object_new (E_TYPE_CAL_BACKEND_FILE_STORE, "source_type", source_type, "uri", uri); + fstore = g_object_new (E_TYPE_CAL_BACKEND_FILE_STORE, "source_type", source_type, "uri", uri, NULL); e_cal_backend_file_store_construct (fstore); return fstore; diff --git a/calendar/libedata-cal/e-cal-backend-store.c b/calendar/libedata-cal/e-cal-backend-store.c index 4877673..1380399 100644 --- a/calendar/libedata-cal/e-cal-backend-store.c +++ b/calendar/libedata-cal/e-cal-backend-store.c @@ -104,9 +104,11 @@ e_cal_backend_store_set_property (GObject *object, guint property_id, const GVal switch (property_id) { case PROP_SOURCE_TYPE: priv->source_type = g_value_get_enum (value); + break; case PROP_URI: set_uri (store, g_value_dup_string (value)); set_store_path (store); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } @@ -125,6 +127,7 @@ e_cal_backend_store_get_property (GObject *object, guint property_id, GValue *va { case PROP_SOURCE_TYPE: g_value_set_enum (value, priv->source_type); + break; case PROP_URI : g_value_set_string (value, priv->uri); break; @@ -231,6 +234,15 @@ e_cal_backend_store_load (ECalBackendStore *store) return (E_CAL_BACKEND_STORE_GET_CLASS (store))->load (store); } +gboolean +e_cal_backend_store_remove (ECalBackendStore *store) +{ + g_return_val_if_fail (store != NULL, FALSE); + g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), FALSE); + + return (E_CAL_BACKEND_STORE_GET_CLASS (store))->remove (store); +} + ECalComponent * e_cal_backend_store_get_component (ECalBackendStore *store, const gchar *uid, const gchar *rid) { @@ -323,6 +335,15 @@ e_cal_backend_store_get_components_by_uid (ECalBackendStore *store, const gchar return (E_CAL_BACKEND_STORE_GET_CLASS (store))->get_components_by_uid (store, uid); } +GSList * +e_cal_backend_store_get_components (ECalBackendStore *store) +{ + g_return_val_if_fail (store != NULL, NULL); + g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), NULL); + + return (E_CAL_BACKEND_STORE_GET_CLASS (store))->get_components (store); +} + const gchar * e_cal_backend_store_get_key (ECalBackendStore *store, const gchar *key) { diff --git a/calendar/libedata-cal/e-cal-backend-store.h b/calendar/libedata-cal/e-cal-backend-store.h index 8c05406..6b4f5bd 100644 --- a/calendar/libedata-cal/e-cal-backend-store.h +++ b/calendar/libedata-cal/e-cal-backend-store.h @@ -57,11 +57,13 @@ typedef struct { /* virtual methods */ gboolean (*load) (ECalBackendStore *store); + gboolean (*remove) (ECalBackendStore *store); ECalComponent * (*get_component) (ECalBackendStore *store, const gchar *uid, const gchar *rid); gboolean (*put_component) (ECalBackendStore *store, ECalComponent *comp); gboolean (*remove_component) (ECalBackendStore *store, const gchar *uid, const gchar *rid); GSList * (*get_components_by_uid) (ECalBackendStore *store, const gchar *uid); + GSList * (*get_components) (ECalBackendStore *store); const icaltimezone * (*get_timezone) (ECalBackendStore *store, const gchar *tzid); gboolean (*put_timezone) (ECalBackendStore *store, const icaltimezone *zone); @@ -83,6 +85,7 @@ GType e_cal_backend_store_get_type (void); const gchar *e_cal_backend_store_get_path (ECalBackendStore *store); gboolean e_cal_backend_store_load (ECalBackendStore *store); +gboolean e_cal_backend_store_remove (ECalBackendStore *store); ECalComponent * e_cal_backend_store_get_component (ECalBackendStore *store, const gchar *uid, const gchar *rid); gboolean e_cal_backend_store_put_component (ECalBackendStore *store, ECalComponent *comp); gboolean e_cal_backend_store_remove_component (ECalBackendStore *store, const gchar *uid, const gchar *rid); @@ -92,7 +95,7 @@ gboolean e_cal_backend_store_remove_timezone (ECalBackendStore *store, const g const icaltimezone * e_cal_backend_store_get_default_timezone (ECalBackendStore *store); gboolean e_cal_backend_store_set_default_timezone (ECalBackendStore *store, const icaltimezone *zone); GSList * e_cal_backend_store_get_components_by_uid (ECalBackendStore *store, const gchar *uid); -GSList * e_cal_backend_store_get_objects_list (ECalBackendStore *store, const gchar *sexp); +GSList * e_cal_backend_store_get_components (ECalBackendStore *store); const gchar * e_cal_backend_store_get_key (ECalBackendStore *store, const gchar *key); gboolean e_cal_backend_store_put_key (ECalBackendStore *store, const gchar *key, const gchar *value); void e_cal_backend_store_thaw_changes (ECalBackendStore *store);