dav/sync.c

changeset 200
cc474cf2c2f5
parent 199
f448fc8c9191
child 204
4f0207044837
--- a/dav/sync.c	Sun Feb 28 11:21:05 2016 +0100
+++ b/dav/sync.c	Sun Feb 28 13:39:59 2016 +0100
@@ -46,6 +46,7 @@
 #include "sopt.h"
 #include "db.h"
 #include "error.h"
+#include "assistant.h"
 
 #include "sync.h"
 #include "ucx/properties.h"
@@ -89,6 +90,8 @@
         ret = cmd_pull(args);
     } else if(!strcmp(cmd, "push")) {
         ret = cmd_push(args);
+    } else if(!strcmp(cmd, "add-directory")) {
+        ret = cmd_add_directory(args);
     } else if(!strcmp(cmd, "list-directories")) {
         ret = list_syncdirs();
     } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) {
@@ -117,6 +120,7 @@
     //fprintf(stderr, "        -r         Read changes from stdin\n\n");
     
     fprintf(stderr, "Config commands:\n");
+    fprintf(stderr, "        add-directory\n");
     fprintf(stderr, "        list-directories\n\n");
 }
 
@@ -1030,4 +1034,63 @@
 }
 
 
-
+int cmd_add_directory(CmdArgs *args) {
+    printf("Each sync directory must have an unique name.\n");
+    char *name = assistant_getcfg("name");
+    if(!name) {
+        fprintf(stderr, "Abort\n");
+        return -1;
+    }
+    if(scfg_get_dir(name)) {
+        fprintf(stderr, "Directory %s already exists.\nAbort\n", name);
+        return -1;
+    }
+    
+    printf("Enter local directory path.\n");
+    char *path = assistant_getcfg("path");
+    if(!path) {
+        fprintf(stderr, "Abort\n");
+        return -1;
+    }
+    
+    printf("Enter webdav repository name.\n");
+    char *repository = assistant_getcfg("repository");
+    if(!repository) {
+        fprintf(stderr, "Abort\n");
+        return -1;
+    }
+    if(!get_repository(sstr(repository))) {
+        fprintf(stderr, "Repository %s doesn't exist.\nAbort\n", repository);
+        return -1;
+    }
+    
+    printf("Enter collection relative to the repository base url.\n");
+    char *collection = assistant_getdefcfg("collection", "/");
+    
+    char *db = generate_db_name(name);
+    
+    SyncDirectory dir;
+    memset(&dir, 0, sizeof(SyncDirectory));
+    dir.name = name;
+    dir.path = path;
+    dir.repository = repository;
+    dir.collection = collection;
+    dir.trash = ".trash";
+    dir.database = db;
+    
+    int ret = 0;
+    if(add_directory(&dir)) {
+        fprintf(stderr, "Cannot write sync.xml\n");
+        ret = -1;
+    } else {
+        printf("\nAdded directory: %s (%s)\n", name, path);
+    }
+    
+    free(name);
+    free(path);
+    free(repository);
+    free(collection);
+    free(db);
+    
+    return ret;
+}

mercurial