Skip to content
Snippets Groups Projects
Commit a3ecc8c7 authored by Jono Wenger's avatar Jono Wenger
Browse files

Add list to local storage that tracks indexedDb database names

parent 6938b69d
No related branches found
No related tags found
1 merge request!18XX-4272 / Purge
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
package indexedDb package indexedDb
import ( import (
"gitlab.com/elixxir/xxdk-wasm/utils"
"syscall/js" "syscall/js"
"github.com/hack-pad/go-indexeddb/idb" "github.com/hack-pad/go-indexeddb/idb"
...@@ -143,5 +144,12 @@ func v1Upgrade(db *idb.Database) error { ...@@ -143,5 +144,12 @@ func v1Upgrade(db *idb.Database) error {
return err return err
} }
// Get the database name and save it to storage
if databaseName, err := db.Name(); err != nil {
return err
} else if err = utils.StoreIndexedDb(databaseName); err != nil {
return err
}
return nil return nil
} }
////////////////////////////////////////////////////////////////////////////////
// Copyright © 2022 xx foundation //
// //
// Use of this source code is governed by a license that can be found in the //
// LICENSE file. //
////////////////////////////////////////////////////////////////////////////////
//go:build js && wasm
package utils
import (
"encoding/json"
"github.com/pkg/errors"
"os"
)
const indexedDbListKey = "xxDkWasmIndexedDbList"
// GetIndexedDbList returns the list of stored indexedDb databases.
func GetIndexedDbList() ([]string, error) {
var list []string
listBytes, err := GetLocalStorage().GetItem(indexedDbListKey)
if err != nil && !errors.Is(err, os.ErrNotExist) {
return nil, err
} else if err == nil {
err = json.Unmarshal(listBytes, &list)
if err != nil {
return nil, err
}
}
return list, nil
}
// StoreIndexedDb saved the indexedDb database name to storage.
func StoreIndexedDb(databaseName string) error {
list, err := GetIndexedDbList()
if err != nil {
return err
}
list = append(list, databaseName)
listBytes, err := json.Marshal(list)
if err != nil {
return err
}
GetLocalStorage().SetItem(indexedDbListKey, listBytes)
return nil
}
////////////////////////////////////////////////////////////////////////////////
// Copyright © 2022 xx foundation //
// //
// Use of this source code is governed by a license that can be found in the //
// LICENSE file. //
////////////////////////////////////////////////////////////////////////////////
//go:build js && wasm
package utils
import (
"reflect"
"testing"
)
// Tests that three indexedDb database names stored with StoreIndexedDb are
// retrieved with GetIndexedDbList.
func TestStoreIndexedDb_GetIndexedDbList(t *testing.T) {
expected := []string{"db1", "db2", "db3"}
for _, name := range expected {
err := StoreIndexedDb(name)
if err != nil {
t.Errorf("Failed to store database name %q: %+v", name, err)
}
}
list, err := GetIndexedDbList()
if err != nil {
t.Errorf("Failed to get database list: %+v", err)
}
if !reflect.DeepEqual(expected, list) {
t.Errorf("Did not get expected list.\nexpected: %s\nreceived: %s",
expected, list)
}
}
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