From d794a0d3d95c3addcb21df75606c444c6e3ed6d8 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 4 Sep 2019 13:39:42 -0400 Subject: [PATCH] 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 --- src/lib/eio/efl_io_model.c | 81 -------------------------------------- 1 file changed, 81 deletions(-) diff --git a/src/lib/eio/efl_io_model.c b/src/lib/eio/efl_io_model.c index e6b6149288..06f27f52ae 100644 --- a/src/lib/eio/efl_io_model.c +++ b/src/lib/eio/efl_io_model.c @@ -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); }