Refactored thumbnail cache_dir
This commit is contained in:
parent
f93f4d887c
commit
f52a99db6c
42
thumbs.c
42
thumbs.c
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user