edbus: Add edbus_proxy_property_local_get and get_all
authorJosé Roberto de Souza <zehortigoza@profusion.mobi>
Fri, 26 Oct 2012 18:19:42 +0000 (18:19 +0000)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 26 Oct 2012 18:19:42 +0000 (18:19 +0000)
Patch by: José Roberto de Souza  <zehortigoza@profusion.mobi>

SVN revision: 78546

src/examples/complex_types.c
src/lib/edbus_freedesktop.h
src/lib/edbus_proxy.c

index 911f4aa..43e1682 100644 (file)
@@ -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();
 
index 2e3cff9..2428e9d 100644 (file)
@@ -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);
 /**
  * @}
  */
index 88940ba..3fd8bba 100644 (file)
@@ -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;
+}