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 |
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 { |