dav/tags.c

branch
ucx-3.1
changeset 816
839fefbdedc7
parent 785
645f7e802873
equal deleted inserted replaced
815:1f40ca07ae1b 816:839fefbdedc7
71 } 71 }
72 } 72 }
73 73
74 CxList* parse_text_taglist(const char *buf, size_t length) { 74 CxList* parse_text_taglist(const char *buf, size_t length) {
75 CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); 75 CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS);
76 tags->simple_destructor = (cx_destructor_func)free_dav_tag; 76 cxDefineDestructor(tags, free_dav_tag);
77 77
78 int line_start = 0; 78 int line_start = 0;
79 for(int i=0;i<length;i++) { 79 for(int i=0;i<length;i++) {
80 if(buf[i] == '\n' || i == length-1) { 80 if(buf[i] == '\n' || i == length-1) {
81 cxstring line = cx_strtrim(cx_strn((char*)buf + line_start, i - line_start)); 81 cxstring line = cx_strtrim(cx_strn((char*)buf + line_start, i - line_start));
112 CxMap* taglist2map(CxList *tags) { 112 CxMap* taglist2map(CxList *tags) {
113 if(!tags) { 113 if(!tags) {
114 return cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); 114 return cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8);
115 } 115 }
116 116
117 CxMap *map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, tags->size + 8); 117 CxMap *map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, cxListSize(tags) + 8);
118 CxIterator iter = cxListIterator(tags); 118 CxIterator iter = cxListIterator(tags);
119 cx_foreach(DavTag*, t, iter) { 119 cx_foreach(DavTag*, t, iter) {
120 cxMapPut(map, cx_hash_key_str(t->name), t); 120 cxMapPut(map, cx_hash_key_str(t->name), t);
121 } 121 }
122 return map; 122 return map;
140 } 140 }
141 141
142 142
143 CxList* parse_csv_taglist(const char *buf, size_t length) { 143 CxList* parse_csv_taglist(const char *buf, size_t length) {
144 CxList *taglist = cxLinkedListCreateSimple(CX_STORE_POINTERS); 144 CxList *taglist = cxLinkedListCreateSimple(CX_STORE_POINTERS);
145 taglist->simple_destructor = (cx_destructor_func)free_dav_tag; 145 cxDefineDestructor(taglist, free_dav_tag);
146 146
147 cxstring str = cx_strn(buf, length); 147 cxstring str = cx_strn(buf, length);
148 CxStrtokCtx tags = cx_strtok(str, CX_STR(","), INT_MAX); 148 CxStrtokCtx tags = cx_strtok(str, CX_STR(","), INT_MAX);
149 cxstring tagstr; 149 cxstring tagstr;
150 while(cx_strtok_next(&tags, &tagstr)) { 150 while(cx_strtok_next(&tags, &tagstr)) {
183 if(c->type == DAV_XML_ELEMENT) { 183 if(c->type == DAV_XML_ELEMENT) {
184 char *value = dav_xml_getstring(c->children); 184 char *value = dav_xml_getstring(c->children);
185 if(value) { 185 if(value) {
186 if(!strcmp(c->namespace, DAV_PROPS_NS)) { 186 if(!strcmp(c->namespace, DAV_PROPS_NS)) {
187 if(!strcmp(c->name, "name")) { 187 if(!strcmp(c->name, "name")) {
188 char *value = dav_xml_getstring(c->children); 188 name = value;
189 if(value) {
190 name = value;
191 }
192 } 189 }
193 if(!strcmp(c->name, "color")) { 190 if(!strcmp(c->name, "color")) {
194 char *value = dav_xml_getstring(c->children); 191 color = value;
195 if(value) {
196 color = value;
197 }
198 } 192 }
199 } 193 }
200 } 194 }
201 } 195 }
202 c = c->next; 196 c = c->next;
211 return tag; 205 return tag;
212 } 206 }
213 207
214 CxList* parse_dav_xml_taglist(DavXmlNode *taglistnode) { 208 CxList* parse_dav_xml_taglist(DavXmlNode *taglistnode) {
215 CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); 209 CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS);
216 tags->simple_destructor = (cx_destructor_func)free_dav_tag; 210 cxDefineDestructor(tags, free_dav_tag);
217 211
218 DavXmlNode *node = taglistnode; 212 DavXmlNode *node = taglistnode;
219 while(node) { 213 while(node) {
220 if(node->type == DAV_XML_ELEMENT) { 214 if(node->type == DAV_XML_ELEMENT) {
221 if(!strcmp(node->namespace, DAV_PROPS_NS) && !strcmp(node->name, "tag")) { 215 if(!strcmp(node->namespace, DAV_PROPS_NS) && !strcmp(node->name, "tag")) {
401 break; 395 break;
402 } 396 }
403 i++; 397 i++;
404 } 398 }
405 399
406 if(i != map1->size) { 400 if(i != cxMapSize(map1)) {
407 equal = 0; 401 equal = 0;
408 } 402 }
409 cxMapDestroy(map1); 403 cxMapDestroy(map1);
410 return equal; 404 return equal;
411 } 405 }
423 CxList* merge_tags(CxList *tags1, CxList *tags2) { 417 CxList* merge_tags(CxList *tags1, CxList *tags2) {
424 // this map is used to check the existence of tags 418 // this map is used to check the existence of tags
425 CxMap *tag_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32); 419 CxMap *tag_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32);
426 // merged taglist 420 // merged taglist
427 CxList *new_tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); 421 CxList *new_tags = cxLinkedListCreateSimple(CX_STORE_POINTERS);
428 new_tags->simple_destructor = (cx_destructor_func)free_dav_tag; 422 cxDefineDestructor(new_tags, free_dav_tag);
429 423
430 // add all local tags 424 // add all local tags
431 if(tags1) { 425 if(tags1) {
432 CxIterator iter = cxListIterator(tags1); 426 CxIterator iter = cxListIterator(tags1);
433 cx_foreach(DavTag*, t, iter) { 427 cx_foreach(DavTag*, t, iter) {

mercurial