xep-0308: Implement /correct to correct the last send message

So far the correction is sent. But the UI in Profanity itself is not
updated.

Also autocompletion for `/correct` with the last sent message is
missing.
This commit is contained in:
Michael Vetter
2020-02-10 16:17:01 +01:00
parent 83b61e5160
commit 1118110071
13 changed files with 132 additions and 11 deletions

View File

@@ -56,6 +56,7 @@
#endif
static void _chatwin_history(ProfChatWin *chatwin, const char *const contact);
static void _chatwin_set_last_message(ProfChatWin *chatwin, const char *const id, const char *const message);
ProfChatWin*
chatwin_new(const char *const barejid)
@@ -323,6 +324,11 @@ chatwin_outgoing_msg(ProfChatWin *chatwin, const char *const message, char *id,
enc_char = prefs_get_omemo_char();
}
// save last id and message for LMC
if (id) {
_chatwin_set_last_message(chatwin, id, message);
}
if (request_receipt && id) {
win_print_with_receipt((ProfWin*)chatwin, enc_char, "me", message, id);
} else {
@@ -496,3 +502,13 @@ _chatwin_history(ProfChatWin *chatwin, const char *const contact)
g_slist_free_full(history, free);
}
}
static void
_chatwin_set_last_message(ProfChatWin *chatwin, const char *const id, const char *const message)
{
free(chatwin->last_message);
chatwin->last_message = strdup(message);
free(chatwin->last_msg_id);
chatwin->last_msg_id = strdup(id);
}

View File

@@ -160,6 +160,9 @@ typedef struct prof_chat_win_t {
char *enctext;
char *incoming_char;
char *outgoing_char;
// For LMC
char *last_message;
char *last_msg_id;
} ProfChatWin;
typedef struct prof_muc_win_t {

View File

@@ -152,6 +152,8 @@ win_create_chat(const char *const barejid)
new_win->enctext = NULL;
new_win->incoming_char = NULL;
new_win->outgoing_char = NULL;
new_win->last_message = NULL;
new_win->last_msg_id = NULL;
new_win->memcheck = PROFCHATWIN_MEMCHECK;
@@ -488,6 +490,8 @@ win_free(ProfWin* window)
free(chatwin->enctext);
free(chatwin->incoming_char);
free(chatwin->outgoing_char);
free(chatwin->last_message);
free(chatwin->last_msg_id);
chat_state_free(chatwin->state);
break;
}