optimize the signer

This commit is contained in:
2026-06-06 14:23:23 +07:00
parent 3b247190c0
commit 4b3ca8b1c0

View File

@@ -7,34 +7,37 @@ import rust.nostr.sdk.AsyncNostrSigner
import rust.nostr.sdk.Event import rust.nostr.sdk.Event
import rust.nostr.sdk.PublicKey import rust.nostr.sdk.PublicKey
import rust.nostr.sdk.UnsignedEvent import rust.nostr.sdk.UnsignedEvent
import kotlin.concurrent.Volatile
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
class UniversalSigner(initialSigner: AsyncNostrSigner) : AsyncNostrSigner { class UniversalSigner(initialSigner: AsyncNostrSigner) : AsyncNostrSigner {
private val mutex = Mutex() private val mutex = Mutex()
@Volatile
private var signer: AsyncNostrSigner = initialSigner private var signer: AsyncNostrSigner = initialSigner
@Volatile
var currentUser: PublicKey? = null var currentUser: PublicKey? = null
private set private set
/** /**
* Get the current signer. * Get the current signer.
*/ */
suspend fun get(): AsyncNostrSigner = mutex.withLock { fun get(): AsyncNostrSigner = signer
signer
}
/** /**
* Switch to a new signer. * Switch to a new signer.
*/ */
suspend fun switch(newSigner: AsyncNostrSigner) = mutex.withLock { suspend fun switch(newSigner: AsyncNostrSigner) = mutex.withLock {
signer = newSigner val pubkey = try {
try { withTimeoutOrNull(20.seconds) {
currentUser = withTimeoutOrNull(20.seconds) {
newSigner.getPublicKeyAsync() newSigner.getPublicKeyAsync()
} }
} catch (e: Exception) { } catch (e: Exception) {
throw IllegalStateException("Failed to get public key from signer", e) throw IllegalStateException("Failed to get public key from signer", e)
} }
signer = newSigner
currentUser = pubkey
} }
override suspend fun getPublicKeyAsync(): PublicKey? { override suspend fun getPublicKeyAsync(): PublicKey? {