Changeset 2dcaf9a


Ignore:
Timestamp:
2010-09-01T22:35:06Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
76e2f62, 858ea01
Parents:
934db064
Message:

Load/save code. It'd be better if the OTR module would just save its info
in BitlBee settings that automatically end up in the existing .xml files
(or whatever storage is used), but I realise this is non-trivial.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • irc.h

    r934db064 r2dcaf9a  
    240240           message and don't want anything to go to the user. */
    241241        char* (*filter_msg_in)( irc_user_t *iu, char *msg, int flags );
     242       
     243        /* From storage.c functions. Ideally these should not be used
     244           and instead data should be stored in settings which will get
     245           saved automatically. Consider these deprecated! */
     246        void (*storage_load)( irc_t *irc );
     247        void (*storage_save)( irc_t *irc );
     248        void (*storage_remove)( const char *nick );
    242249} irc_plugin_t;
    243250
  • otr.c

    r934db064 r2dcaf9a  
    448448        otr_filter_msg_out,
    449449        otr_filter_msg_in,
     450        otr_load,
     451        otr_save,
     452        otr_remove,
    450453};
    451454
     
    16631666                fclose(irc->otr->from);
    16641667                fclose(irc->otr->to);
     1668                irc->otr->from = irc->otr->to = NULL;
    16651669                kill(irc->otr->keygen, SIGTERM);
    16661670                waitpid(irc->otr->keygen, NULL, 0);
  • storage.c

    r934db064 r2dcaf9a  
    115115                status = st->load(irc, password);
    116116                if (status == STORAGE_OK)
     117                {
     118                        GSList *l;
     119                        for( l = irc_plugins; l; l = l->next )
     120                        {
     121                                irc_plugin_t *p = l->data;
     122                                if( p->storage_load )
     123                                        p->storage_load( irc );
     124                        }
    117125                        return status;
     126                }
    118127               
    119128                if (status != STORAGE_NO_SUCH_USER)
     
    127136{
    128137        storage_status_t st;
     138        GSList *l;
    129139       
    130140        if (password != NULL) {
     
    140150        st = ((storage_t *)global.storage->data)->save(irc, overwrite);
    141151       
     152        for( l = irc_plugins; l; l = l->next )
     153        {
     154                irc_plugin_t *p = l->data;
     155                if( p->storage_save )
     156                        p->storage_save( irc );
     157        }
     158       
    142159        if (password != NULL) {
    143160                irc_setpass(irc, NULL);
     
    151168        GList *gl;
    152169        storage_status_t ret = STORAGE_OK;
     170        gboolean ok = FALSE;
     171        GSList *l;
    153172       
    154173        /* Remove this account from all storage backends. If this isn't
     
    160179
    161180                status = st->remove(nick, password);
     181                ok |= status == STORAGE_OK;
    162182                if (status != STORAGE_NO_SUCH_USER && status != STORAGE_OK)
    163183                        ret = status;
    164184        }
     185       
     186        /* If at least one succeeded, remove plugin data. */
     187        if( ok )
     188                for( l = irc_plugins; l; l = l->next )
     189                {
     190                        irc_plugin_t *p = l->data;
     191                        if( p->storage_remove )
     192                                p->storage_remove( nick );
     193                }
    165194       
    166195        return ret;
Note: See TracChangeset for help on using the changeset viewer.