diff --git a/legacy/ethumb/src/bin/ethumb.c b/legacy/ethumb/src/bin/ethumb.c index a4576fa484..e23c82967b 100644 --- a/legacy/ethumb/src/bin/ethumb.c +++ b/legacy/ethumb/src/bin/ethumb.c @@ -225,8 +225,14 @@ main(int argc, char *argv[]) if (r) { - ethumb_file_thumb_path_set(e, thumb_path, thumb_key); - r = ethumb_file_generate(e, _finished_thumb, NULL); + ethumb_thumb_path_set(e, thumb_path, thumb_key); + if (ethumb_exists(e)) + { + quit_option = 1; + r = 1; + } + else + r = ethumb_generate(e, _finished_thumb, NULL); } if (r && !quit_option) diff --git a/legacy/ethumb/src/lib/Ethumb.c b/legacy/ethumb/src/lib/Ethumb.c index 4e1a090bb2..3f54845c35 100644 --- a/legacy/ethumb/src/lib/Ethumb.c +++ b/legacy/ethumb/src/lib/Ethumb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include "md5.h" @@ -513,18 +514,17 @@ EAPI int ethumb_file_set(Ethumb *e, const char *path, const char *key) { EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); - if (access(path, R_OK)) + if (path && access(path, R_OK)) { ERR("couldn't access file \"%s\"\n", path); return 0; } - e->src_path = eina_stringshare_add(path); - - if (key) - e->src_key = eina_stringshare_add(key); + 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 1; } @@ -663,7 +663,7 @@ ethumb_file_free(Ethumb *e) } EAPI void -ethumb_file_thumb_path_set(Ethumb *e, const char *path, const char *key) +ethumb_thumb_path_set(Ethumb *e, const char *path, const char *key) { char *real_path; char buf[PATH_MAX]; @@ -686,7 +686,7 @@ ethumb_file_thumb_path_set(Ethumb *e, const char *path, const char *key) } EAPI const char * -ethumb_file_thumb_path_get(Ethumb *e) +ethumb_thumb_path_get(Ethumb *e) { EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL); if (!e->thumb_path) @@ -922,7 +922,7 @@ ethumb_finished_callback_call(Ethumb *e) } EAPI int -ethumb_file_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data) +ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data) { int r; @@ -954,3 +954,29 @@ ethumb_file_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *da return r; } + +EAPI int +ethumb_exists(Ethumb *e) +{ + struct stat thumb, src; + int r_thumb, r_src, r = 0; + EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0); + EINA_SAFETY_ON_NULL_RETURN_VAL(e->src_path, 0); + + if (!e->thumb_path) + _ethumb_file_generate_path(e); + + EINA_SAFETY_ON_NULL_RETURN_VAL(e->thumb_path, 0); + + r_thumb = stat(e->thumb_path, &thumb); + r_src = stat(e->src_path, &src); + + EINA_SAFETY_ON_TRUE_RETURN_VAL(r_src, 0); + + if (r_thumb && errno != ENOENT) + ERR("could not access file \"%s\": %s\n", e->thumb_path, strerror(errno)); + else if (!r_thumb && thumb.st_mtime > src.st_mtime) + r = 1; + + return r; +} diff --git a/legacy/ethumb/src/lib/Ethumb.h b/legacy/ethumb/src/lib/Ethumb.h index 49a9e6f87e..23a3a9e577 100644 --- a/legacy/ethumb/src/lib/Ethumb.h +++ b/legacy/ethumb/src/lib/Ethumb.h @@ -101,9 +101,10 @@ EAPI void ethumb_document_page_set(Ethumb *e, int page) EINA_ARG_NONNULL(1); EAPI int ethumb_file_set(Ethumb *e, const char *path, const char *key) EINA_ARG_NONNULL(1, 2); EAPI void ethumb_file_free(Ethumb *e) EINA_ARG_NONNULL(1); -EAPI void ethumb_file_thumb_path_set(Ethumb *e, const char *path, const char *key) EINA_ARG_NONNULL(1); -EAPI const char * ethumb_file_thumb_path_get(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; -EAPI int ethumb_file_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data) EINA_ARG_NONNULL(1, 2); +EAPI void ethumb_thumb_path_set(Ethumb *e, const char *path, const char *key) EINA_ARG_NONNULL(1); +EAPI const char * ethumb_thumb_path_get(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; +EAPI int ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data) EINA_ARG_NONNULL(1, 2); +EAPI int ethumb_exists(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; #ifdef __cplusplus }