_eio_file_recursiv_ls(Ecore_Thread *thread,
Eio_File *common,
Eio_Filter_Direct_Cb filter_cb,
+ Eina_Iterator *(*Eina_File_Ls)(const char *target),
void *data,
const char *target)
{
Eina_List *dirs = NULL;
const char *dir;
- it = eina_file_stat_ls(target);
+ it = Eina_File_Ls(target);
if (!it)
{
eio_file_thread_error(common, thread);
{
Eina_Bool err;
- err = !_eio_file_recursiv_ls(thread, common, filter_cb, data, dir);
+ err = !_eio_file_recursiv_ls(thread, common, filter_cb, Eina_File_Ls, data, dir);
eina_stringshare_del(dir);
if (err) goto on_error;
{
if (!_eio_file_recursiv_ls(thread, ©->progress.common,
(Eio_Filter_Direct_Cb) _eio_dir_recursive_progress,
+ eina_file_stat_ls,
copy, target))
return EINA_FALSE;
_eio_file_recursiv_ls(thread, &async->ls.common,
(Eio_Filter_Direct_Cb) _eio_dir_stat_find_forward,
+ eina_file_stat_ls,
+ async, async->ls.directory);
+
+ if (async->pack) ecore_thread_feedback(thread, async->pack);
+ async->pack = NULL;
+}
+
+static void
+_eio_dir_direct_find_heavy(void *data, Ecore_Thread *thread)
+{
+ Eio_File_Direct_Ls *async = data;
+
+ async->ls.common.thread = thread;
+ async->pack = NULL;
+ async->start = ecore_time_get();
+
+ _eio_file_recursiv_ls(thread, &async->ls.common,
+ (Eio_Filter_Direct_Cb) _eio_dir_stat_find_forward,
+ eina_file_direct_ls,
async, async->ls.directory);
if (async->pack) ecore_thread_feedback(thread, async->pack);
return &async->ls.common;
}
+EAPI Eio_File *
+eio_dir_direct_ls(const char *dir,
+ Eio_Filter_Direct_Cb filter_cb,
+ Eio_Main_Direct_Cb main_cb,
+ Eio_Done_Cb done_cb,
+ Eio_Error_Cb error_cb,
+ const void *data)
+{
+ Eio_File_Direct_Ls *async;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(main_cb, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL);
+
+ async = malloc(sizeof(Eio_File_Direct_Ls));
+ EINA_SAFETY_ON_NULL_RETURN_VAL(async, NULL);
+
+ async->filter_cb = filter_cb;
+ async->main_cb = main_cb;
+ async->ls.directory = eina_stringshare_add(dir);
+
+ if (!eio_long_file_set(&async->ls.common,
+ done_cb,
+ error_cb,
+ data,
+ _eio_dir_direct_find_heavy,
+ _eio_dir_stat_find_notify,
+ _eio_dir_stat_done,
+ _eio_dir_stat_error))
+ return NULL;
+
+ return &async->ls.common;
+}
+