diff -r f448fc8c9191 -r cc474cf2c2f5 dav/sync.c --- 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; +}