const char *thumb_path, *thumb_key;
int size_path, size_key, size_cmd;
- DBG("thumb generated!");
+ DBG("thumb generated (%i)!", success);
ethumb_thumb_path_get(e, &thumb_path, &thumb_key);
if (!thumb_path)
char buf[PATH_MAX];
EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0);
+ eina_stringshare_replace(&e->thumb_path, NULL);
+ eina_stringshare_replace(&e->thumb_key, NULL);
+
DBG("ethumb=%p, path=%s, key=%s", e, path ? path : "", key ? key : "");
if (path && access(path, R_OK))
{
path = _ethumb_build_absolute_path(path, buf);
eina_stringshare_replace(&e->src_path, path);
eina_stringshare_replace(&e->src_key, key);
- eina_stringshare_replace(&e->thumb_path, NULL);
- eina_stringshare_replace(&e->thumb_key, NULL);
return EINA_TRUE;
}
{
ERR("no file set.");
ethumb_finished_callback_call(e, 0);
- return EINA_TRUE;
+ return EINA_FALSE;
}
r = _ethumb_plugin_generate(e);
if (r)
- return EINA_TRUE;
+ {
+ ethumb_finished_callback_call(e, r);
+ return EINA_TRUE;
+ }
if (!_ethumb_image_load(e))
{
ERR("could not load input image.");
ethumb_finished_callback_call(e, 0);
- return EINA_TRUE;
+ return EINA_FALSE;
}
r = ethumb_image_save(e);
EINA_REFCOUNT;
Eina_Bool exists : 1;
+ Eina_Bool cancel : 1;
};
struct _Ethumb_Async_Exists_Cb
static void
_ethumb_async_cancel(Ethumb_Async_Exists *async)
{
+ async->cancel = EINA_TRUE;
ecore_thread_cancel(async->thread);
}
if (found)
{
client->pending_gen = eina_list_remove_list(client->pending_gen, l);
- pending->generated_cb(pending->data, client, id,
- pending->file, pending->key,
- pending->thumb, pending->thumb_key,
- success);
+ if (pending->generated_cb)
+ pending->generated_cb(pending->data, client, id,
+ pending->file, pending->key,
+ pending->thumb, pending->thumb_key,
+ success);
if (pending->free_data)
pending->free_data(pending->data);
eina_stringshare_del(pending->file);
async->source = client;
EINA_REFCOUNT_REF(async->source);
async->exists = EINA_FALSE;
+ async->cancel = EINA_FALSE;
async->callbacks = eina_list_append(NULL, cb);
if (!async) return EINA_TRUE;
- if (async->callbacks) return EINA_FALSE;
+ if (async->callbacks || async->cancel) return EINA_FALSE;
return ecore_thread_check(async->thread);
}