Changes in storage_xml.c [b84800d:15d1469]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
storage_xml.c
rb84800d r15d1469 54 54 char *current_setting; 55 55 account_t *current_account; 56 struct chat *current_chat;57 set_t **current_set_head;58 56 char *given_nick; 59 57 char *given_pass; … … 174 172 175 173 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 else182 xd->current_set_head = &xd->irc->set;183 184 174 xd->current_setting = g_strdup( setting ); 185 }186 175 else 187 176 g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, … … 205 194 } 206 195 } 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 else219 {220 g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,221 "Missing attributes for %s element", element_name );222 }223 }224 196 else 225 197 { … … 242 214 xd->current_account = NULL; 243 215 } 244 else if( g_strcasecmp( element_name, "chat" ) == 0 )245 {246 xd->current_chat = NULL;247 }248 216 } 249 217 … … 252 220 char text[text_len+1]; 253 221 struct xml_parsedata *xd = data; 222 irc_t *irc = xd->irc; 254 223 255 224 strncpy( text, text_orig, text_len ); … … 264 233 else if( g_strcasecmp( g_markup_parse_context_get_element( ctx ), "setting" ) == 0 && xd->current_setting ) 265 234 { 266 set_setstr( xd->current_set_head, xd->current_setting, (char*) text ); 235 set_setstr( xd->current_account ? &xd->current_account->set : &irc->set, 236 xd->current_setting, (char*) text ); 267 237 g_free( xd->current_setting ); 268 238 xd->current_setting = NULL; … … 288 258 } 289 259 290 static storage_status_t xml_load_real( const char *my_nick, const char *password, irc_t *irc, xml_pass_st action )260 static storage_status_t xml_load_real( irc_t *irc, const char *my_nick, const char *password, xml_pass_st action ) 291 261 { 292 262 GMarkupParseContext *ctx; … … 295 265 GError *gerr = NULL; 296 266 int fd, st; 297 298 if( irc && irc->status & USTATUS_IDENTIFIED )299 return( 1 );300 267 301 268 xd = g_new0( struct xml_parsedata, 1 ); … … 350 317 return STORAGE_OK; 351 318 352 irc->status |= USTATUS_IDENTIFIED;353 354 319 return STORAGE_OK; 355 320 } 356 321 357 static storage_status_t xml_load( const char *my_nick, const char *password, irc_t *irc)358 { 359 return xml_load_real( my_nick, password, irc, XML_PASS_UNKNOWN );322 static storage_status_t xml_load( irc_t *irc, const char *password ) 323 { 324 return xml_load_real( irc, irc->nick, password, XML_PASS_UNKNOWN ); 360 325 } 361 326 … … 364 329 /* This is a little bit risky because we have to pass NULL for the 365 330 irc_t argument. This *should* be fine, if I didn't miss anything... */ 366 return xml_load_real( my_nick, password, NULL, XML_PASS_CHECK_ONLY );331 return xml_load_real( NULL, my_nick, password, XML_PASS_CHECK_ONLY ); 367 332 } 368 333 … … 399 364 md5_byte_t pass_md5[21]; 400 365 md5_state_t md5_state; 401 402 if( irc->password == NULL )403 {404 irc_usermsg( irc, "Please register yourself if you want to save your settings." );405 return STORAGE_OTHER_ERROR;406 }407 366 408 367 path2 = g_strdup( irc->nick ); … … 438 397 439 398 for( set = irc->set; set; set = set->next ) 440 if( set->value )399 if( set->value && set->def ) 441 400 if( !xml_printf( fd, 1, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 442 401 goto write_error; … … 447 406 char *pass_b64; 448 407 int pass_len; 449 struct chat *c;450 408 451 409 pass_len = arc_encode( acc->pass, strlen( acc->pass ), (unsigned char**) &pass_cr, irc->password, 12 ); … … 466 424 467 425 for( set = acc->set; set; set = set->next ) 468 if( set->value && !( set->flags & ACC_SET_NOSAVE ) )426 if( set->value && set->def && !( set->flags & ACC_SET_NOSAVE ) ) 469 427 if( !xml_printf( fd, 2, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 470 428 goto write_error; … … 480 438 goto write_error; 481 439 482 for( c = irc->chatrooms; c; c = c->next )483 {484 if( c->acc != acc )485 continue;486 487 if( !xml_printf( fd, 2, "<chat handle=\"%s\" channel=\"%s\" type=\"%s\">\n",488 c->handle, c->channel, "room" ) )489 goto write_error;490 491 for( set = c->set; set; set = set->next )492 if( set->value && !( set->flags & ACC_SET_NOSAVE ) )493 if( !xml_printf( fd, 3, "<setting name=\"%s\">%s</setting>\n",494 set->key, set->value ) )495 goto write_error;496 497 if( !xml_printf( fd, 2, "</chat>\n" ) )498 goto write_error;499 }500 501 440 if( !xml_printf( fd, 1, "</account>\n" ) ) 502 441 goto write_error;
Note: See TracChangeset
for help on using the changeset viewer.