about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2020-05-27 22:06:04 +0200
committerMichael Vetter <jubalh@iodoru.org>2020-05-27 22:06:04 +0200
commitd4692b1b2dfc6eca947d3d5cbe19901306837ccd (patch)
treee9196d092decb7b4a4af9703655585175dcf8cc8
parentd240eb629cbe8cfc7e7f51ab95d44f993088810c (diff)
downloadprofani-tty-d4692b1b2dfc6eca947d3d5cbe19901306837ccd.tar.gz
Fix carbon logging
Regards https://github.com/profanity-im/profanity/issues/1342
-rw-r--r--src/database.c12
-rw-r--r--src/event/server_events.c10
-rw-r--r--src/xmpp/message.c10
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);
         }
     }