diff --git a/indexedDb/implementation.go b/indexedDb/implementation.go index b1f19b04861a80efb0cc8faa0083934bb0c81cfd..5144610d26bc81996e58d24f4235f2b09cdf397f 100644 --- a/indexedDb/implementation.go +++ b/indexedDb/implementation.go @@ -29,9 +29,6 @@ import ( // dbTimeout is the global timeout for operations with the storage context.Contact const dbTimeout = time.Second -// jsObject is the Golang type translation for a JavaScript object -type jsObject map[string]interface{} - // wasmModel implements [channels.EventModel] interface which uses the channels // system passed an object which adheres to in order to get events on the channel. type wasmModel struct { @@ -40,8 +37,7 @@ type wasmModel struct { // newContext builds a context for database operations func newContext() (context.Context, context.CancelFunc) { - ctx, cancel := context.WithTimeout(context.Background(), dbTimeout) - return ctx, cancel + return context.WithTimeout(context.Background(), dbTimeout) } // JoinChannel is called whenever a channel is joined locally. @@ -58,46 +54,46 @@ func (w *wasmModel) JoinChannel(channel *cryptoBroadcast.Channel) { // Convert to jsObject newChannelJson, err := json.Marshal(&newChannel) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to marshal Channel: %+v", err)) return } - var channelObj *jsObject - err = json.Unmarshal(newChannelJson, channelObj) + channelObj := make(map[string]interface{}) + err = json.Unmarshal(newChannelJson, &channelObj) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to unmarshal Channel: %+v", err)) return } // Prepare the Transaction - ctx, cancel := newContext() - defer cancel() txn, err := w.db.Transaction(idb.TransactionReadWrite, channelsStoreName) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to create Transaction: %+v", err)) return } store, err := txn.ObjectStore(channelsStoreName) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to get ObjectStore: %+v", err)) return } // Perform the operation - _, err = store.Add(js.ValueOf(*channelObj)) + _, err = store.Add(js.ValueOf(channelObj)) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to Add Channel: %+v", err)) return } // Wait for the operation to return + ctx, cancel := newContext() err = txn.Await(ctx) + cancel() if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Adding Channel failed: %+v", err)) return } @@ -108,17 +104,15 @@ func (w *wasmModel) LeaveChannel(channelID *id.ID) { parentErr := errors.New("failed to LeaveChannel") // Prepare the Transaction - ctx, cancel := newContext() - defer cancel() txn, err := w.db.Transaction(idb.TransactionReadWrite, channelsStoreName) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to create Transaction: %+v", err)) return } store, err := txn.ObjectStore(channelsStoreName) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to get ObjectStore: %+v", err)) return } @@ -126,15 +120,17 @@ func (w *wasmModel) LeaveChannel(channelID *id.ID) { // Perform the operation _, err = store.Delete(js.ValueOf(channelID.String())) if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Unable to Delete Channel: %+v", err)) return } // Wait for the operation to return + ctx, cancel := newContext() err = txn.Await(ctx) + cancel() if err != nil { - jww.ERROR.Printf("%+v", errors.Wrapf(parentErr, + jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Deleting Channel failed: %+v", err)) return } @@ -231,15 +227,13 @@ func (w *wasmModel) receiveHelper(newMessage *Message) error { if err != nil { return errors.Errorf("Unable to marshal Message: %+v", err) } - var messageObj *jsObject - err = json.Unmarshal(newMessageJson, messageObj) + messageObj := make(map[string]interface{}) + err = json.Unmarshal(newMessageJson, &messageObj) if err != nil { return errors.Errorf("Unable to unmarshal Message: %+v", err) } // Prepare the Transaction - ctx, cancel := newContext() - defer cancel() txn, err := w.db.Transaction(idb.TransactionReadWrite, messageStoreName) if err != nil { return errors.Errorf("Unable to create Transaction: %+v", err) @@ -250,13 +244,15 @@ func (w *wasmModel) receiveHelper(newMessage *Message) error { } // Perform the upsert (put) operation - _, err = store.Put(js.ValueOf(*messageObj)) + _, err = store.Put(js.ValueOf(messageObj)) if err != nil { return errors.Errorf("Unable to upsert Message: %+v", err) } // Wait for the operation to return + ctx, cancel := newContext() err = txn.Await(ctx) + cancel() if err != nil { return errors.Errorf("Upserting Message failed: %+v", err) }