elm_map: Make more robust elm_map

Summary:
Make more robust elm_map even if the user wipe is cache directory
or import an already filled tile cache.

@fix T7443

Reviewers: zmike, cedric

Reviewed By: zmike

Subscribers: thierry1970, cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7443

Differential Revision: https://phab.enlightenment.org/D7617
This commit is contained in:
Michaël Bouchaud (yoz) 2019-02-25 14:00:21 -05:00 committed by Mike Blumenkrantz
parent 5da43b2aa7
commit 5f85e61f6a
1 changed files with 32 additions and 12 deletions

View File

@ -797,7 +797,7 @@ _download_job(void *data)
EINA_LIST_REVERSE_FOREACH_SAFE(sd->download_list, l, ll, gi)
{
Eina_Bool ret;
Eina_Bool ret, file_exists;
if ((gi->g->zoom != sd->zoom) || !(_grid_item_in_viewport(gi)))
{
@ -807,21 +807,41 @@ _download_job(void *data)
if (sd->download_num >= MAX_CONCURRENT_DOWNLOAD)
return ECORE_CALLBACK_RENEW;
ret = ecore_file_download_full
(gi->url, gi->file, _downloaded_cb, NULL, gi, &(gi->job), sd->ua);
if ((!ret) || (!gi->job))
ERR("Can't start to download from %s to %s", gi->url, gi->file);
else
file_exists = ecore_file_exists(gi->file);
if (!file_exists)
{
sd->download_list = eina_list_remove(sd->download_list, gi);
/* Check here if we can download into this directory even if this one
disappear due to some user black magic */
char *dir_path;
dir_path = ecore_file_dir_get(gi->file);
if (!ecore_file_exists(dir_path)) ecore_file_mkpath(dir_path);
free(dir_path);
ret = ecore_file_download_full
(gi->url, gi->file, _downloaded_cb, NULL, gi, &(gi->job), sd->ua);
if ((!ret) || (!gi->job))
{
ERR("Can't start to download from %s to %s", gi->url, gi->file);
continue;
}
sd->try_num++;
sd->download_num++;
}
sd->download_list = eina_list_remove(sd->download_list, gi);
efl_event_callback_legacy_call
(obj, ELM_MAP_EVENT_TILE_LOAD, NULL);
if (sd->download_num == 1)
edje_object_signal_emit(wd->resize_obj,
"elm,state,busy,start", "elm");
if (file_exists)
{
/* It seem the file already exists, try to load it and let
_grid_item_update do his job. If this file isn't a image the func
will invalidate it and try to redownload it. */
_grid_item_update(gi);
gi->wsd->finish_num++;
efl_event_callback_legacy_call
(obj, ELM_MAP_EVENT_TILE_LOAD, NULL);
if (sd->download_num == 1)
edje_object_signal_emit(wd->resize_obj,
"elm,state,busy,start", "elm");
((gi->wsd)->obj, ELM_MAP_EVENT_TILE_LOADED, NULL);
}
}