Merge pull request #2108 from profanity-im/omemo-ux-fix

fix: Dont OMEMO trust check so often
This commit is contained in:
Michael Vetter
2026-03-09 13:22:19 +01:00
committed by GitHub
7 changed files with 55 additions and 2 deletions

View File

@@ -572,6 +572,8 @@ _sv_ev_incoming_omemo(ProfChatWin* chatwin, gboolean new_win, ProfMessage* messa
chat_log_omemo_msg_in(message);
}
chatwin->pgp_recv = FALSE;
wins_omemo_trust_changed(chatwin->barejid);
#endif
}

View File

@@ -118,6 +118,8 @@ omemo_init(void)
pthread_mutex_init(&omemo_static_data.lock, &omemo_static_data.attr);
omemo_static_data.fingerprint_ac = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)autocomplete_free);
wins_omemo_trust_changed(NULL);
}
static gboolean
@@ -248,6 +250,8 @@ omemo_on_connect(ProfAccount* account)
}
_omemo_finalize_identity_load(account);
wins_omemo_trust_changed(NULL);
}
void
@@ -272,6 +276,8 @@ omemo_on_disconnect(void)
signal_protocol_store_context_destroy(omemo_ctx.store);
signal_context_destroy(omemo_ctx.signal);
memset(&omemo_ctx, 0, sizeof(omemo_ctx));
wins_omemo_trust_changed(NULL);
}
void
@@ -572,6 +578,8 @@ omemo_set_device_list(const char* const from, GList* device_list)
}
}
}
wins_omemo_trust_changed(jid->barejid);
}
GKeyFile*
@@ -1479,6 +1487,8 @@ omemo_trust(const char* const jid, const char* const fingerprint_formatted)
signal_buffer_free(buffer);
omemo_bundle_request(jid, device_id, omemo_start_device_session_handle_bundle, free, strdup(jid));
wins_omemo_trust_changed(jid);
}
void
@@ -1541,6 +1551,8 @@ omemo_untrust(const char* const jid, const char* const fingerprint_formatted)
auto_gchar gchar* device_id_str = g_strdup_printf("%d", device_id);
g_key_file_remove_key(omemo_ctx.trust.keyfile, jid, device_id_str, NULL);
omemo_trust_keyfile_save();
wins_omemo_trust_changed(jid);
}
static void
@@ -1942,6 +1954,8 @@ _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key*
free(formatted_fingerprint);
}
free(fingerprint);
wins_omemo_trust_changed(jid);
}
static void

View File

@@ -405,7 +405,7 @@ _show_muc_privacy(ProfMucWin* mucwin)
wattroff(win, bracket_attrs);
#ifdef HAVE_OMEMO
if (omemo_is_jid_trusted(mucwin->roomjid)) {
if (mucwin->omemo_trusted) {
wprintw(win, " ");
wattron(win, bracket_attrs);
wprintw(win, "[");
@@ -560,7 +560,7 @@ _show_privacy(ProfChatWin* chatwin)
wattroff(win, bracket_attrs);
#ifdef HAVE_OMEMO
if (omemo_is_jid_trusted(chatwin->barejid)) {
if (chatwin->omemo_trusted) {
wprintw(win, " ");
wattron(win, bracket_attrs);
wprintw(win, "[");

View File

@@ -151,6 +151,7 @@ typedef struct prof_chat_win_t
gboolean pgp_send;
gboolean pgp_recv;
gboolean is_omemo;
gboolean omemo_trusted;
gboolean is_ox; // XEP-0373: OpenPGP for XMPP
char* resource_override;
gboolean history_shown;
@@ -175,6 +176,7 @@ typedef struct prof_muc_win_t
gboolean showjid;
gboolean showoffline;
gboolean is_omemo;
gboolean omemo_trusted;
unsigned long memcheck;
char* enctext;
char* message_char;

View File

@@ -10,6 +10,9 @@
#include "config.h"
#include "ui/window_list.h"
#ifdef HAVE_OMEMO
#include "omemo/omemo.h"
#endif
#include <stdlib.h>
#include <string.h>
@@ -128,6 +131,9 @@ win_create_chat(const char* const barejid)
new_win->pgp_recv = FALSE;
new_win->pgp_send = FALSE;
new_win->is_omemo = FALSE;
#ifdef HAVE_OMEMO
new_win->omemo_trusted = omemo_is_jid_trusted(barejid);
#endif
new_win->is_ox = FALSE;
new_win->history_shown = FALSE;
new_win->unread = 0;
@@ -191,6 +197,9 @@ win_create_muc(const char* const roomjid)
new_win->enctext = NULL;
new_win->message_char = NULL;
new_win->is_omemo = FALSE;
#ifdef HAVE_OMEMO
new_win->omemo_trusted = omemo_is_jid_trusted(roomjid);
#endif
new_win->last_message = NULL;
new_win->last_msg_id = NULL;
new_win->has_attention = FALSE;

View File

@@ -968,6 +968,31 @@ _wins_get_next_available_num(GList* used)
}
}
void
wins_omemo_trust_changed(const char* const jid)
{
GList* curr = values;
while (curr) {
ProfWin* window = curr->data;
if (window->type == WIN_CHAT) {
ProfChatWin* chatwin = (ProfChatWin*)window;
if (jid == NULL || strcmp(chatwin->barejid, jid) == 0) {
#ifdef HAVE_OMEMO
chatwin->omemo_trusted = omemo_is_jid_trusted(chatwin->barejid);
#endif
}
} else if (window->type == WIN_MUC) {
ProfMucWin* mucwin = (ProfMucWin*)window;
if (jid == NULL || strcmp(mucwin->roomjid, jid) == 0) {
#ifdef HAVE_OMEMO
mucwin->omemo_trusted = omemo_is_jid_trusted(mucwin->roomjid);
#endif
}
}
curr = g_list_next(curr);
}
}
gboolean
wins_tidy(void)
{

View File

@@ -62,6 +62,7 @@ GSList* wins_get_chat_recipients(void);
GSList* wins_get_prune_wins(void);
void wins_lost_connection(void);
void wins_reestablished_connection(void);
void wins_omemo_trust_changed(const char* const jid);
gboolean wins_tidy(void);
GSList* wins_create_summary(gboolean unread);
GSList* wins_create_summary_attention();