summaryrefslogtreecommitdiff
path: root/src/filelist.h
diff options
context:
space:
mode:
authorNaïm Favier <n@monade.li>2024-06-02 15:31:33 +0200
committerBirte Friesel <derf@chaosdorf.de>2024-06-30 11:40:06 +0200
commit08b269d172acc2b4cb9b9336e2cd8097d89ef6a7 (patch)
treeece7aca6a7eccf8ca37b863b6ce2dd6f4abf2402 /src/filelist.h
parent186dab662b50e7aa1e15674c468d35810a691409 (diff)
cache stat(2) calls
When the user requests sorting by size or mtime, do a "soft preload" of the file list that only calls stat(2) without loading images. This avoids calling stat(2) repeatedly on the same files when sorting the file list, and achieves faster startup on slow filesystems.
Diffstat (limited to 'src/filelist.h')
-rw-r--r--src/filelist.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/filelist.h b/src/filelist.h
index 7f263dc..e648262 100644
--- a/src/filelist.h
+++ b/src/filelist.h
@@ -36,6 +36,8 @@ struct __feh_file {
char *name;
/* info stuff */
+ time_t mtime;
+ int size;
feh_file_info *info; /* only set when needed */
#ifdef HAVE_LIBEXIF
ExifData *ed;
@@ -45,7 +47,6 @@ struct __feh_file {
struct __feh_file_info {
int width;
int height;
- int size;
int pixels;
unsigned char has_alpha;
char *format;
@@ -71,11 +72,11 @@ enum sort_type {
SORT_NAME,
SORT_FILENAME,
SORT_DIRNAME,
+ SORT_SIZE, // everything after SORT_SIZE requires stat(2) information on the filelist
SORT_MTIME,
- SORT_WIDTH,
+ SORT_WIDTH, // everything after SORT_WIDTH requires preloading the images in the filelist
SORT_HEIGHT,
SORT_PIXELS,
- SORT_SIZE,
SORT_FORMAT
};
@@ -88,7 +89,8 @@ int file_selector_all(const struct dirent *unused);
void add_file_to_filelist_recursively(char *origpath, unsigned char level);
void add_file_to_rm_filelist(char *file);
void delete_rm_files(void);
-gib_list *feh_file_info_preload(gib_list * list);
+gib_list *feh_file_info_preload(gib_list * list, int load_images);
+int feh_file_stat(feh_file * file);
int feh_file_info_load(feh_file * file, Imlib_Image im);
void feh_file_dirname(char *dst, feh_file * f, int maxlen);
void feh_prepare_filelist(void);