aboutsummaryrefslogtreecommitdiffstats
path: root/thumbs.c
diff options
context:
space:
mode:
authorBert <ber.t@gmx.com>2011-04-07 01:26:08 +0200
committerBert <ber.t@gmx.com>2011-04-07 01:26:08 +0200
commit83bdf67d51c3f7ae996886c56556afe2a7f462e3 (patch)
treec623fab4385cf3ce8d9cbc3b6810473b39d1f45d /thumbs.c
parent9fcf2c8f3467f163031b56c1750e2a27df0d3d64 (diff)
downloadnsxiv-83bdf67d51c3f7ae996886c56556afe2a7f462e3.tar.zst
First things for thumbnail caching
Diffstat (limited to 'thumbs.c')
-rw-r--r--thumbs.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/thumbs.c b/thumbs.c
index da2adee..8e5e67e 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -18,6 +18,9 @@
#include <stdlib.h>
#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
#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) {
+}