summaryrefslogtreecommitdiff
path: root/src/lib/eldbus/eldbus_model_arguments.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/eldbus/eldbus_model_arguments.c')
-rw-r--r--src/lib/eldbus/eldbus_model_arguments.c124
1 files changed, 47 insertions, 77 deletions
diff --git a/src/lib/eldbus/eldbus_model_arguments.c b/src/lib/eldbus/eldbus_model_arguments.c
index 6e89db1096..1d22903668 100644
--- a/src/lib/eldbus/eldbus_model_arguments.c
+++ b/src/lib/eldbus/eldbus_model_arguments.c
@@ -30,8 +30,6 @@ _eldbus_model_arguments_hash_free(Eina_Value *value)
static Efl_Object*
_eldbus_model_arguments_efl_object_constructor(Eo *obj, Eldbus_Model_Arguments_Data *pd)
{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
pd->obj = obj;
pd->properties_array = NULL;
pd->properties_hash = eina_hash_string_superfast_new(EINA_FREE_CB(_eldbus_model_arguments_hash_free));
@@ -39,11 +37,23 @@ _eldbus_model_arguments_efl_object_constructor(Eo *obj, Eldbus_Model_Arguments_D
pd->proxy = NULL;
pd->arguments = NULL;
pd->name = NULL;
- return obj;
+
+ return efl_constructor(efl_super(obj, MY_CLASS));
+}
+
+static Efl_Object *
+_eldbus_model_arguments_efl_object_finalize(Eo *obj, Eldbus_Model_Arguments_Data *pd)
+{
+ if (!pd->proxy) return NULL;
+ if (!eldbus_model_connection_get(obj))
+ eldbus_model_connection_set(obj,
+ eldbus_object_connection_get(eldbus_proxy_object_get(pd->proxy)));
+
+ return efl_finalize(efl_super(obj, MY_CLASS));
}
static void
-_eldbus_model_arguments_constructor(Eo *obj EINA_UNUSED,
+_eldbus_model_arguments_custom_constructor(Eo *obj EINA_UNUSED,
Eldbus_Model_Arguments_Data *pd,
Eldbus_Proxy *proxy,
const char *name,
@@ -70,9 +80,9 @@ _eldbus_model_arguments_efl_object_destructor(Eo *obj, Eldbus_Model_Arguments_Da
efl_destructor(efl_super(obj, MY_CLASS));
}
-static Eina_Array const *
-_eldbus_model_arguments_efl_model_properties_get(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd)
+static Eina_Array *
+_eldbus_model_arguments_efl_model_properties_get(const Eo *obj EINA_UNUSED,
+ Eldbus_Model_Arguments_Data *pd)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
@@ -113,102 +123,62 @@ _eldbus_model_arguments_properties_load(Eldbus_Model_Arguments_Data *pd)
}
}
-static Efl_Future*
-_eldbus_model_arguments_efl_model_property_set(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd,
- const char *property,
- Eina_Value const* value)
+static Eina_Future *
+_eldbus_model_arguments_efl_model_property_set(Eo *obj,
+ Eldbus_Model_Arguments_Data *pd,
+ const char *property, Eina_Value *value)
{
Eina_Value *prop_value;
- Eina_Value *promise_value;
- Efl_Promise* promise = efl_add(EFL_PROMISE_CLASS, obj);
- Efl_Future* future = efl_promise_future_get(promise);
+ Eina_Error err = 0;
+ Eina_Bool ret;
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(property, promise, EFL_MODEL_ERROR_INCORRECT_VALUE, future);
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(value, promise, EFL_MODEL_ERROR_INCORRECT_VALUE, future);
DBG("(%p): property=%s", obj, property);
+ err = EFL_MODEL_ERROR_NOT_FOUND;
+ if (!property || !value) goto on_error;
+
_eldbus_model_arguments_properties_load(pd);
- Eina_Bool ret = _eldbus_model_arguments_is_input_argument(pd, property);
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(ret, promise, EFL_MODEL_ERROR_READ_ONLY, future);
+ err = EFL_MODEL_ERROR_READ_ONLY;
+ ret = _eldbus_model_arguments_is_input_argument(pd, property);
+ if (!ret) goto on_error;
+ err = EFL_MODEL_ERROR_NOT_FOUND;
prop_value = eina_hash_find(pd->properties_hash, property);
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(prop_value, promise, EFL_MODEL_ERROR_NOT_FOUND, future);
+ if (!prop_value) goto on_error;
eina_value_flush(prop_value);
eina_value_copy(value, prop_value);
- promise_value = eina_value_new(eina_value_type_get(value));
- eina_value_copy(value, promise_value);
- efl_promise_value_set(promise, promise_value, (Eina_Free_Cb)&eina_value_free);
- return future;
+ return eina_future_resolved(efl_loop_future_scheduler_get(obj),
+ eina_value_reference_copy(value));
+
+ on_error:
+ return eina_future_rejected(efl_loop_future_scheduler_get(obj), err);
}
-static Efl_Future*
-_eldbus_model_arguments_efl_model_property_get(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd,
- const char *property)
+static Eina_Value *
+_eldbus_model_arguments_efl_model_property_get(const Eo *obj, Eldbus_Model_Arguments_Data *pd, const char *property)
{
- Efl_Promise *promise = efl_add(EFL_PROMISE_CLASS, obj);
- Efl_Future *future = efl_promise_future_get(promise);
- Eina_Value *promise_value;
+ Eina_Value *value;
+ Eina_Bool ret;
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(property, promise, EFL_MODEL_ERROR_INCORRECT_VALUE, future);
DBG("(%p): property=%s", obj, property);
+ if (!property) return eina_value_error_new(EFL_MODEL_ERROR_INCORRECT_VALUE);
_eldbus_model_arguments_properties_load(pd);
- Eina_Value* value = eina_hash_find(pd->properties_hash, property);
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(value, promise, EFL_MODEL_ERROR_NOT_FOUND, future);
-
- Eina_Bool ret = _eldbus_model_arguments_is_output_argument(pd, property);
- ELDBUS_MODEL_ON_ERROR_EXIT_PROMISE_SET(ret, promise, EFL_MODEL_ERROR_PERMISSION_DENIED, future);
+ value = eina_hash_find(pd->properties_hash, property);
+ if (!value) return eina_value_error_new(EFL_MODEL_ERROR_NOT_FOUND);
- promise_value = eina_value_new(eina_value_type_get(value));
- eina_value_copy(value, promise_value);
- efl_promise_value_set(promise, promise_value, (Eina_Free_Cb)&eina_value_free);
- return future;
-}
+ ret = _eldbus_model_arguments_is_output_argument(pd, property);
+ if (!ret) return eina_value_error_new(EFL_MODEL_ERROR_PERMISSION_DENIED);
-static Eo *
-_eldbus_model_arguments_efl_model_child_add(Eo *obj EINA_UNUSED, Eldbus_Model_Arguments_Data *pd EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-_eldbus_model_arguments_efl_model_child_del(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd EINA_UNUSED,
- Eo *child EINA_UNUSED)
-{
-}
-
-static Efl_Future*
-_eldbus_model_arguments_efl_model_children_slice_get(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd EINA_UNUSED,
- unsigned start EINA_UNUSED,
- unsigned count EINA_UNUSED)
-{
- Efl_Promise *promise = efl_add(EFL_PROMISE_CLASS, obj);
- efl_promise_failed_set(promise, EFL_MODEL_ERROR_NOT_SUPPORTED);
- return efl_promise_future_get(promise);
-}
-
-static Efl_Future*
-_eldbus_model_arguments_efl_model_children_count_get(Eo *obj EINA_UNUSED,
- Eldbus_Model_Arguments_Data *pd EINA_UNUSED)
-{
- Efl_Promise *promise = efl_add(EFL_PROMISE_CLASS, obj);
- Efl_Future* future = efl_promise_future_get(promise);
- unsigned *count = malloc(sizeof(unsigned));
- *count = 0;
- efl_promise_value_set(promise, count, free);
- return future;
+ return eina_value_dup(value);
}
static const char *
-_eldbus_model_arguments_name_get(Eo *obj EINA_UNUSED, Eldbus_Model_Arguments_Data *pd)
+_eldbus_model_arguments_arg_name_get(const Eo *obj EINA_UNUSED, Eldbus_Model_Arguments_Data *pd)
{
return pd->name;
}