Added function ethumb_exists() and some API change.

SVN revision: 40282
This commit is contained in:
Rafael Antognolli 2009-04-21 23:11:37 +00:00
parent 44b8efd6ba
commit b9cd220600
3 changed files with 47 additions and 14 deletions

View File

@ -225,8 +225,14 @@ main(int argc, char *argv[])
if (r) if (r)
{ {
ethumb_file_thumb_path_set(e, thumb_path, thumb_key); ethumb_thumb_path_set(e, thumb_path, thumb_key);
r = ethumb_file_generate(e, _finished_thumb, NULL); if (ethumb_exists(e))
{
quit_option = 1;
r = 1;
}
else
r = ethumb_generate(e, _finished_thumb, NULL);
} }
if (r && !quit_option) if (r && !quit_option)

View File

@ -34,6 +34,7 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h> #include <dirent.h>
#include <dlfcn.h> #include <dlfcn.h>
#include "md5.h" #include "md5.h"
@ -513,18 +514,17 @@ EAPI int
ethumb_file_set(Ethumb *e, const char *path, const char *key) 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(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); ERR("couldn't access file \"%s\"\n", path);
return 0; return 0;
} }
e->src_path = eina_stringshare_add(path); eina_stringshare_replace(&e->src_path, path);
eina_stringshare_replace(&e->src_key, key);
if (key) eina_stringshare_replace(&e->thumb_path, NULL);
e->src_key = eina_stringshare_add(key); eina_stringshare_replace(&e->thumb_key, NULL);
return 1; return 1;
} }
@ -663,7 +663,7 @@ ethumb_file_free(Ethumb *e)
} }
EAPI void 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 *real_path;
char buf[PATH_MAX]; char buf[PATH_MAX];
@ -686,7 +686,7 @@ ethumb_file_thumb_path_set(Ethumb *e, const char *path, const char *key)
} }
EAPI const char * EAPI const char *
ethumb_file_thumb_path_get(Ethumb *e) ethumb_thumb_path_get(Ethumb *e)
{ {
EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL);
if (!e->thumb_path) if (!e->thumb_path)
@ -922,7 +922,7 @@ ethumb_finished_callback_call(Ethumb *e)
} }
EAPI int 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; int r;
@ -954,3 +954,29 @@ ethumb_file_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *da
return r; 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;
}

View File

@ -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 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_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 void ethumb_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 const char * ethumb_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 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 #ifdef __cplusplus
} }