Skip to content
Snippets Groups Projects
Commit d00a91b3 authored by Jake Taylor's avatar Jake Taylor
Browse files

fix crashes

parent 0ceb7d08
No related branches found
No related tags found
4 merge requests!60Revert "Fail a test to be sure it works",!39first pass at adding dm package to indexedDb, split some shared code into utils,!36project/DM,!32Admin Commands
...@@ -19,6 +19,7 @@ import ( ...@@ -19,6 +19,7 @@ import (
"gitlab.com/elixxir/xxdk-wasm/indexedDb" "gitlab.com/elixxir/xxdk-wasm/indexedDb"
"gitlab.com/elixxir/xxdk-wasm/utils" "gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id"
"strings"
"sync" "sync"
"syscall/js" "syscall/js"
"time" "time"
...@@ -99,14 +100,16 @@ func (w *wasmModel) Receive(messageID dm.MessageID, nickname string, text []byte ...@@ -99,14 +100,16 @@ func (w *wasmModel) Receive(messageID dm.MessageID, nickname string, text []byte
var err error var err error
// If there is no extant Conversation, create one. // If there is no extant Conversation, create one.
if result, err := indexedDb.Get(w.db, conversationStoreName, if _, err := indexedDb.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)); err != nil {
utils.CopyBytesToJS(pubKey)); err != nil { if strings.Contains(err.Error(), indexedDb.ErrDoesNotExist) {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, err = w.joinConversation(nickname, pubKey, dmToken, codeset)
"Unable to get Conversation: %+v", err)) if err != nil {
return 0 jww.ERROR.Printf("%+v", err)
} else if len(result) == 0 { }
err = w.joinConversation(nickname, pubKey, dmToken, codeset) } else {
jww.ERROR.Printf("%+v", err) jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get Conversation: %+v", err))
}
return 0 return 0
} else { } else {
jww.DEBUG.Printf("Conversation with %s already joined", nickname) jww.DEBUG.Printf("Conversation with %s already joined", nickname)
...@@ -139,14 +142,16 @@ func (w *wasmModel) ReceiveText(messageID dm.MessageID, nickname, text string, ...@@ -139,14 +142,16 @@ func (w *wasmModel) ReceiveText(messageID dm.MessageID, nickname, text string,
var err error var err error
// If there is no extant Conversation, create one. // If there is no extant Conversation, create one.
if result, err := indexedDb.Get(w.db, conversationStoreName, if _, err := indexedDb.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)); err != nil {
utils.CopyBytesToJS(pubKey)); err != nil { if strings.Contains(err.Error(), indexedDb.ErrDoesNotExist) {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, err = w.joinConversation(nickname, pubKey, dmToken, codeset)
"Unable to get Conversation: %+v", err)) if err != nil {
return 0 jww.ERROR.Printf("%+v", err)
} else if len(result) == 0 { }
err = w.joinConversation(nickname, pubKey, dmToken, codeset) } else {
jww.ERROR.Printf("%+v", err) jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get Conversation: %+v", err))
}
return 0 return 0
} else { } else {
jww.DEBUG.Printf("Conversation with %s already joined", nickname) jww.DEBUG.Printf("Conversation with %s already joined", nickname)
...@@ -181,14 +186,16 @@ func (w *wasmModel) ReceiveReply(messageID dm.MessageID, reactionTo dm.MessageID ...@@ -181,14 +186,16 @@ func (w *wasmModel) ReceiveReply(messageID dm.MessageID, reactionTo dm.MessageID
var err error var err error
// If there is no extant Conversation, create one. // If there is no extant Conversation, create one.
if result, err := indexedDb.Get(w.db, conversationStoreName, if _, err := indexedDb.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)); err != nil {
utils.CopyBytesToJS(pubKey)); err != nil { if strings.Contains(err.Error(), indexedDb.ErrDoesNotExist) {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, err = w.joinConversation(nickname, pubKey, dmToken, codeset)
"Unable to get Conversation: %+v", err)) if err != nil {
return 0 jww.ERROR.Printf("%+v", err)
} else if len(result) == 0 { }
err = w.joinConversation(nickname, pubKey, dmToken, codeset) } else {
jww.ERROR.Printf("%+v", err) jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get Conversation: %+v", err))
}
return 0 return 0
} else { } else {
jww.DEBUG.Printf("Conversation with %s already joined", nickname) jww.DEBUG.Printf("Conversation with %s already joined", nickname)
...@@ -223,14 +230,16 @@ func (w *wasmModel) ReceiveReaction(messageID dm.MessageID, reactionTo dm.Messag ...@@ -223,14 +230,16 @@ func (w *wasmModel) ReceiveReaction(messageID dm.MessageID, reactionTo dm.Messag
var err error var err error
// If there is no extant Conversation, create one. // If there is no extant Conversation, create one.
if result, err := indexedDb.Get(w.db, conversationStoreName, if _, err := indexedDb.Get(w.db, conversationStoreName, utils.CopyBytesToJS(pubKey)); err != nil {
utils.CopyBytesToJS(pubKey)); err != nil { if strings.Contains(err.Error(), indexedDb.ErrDoesNotExist) {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, err = w.joinConversation(nickname, pubKey, dmToken, codeset)
"Unable to get Conversation: %+v", err)) if err != nil {
return 0 jww.ERROR.Printf("%+v", err)
} else if len(result) == 0 { }
err = w.joinConversation(nickname, pubKey, dmToken, codeset) } else {
jww.ERROR.Printf("%+v", err) jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get Conversation: %+v", err))
}
return 0 return 0
} else { } else {
jww.DEBUG.Printf("Conversation with %s already joined", nickname) jww.DEBUG.Printf("Conversation with %s already joined", nickname)
...@@ -258,8 +267,9 @@ func (w *wasmModel) ReceiveReaction(messageID dm.MessageID, reactionTo dm.Messag ...@@ -258,8 +267,9 @@ func (w *wasmModel) ReceiveReaction(messageID dm.MessageID, reactionTo dm.Messag
return uuid return uuid
} }
func (w *wasmModel) UpdateSentStatus(uuid uint64, messageID dm.MessageID, func (w *wasmModel) UpdateSentStatus(uuid uint64,
timestamp time.Time, round rounds.Round, status dm.Status) { messageID dm.MessageID, timestamp time.Time, round rounds.Round,
status dm.Status) {
parentErr := errors.New("failed to UpdateSentStatus") parentErr := errors.New("failed to UpdateSentStatus")
// FIXME: this is a bit of race condition without the mux. // FIXME: this is a bit of race condition without the mux.
...@@ -274,15 +284,20 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64, messageID dm.MessageID, ...@@ -274,15 +284,20 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64, messageID dm.MessageID,
// Use the key to get the existing Message // Use the key to get the existing Message
currentMsg, err := indexedDb.Get(w.db, messageStoreName, key) currentMsg, err := indexedDb.Get(w.db, messageStoreName, key)
if err != nil { if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get message: %+v", err))
return return
} }
// Extract the existing Message and update the Status // Extract the existing Message and update the Status
newMessage := &Message{} newMessage := &Message{}
err = json.Unmarshal([]byte(currentMsg), newMessage) err = json.Unmarshal([]byte(utils.JsToJson(currentMsg)), newMessage)
if err != nil { if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Could not JSON unmarshal message: %+v", err))
return return
} }
newMessage.Status = uint8(status) newMessage.Status = uint8(status)
if !messageID.Equals(dm.MessageID{}) { if !messageID.Equals(dm.MessageID{}) {
newMessage.MessageID = messageID.Bytes() newMessage.MessageID = messageID.Bytes()
......
...@@ -22,9 +22,13 @@ import ( ...@@ -22,9 +22,13 @@ import (
"time" "time"
) )
// dbTimeout is the global timeout for operations with the storage const (
// [context.Context]. // dbTimeout is the global timeout for operations with the storage
const dbTimeout = time.Second // [context.Context].
dbTimeout = time.Second
// ErrDoesNotExist is an error string for got undefined on Get operations.
ErrDoesNotExist = "result is undefined"
)
// NewContext builds a context for indexedDb operations. // NewContext builds a context for indexedDb operations.
func NewContext() (context.Context, context.CancelFunc) { func NewContext() (context.Context, context.CancelFunc) {
...@@ -62,8 +66,8 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, erro ...@@ -62,8 +66,8 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, erro
return js.Undefined(), errors.WithMessagef(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err) "Unable to get from ObjectStore: %+v", err)
} else if resultObj.IsUndefined() { } else if resultObj.IsUndefined() {
return js.Undefined(), errors.WithMessage(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: result is undefined") "Unable to get from ObjectStore: %s", ErrDoesNotExist)
} }
// Process result into string // Process result into string
...@@ -111,8 +115,8 @@ func GetIndex(db *idb.Database, objectStoreName string, ...@@ -111,8 +115,8 @@ func GetIndex(db *idb.Database, objectStoreName string,
return js.Undefined(), errors.WithMessagef(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err) "Unable to get from ObjectStore: %+v", err)
} else if resultObj.IsUndefined() { } else if resultObj.IsUndefined() {
return js.Undefined(), errors.WithMessage(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: result is undefined") "Unable to get from ObjectStore: %s", ErrDoesNotExist)
} }
// Process result into string // Process result into string
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment