# HG changeset patch # User Olaf Wintermann # Date 1376496097 -7200 # Node ID d1a43035d3a21ddb7ebfb678a5674f5a306d5036 # Parent 8a0cc4d90de7cc4932e34cbab0bafe30567aa56e added some options to list command diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/main.c --- a/dav/main.c Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/main.c Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -31,12 +31,12 @@ #include #include #include +#include #include #include #include #include -#include "webdav.h" #include "utils.h" #include "config.h" #include "crypto.h" @@ -83,7 +83,7 @@ void print_usage(char *cmd) { fprintf(stderr, "Usage: %s command [options] arguments...\n\n", cmd); fprintf(stderr, "Commands:\n"); - fprintf(stderr, " list [-al] \n"); + fprintf(stderr, " list [-alt] \n"); fprintf(stderr, " get [-p] [-k ] [-o ] \n"); fprintf(stderr, " put [-p] [-k ] \n"); fprintf(stderr, "\n"); @@ -92,6 +92,9 @@ " -k Key to use for encryption or decryption\n"); fprintf(stderr, " -p Don't encrypt or decrypt files\n"); fprintf(stderr, " -o Write output to file\n"); + fprintf(stderr, " -a show all files\n"); + fprintf(stderr, " -l print resources in long list format\n"); + fprintf(stderr, " -t print content type\n"); fprintf(stderr, "\n"); fprintf(stderr, "Instead of an url you can pass a repository name " @@ -176,20 +179,114 @@ //printf("baseurl: %s\n", sn->base_url); - DavResource *ls = dav_get(sn, path, NULL); + DavResource *ls = dav_get(sn, path, "U:crypto-key"); if(!ls) { print_resource_error(sn, ls); return -1; } + + // parameters + int show_all = cmd_getoption(a, "all") ? 1 : 0; + void (*print_func)(DavResource*, CmdArgs *); + if(cmd_getoption(a, "list")) { + print_func = ls_print_list_elm; + } else { + print_func = ls_print_elm; + } DavResource *child = ls->children; while(child) { - printf("%s\n", child->name); + if(child->name[0] != '.' || show_all) { + print_func(child, a); + } child = child->next; } return 0; } +static char* ls_date_str(time_t tm) { + struct tm t; + struct tm n; + time_t now = time(NULL); + localtime_r(&tm, &t); + localtime_r(&now, &n); + char *str = malloc(16); + if(t.tm_year == n.tm_year) { + strftime(str, 16, "%b %d %H:%M", &t); + } else { + strftime(str, 16, "%b %d %Y", &t); + } + return str; +} + +static char* ls_size_str(DavResource *res) { + char *str = malloc(16); + uint64_t size = res->contentlength; + + if(res->iscollection) { + snprintf(str, 16, "%" PRIu64, size); + } else if(size < 0x400) { + snprintf(str, 16, "%" PRIu64 " Bytes", size); + } else if(size < 0x100000) { + size /= 0x400; + snprintf(str, 16, "%" PRIu64 " KiB", size); + } else if(size < 0x40000000) { + size /= 0x100000; + snprintf(str, 16, "%" PRIu64 "MiB", size); + } else if(size < 0x1000000000ULL) { + size /= 0x40000000; + snprintf(str, 16, "%" PRIu64 "GiB", size); + } else { + size /= 0x1000000000ULL; + snprintf(str, 16, "%" PRIu64, "TiB", size); + } + return str; +} + +void ls_print_list_elm(DavResource *res, CmdArgs *a) { + char flags[16]; + memset(flags, '-', 15); + flags[2] = '\0'; + + int type_width = 0; + char *type = res->contenttype; + + if(res->iscollection) { + flags[0] = 'd'; + type = ""; + } + char *keyprop = dav_get_property_ns( + res, + "http://www.uap-core.de/", + "crypto-key"); + if(keyprop) { + flags[1] = 'c'; + } + + if(cmd_getoption(a, "type")) { + type_width = 20; + } + if(type == NULL || type_width == 0) { + type = ""; + } + + char *date = ls_date_str(res->lastmodified); + char *size = ls_size_str(res); + printf( + "%s %*s %10s %12s %s\n", + flags, + type_width, type, + size, + date, + res->name); + free(date); + free(size); +} + +void ls_print_elm(DavResource *res, CmdArgs *a) { + printf("%s\n", res->name); +} + int cmd_get(CmdArgs *a) { if(a->argc == 0) { return -1; diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/main.h --- a/dav/main.h Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/main.h Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -31,6 +31,7 @@ #include #include "optparser.h" +#include "webdav.h" #ifdef __cplusplus extern "C" { @@ -39,6 +40,9 @@ void print_usage(char *cmd); int cmd_list(CmdArgs *args); +void ls_print_list_elm(DavResource *res, CmdArgs *args); +void ls_print_elm(DavResource *res, CmdArgs *args); + int cmd_get(CmdArgs *args); int cmd_put(CmdArgs *args); diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/optparser.c --- a/dav/optparser.c Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/optparser.c Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -74,6 +74,18 @@ ucx_map_cstr_put(a->options, "plain", ""); break; } + case 'a': { + ucx_map_cstr_put(a->options, "all", ""); + break; + } + case 'l': { + ucx_map_cstr_put(a->options, "list", ""); + break; + } + case 't': { + ucx_map_cstr_put(a->options, "type", ""); + break; + } case 'o': { if(!option) { option = "output"; diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/optparser.h --- a/dav/optparser.h Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/optparser.h Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/utils.c --- a/dav/utils.c Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/utils.c Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -r 8a0cc4d90de7 -r d1a43035d3a2 dav/utils.h --- a/dav/utils.h Tue Aug 13 13:51:00 2013 +0200 +++ b/dav/utils.h Wed Aug 14 18:01:37 2013 +0200 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2012 Olaf Wintermann. All rights reserved. + * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: