From 1c0a54f232ba6462706d96f2de3755a8a56b22d5 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Tue, 28 Feb 2023 16:49:10 +0000 Subject: [PATCH] Move the codeset from conversation to each message, since they change over time and can be different between users --- indexedDb/impl/dm/implementation.go | 31 +++++++++++++++-------------- indexedDb/impl/dm/model.go | 10 +++++----- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/indexedDb/impl/dm/implementation.go b/indexedDb/impl/dm/implementation.go index ca355ce4..9551f7ba 100644 --- a/indexedDb/impl/dm/implementation.go +++ b/indexedDb/impl/dm/implementation.go @@ -41,16 +41,15 @@ type wasmModel struct { // joinConversation is used for joining new conversations. func (w *wasmModel) joinConversation(nickname string, - pubKey ed25519.PublicKey, dmToken uint32, codeset uint8) error { + pubKey ed25519.PublicKey, dmToken uint32) error { parentErr := errors.New("failed to joinConversation") // Build object newConvo := Conversation{ - Pubkey: pubKey, - Nickname: nickname, - Token: dmToken, - CodesetVersion: codeset, - Blocked: false, + Pubkey: pubKey, + Nickname: nickname, + Token: dmToken, + Blocked: false, } // Convert to jsObject @@ -81,7 +80,7 @@ func (w *wasmModel) joinConversation(nickname string, // message, then you need to set it manually yourself. func buildMessage(messageID, parentID, text []byte, pubKey ed25519.PublicKey, timestamp time.Time, round id.Round, mType dm.MessageType, - status dm.Status) *Message { + codeset uint8, status dm.Status) *Message { return &Message{ MessageID: messageID, ConversationPubKey: pubKey, @@ -89,6 +88,7 @@ func buildMessage(messageID, parentID, text []byte, pubKey ed25519.PublicKey, Timestamp: timestamp, SenderPubKey: pubKey[:], Status: uint8(status), + CodesetVersion: codeset, Text: text, Type: uint16(mType), Round: uint64(round), @@ -105,7 +105,7 @@ func (w *wasmModel) Receive(messageID message.ID, nickname string, text []byte, _, err := impl.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)) if err != nil { if strings.Contains(err.Error(), impl.ErrDoesNotExist) { - err = w.joinConversation(nickname, pubKey, dmToken, codeset) + err = w.joinConversation(nickname, pubKey, dmToken) if err != nil { jww.ERROR.Printf("[DM indexedDB] %+v", err) return 0 @@ -131,7 +131,7 @@ func (w *wasmModel) Receive(messageID message.ID, nickname string, text []byte, } msgToInsert := buildMessage(messageID.Bytes(), nil, text, pubKey, timestamp, - round.ID, mType, status) + round.ID, mType, codeset, status) uuid, err := w.receiveHelper(msgToInsert, false) if err != nil { jww.ERROR.Printf("[DM indexedDB] Failed to receive Message: %+v", err) @@ -154,7 +154,7 @@ func (w *wasmModel) ReceiveText(messageID message.ID, nickname, text string, _, err := impl.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)) if err != nil { if strings.Contains(err.Error(), impl.ErrDoesNotExist) { - err = w.joinConversation(nickname, pubKey, dmToken, codeset) + err = w.joinConversation(nickname, pubKey, dmToken) if err != nil { jww.ERROR.Printf("[DM indexedDB] %+v", err) return 0 @@ -182,7 +182,7 @@ func (w *wasmModel) ReceiveText(messageID message.ID, nickname, text string, } msgToInsert := buildMessage(messageID.Bytes(), nil, textBytes, - pubKey, timestamp, round.ID, dm.TextType, status) + pubKey, timestamp, round.ID, dm.TextType, codeset, status) uuid, err := w.receiveHelper(msgToInsert, false) if err != nil { @@ -206,7 +206,7 @@ func (w *wasmModel) ReceiveReply(messageID, reactionTo message.ID, nickname, _, err := impl.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)) if err != nil { if strings.Contains(err.Error(), impl.ErrDoesNotExist) { - err = w.joinConversation(nickname, pubKey, dmToken, codeset) + err = w.joinConversation(nickname, pubKey, dmToken) if err != nil { jww.ERROR.Printf("[DM indexedDB] %+v", err) return 0 @@ -233,7 +233,8 @@ func (w *wasmModel) ReceiveReply(messageID, reactionTo message.ID, nickname, } msgToInsert := buildMessage(messageID.Bytes(), reactionTo.Marshal(), - textBytes, pubKey, timestamp, round.ID, dm.TextType, status) + textBytes, pubKey, timestamp, round.ID, dm.TextType, codeset, + status) uuid, err := w.receiveHelper(msgToInsert, false) if err != nil { @@ -257,7 +258,7 @@ func (w *wasmModel) ReceiveReaction(messageID, _ message.ID, nickname, _, err := impl.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)) if err != nil { if strings.Contains(err.Error(), impl.ErrDoesNotExist) { - err = w.joinConversation(nickname, pubKey, dmToken, codeset) + err = w.joinConversation(nickname, pubKey, dmToken) if err != nil { jww.ERROR.Printf("[DM indexedDB] %+v", err) return 0 @@ -283,7 +284,7 @@ func (w *wasmModel) ReceiveReaction(messageID, _ message.ID, nickname, } msgToInsert := buildMessage(messageID.Bytes(), nil, textBytes, pubKey, - timestamp, round.ID, dm.ReactionType, status) + timestamp, round.ID, dm.ReactionType, codeset, status) uuid, err := w.receiveHelper(msgToInsert, false) if err != nil { diff --git a/indexedDb/impl/dm/model.go b/indexedDb/impl/dm/model.go index 96250e03..b4cfdcb6 100644 --- a/indexedDb/impl/dm/model.go +++ b/indexedDb/impl/dm/model.go @@ -46,6 +46,7 @@ type Message struct { ParentMessageID []byte `json:"parent_message_id"` // Index Timestamp time.Time `json:"timestamp"` // Index SenderPubKey []byte `json:"sender_pub_key"` + CodesetVersion uint8 `json:"codeset_version"` Status uint8 `json:"status"` Text []byte `json:"text"` Type uint16 `json:"type"` @@ -56,9 +57,8 @@ type Message struct { // message exchange between two recipients. // A Conversation has many Message. type Conversation struct { - Pubkey []byte `json:"pub_key"` // Matches convoPkeyName - Nickname string `json:"nickname"` - Token uint32 `json:"token"` - CodesetVersion uint8 `json:"codeset_version"` - Blocked bool `json:"blocked"` + Pubkey []byte `json:"pub_key"` // Matches convoPkeyName + Nickname string `json:"nickname"` + Token uint32 `json:"token"` + Blocked bool `json:"blocked"` } -- GitLab