dav/sync.c

changeset 377
d6d7c16dd066
parent 374
38ae05d46f9a
child 378
d64ecd8d6969
equal deleted inserted replaced
376:222997d48ae1 377:d6d7c16dd066
132 ret = cmd_add_tag(args); 132 ret = cmd_add_tag(args);
133 } else if(!strcmp(cmd, "remove-tag")) { 133 } else if(!strcmp(cmd, "remove-tag")) {
134 ret = cmd_remove_tag(args); 134 ret = cmd_remove_tag(args);
135 } else if(!strcmp(cmd, "update-tags")) { 135 } else if(!strcmp(cmd, "update-tags")) {
136 ret = cmd_update_tags(args); 136 ret = cmd_update_tags(args);
137 } else if(!strcmp(cmd, "list-tags")) {
138 ret = cmd_list_tags(args);
137 } else if(!strcmp(cmd, "add-dir") 139 } else if(!strcmp(cmd, "add-dir")
138 || !strcmp(cmd, "add-directory")) { 140 || !strcmp(cmd, "add-directory")) {
139 ret = cmd_add_directory(args); 141 ret = cmd_add_directory(args);
140 } else if(!strcmp(cmd, "list-dirs") 142 } else if(!strcmp(cmd, "list-dirs")
141 || !strcmp(cmd, "list-directories")) { 143 || !strcmp(cmd, "list-directories")) {
172 fprintf(stderr, " delete-conflicts <directory>\n"); 174 fprintf(stderr, " delete-conflicts <directory>\n");
173 fprintf(stderr, " trash-info <directory>\n"); 175 fprintf(stderr, " trash-info <directory>\n");
174 fprintf(stderr, " empty-trash <directory>\n"); 176 fprintf(stderr, " empty-trash <directory>\n");
175 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n"); 177 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n");
176 fprintf(stderr, " remove-tag [-s <syncdir>] <file> <tag>\n"); 178 fprintf(stderr, " remove-tag [-s <syncdir>] <file> <tag>\n");
177 fprintf(stderr, " update-tags [-s <syncdir>] <file> [tags]\n\n"); 179 fprintf(stderr, " update-tags [-s <syncdir>] <file> [tags]\n");
180 fprintf(stderr, " update-tags [-s <syncdir>] <file>\n\n");
178 181
179 fprintf(stderr, "Options:\n"); 182 fprintf(stderr, "Options:\n");
180 fprintf(stderr, " -c Disable conflict detection\n"); 183 fprintf(stderr, " -c Disable conflict detection\n");
181 fprintf(stderr, " -l Lock the repository before access\n"); 184 fprintf(stderr, " -l Lock the repository before access\n");
182 fprintf(stderr, " -d Don't lock the repository\n"); 185 fprintf(stderr, " -d Don't lock the repository\n");
1441 ucx_buffer_free(data); 1444 ucx_buffer_free(data);
1442 } else { 1445 } else {
1443 ret = -1; 1446 ret = -1;
1444 } 1447 }
1445 } else { 1448 } else {
1446 // TODO: relete xattr 1449 // TODO: delete xattr
1447 //ret = xattr_remove(path, dir->tagconfig->xattr_name); 1450 //ret = xattr_remove(path, dir->tagconfig->xattr_name);
1448 } 1451 }
1449 } 1452 }
1450 1453
1451 return ret; 1454 return ret;
2071 } 2074 }
2072 2075
2073 #define CMD_TAG_ADD 0 2076 #define CMD_TAG_ADD 0
2074 #define CMD_TAG_REMOVE 1 2077 #define CMD_TAG_REMOVE 1
2075 #define CMD_TAG_UPDATE 2 2078 #define CMD_TAG_UPDATE 2
2079 #define CMD_TAG_LIST 3
2076 int cmd_add_tag(CmdArgs *args) { 2080 int cmd_add_tag(CmdArgs *args) {
2077 if(args->argc != 2) { 2081 if(args->argc != 2) {
2078 fprintf(stderr, "Too %s arguments\n", args->argc <= 1 ? "few" : "many"); 2082 fprintf(stderr, "Too %s arguments\n", args->argc <= 1 ? "few" : "many");
2079 return -1; 2083 return -1;
2080 } 2084 }
2093 if(args->argc < 1 || args->argc > 2) { 2097 if(args->argc < 1 || args->argc > 2) {
2094 fprintf(stderr, "Too %s arguments\n", args->argc < 1 ? "few" : "many"); 2098 fprintf(stderr, "Too %s arguments\n", args->argc < 1 ? "few" : "many");
2095 return -1; 2099 return -1;
2096 } 2100 }
2097 return cmd_tagopt(args, CMD_TAG_UPDATE); 2101 return cmd_tagopt(args, CMD_TAG_UPDATE);
2102 }
2103
2104 int cmd_list_tags(CmdArgs *args) {
2105 if(args->argc != 1) {
2106 fprintf(stderr, "Too %s arguments\n", args->argc <= 1 ? "few" : "many");
2107 return -1;
2108 }
2109 return cmd_tagopt(args, CMD_TAG_LIST);
2098 } 2110 }
2099 2111
2100 int cmd_tagopt(CmdArgs *args, int cmd) { 2112 int cmd_tagopt(CmdArgs *args, int cmd) {
2101 SyncFile file; 2113 SyncFile file;
2102 int ret = 0; 2114 int ret = 0;
2121 2133
2122 LocalResource *localres = ucx_map_cstr_get(db->resources, file.path); 2134 LocalResource *localres = ucx_map_cstr_get(db->resources, file.path);
2123 UcxList *tags = NULL; 2135 UcxList *tags = NULL;
2124 DavBool store_tags = FALSE; 2136 DavBool store_tags = FALSE;
2125 2137
2126 if(cmd == CMD_TAG_ADD || cmd == CMD_TAG_REMOVE) { 2138 if(cmd != CMD_TAG_UPDATE) {
2127 char *tag = args->argv[1]; 2139 char *tag = args->argv[1];
2128 char *tagcolor = NULL; // TODO: get color 2140 char *tagcolor = NULL; // TODO: get color
2129 2141
2130 tags = sync_get_file_tags(file.dir, localres, NULL); 2142 tags = sync_get_file_tags(file.dir, localres, NULL);
2131 UcxList *x = NULL; 2143 UcxList *x = NULL;
2132 UCX_FOREACH(elm, tags) { 2144 UCX_FOREACH(elm, tags) {
2133 DavTag *t = elm->data; 2145 DavTag *t = elm->data;
2134 if(!strcmp(t->name, tag)) { 2146 if(cmd == CMD_TAG_LIST) {
2147 printf("%s\n", t->name);
2148 } else if(!strcmp(t->name, tag)) {
2135 x = elm; 2149 x = elm;
2136 break; 2150 break;
2137 } 2151 }
2138 } 2152 }
2139 2153
2143 newtag->name = tag; 2157 newtag->name = tag;
2144 newtag->color = tagcolor; 2158 newtag->color = tagcolor;
2145 tags = ucx_list_append(tags, newtag); 2159 tags = ucx_list_append(tags, newtag);
2146 store_tags = TRUE; 2160 store_tags = TRUE;
2147 } 2161 }
2148 } else { 2162 } else if(cmd == CMD_TAG_REMOVE) {
2149 if(tags) { 2163 if(tags) {
2150 tags = ucx_list_remove(tags, x); 2164 tags = ucx_list_remove(tags, x);
2151 } 2165 }
2152 store_tags = TRUE; 2166 store_tags = TRUE;
2153 } 2167 }

mercurial