Skip to content
This repository has been archived by the owner on Dec 12, 2022. It is now read-only.

duplicate messages when sending - local echo not removed #705

Open
xinsight opened this issue Aug 17, 2020 · 2 comments
Open

duplicate messages when sending - local echo not removed #705

xinsight opened this issue Aug 17, 2020 · 2 comments

Comments

@xinsight
Copy link

xinsight commented Aug 17, 2020

I'm seeing duplicate messages when sending from MXKRoomViewController. It seems these are "local echo" messages, which are supposed to be removed after the message sent to the server.

In -[MXKRoomDataSource refreshEventListeners:] - the event listener is created. It checks if there are outgoing messages, and then attempts to find the local echo.

MXEvent *localEcho;
if (self.room.outgoingMessages.count && [event.sender isEqualToString:self.mxSession.myUser.userId])
{
    localEcho = [self.room pendingLocalEchoRelatedToEvent:event];

Two problems: room.outgoingMessages.count is zero. But even if that check is removed, pendingLocalEchoRelatedToEvent: returns nil.

The two messages in the room are almost identical - so i'm not sure how the matrix kit or matrix sdk is supposed to reliably detect the local echo. For example:

{
  "origin_server_ts" : 1597651389299,
  "sender" : "@user1:xxx.org",
  "content" : {
    "msgtype" : "m.text",
    "body" : "Echo?"
  },
  "type" : "m.room.message",
  "event_id" : "$pdATtqY6beNczJlxfpAnk1DbW8k8l9ycTHeeNdij-_0",
  "room_id" : "!rytTykSOlVDqLRpOkK:xxx.org"
}
{
  "sender" : "@user1:xxx.org",
  "content" : {
    "msgtype" : "m.text",
    "body" : "Echo?"
  },
  "origin_server_ts" : 1597651385012,
  "room_id" : "!rytTykSOlVDqLRpOkK:xxx.org",
  "event_id" : "$pdATtqY6beNczJlxfpAnk1DbW8k8l9ycTHeeNdij-_0",
  "unsigned" : {
    "age" : 56854,
    "transaction_id" : "kMXEventLocalId_3AEC3166-F36C-495C-A048-A5FB5D436B56-96982-00019D04955033FC"
  },
  "type" : "m.room.message"
}

Anyone have any thoughts on why the local echo detection might be failing? Any workarounds? This issue happens consistently for me (and I'm not doing anything weird).

@xinsight
Copy link
Author

Note: Only one message is sent to the server. If I restart the MXKRoomViewController, I only see each outgoing message a single time (as expected).

@xinsight
Copy link
Author

Figured it out. Apparently you need to attach a store to your session. You have MXNoStore, MXMemoryStore or MXFileStore. For example:

let session = MXSession(matrixRestClient: authenticatedRestClient)!
let store = MXMemoryStore()

session.setStore(store) { response in

    guard case .success = response else {
        fatalError("unable to set store")
    }

    session.start { response in
        // ...
    }
}

Would be nice for Matrix SDX to warn that a store was missing! Hopefully this issue can help someone else from some head-scratching.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant