Refactored thumbnail cache_dir

This commit is contained in:
Bert 2011-04-07 17:23:47 +02:00
parent f93f4d887c
commit f52a99db6c

View file

@ -28,13 +28,18 @@
#include "util.h" #include "util.h"
extern Imlib_Image *im_invalid; extern Imlib_Image *im_invalid;
const int thumb_dim = THUMB_SIZE + 10; const int thumb_dim = THUMB_SIZE + 10;
char *cache_dir = NULL;
int tns_cache_enabled(); int tns_cache_enabled();
Imlib_Image* tns_cache_load(const char*); Imlib_Image* tns_cache_load(const char*);
void tns_cache_write(thumb_t*, Bool); void tns_cache_write(thumb_t*, Bool);
void tns_init(tns_t *tns, int cnt) { void tns_init(tns_t *tns, int cnt) {
int len;
char *homedir;
if (!tns) if (!tns)
return; return;
@ -43,6 +48,14 @@ void tns_init(tns_t *tns, int cnt) {
memset(tns->thumbs, 0, cnt * sizeof(thumb_t)); memset(tns->thumbs, 0, cnt * sizeof(thumb_t));
tns->cap = cnt; tns->cap = cnt;
tns->dirty = 0; tns->dirty = 0;
if ((homedir = getenv("HOME"))) {
if (cache_dir)
free(cache_dir);
len = strlen(homedir) + 10;
cache_dir = (char*) s_malloc(len * sizeof(char));
snprintf(cache_dir, len, "%s/.sxiv", homedir);
}
} }
void tns_free(tns_t *tns, win_t *win) { void tns_free(tns_t *tns, win_t *win) {
@ -60,6 +73,11 @@ void tns_free(tns_t *tns, win_t *win) {
free(tns->thumbs); free(tns->thumbs);
tns->thumbs = NULL; tns->thumbs = NULL;
if (cache_dir) {
free(cache_dir);
cache_dir = NULL;
}
} }
void tns_load(tns_t *tns, win_t *win, int n, const char *filename) { void tns_load(tns_t *tns, win_t *win, int n, const char *filename) {
@ -301,30 +319,18 @@ int tns_translate(tns_t *tns, int x, int y) {
/* thumbnail caching */ /* thumbnail caching */
int tns_cache_enabled() { int tns_cache_enabled() {
int len, ret = 0;
char *cpath, *homedir;
struct stat stats; struct stat stats;
if ((homedir = getenv("HOME"))) { return cache_dir && !stat(cache_dir, &stats) && S_ISDIR(stats.st_mode) &&
len = strlen(homedir) + 10; !access(cache_dir, W_OK);
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;
} }
char* tns_cache_filename(const char *filename) { char* tns_cache_filename(const char *filename) {
size_t len; size_t len;
int i; int i;
char *cfile, *abspath, *homedir; char *cfile, *abspath;
if (!filename) if (!cache_dir || !filename)
return NULL;
if (!(homedir = getenv("HOME")))
return NULL; return NULL;
if (*filename != '/') { if (*filename != '/') {
@ -341,9 +347,9 @@ char* tns_cache_filename(const char *filename) {
abspath[i] = '%'; abspath[i] = '%';
} }
len += strlen(homedir) + 15; len += strlen(cache_dir) + 6;
cfile = (char*) s_malloc(len); cfile = (char*) s_malloc(len);
snprintf(cfile, len, "%s/.sxiv/%s.png", homedir, abspath + 1); snprintf(cfile, len, "%s/%s.png", cache_dir, abspath + 1);
free(abspath); free(abspath);