1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-06-23 21:45:30 +00:00

Add bookmark ignore functionality for multiple accounts

```
cat ~/.local/share/profanity/bookmark_ignore
[jubalh@iodoru.org]
profanity@rooms.dismail.de=true

[testuser@domain.org]
testr@rooms.domain.org=true
```

Regards https://github.com/profanity-im/profanity/issues/1115
This commit is contained in:
Michael Vetter 2020-05-24 13:31:24 +02:00
parent d03c953d4a
commit 242ffbcf70
4 changed files with 30 additions and 23 deletions

View File

@ -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

View File

@ -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

View File

@ -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; i<len; i++) {
if (g_strcmp0(bookmark->barejid, 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);
}

View File

@ -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