forked from enlightenment/efl
ecore_con: use Eina_Future for Efl.Net.Control.Technology.
This commit is contained in:
parent
6e446c64d6
commit
a8197a8c40
|
@ -698,22 +698,28 @@ _cmd_technology_show(Eo *ctl, size_t argc EINA_UNUSED, char **argv)
|
|||
_technology_print(tech);
|
||||
}
|
||||
|
||||
static void
|
||||
_technology_scan_done(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
static Eina_Value
|
||||
_technology_scan_done(void *data, const Eina_Value v,
|
||||
const Eina_Future *dead EINA_UNUSED)
|
||||
{
|
||||
Eo *tech = data;
|
||||
printf("INFO: technology '%s' finished scan.\n",
|
||||
efl_net_control_technology_name_get(tech));
|
||||
}
|
||||
|
||||
static void
|
||||
_technology_scan_error(void *data, const Efl_Event *event)
|
||||
{
|
||||
Eo *tech = data;
|
||||
Efl_Future_Event_Failure *f = event->info;
|
||||
printf("INFO: technology '%s' could not scan: %s\n",
|
||||
efl_net_control_technology_name_get(tech),
|
||||
eina_error_msg_get(f->error));
|
||||
if (v.type == EINA_VALUE_TYPE_ERROR)
|
||||
{
|
||||
Eina_Error err = 0;
|
||||
|
||||
eina_value_error_get(&v, &err);
|
||||
printf("INFO: technology '%s' could not scan: %s\n",
|
||||
efl_net_control_technology_name_get(tech),
|
||||
eina_error_msg_get(err));
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("INFO: technology '%s' finished scan.\n",
|
||||
efl_net_control_technology_name_get(tech));
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -722,11 +728,8 @@ _cmd_technology_scan(Eo *ctl, size_t argc EINA_UNUSED, char **argv)
|
|||
Eo *tech = _technology_find(ctl, argv[1]);
|
||||
if (!tech) return;
|
||||
printf("INFO: started scan on technology '%s'\n", argv[1]);
|
||||
efl_future_then(efl_net_control_technology_scan(tech),
|
||||
_technology_scan_done,
|
||||
_technology_scan_error,
|
||||
NULL,
|
||||
tech);
|
||||
eina_future_then(efl_net_control_technology_scan(tech),
|
||||
_technology_scan_done, tech);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -347,15 +347,14 @@ _efl_net_control_technology_type_get(Eo *o EINA_UNUSED, Efl_Net_Control_Technolo
|
|||
static void
|
||||
_efl_net_control_technology_scan_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
|
||||
{
|
||||
Efl_Promise *promise = data;
|
||||
Eo *o = efl_parent_get(promise);
|
||||
Eina_Promise *promise = data;
|
||||
Eo *o = eldbus_pending_data_get(eina_promise_data_get(promise), ".object");
|
||||
Efl_Net_Control_Technology_Data *pd = efl_data_scope_get(o, MY_CLASS);
|
||||
const char *err_name, *err_msg;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
||||
|
||||
pd->pending = eina_list_remove(pd->pending, pending);
|
||||
efl_key_data_set(promise, "eldbus_pending", NULL);
|
||||
if (eldbus_message_error_get(msg, &err_name, &err_msg))
|
||||
{
|
||||
Eina_Error err = EINVAL;
|
||||
|
@ -364,24 +363,28 @@ _efl_net_control_technology_scan_cb(void *data, const Eldbus_Message *msg, Eldbu
|
|||
err = ENOTSUP;
|
||||
|
||||
WRN("Could not Scan %p: %s=%s", o, err_name, err_msg);
|
||||
efl_promise_failed_set(promise, err);
|
||||
eina_promise_reject(promise, err);
|
||||
return;
|
||||
}
|
||||
|
||||
efl_promise_value_set(promise, o, NULL);
|
||||
efl_del(promise);
|
||||
eina_promise_resolve(promise, eina_value_object_init(o));
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_net_control_technology_scan_promise_del(void *data, const Efl_Event *event)
|
||||
_efl_net_control_technology_scan_promise_del(void *data, const Eina_Promise *dead_ptr)
|
||||
{
|
||||
Eldbus_Pending *p;
|
||||
Eo *o = data;
|
||||
Efl_Net_Control_Technology_Data *pd = efl_data_scope_get(o, MY_CLASS);
|
||||
Eldbus_Pending *p = data;
|
||||
Efl_Net_Control_Technology_Data *pd;
|
||||
Eo *o;
|
||||
|
||||
if (!p) return ;
|
||||
|
||||
o = eldbus_pending_data_get(p, ".object");
|
||||
pd = efl_data_scope_get(o, MY_CLASS);
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
||||
|
||||
p = efl_key_data_get(event->object, "eldbus_pending");
|
||||
p = eina_promise_data_get(dead_ptr);
|
||||
if (!p) return; /* already gone, nothing to do */
|
||||
|
||||
pd->pending = eina_list_remove(pd->pending, p);
|
||||
|
@ -389,28 +392,32 @@ _efl_net_control_technology_scan_promise_del(void *data, const Efl_Event *event)
|
|||
eldbus_pending_cancel(p);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Future *
|
||||
EOLIAN static Eina_Future *
|
||||
_efl_net_control_technology_scan(Eo *o, Efl_Net_Control_Technology_Data *pd)
|
||||
{
|
||||
Eldbus_Pending *p;
|
||||
Efl_Promise *promise;
|
||||
Eina_Promise *promise;
|
||||
Eina_Future *f = NULL;
|
||||
|
||||
promise = efl_add(EFL_PROMISE_CLASS, o,
|
||||
efl_event_callback_add(efl_added, EFL_EVENT_DEL, _efl_net_control_technology_scan_promise_del, o));
|
||||
promise = eina_promise_new(efl_loop_future_scheduler_get(o),
|
||||
_efl_net_control_technology_scan_promise_del, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(promise, NULL);
|
||||
|
||||
f = eina_future_new(promise);
|
||||
|
||||
p = eldbus_proxy_call(pd->proxy, "Scan",
|
||||
_efl_net_control_technology_scan_cb, promise, -1.0, "");
|
||||
EINA_SAFETY_ON_NULL_GOTO(p, error_dbus);
|
||||
|
||||
pd->pending = eina_list_append(pd->pending, p);
|
||||
efl_key_data_set(promise, "eldbus_pending", p);
|
||||
eina_promise_data_set(promise, p);
|
||||
eldbus_pending_data_set(p, ".object", o);
|
||||
|
||||
return efl_promise_future_get(promise);
|
||||
return efl_future_Eina_FutureXXX_then(o, f);
|
||||
|
||||
error_dbus:
|
||||
efl_promise_failed_set(promise, ENOSYS);
|
||||
return promise;
|
||||
eina_promise_reject(promise, ENOSYS);
|
||||
return efl_future_Eina_FutureXXX_then(o, f);
|
||||
}
|
||||
|
||||
const char *
|
||||
|
|
|
@ -56,10 +56,11 @@ _efl_net_control_technology_type_get(Eo *obj EINA_UNUSED, Efl_Net_Control_Techno
|
|||
return 0;
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Future *
|
||||
_efl_net_control_technology_scan(Eo *obj EINA_UNUSED, Efl_Net_Control_Technology_Data *pd EINA_UNUSED)
|
||||
EOLIAN static Eina_Future *
|
||||
_efl_net_control_technology_scan(Eo *obj, Efl_Net_Control_Technology_Data *pd EINA_UNUSED)
|
||||
{
|
||||
return NULL;
|
||||
return eina_future_rejected(efl_loop_future_scheduler_get(obj),
|
||||
EINA_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
#include "efl_net_control_technology.eo.c"
|
||||
|
|
|
@ -96,7 +96,7 @@ class Efl.Net.Control.Technology (Efl.Loop_User) {
|
|||
state. Otherwise prefer to let the system passively do
|
||||
scans in a timely manner.
|
||||
]]
|
||||
return: future<void_ptr>; [[Future return for finished background scan]] /* NOTE: This should be future<void> */
|
||||
return: ptr(Eina.Future) @owned; [[Future return for finished background scan]] /* NOTE: This should be future<void> */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue