add option to update cache in a background process
the cli flag is undocumented for now, since it's experimental. Closes: https://codeberg.org/nsxiv/nsxiv/issues/416 Closes: https://codeberg.org/nsxiv/nsxiv/pulls/425 Co-authored-by: explosion-mental <explosion0mental@gmail.com>
This commit is contained in:
parent
2093f36661
commit
1fc28278b5
17
main.c
17
main.c
|
@ -936,6 +936,23 @@ int main(int argc, char *argv[])
|
||||||
filecnt = fileidx;
|
filecnt = fileidx;
|
||||||
fileidx = options->startnum < filecnt ? options->startnum : 0;
|
fileidx = options->startnum < filecnt ? options->startnum : 0;
|
||||||
|
|
||||||
|
if (options->background_cache && !options->private_mode) {
|
||||||
|
pid_t ppid = getpid(); /* to check if parent is still alive or not */
|
||||||
|
switch (fork()) {
|
||||||
|
case 0:
|
||||||
|
tns_init(&tns, files, &filecnt, &fileidx, NULL);
|
||||||
|
while (filecnt > 0 && getppid() == ppid) {
|
||||||
|
tns_load(&tns, filecnt - 1, false, true);
|
||||||
|
remove_file(filecnt - 1, true);
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
error(0, errno, "fork failed");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
win_init(&win);
|
win_init(&win);
|
||||||
img_init(&img, &win);
|
img_init(&img, &win);
|
||||||
arl_init(&arl);
|
arl_init(&arl);
|
||||||
|
|
1
nsxiv.h
1
nsxiv.h
|
@ -274,6 +274,7 @@ struct opt {
|
||||||
bool thumb_mode;
|
bool thumb_mode;
|
||||||
bool clean_cache;
|
bool clean_cache;
|
||||||
bool private_mode;
|
bool private_mode;
|
||||||
|
bool background_cache;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const opt_t *options;
|
extern const opt_t *options;
|
||||||
|
|
11
options.c
11
options.c
|
@ -81,7 +81,8 @@ void parse_options(int argc, char **argv)
|
||||||
*/
|
*/
|
||||||
OPT_START = UCHAR_MAX,
|
OPT_START = UCHAR_MAX,
|
||||||
OPT_AA,
|
OPT_AA,
|
||||||
OPT_AL
|
OPT_AL,
|
||||||
|
OPT_BG
|
||||||
};
|
};
|
||||||
static const struct optparse_long longopts[] = {
|
static const struct optparse_long longopts[] = {
|
||||||
{ "framerate", 'A', OPTPARSE_REQUIRED },
|
{ "framerate", 'A', OPTPARSE_REQUIRED },
|
||||||
|
@ -109,6 +110,8 @@ void parse_options(int argc, char **argv)
|
||||||
{ "null", '0', OPTPARSE_NONE },
|
{ "null", '0', OPTPARSE_NONE },
|
||||||
{ "anti-alias", OPT_AA, OPTPARSE_OPTIONAL },
|
{ "anti-alias", OPT_AA, OPTPARSE_OPTIONAL },
|
||||||
{ "alpha-layer", OPT_AL, OPTPARSE_OPTIONAL },
|
{ "alpha-layer", OPT_AL, OPTPARSE_OPTIONAL },
|
||||||
|
/* TODO: document this when it's stable */
|
||||||
|
{ "bg-cache", OPT_BG, OPTPARSE_OPTIONAL },
|
||||||
{ 0 }, /* end */
|
{ 0 }, /* end */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -145,6 +148,7 @@ void parse_options(int argc, char **argv)
|
||||||
_options.thumb_mode = false;
|
_options.thumb_mode = false;
|
||||||
_options.clean_cache = false;
|
_options.clean_cache = false;
|
||||||
_options.private_mode = false;
|
_options.private_mode = false;
|
||||||
|
_options.background_cache = false;
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
s = strrchr(argv[0], '/');
|
s = strrchr(argv[0], '/');
|
||||||
|
@ -264,6 +268,11 @@ void parse_options(int argc, char **argv)
|
||||||
error(EXIT_FAILURE, 0, "Invalid argument for option --alpha-layer: %s", op.optarg);
|
error(EXIT_FAILURE, 0, "Invalid argument for option --alpha-layer: %s", op.optarg);
|
||||||
_options.alpha_layer = op.optarg == NULL;
|
_options.alpha_layer = op.optarg == NULL;
|
||||||
break;
|
break;
|
||||||
|
case OPT_BG:
|
||||||
|
if (op.optarg != NULL && !STREQ(op.optarg, "no"))
|
||||||
|
error(EXIT_FAILURE, 0, "Invalid argument for option --bg-cache: %s", op.optarg);
|
||||||
|
_options.background_cache = op.optarg == NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue