diff --git a/indexedDb/impl/dm/implementation.go b/indexedDb/impl/dm/implementation.go index e4c314a09b5c639a0012355c3acb1f3fc59ab6b7..cbb4744066833d77a3b075fcaa70a0219f5d1962 100644 --- a/indexedDb/impl/dm/implementation.go +++ b/indexedDb/impl/dm/implementation.go @@ -218,6 +218,8 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n timestamp time.Time, round rounds.Round, mType dm.MessageType, status dm.Status) (uint64, error) { // Keep track of whether Conversation was altered + // FIXME: this is very similar to updateConversation + //. below. Can we merge them? conversationUpdated := false result, err := w.getConversation(partnerKey) if err != nil { @@ -238,6 +240,7 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n jww.DEBUG.Printf( "[DM indexedDB] Conversation with %s already joined", nickname) + updateConversation := false // Update Conversation if nickname was altered isFromPartner := bytes.Equal(result.Pubkey, senderKey) nicknameChanged := result.Nickname != nickname @@ -245,13 +248,28 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n jww.DEBUG.Printf( "[DM indexedDB] Updating from nickname %s to %s", result.Nickname, nickname) - err = w.upsertConversation(nickname, result.Pubkey, result.Token, - result.CodesetVersion, result.Blocked) + updateConversation = true + } + + // Fix conversation if dmToken is altered + dmTokenChanged := result.Token != dmToken + if isFromPartner && dmTokenChanged { + jww.WARN.Printf( + "[DM indexedDB] Updating from dmToken %s to %s", + result.Token, dmToken) + updateConversation = true + } + + if updateConversation { + err = w.upsertConversation(nickname, result.Pubkey, + result.Token, result.CodesetVersion, + result.Blocked) if err != nil { return 0, err } conversationUpdated = true } + } // Handle encryption, if it is present