Changeset 1917a1ec


Ignore:
Timestamp:
2008-08-30T19:43:38Z (16 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
b84800d
Parents:
ad9feec
Message:

Added support for loading chatroom data from user .xml files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • storage_xml.c

    rad9feec r1917a1ec  
    2929#include "arc.h"
    3030#include "md5.h"
    31 #include <glib/gstdio.h>
    3231
    3332#if GLIB_CHECK_VERSION(2,8,0)
     
    5554        char *current_setting;
    5655        account_t *current_account;
     56        struct chat *current_chat;
     57        set_t **current_set_head;
    5758        char *given_nick;
    5859        char *given_pass;
     
    173174               
    174175                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                       
    175184                        xd->current_setting = g_strdup( setting );
     185                }
    176186                else
    177187                        g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
     
    195205                }
    196206        }
     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        }
    197224        else
    198225        {
     
    215242                xd->current_account = NULL;
    216243        }
     244        else if( g_strcasecmp( element_name, "chat" ) == 0 )
     245        {
     246                xd->current_chat = NULL;
     247        }
    217248}
    218249
     
    221252        char text[text_len+1];
    222253        struct xml_parsedata *xd = data;
    223         irc_t *irc = xd->irc;
    224254       
    225255        strncpy( text, text_orig, text_len );
     
    234264        else if( g_strcasecmp( g_markup_parse_context_get_element( ctx ), "setting" ) == 0 && xd->current_setting )
    235265        {
    236                 set_setstr( xd->current_account ? &xd->current_account->set : &irc->set,
    237                             xd->current_setting, (char*) text );
     266                set_setstr( xd->current_set_head, xd->current_setting, (char*) text );
    238267                g_free( xd->current_setting );
    239268                xd->current_setting = NULL;
Note: See TracChangeset for help on using the changeset viewer.