Changes in storage_xml.c [15d1469:b84800d]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
storage_xml.c
r15d1469 rb84800d 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; … … 258 288 } 259 289 260 static storage_status_t xml_load_real( irc_t *irc, const char *my_nick, const char *password, xml_pass_st action )290 static storage_status_t xml_load_real( const char *my_nick, const char *password, irc_t *irc, xml_pass_st action ) 261 291 { 262 292 GMarkupParseContext *ctx; … … 265 295 GError *gerr = NULL; 266 296 int fd, st; 297 298 if( irc && irc->status & USTATUS_IDENTIFIED ) 299 return( 1 ); 267 300 268 301 xd = g_new0( struct xml_parsedata, 1 ); … … 317 350 return STORAGE_OK; 318 351 352 irc->status |= USTATUS_IDENTIFIED; 353 319 354 return STORAGE_OK; 320 355 } 321 356 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 );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 ); 325 360 } 326 361 … … 329 364 /* This is a little bit risky because we have to pass NULL for the 330 365 irc_t argument. This *should* be fine, if I didn't miss anything... */ 331 return xml_load_real( NULL, my_nick, password, XML_PASS_CHECK_ONLY );366 return xml_load_real( my_nick, password, NULL, XML_PASS_CHECK_ONLY ); 332 367 } 333 368 … … 364 399 md5_byte_t pass_md5[21]; 365 400 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 } 366 407 367 408 path2 = g_strdup( irc->nick ); … … 397 438 398 439 for( set = irc->set; set; set = set->next ) 399 if( set->value && set->def)440 if( set->value ) 400 441 if( !xml_printf( fd, 1, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 401 442 goto write_error; … … 406 447 char *pass_b64; 407 448 int pass_len; 449 struct chat *c; 408 450 409 451 pass_len = arc_encode( acc->pass, strlen( acc->pass ), (unsigned char**) &pass_cr, irc->password, 12 ); … … 424 466 425 467 for( set = acc->set; set; set = set->next ) 426 if( set->value && set->def &&!( set->flags & ACC_SET_NOSAVE ) )468 if( set->value && !( set->flags & ACC_SET_NOSAVE ) ) 427 469 if( !xml_printf( fd, 2, "<setting name=\"%s\">%s</setting>\n", set->key, set->value ) ) 428 470 goto write_error; … … 438 480 goto write_error; 439 481 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 440 501 if( !xml_printf( fd, 1, "</account>\n" ) ) 441 502 goto write_error;
Note: See TracChangeset
for help on using the changeset viewer.