forked from enlightenment/efl
efl_io_model: remove custom counting logic
Summary: this logic brings a few problems: - When files are annonced here, without the monitor having the context of the files, immidiat actions like deletion of the file are resulting in no deletion event. Which is definitly a bug, so we need to wait here for the monitor. - When a new count is annonced before the files are there from the monitor, we are heading towards the same issue - additionally, we might already have files available, due to the custom counting that are not annoncned through the monitor, which means, at a later pointer we are annoncing a new file which is already available via the API. Right now i do not see a way to continue with this code, it caused major issues with our CI and the POLL backend, for now things do work again. Depends on D9624 Reviewers: zmike, stefan_schmidt, cedric, felipealmeida Reviewed By: zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9625
This commit is contained in:
parent
917b5feb27
commit
d794a0d3d9
|
@ -762,63 +762,6 @@ _efl_io_model_efl_model_property_set(Eo *obj,
|
|||
return efl_loop_future_rejected(obj, err);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_io_model_children_list(void *data, Eina_Array *entries)
|
||||
{
|
||||
Eina_File_Direct_Info *info;
|
||||
Efl_Model *obj = data;
|
||||
Efl_Io_Model_Data *pd;
|
||||
Efl_Model_Children_Event cevt = { 0 };
|
||||
Eina_Array_Iterator iterator;
|
||||
unsigned int i;
|
||||
|
||||
pd = efl_data_scope_get(obj, EFL_IO_MODEL_CLASS);
|
||||
if (!pd) return ;
|
||||
|
||||
EINA_ARRAY_ITER_NEXT(entries, i, info, iterator)
|
||||
{
|
||||
Efl_Io_Model_Info *mi;
|
||||
|
||||
if (_already_added(pd, info->path)) continue;
|
||||
|
||||
if (pd->filter.cb)
|
||||
{
|
||||
if (!pd->filter.cb(pd->filter.data, obj, info))
|
||||
continue ;
|
||||
}
|
||||
|
||||
mi = calloc(1, sizeof (Efl_Io_Model_Info));
|
||||
if (!mi) continue ;
|
||||
|
||||
mi->path_length = info->path_length;
|
||||
mi->path = eina_stringshare_add(info->path);
|
||||
|
||||
mi->name_start = info->name_start;
|
||||
mi->name_length = info->name_length;
|
||||
mi->type = _efl_io_model_info_type_get(info, NULL);
|
||||
mi->parent_ref = EINA_FALSE;
|
||||
mi->child_ref = EINA_TRUE;
|
||||
|
||||
cevt.index = eina_list_count(pd->files);
|
||||
cevt.child = NULL;
|
||||
|
||||
pd->files = eina_list_append(pd->files, mi);
|
||||
|
||||
efl_event_callback_call(obj, EFL_MODEL_EVENT_CHILD_ADDED, &cevt);
|
||||
}
|
||||
|
||||
efl_event_callback_call(obj, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_io_model_children_list_cleanup(Eo *o EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
|
||||
{
|
||||
Efl_Io_Model_Data *pd = data;
|
||||
|
||||
pd->request.listing = NULL;
|
||||
pd->listed = EINA_TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Children Count Get
|
||||
*/
|
||||
|
@ -835,30 +778,6 @@ _efl_io_model_efl_model_children_count_get(const Eo *obj, Efl_Io_Model_Data *pd)
|
|||
{
|
||||
_eio_build_st(obj, pd);
|
||||
}
|
||||
else if (!pd->listed &&
|
||||
!pd->request.listing &&
|
||||
pd->info->type == EINA_FILE_DIR)
|
||||
{
|
||||
Efl_Io_Manager *iom;
|
||||
Eina_Future *f;
|
||||
|
||||
iom = efl_provider_find(obj, EFL_IO_MANAGER_CLASS);
|
||||
if (!iom)
|
||||
{
|
||||
ERR("Could not find an Efl.Io.Manager on %p.", obj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f = efl_io_manager_direct_ls(iom, pd->path, EINA_FALSE,
|
||||
(void*) obj, _efl_io_model_children_list, NULL);
|
||||
|
||||
//start monitoring before listing is done
|
||||
//we will filter later on if we already published a file or not
|
||||
_efl_io_model_efl_model_monitor_add(pd);
|
||||
pd->request.listing = efl_future_then(obj, f,
|
||||
.free = _efl_io_model_children_list_cleanup,
|
||||
.data = pd);
|
||||
}
|
||||
|
||||
return eina_list_count(pd->files);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue