diff --git a/src/event/common.c b/src/event/common.c index 2d829e5c..259f43dc 100644 --- a/src/event/common.c +++ b/src/event/common.c @@ -40,6 +40,7 @@ #include "xmpp/muc.h" #include "xmpp/xmpp.h" #include "database.h" +#include "tools/bookmark_ignore.h" #ifdef HAVE_LIBGPGME #include "pgp/gpg.h" @@ -69,6 +70,7 @@ ev_disconnect_cleanup(void) omemo_on_disconnect(); #endif log_database_close(); + bookmark_ignore_on_disconnect(); } gboolean diff --git a/src/event/server_events.c b/src/event/server_events.c index 9129562b..ac93a951 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -79,6 +79,8 @@ sv_ev_login_account_success(char *account_name, gboolean secured) { ProfAccount *account = accounts_get_account(account_name); + bookmark_ignore_on_connect(account->jid); + roster_create(); #ifdef HAVE_LIBOTR diff --git a/src/tools/bookmark_ignore.c b/src/tools/bookmark_ignore.c index 18dfb869..3a3d0787 100644 --- a/src/tools/bookmark_ignore.c +++ b/src/tools/bookmark_ignore.c @@ -43,11 +43,13 @@ #include "log.h" -static gchar** -bookmark_ignore_get_list(gsize *len) +static GKeyFile *bookmark_ignore_keyfile = NULL; +static char *account_jid = NULL; + +static void +_bookmark_ignore_load() { char *bi_loc; - GKeyFile *bi; bi_loc = files_get_data_path(FILE_BOOKMARK_AUTOJOIN_IGNORE); @@ -55,32 +57,31 @@ bookmark_ignore_get_list(gsize *len) g_chmod(bi_loc, S_IRUSR | S_IWUSR); } - bi = g_key_file_new(); - g_key_file_load_from_file(bi, bi_loc, G_KEY_FILE_KEEP_COMMENTS, NULL); + bookmark_ignore_keyfile = g_key_file_new(); + g_key_file_load_from_file(bookmark_ignore_keyfile, bi_loc, G_KEY_FILE_KEEP_COMMENTS, NULL); - if (!g_key_file_has_group(bi, "ignore")) { - return NULL; + free(bi_loc); +} + +void +bookmark_ignore_on_connect(const char *const barejid) +{ + if(bookmark_ignore_keyfile == NULL) { + _bookmark_ignore_load(); + account_jid = strdup(barejid); } +} - gchar **keys = g_key_file_get_keys(bi, "ignore"/*PREF_GROUP_ALIAS*/, len, NULL); - - return keys; +void +bookmark_ignore_on_disconnect() +{ + g_key_file_free(bookmark_ignore_keyfile); + bookmark_ignore_keyfile = NULL; + free(account_jid); } gboolean bookmark_ignored(Bookmark *bookmark) { - gsize len; - gchar **ignored = bookmark_ignore_get_list(&len); - int i; - - for (i=0; ibarejid, ignored[i]) == 0) { - g_strfreev(ignored); - return TRUE; - } - } - - g_strfreev(ignored); - return FALSE; + return g_key_file_get_boolean(bookmark_ignore_keyfile, account_jid, bookmark->barejid, NULL); } diff --git a/src/tools/bookmark_ignore.h b/src/tools/bookmark_ignore.h index ea37f0c6..62c0458a 100644 --- a/src/tools/bookmark_ignore.h +++ b/src/tools/bookmark_ignore.h @@ -36,6 +36,8 @@ #ifndef BOOKMARK_IGNORE_H #define BOOKMARK_IGNORE_H +void bookmark_ignore_on_connect(); +void bookmark_ignore_on_disconnect(); gboolean bookmark_ignored(Bookmark *bookmark); #endif