From d4692b1b2dfc6eca947d3d5cbe19901306837ccd Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 27 May 2020 22:06:04 +0200 Subject: Fix carbon logging Regards https://github.com/profanity-im/profanity/issues/1342 --- src/database.c | 12 ++++++++---- src/event/server_events.c | 10 ++++------ src/xmpp/message.c | 10 ++++++---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/database.c b/src/database.c index 625aaa86..3cc14d0d 100644 --- a/src/database.c +++ b/src/database.c @@ -164,12 +164,16 @@ log_database_close(void) void log_database_add_incoming(ProfMessage *message) { - const char *jid = connection_get_fulljid(); - Jid *myjid = jid_create(jid); + if (message->to_jid) { + _add_to_db(message, NULL, message->from_jid, message->to_jid); + } else { + const char *jid = connection_get_fulljid(); + Jid *myjid = jid_create(jid); - _add_to_db(message, NULL, message->from_jid, myjid); + _add_to_db(message, NULL, message->from_jid, myjid); - jid_destroy(myjid); + jid_destroy(myjid); + } } static void diff --git a/src/event/server_events.c b/src/event/server_events.c index 542a974e..d082356f 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -440,20 +440,19 @@ sv_ev_delayed_private_message(ProfMessage *message) void sv_ev_outgoing_carbon(ProfMessage *message) { - ProfChatWin *chatwin = wins_get_chat(message->from_jid->barejid); + ProfChatWin *chatwin = wins_get_chat(message->to_jid->barejid); if (!chatwin) { - chatwin = chatwin_new(message->from_jid->barejid); + chatwin = chatwin_new(message->to_jid->barejid); } chat_state_active(chatwin->state); - //TODO: check whether we need to change from and to for carbon. now that we have profmessage->to_jid? if (message->plain) { if (message->type == PROF_MSG_TYPE_MUCPM) { // MUC PM, should have resource (nick) in filename - chat_log_msg_out(message->from_jid->barejid, message->plain, message->from_jid->resourcepart); + chat_log_msg_out(message->to_jid->barejid, message->plain, message->from_jid->resourcepart); } else { - chat_log_msg_out(message->from_jid->barejid, message->plain, NULL); + chat_log_msg_out(message->to_jid->barejid, message->plain, NULL); } log_database_add_incoming(message); } @@ -782,7 +781,6 @@ sv_ev_incoming_message(ProfMessage *message) void sv_ev_incoming_carbon(ProfMessage *message) { - //TODO: check whether we need to change from and to for carbon. now that we have profmessage->to_jid? gboolean new_win = FALSE; ProfChatWin *chatwin = wins_get_chat(message->from_jid->barejid); if (!chatwin) { diff --git a/src/xmpp/message.c b/src/xmpp/message.c index c293a8f3..b668ce84 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -1118,6 +1118,7 @@ _handle_carbons(xmpp_stanza_t *const stanza) const gchar *from = xmpp_stanza_get_from(message_stanza); // happens when receive a carbon of a self sent message + // really? maybe some servers do this, but it's not required. if (!to) to = from; Jid *jid_from = jid_create(from); @@ -1140,18 +1141,19 @@ _handle_carbons(xmpp_stanza_t *const stanza) message->encrypted = xmpp_stanza_get_text(x); } - //TODO: now that profmessage has from_jid AND to_jid we should save both. and maybe also add is_carbon so we can decide later on. + //TODO: maybe also add is_carbon maybe even an enum with outgoing/incoming + //could be that then we can have sv_ev_carbon no incoming/outgoing if (message->plain || message->encrypted || message->body) { // if we are the recipient, treat as standard incoming message if (g_strcmp0(mybarejid, jid_to->barejid) == 0) { - jid_destroy(jid_to); message->from_jid = jid_from; + message->to_jid = jid_to; sv_ev_incoming_carbon(message); // else treat as a sent message } else { - jid_destroy(jid_from); - message->from_jid = jid_to; + message->from_jid = jid_from; + message->to_jid = jid_to; sv_ev_outgoing_carbon(message); } } -- cgit 1.4.1-2-gfad0