diff --git a/thumbs.c b/thumbs.c index da2adee..8e5e67e 100644 --- a/thumbs.c +++ b/thumbs.c @@ -18,6 +18,9 @@ #include #include +#include +#include +#include #include "config.h" #include "thumbs.h" @@ -26,6 +29,9 @@ extern Imlib_Image *im_invalid; const int thumb_dim = THUMB_SIZE + 10; +int tns_cache_enabled(); +void tns_cache_write(thumb_t*, Bool); + void tns_init(tns_t *tns, int cnt) { if (!tns) return; @@ -39,12 +45,17 @@ void tns_init(tns_t *tns, int cnt) { void tns_free(tns_t *tns, win_t *win) { int i; + Bool cache; if (!tns || !tns->thumbs) return; + cache = tns_cache_enabled(); + for (i = 0; i < tns->cnt; ++i) { if (tns->thumbs[i].im) { + if (cache) + tns_cache_write(&tns->thumbs[i], False); imlib_context_set_image(tns->thumbs[i].im); imlib_free_image(); } @@ -84,10 +95,12 @@ void tns_load(tns_t *tns, win_t *win, int n, const char *filename) { h = imlib_image_get_height(); if (im) { + t->filename = filename; zw = (float) THUMB_SIZE / (float) w; zh = (float) THUMB_SIZE / (float) h; z = MIN(zw, zh); } else { + t->filename = NULL; z = 1.0; } @@ -278,3 +291,23 @@ int tns_translate(tns_t *tns, int x, int y) { return -1; } + +int tns_cache_enabled() { + int len, ret = 0; + char *cpath, *homedir; + struct stat stats; + + if ((homedir = getenv("HOME"))) { + len = strlen(homedir) + 10; + cpath = (char*) s_malloc(len * sizeof(char)); + snprintf(cpath, len, "%s/.sxiv", homedir); + ret = !stat(cpath, &stats) && S_ISDIR(stats.st_mode) && + !access(cpath, W_OK); + free(cpath); + } + + return ret; +} + +void tns_cache_write(thumb_t *t, Bool force) { +} diff --git a/thumbs.h b/thumbs.h index 4b428d7..60e7e7b 100644 --- a/thumbs.h +++ b/thumbs.h @@ -32,6 +32,7 @@ typedef enum { typedef struct { Imlib_Image *im; + const char *filename; int x; int y; int w;