dav/sync.c

changeset 200
cc474cf2c2f5
parent 199
f448fc8c9191
child 204
4f0207044837
equal deleted inserted replaced
199:f448fc8c9191 200:cc474cf2c2f5
44 #include "config.h" 44 #include "config.h"
45 #include "scfg.h" 45 #include "scfg.h"
46 #include "sopt.h" 46 #include "sopt.h"
47 #include "db.h" 47 #include "db.h"
48 #include "error.h" 48 #include "error.h"
49 #include "assistant.h"
49 50
50 #include "sync.h" 51 #include "sync.h"
51 #include "ucx/properties.h" 52 #include "ucx/properties.h"
52 53
53 static DavContext *ctx; 54 static DavContext *ctx;
87 int ret = EXIT_FAILURE; 88 int ret = EXIT_FAILURE;
88 if(!strcmp(cmd, "pull")) { 89 if(!strcmp(cmd, "pull")) {
89 ret = cmd_pull(args); 90 ret = cmd_pull(args);
90 } else if(!strcmp(cmd, "push")) { 91 } else if(!strcmp(cmd, "push")) {
91 ret = cmd_push(args); 92 ret = cmd_push(args);
93 } else if(!strcmp(cmd, "add-directory")) {
94 ret = cmd_add_directory(args);
92 } else if(!strcmp(cmd, "list-directories")) { 95 } else if(!strcmp(cmd, "list-directories")) {
93 ret = list_syncdirs(); 96 ret = list_syncdirs();
94 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) { 97 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) {
95 #ifdef DEBUG 98 #ifdef DEBUG
96 fprintf(stderr, "dav-sync %s unstable\n", DAV_VERSION); 99 fprintf(stderr, "dav-sync %s unstable\n", DAV_VERSION);
115 fprintf(stderr, "Options:\n"); 118 fprintf(stderr, "Options:\n");
116 fprintf(stderr, " -c Disable conflict detection\n\n"); 119 fprintf(stderr, " -c Disable conflict detection\n\n");
117 //fprintf(stderr, " -r Read changes from stdin\n\n"); 120 //fprintf(stderr, " -r Read changes from stdin\n\n");
118 121
119 fprintf(stderr, "Config commands:\n"); 122 fprintf(stderr, "Config commands:\n");
123 fprintf(stderr, " add-directory\n");
120 fprintf(stderr, " list-directories\n\n"); 124 fprintf(stderr, " list-directories\n\n");
121 } 125 }
122 126
123 static int res_matches_filter(SyncDirectory *dir, char *res_path) { 127 static int res_matches_filter(SyncDirectory *dir, char *res_path) {
124 // trash filter 128 // trash filter
1028 1032
1029 return ret; 1033 return ret;
1030 } 1034 }
1031 1035
1032 1036
1033 1037 int cmd_add_directory(CmdArgs *args) {
1038 printf("Each sync directory must have an unique name.\n");
1039 char *name = assistant_getcfg("name");
1040 if(!name) {
1041 fprintf(stderr, "Abort\n");
1042 return -1;
1043 }
1044 if(scfg_get_dir(name)) {
1045 fprintf(stderr, "Directory %s already exists.\nAbort\n", name);
1046 return -1;
1047 }
1048
1049 printf("Enter local directory path.\n");
1050 char *path = assistant_getcfg("path");
1051 if(!path) {
1052 fprintf(stderr, "Abort\n");
1053 return -1;
1054 }
1055
1056 printf("Enter webdav repository name.\n");
1057 char *repository = assistant_getcfg("repository");
1058 if(!repository) {
1059 fprintf(stderr, "Abort\n");
1060 return -1;
1061 }
1062 if(!get_repository(sstr(repository))) {
1063 fprintf(stderr, "Repository %s doesn't exist.\nAbort\n", repository);
1064 return -1;
1065 }
1066
1067 printf("Enter collection relative to the repository base url.\n");
1068 char *collection = assistant_getdefcfg("collection", "/");
1069
1070 char *db = generate_db_name(name);
1071
1072 SyncDirectory dir;
1073 memset(&dir, 0, sizeof(SyncDirectory));
1074 dir.name = name;
1075 dir.path = path;
1076 dir.repository = repository;
1077 dir.collection = collection;
1078 dir.trash = ".trash";
1079 dir.database = db;
1080
1081 int ret = 0;
1082 if(add_directory(&dir)) {
1083 fprintf(stderr, "Cannot write sync.xml\n");
1084 ret = -1;
1085 } else {
1086 printf("\nAdded directory: %s (%s)\n", name, path);
1087 }
1088
1089 free(name);
1090 free(path);
1091 free(repository);
1092 free(collection);
1093 free(db);
1094
1095 return ret;
1096 }

mercurial