From b20e3f1a0c3c89f2b1140b24d5cee01ebac07fc0 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Sat, 7 Mar 2026 00:10:33 +0100 Subject: [PATCH] feat: Improve feedback during OMEMO session Initiation After typing `/omemo start` a user was not informed of what exactly happens. Profanity is fetching the device list and the key bundle for each device. This happens asynchronously. It could be that it takes some time and the user already starts typing a message, believing OMEMO is working. Now we print: * Initiating OMEMO session.. * Fetching device list and key bundles * OMEMO session ready So the user understands much better the current situation. --- src/command/cmd_funcs.c | 2 ++ src/omemo/omemo.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 4d847778..326e3e62 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -8479,6 +8479,7 @@ cmd_omemo_start(ProfWin* window, const char* const command, gchar** args) } accounts_add_omemo_state(session_get_account_name(), chatwin->barejid, TRUE); + win_println((ProfWin*)chatwin, THEME_DEFAULT, "!", "Initiating OMEMO session with %s...", chatwin->barejid); omemo_start_session(chatwin->barejid); chatwin->is_omemo = TRUE; } else if (window->type == WIN_MUC) { @@ -8493,6 +8494,7 @@ cmd_omemo_start(ProfWin* window, const char* const command, gchar** args) if (muc_anonymity_type(mucwin->roomjid) == MUC_ANONYMITY_TYPE_NONANONYMOUS && muc_member_type(mucwin->roomjid) == MUC_MEMBER_TYPE_MEMBERS_ONLY) { accounts_add_omemo_state(session_get_account_name(), mucwin->roomjid, TRUE); + win_println((ProfWin*)mucwin, THEME_DEFAULT, "!", "Initiating OMEMO session in %s...", mucwin->roomjid); omemo_start_muc_sessions(mucwin->roomjid); mucwin->is_omemo = TRUE; } else { diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index e6d3a6ce..2fe05234 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -729,8 +729,30 @@ omemo_start_device_session(const char* const jid, uint32_t device_id, } log_debug("[OMEMO] create session with %s device %d", jid, device_id); + if (omemo_ctx.notifying) { + ProfChatWin* chatwin = wins_get_chat(jid); + if (chatwin) { + win_println((ProfWin*)chatwin, THEME_DEFAULT, "!", "OMEMO session with %s (device %u) ready.", jid, device_id); + } else { + ProfMucWin* mucwin = wins_get_muc(jid); + if (mucwin) { + win_println((ProfWin*)mucwin, THEME_DEFAULT, "!", "OMEMO session with %s (device %u) ready.", jid, device_id); + } + } + } } else { log_debug("[OMEMO] session with %s device %d exists", jid, device_id); + if (omemo_ctx.notifying) { + ProfChatWin* chatwin = wins_get_chat(jid); + if (chatwin) { + win_println((ProfWin*)chatwin, THEME_DEFAULT, "!", "OMEMO session with %s (device %u) already exists.", jid, device_id); + } else { + ProfMucWin* mucwin = wins_get_muc(jid); + if (mucwin) { + win_println((ProfWin*)mucwin, THEME_DEFAULT, "!", "OMEMO session with %s (device %u) already exists.", jid, device_id); + } + } + } } out: