dav/main.c

changeset 84
7fca3788261d
parent 75
56962faf2b42
child 100
f4127c4d1018
--- a/dav/main.c	Wed Apr 01 11:42:38 2015 +0200
+++ b/dav/main.c	Fri Apr 03 14:53:28 2015 +0200
@@ -101,6 +101,8 @@
         ret = cmd_set_property(args);
     } else if(!strcasecmp(cmd, "get-property")) {
         ret = cmd_get_property(args);
+    } else if(!strcasecmp(cmd, "info")) {
+        ret = cmd_info(args);
     } else {
         print_usage(argv[0]);
     }
@@ -992,6 +994,73 @@
     return 0;
 }
 
+static int count_children(DavResource *res) {
+    DavResource *child = res->children;
+    int count = 0;
+    while(child) {
+        count++;
+        child = child->next;
+    }
+    return count;
+}
+
+int cmd_info(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    DavSession *sn = connect_to_repo(url2repo(url, &path));
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    
+    DavResource *res = dav_resource_new(sn, path);
+    if(!dav_load(res)) {
+        printf("name: %s\n", res->name);
+        printf("path: %s\n", res->path);
+        
+        char *url = util_path_to_url(sn, res->path);
+        printf("url:  %s\n", url);
+        free(url);
+        
+        if(res->iscollection) {
+            printf("type: collection\n");
+            printf("size: %d\n", count_children(res));
+        } else {
+            printf("type: resource\n");
+            char *len = ls_size_str(res);
+            printf("size: %s\n", len);
+            free(len);
+        }
+        
+        size_t count = 0;
+        DavPropName *properties = dav_get_property_names(res, &count);
+        
+        char *last_ns = NULL;
+        for(int i=0;i<count;i++) {
+            DavPropName p = properties[i];
+            if(!last_ns || strcmp(last_ns, p.ns)) {
+                printf("\nnamespace: %s\n", p.ns);
+                last_ns = p.ns;
+            }
+            
+            sstr_t value = sstr(dav_get_property_ns(res, p.ns, p.name));
+            value = sstrtrim(value);
+            printf("  %s: %.*s\n", p.name, (int)value.length, value.ptr);
+        }
+        
+        dav_session_free(sn, properties);
+    } else {
+        print_resource_error(sn, res->path);
+        return -1;
+    }
+}
+
+
 char* stdin2str() {
     UcxBuffer *buf = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND);
     size_t size = ucx_stream_hcopy(stdin, buf, fread, ucx_buffer_write);

mercurial