Changeset c5bc47b for storage_xml.c
- Timestamp:
- 2009-10-17T17:24:52Z (15 years ago)
- Branches:
- master
- Children:
- c48a033
- Parents:
- 0c41177 (diff), 2e44b1f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
storage_xml.c
r0c41177 rc5bc47b 54 54 char *current_setting; 55 55 account_t *current_account; 56 struct chat *current_chat; 57 set_t **current_set_head; 56 58 char *given_nick; 57 59 char *given_pass; … … 172 174 173 175 if( ( setting = xml_attr( attr_names, attr_values, "name" ) ) ) 176 { 177 if( xd->current_chat != NULL ) 178 xd->current_set_head = &xd->current_chat->set; 179 else if( xd->current_account != NULL ) 180 xd->current_set_head = &xd->current_account->set; 181 else 182 xd->current_set_head = &xd->irc->set; 183 174 184 xd->current_setting = g_strdup( setting ); 185 } 175 186 else 176 187 g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, … … 194 205 } 195 206 } 207 else if( g_strcasecmp( element_name, "chat" ) == 0 ) 208 { 209 char *handle, *channel; 210 211 handle = xml_attr( attr_names, attr_values, "handle" ); 212 channel = xml_attr( attr_names, attr_values, "channel" ); 213 214 if( xd->current_account && handle && channel ) 215 { 216 xd->current_chat = chat_add( xd->irc, xd->current_account, handle, channel ); 217 } 218 else 219 { 220 g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, 221 "Missing attributes for %s element", element_name ); 222 } 223 } 196 224 else 197 225 { … … 214 242 xd->current_account = NULL; 215 243 } 244 else if( g_strcasecmp( element_name, "chat" ) == 0 ) 245 { 246 xd->current_chat = NULL; 247 } 216 248 } 217 249 … … 220 252 char text[text_len+1]; 221 253 struct xml_parsedata *xd = data; 222 irc_t *irc = xd->irc;223 254 224 255 strncpy( text, text_orig, text_len ); … … 233 264 else if( g_strcasecmp( g_markup_parse_context_get_element( ctx ), "setting" ) == 0 && xd->current_setting ) 234 265 { 235 set_setstr( xd->current_account ? &xd->current_account->set : &irc->set, 236 xd->current_setting, (char*) text ); 266 set_setstr( xd->current_set_head, xd->current_setting, (char*) text ); 237 267 g_free( xd->current_setting ); 238 268 xd->current_setting = NULL; … … 397 427 398 428 for( set = irc->set; set; set = set->next ) 399 if( set->value && set->def)429 if( set->value ) 400 430 if( !xml_printf( fd, 1, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 401 431 goto write_error; … … 406 436 char *pass_b64; 407 437 int pass_len; 438 struct chat *c; 408 439 409 440 pass_len = arc_encode( acc->pass, strlen( acc->pass ), (unsigned char**) &pass_cr, irc->password, 12 ); … … 424 455 425 456 for( set = acc->set; set; set = set->next ) 426 if( set->value && set->def &&!( set->flags & ACC_SET_NOSAVE ) )457 if( set->value && !( set->flags & ACC_SET_NOSAVE ) ) 427 458 if( !xml_printf( fd, 2, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 428 459 goto write_error; … … 438 469 goto write_error; 439 470 471 for( c = irc->chatrooms; c; c = c->next ) 472 { 473 if( c->acc != acc ) 474 continue; 475 476 if( !xml_printf( fd, 2, "<chat handle=\"%s\" channel=\"%s\" type=\"%s\">\n", 477 c->handle, c->channel, "room" ) ) 478 goto write_error; 479 480 for( set = c->set; set; set = set->next ) 481 if( set->value && !( set->flags & ACC_SET_NOSAVE ) ) 482 if( !xml_printf( fd, 3, "<setting name=\"%s\">%s</setting>\n", 483 set->key, set->value ) ) 484 goto write_error; 485 486 if( !xml_printf( fd, 2, "</chat>\n" ) ) 487 goto write_error; 488 } 489 440 490 if( !xml_printf( fd, 1, "</account>\n" ) ) 441 491 goto write_error;
Note: See TracChangeset
for help on using the changeset viewer.