aboutsummaryrefslogtreecommitdiffstats
path: root/storage.c
diff options
context:
space:
mode:
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;
}