mirror of
https://github.com/NikitaIvanovV/ctpv.git
synced 2024-11-28 07:23:07 +01:00
Add -l option
This commit is contained in:
parent
7b6c2518e6
commit
277ff54f8b
86
ctpv.c
86
ctpv.c
@ -9,11 +9,19 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "previews.h"
|
#include "previews.h"
|
||||||
|
|
||||||
|
#define ANY_TYPE "*"
|
||||||
|
|
||||||
|
static const char any_type[] = ANY_TYPE;
|
||||||
|
|
||||||
static magic_t magic;
|
static magic_t magic;
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int server;
|
enum {
|
||||||
} ctpv;
|
MODE_PREVIEW,
|
||||||
|
MODE_SERVER,
|
||||||
|
MODE_LIST,
|
||||||
|
} mode;
|
||||||
|
} ctpv = { MODE_PREVIEW };
|
||||||
|
|
||||||
static void cleanup(void) {
|
static void cleanup(void) {
|
||||||
cleanup_previews();
|
cleanup_previews();
|
||||||
@ -31,6 +39,11 @@ static int init_magic() {
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void init_previews_v(void)
|
||||||
|
{
|
||||||
|
init_previews(previews, LEN(previews));
|
||||||
|
}
|
||||||
|
|
||||||
static const char *get_mimetype(char const *path) {
|
static const char *get_mimetype(char const *path) {
|
||||||
const char *r = magic_file(magic, path);
|
const char *r = magic_file(magic, path);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
@ -49,15 +62,9 @@ static const char *get_ext(char const *path) {
|
|||||||
return &r[1];
|
return &r[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int server(void)
|
|
||||||
{
|
|
||||||
/* TODO */
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define GET_PARG(a, i) (a) = argc > (i) ? argv[i] : NULL
|
#define GET_PARG(a, i) (a) = argc > (i) ? argv[i] : NULL
|
||||||
|
|
||||||
static int client(int argc, char *argv[])
|
static int preview(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *f, *w, *h, *x, *y;
|
char *f, *w, *h, *x, *y;
|
||||||
GET_PARG(f, 0);
|
GET_PARG(f, 0);
|
||||||
@ -72,7 +79,7 @@ static int client(int argc, char *argv[])
|
|||||||
|
|
||||||
ERRCHK_RET_OK(init_magic());
|
ERRCHK_RET_OK(init_magic());
|
||||||
|
|
||||||
init_previews(previews, LEN(previews));
|
init_previews_v();
|
||||||
|
|
||||||
const char *mimetype = get_mimetype(f);
|
const char *mimetype = get_mimetype(f);
|
||||||
ERRCHK_RET(!mimetype);
|
ERRCHK_RET(!mimetype);
|
||||||
@ -90,15 +97,53 @@ static int client(int argc, char *argv[])
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int server(void)
|
||||||
|
{
|
||||||
|
/* TODO */
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int list(void)
|
||||||
|
{
|
||||||
|
init_previews_v();
|
||||||
|
|
||||||
|
size_t len;
|
||||||
|
Preview p, **list = get_previews_list(&len);
|
||||||
|
const char *t, *s;
|
||||||
|
|
||||||
|
puts("List of available previews:");
|
||||||
|
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
p = *list[i];
|
||||||
|
t = p.type;
|
||||||
|
s = p.subtype;
|
||||||
|
|
||||||
|
if (!t) {
|
||||||
|
t = any_type;
|
||||||
|
s = any_type;
|
||||||
|
} else if (!s) {
|
||||||
|
s = any_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\t%s/%s\n", t, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
puts("\nNote: '" ANY_TYPE "' means that it matches any mimetype.");
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
program = argc > 0 ? argv[0] : "ctpv";
|
program = argc > 0 ? argv[0] : "ctpv";
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
while ((c = getopt(argc, argv, "s")) != -1) {
|
while ((c = getopt(argc, argv, "sl")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 's':
|
case 's':
|
||||||
ctpv.server = 1;
|
ctpv.mode = MODE_SERVER;
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
ctpv.mode = MODE_LIST;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
@ -106,10 +151,21 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
if (ctpv.server)
|
switch (ctpv.mode) {
|
||||||
|
case MODE_PREVIEW:
|
||||||
|
ret = preview(argc, &argv[optind]);
|
||||||
|
break;
|
||||||
|
case MODE_SERVER:
|
||||||
ret = server();
|
ret = server();
|
||||||
else
|
break;
|
||||||
ret = client(argc, &argv[optind]);
|
case MODE_LIST:
|
||||||
|
ret = list();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
print_errorf("unknowm mode: %d", ctpv.mode);
|
||||||
|
ret = ERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
|
14
preview.c
14
preview.c
@ -143,12 +143,17 @@ static Preview *find_by_mimetype(char const *mimetype)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Preview *find_preview(char const *ext, char const *mimetype)
|
static void check_init_previews(void)
|
||||||
{
|
{
|
||||||
if (!sorted_by_ext || !sorted_by_mimetype) {
|
if (!sorted_by_ext || !sorted_by_mimetype) {
|
||||||
print_error("init_previews() not called");
|
print_error("init_previews() not called");
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Preview *find_preview(char const *ext, char const *mimetype)
|
||||||
|
{
|
||||||
|
check_init_previews();
|
||||||
|
|
||||||
Preview *ret = NULL;
|
Preview *ret = NULL;
|
||||||
if (mimetype)
|
if (mimetype)
|
||||||
@ -183,3 +188,10 @@ int run_preview(Preview *p, PreviewArgs *pa)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Preview **get_previews_list(size_t *len)
|
||||||
|
{
|
||||||
|
check_init_previews();
|
||||||
|
*len = prevs_length;
|
||||||
|
return sorted_by_mimetype;
|
||||||
|
}
|
||||||
|
@ -15,5 +15,6 @@ void init_previews(Preview *ps, size_t len);
|
|||||||
void cleanup_previews(void);
|
void cleanup_previews(void);
|
||||||
Preview *find_preview(char const *ext, char const *mimetype);
|
Preview *find_preview(char const *ext, char const *mimetype);
|
||||||
int run_preview(Preview *p, PreviewArgs *pa);
|
int run_preview(Preview *p, PreviewArgs *pa);
|
||||||
|
Preview **get_previews_list(size_t *len);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user