]> git.codecow.com Git - libnemo.git/commitdiff
Update rolodex add method.
authorChris Duncan <chris@zoso.dev>
Mon, 21 Jul 2025 06:29:42 +0000 (23:29 -0700)
committerChris Duncan <chris@zoso.dev>
Mon, 21 Jul 2025 06:29:42 +0000 (23:29 -0700)
src/lib/rolodex.ts

index 73df66f5e3267f12160f0a391dbc8d6f8f351571..c33b1c9cbee5a10910c96c96e3c9f3a68d217ded 100644 (file)
@@ -46,8 +46,8 @@ export class Rolodex {
                        .replaceAll('\\', '\\u005c')
                const account = Account.import(address)
 
-               const nameResult = await this.getName(account.address)
-               if (nameResult == null) {
+               const existingName = await this.getName(account.address)
+               if (existingName == null) {
                        const { result } = await SafeWorker.assign<boolean>({
                                method: 'store',
                                store: 'Rolodex',
@@ -55,22 +55,38 @@ export class Rolodex {
                                [address]: utf8.toBytes(name).buffer
                        })
                        return result
-               }
-
-               const addresses = await this.getAddresses(name)
-               if (addresses.length > 0) {
-                       addresses.push(account.address)
-                       const addressesJson = JSON.stringify(addresses)
-                       const { result } = await SafeWorker.assign<boolean>({
+               } else if (existingName !== name) {
+                       const { result: isDestroyed } = await SafeWorker.assign<boolean>({
+                               method: 'destroy',
+                               store: 'Rolodex',
+                               name: address
+                       })
+                       if (!isDestroyed) {
+                               throw new Error('Failed to replace existing rolodex entry')
+                       }
+                       const { result: isUpdated } = await SafeWorker.assign<boolean>({
                                method: 'store',
                                store: 'Rolodex',
                                password: '',
-                               [name]: utf8.toBytes(addressesJson).buffer
+                               [address]: utf8.toBytes(name).buffer
                        })
-                       return result
+                       return isUpdated
+               } else {
+                       const addresses = await this.getAddresses(name)
+                       if (addresses.some(a => a === account.address)) {
+                               return true
+                       } else {
+                               addresses.push(account.address)
+                               const addressesJson = JSON.stringify(addresses)
+                               const { result } = await SafeWorker.assign<boolean>({
+                                       method: 'store',
+                                       store: 'Rolodex',
+                                       password: '',
+                                       [name]: utf8.toBytes(addressesJson).buffer
+                               })
+                               return result
+                       }
                }
-
-               return false
        }
 
        /**