From: José Roberto de Souza Date: Fri, 26 Oct 2012 18:19:42 +0000 (+0000) Subject: edbus: Add edbus_proxy_property_local_get and get_all X-Git-Tag: upstream/1.7.8~159 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11c631a9ea2afd5ea142f2ea83cdebfc96f53f41;p=platform%2Fupstream%2Feldbus.git edbus: Add edbus_proxy_property_local_get and get_all Patch by: José Roberto de Souza SVN revision: 78546 --- diff --git a/src/examples/complex_types.c b/src/examples/complex_types.c index 911f4aa..43e1682 100644 --- a/src/examples/complex_types.c +++ b/src/examples/complex_types.c @@ -15,6 +15,22 @@ _timer1_cb(void *data) return EINA_TRUE; } +static Eina_Bool +_read_cache(void *data) +{ + EDBus_Proxy *proxy = data; + const char *txt; + int num; + Eina_Value *v = edbus_proxy_property_local_get(proxy, "text"); + eina_value_get(v, &txt); + v = edbus_proxy_property_local_get(proxy, "int32"); + eina_value_get(v, &num); + + printf("Read cache: %s | %d\n", txt, num); + + return EINA_FALSE; +} + static void on_plus_one(void *data, const EDBus_Message *msg, EDBus_Pending *pending) { @@ -298,7 +314,8 @@ main(void) pending = edbus_proxy_property_get(test2_proxy, "Resp2", get_property_resp2, test2_proxy); edbus_proxy_event_callback_add(test2_proxy, EDBUS_PROXY_EVENT_PROPERTY_CHANGED, _property_changed, NULL); - ecore_timer_add(20, _timer1_cb, NULL); + ecore_timer_add(10, _read_cache, test2_proxy); + ecore_timer_add(50, _timer1_cb, NULL); ecore_main_loop_begin(); diff --git a/src/lib/edbus_freedesktop.h b/src/lib/edbus_freedesktop.h index 2e3cff9..2428e9d 100644 --- a/src/lib/edbus_freedesktop.h +++ b/src/lib/edbus_freedesktop.h @@ -91,6 +91,11 @@ EAPI EDBus_Pending *edbus_object_introspect(EDBus_Object *obj, EDBus_Mess /** * Enable or disable local cache of properties. + * + * After enable you can call edbus_proxy_property_local_get() or + * edbus_proxy_property_local_get_all() to get cached properties. + * + * @note After enable, it will asynchrony get the properties values. */ EAPI void edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable); @@ -98,6 +103,22 @@ EAPI EDBus_Pending *edbus_proxy_property_get(EDBus_Proxy *proxy, const ch EAPI EDBus_Pending *edbus_proxy_property_set(EDBus_Proxy *proxy, const char *name, char type, const void *value, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 4); EAPI EDBus_Pending *edbus_proxy_property_get_all(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); EAPI EDBus_Signal_Handler *edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); + +/** + * Return the cached value of property. + * This only work if you have enable edbus_proxy_properties_monitor or + * if you have call edbus_proxy_event_callback_add of type + * EDBUS_PROXY_EVENT_PROPERTY_CHANGED and the property you want had changed. + */ +EAPI Eina_Value *edbus_proxy_property_local_get(EDBus_Proxy *proxy, const char *name) EINA_ARG_NONNULL(1, 2); + +/** + * Return a Eina_Hash with all cached properties. + * This only work if you have enable edbus_proxy_properties_monitor or + * if you have call edbus_proxy_event_callback_add of type + * EDBUS_PROXY_EVENT_PROPERTY_CHANGED. + */ +EAPI const Eina_Hash *edbus_proxy_property_local_get_all(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1); /** * @} */ diff --git a/src/lib/edbus_proxy.c b/src/lib/edbus_proxy.c index 88940ba..3fd8bba 100644 --- a/src/lib/edbus_proxy.c +++ b/src/lib/edbus_proxy.c @@ -753,3 +753,20 @@ edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable) } } } + +EAPI Eina_Value * +edbus_proxy_property_local_get(EDBus_Proxy *proxy, const char *name) +{ + EDBUS_PROXY_CHECK_RETVAL(proxy, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(proxy->props, NULL); + return eina_hash_find(proxy->props, name); +} + +EAPI const Eina_Hash * +edbus_proxy_property_local_get_all(EDBus_Proxy *proxy) +{ + EDBUS_PROXY_CHECK_RETVAL(proxy, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(proxy->props, NULL); + return proxy->props; +}