dav/tags.c

changeset 423
84e6c407b431
parent 414
ea50585ec9d9
child 510
d6e801f97e7a
equal deleted inserted replaced
422:1429fb385513 423:84e6c407b431
67 for(int i=0;i<length;i++) { 67 for(int i=0;i<length;i++) {
68 if(buf[i] == '\n' || i == length-1) { 68 if(buf[i] == '\n' || i == length-1) {
69 sstr_t line = sstrtrim(sstrn((char*)buf + line_start, i - line_start)); 69 sstr_t line = sstrtrim(sstrn((char*)buf + line_start, i - line_start));
70 if(line.length > 0) { 70 if(line.length > 0) {
71 DavTag *tag = calloc(1, sizeof(DavTag)); 71 DavTag *tag = calloc(1, sizeof(DavTag));
72 tag->name = sstrdup(line).ptr; 72 sstr_t color = sstrchr(line, '#');
73 tag->color = NULL; 73 if(color.length>0) {
74 sstr_t name = line;
75 name.length = (int)(color.ptr-line.ptr);
76 if(name.length != 0) {
77 tag->name = sstrdup(name).ptr;
78 color.ptr++;
79 color.length--;
80 if(color.length > 0) {
81 tag->color = sstrdup(color).ptr;
82 }
83 } else {
84 free(tag);
85 }
86 } else {
87 tag->name = sstrdup(line).ptr;
88 tag->color = NULL;
89 }
90
74 tags = ucx_list_append(tags, tag); 91 tags = ucx_list_append(tags, tag);
75 } 92 }
76 line_start = i+1; 93 line_start = i+1;
77 } 94 }
78 } 95 }
86 } 103 }
87 104
88 UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND); 105 UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND);
89 UCX_FOREACH(elm, tags) { 106 UCX_FOREACH(elm, tags) {
90 DavTag *tag = elm->data; 107 DavTag *tag = elm->data;
91 ucx_bprintf(buf, "%s\n", tag->name); 108 if(tag->color) {
109 ucx_bprintf(buf, "%s#%s\n", tag->name, tag->color);
110 } else {
111 ucx_bprintf(buf, "%s\n", tag->name);
112 }
92 } 113 }
93 return buf; 114 return buf;
94 } 115 }
95 116
96 117
131 } 152 }
132 153
133 154
134 static DavTag* parse_xml_dav_tag(DavXmlNode *node) { 155 static DavTag* parse_xml_dav_tag(DavXmlNode *node) {
135 char *name = NULL; 156 char *name = NULL;
157 char *color = NULL;
136 158
137 DavXmlNode *c = node->children; 159 DavXmlNode *c = node->children;
138 while(c) { 160 while(c) {
139 if(c->type == DAV_XML_ELEMENT) { 161 if(c->type == DAV_XML_ELEMENT) {
140 char *value = dav_xml_getstring(c->children); 162 char *value = dav_xml_getstring(c->children);
144 char *value = dav_xml_getstring(c->children); 166 char *value = dav_xml_getstring(c->children);
145 if(value) { 167 if(value) {
146 name = value; 168 name = value;
147 } 169 }
148 } 170 }
149 // TODO: color, ... 171 if(!strcmp(c->name, "color")) {
172 char *value = dav_xml_getstring(c->children);
173 if(value) {
174 color = value;
175 }
176 }
150 } 177 }
151 } 178 }
152 } 179 }
153 c = c->next; 180 c = c->next;
154 } 181 }
155 182
156 DavTag *tag = NULL; 183 DavTag *tag = NULL;
157 if(name) { 184 if(name) {
158 tag = malloc(sizeof(DavTag)); 185 tag = malloc(sizeof(DavTag));
159 tag->name = strdup(name); 186 tag->name = strdup(name);
160 tag->color = NULL; 187 tag->color = color ? strdup(color) : NULL;
161 } 188 }
162 return tag; 189 return tag;
163 } 190 }
164 191
165 UcxList* parse_dav_xml_taglist(DavXmlNode *taglistnode) { 192 UcxList* parse_dav_xml_taglist(DavXmlNode *taglistnode) {
187 UCX_FOREACH(elm, tags) { 214 UCX_FOREACH(elm, tags) {
188 DavTag *tag = elm->data; 215 DavTag *tag = elm->data;
189 216
190 DavXmlNode *tagelm = dav_xml_createnode(DAV_NS, "tag"); 217 DavXmlNode *tagelm = dav_xml_createnode(DAV_NS, "tag");
191 DavXmlNode *tagname = dav_xml_createnode_with_text(DAV_NS, "name", tag->name); 218 DavXmlNode *tagname = dav_xml_createnode_with_text(DAV_NS, "name", tag->name);
192 // TODO: color
193 tagelm->children = tagname; 219 tagelm->children = tagname;
220 if(tag->color) {
221 DavXmlNode *tagcolor = dav_xml_createnode_with_text(DAV_NS, "color", tag->color);
222 tagname->next = tagcolor;
223 }
194 224
195 if(lasttag) { 225 if(lasttag) {
196 lasttag->next = tagelm; 226 lasttag->next = tagelm;
197 tagelm->prev = lasttag; 227 tagelm->prev = lasttag;
198 } else { 228 } else {

mercurial