aboutsummaryrefslogtreecommitdiffstats
path: root/storage.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-09-01 23:35:06 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-09-01 23:35:06 +0100
commit2dcaf9a0fabdb92a191e64759d116f316de7dfc2 (patch)
tree1de0cc9ef4fe5ca5afb4c9e951ab1b193f0390f1 /storage.c
parent934db064a58ebec2edea83df4fa07e2c83220344 (diff)
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.
Diffstat (limited to 'storage.c')
-rw-r--r--storage.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/storage.c b/storage.c
index ad1833fc..d64d9cda 100644
--- a/storage.c
+++ b/storage.c
@@ -114,7 +114,16 @@ storage_status_t storage_load (irc_t * irc, const char *password)
status = st->load(irc, password);
if (status == STORAGE_OK)
+ {
+ GSList *l;
+ for( l = irc_plugins; l; l = l->next )
+ {
+ irc_plugin_t *p = l->data;
+ if( p->storage_load )
+ p->storage_load( irc );
+ }
return status;
+ }
if (status != STORAGE_NO_SUCH_USER)
return status;
@@ -126,6 +135,7 @@ storage_status_t storage_load (irc_t * irc, const char *password)
storage_status_t storage_save (irc_t *irc, char *password, int overwrite)
{
storage_status_t st;
+ GSList *l;
if (password != NULL) {
/* Should only use this in the "register" command. */
@@ -139,6 +149,13 @@ storage_status_t storage_save (irc_t *irc, char *password, int overwrite)
st = ((storage_t *)global.storage->data)->save(irc, overwrite);
+ for( l = irc_plugins; l; l = l->next )
+ {
+ irc_plugin_t *p = l->data;
+ if( p->storage_save )
+ p->storage_save( irc );
+ }
+
if (password != NULL) {
irc_setpass(irc, NULL);
}
@@ -150,6 +167,8 @@ storage_status_t storage_remove (const char *nick, const char *password)
{
GList *gl;
storage_status_t ret = STORAGE_OK;
+ gboolean ok = FALSE;
+ GSList *l;
/* Remove this account from all storage backends. If this isn't
* done, the account will still be usable, it'd just be
@@ -159,10 +178,20 @@ storage_status_t storage_remove (const char *nick, const char *password)
storage_status_t status;
status = st->remove(nick, password);
+ ok |= status == STORAGE_OK;
if (status != STORAGE_NO_SUCH_USER && status != STORAGE_OK)
ret = status;
}
+ /* If at least one succeeded, remove plugin data. */
+ if( ok )
+ for( l = irc_plugins; l; l = l->next )
+ {
+ irc_plugin_t *p = l->data;
+ if( p->storage_remove )
+ p->storage_remove( nick );
+ }
+
return ret;
}