diff options
author | Naïm Favier <n@monade.li> | 2024-06-02 15:31:33 +0200 |
---|---|---|
committer | Birte Friesel <derf@chaosdorf.de> | 2024-06-30 11:40:06 +0200 |
commit | 08b269d172acc2b4cb9b9336e2cd8097d89ef6a7 (patch) | |
tree | ece7aca6a7eccf8ca37b863b6ce2dd6f4abf2402 /src/filelist.h | |
parent | 186dab662b50e7aa1e15674c468d35810a691409 (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.h | 10 |
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); |