dav/sync.c

changeset 256
54433cb371df
parent 254
d7c4ba50b7d8
child 257
49f3c58cc06c
--- a/dav/sync.c	Fri Nov 18 15:27:45 2016 +0100
+++ b/dav/sync.c	Fri Nov 18 16:00:15 2016 +0100
@@ -36,6 +36,7 @@
 #include <sys/types.h>
 #include <ucx/string.h>
 #include <ucx/utils.h>
+#include <ucx/properties.h>
 #include <dirent.h>
 
 #include <libidav/webdav.h>
@@ -49,7 +50,6 @@
 #include "assistant.h"
 
 #include "sync.h"
-#include "ucx/properties.h"
 #include "libidav/session.h"
 
 static DavContext *ctx;
@@ -109,11 +109,14 @@
             ret = cmd_trash_info(args);
         } else if(!strcmp(cmd, "empty-trash")) {
             ret = cmd_empty_trash(args);
-        } else if(!strcmp(cmd, "add-directory")) {
+        } else if(!strcmp(cmd, "add-dir")
+                || !strcmp(cmd, "add-directory")) {
             ret = cmd_add_directory(args);
-        } else if(!strcmp(cmd, "list-directories")) {
-            ret = list_syncdirs();
-        } else if(!strcmp(cmd, "check-repositories")) {
+        } else if(!strcmp(cmd, "list-dirs")
+                || !strcmp(cmd, "list-directories")) {
+            ret = cmd_list_dirs();
+        } else if(!strcmp(cmd, "check-repos")
+                || !strcmp(cmd, "check-repositories")) {
             ret = cmd_check_repositories();
         } else {
             print_usage(argv[0]);
@@ -154,7 +157,7 @@
     fprintf(stderr, "Config commands:\n");
     fprintf(stderr, "        add-directory\n");
     fprintf(stderr, "        list-directories\n");
-    fprintf(stderr, "        check (or check-config)\n");
+    fprintf(stderr, "        check-config\n");
     fprintf(stderr, "        check-repositories\n\n");
 }
 
@@ -1638,7 +1641,56 @@
     return ret;
 }
 
+int cmd_list_dirs() {
+    UcxMapIterator iter = scfg_directory_iterator();
+    SyncDirectory *dir;
+    UCX_MAP_FOREACH(key, dir, iter) {
+        printf("%s\n", dir->name);
+    }
+    return 0;
+}
+
 int cmd_check_repositories() {
-    fprintf(stderr, "Not implemented.\n");
-    return EXIT_FAILURE;
+    int ret = EXIT_SUCCESS;
+
+    UcxList *reponames = NULL;
+    {
+        UcxMapIterator iter = scfg_directory_iterator();
+        SyncDirectory *dir;
+        UCX_MAP_FOREACH(key, dir, iter) {
+            reponames = ucx_list_append_once(reponames,
+                    dir->repository, ucx_strcmp, NULL);
+        }
+    }
+
+    UCX_FOREACH(listelem, reponames) {
+        char *reponame = listelem->data;
+        printf("Checking %s... ", reponame);
+        Repository* repo = get_repository(sstr(reponame));
+        if (!repo) {
+            printf(" not found in config.xml!\n");
+            ret = EXIT_FAILURE;
+        } else {
+            DavSession *sn = create_session(ctx, repo, repo->url);
+            if (sn) {
+                DavResource *res = dav_query(sn,
+                        "select - from / with depth = 0");
+                if (res) {
+                    printf("OK.\n");
+                    dav_resource_free(res);
+                } else {
+                    printf("unavailable!\n");
+                    ret = EXIT_FAILURE;
+                }
+                dav_session_destroy(sn);
+            } else {
+                printf("cannot create session!\n");
+                ret = EXIT_FAILURE;
+            }
+        }
+    }
+    
+    ucx_list_free(reponames);
+    
+    return ret;
 }

mercurial