From 551e09ea0ffb53e0f4df8f719935d5a4dd10afe3 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 26 Apr 2023 09:09:42 -0300 Subject: [PATCH] get rid of the string arithmetics and just re-encode nip19 on the fly. --- src/main/scala/Components.scala | 32 +++++++++++++++++++++++++++----- src/main/scala/Parser.scala | 22 ++++------------------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main/scala/Components.scala b/src/main/scala/Components.scala index 70e5885..110ec7d 100644 --- a/src/main/scala/Components.scala +++ b/src/main/scala/Components.scala @@ -266,11 +266,33 @@ object Components { self.value.get.flatMap(url => if url.startsWith("wss://") || url .startsWith("ws://") - then - store.input.update( - _.trim() ++ " + " ++ url - ) >> active.set(false) - else IO.unit + then { + store.result.get.flatMap(result => + store.input.set( + result + .map { + case a: AddressPointer => + NIP19 + .encode( + a.copy(relays = url :: a.relays) + ) + case p: ProfilePointer => + NIP19 + .encode( + p.copy(relays = url :: p.relays) + ) + case e: EventPointer => + NIP19 + .encode( + e.copy(relays = url :: e.relays) + ) + case r => "" + } + .getOrElse("") + ) + ) + >> active.set(false) + } else IO.unit ) case _ => IO.unit } diff --git a/src/main/scala/Parser.scala b/src/main/scala/Parser.scala index ef875ac..12ce8cd 100644 --- a/src/main/scala/Parser.scala +++ b/src/main/scala/Parser.scala @@ -16,13 +16,12 @@ object Parser { def parseInput(input: String): Result = if input == "" then Left("") - else { - val spl = additions.split(input) - val result = ByteVector - .fromHex(spl.head) + else + ByteVector + .fromHex(input) .flatMap(b => Try(Right(ByteVector32(b))).toOption) .getOrElse( - NIP19.decode(spl.head) match { + NIP19.decode(input) match { case Right(pp: ProfilePointer) => Right(pp) case Right(evp: EventPointer) => Right(evp) case Right(sk: PrivateKey) => Right(sk) @@ -43,17 +42,4 @@ object Parser { } } ) - - val extraRelays = spl - .drop(1) - .toList - .filter(e => e.startsWith("wss://") || e.startsWith("ws://")) - - result.map { - case a: AddressPointer => a.copy(relays = a.relays ::: extraRelays) - case p: ProfilePointer => p.copy(relays = p.relays ::: extraRelays) - case e: EventPointer => e.copy(relays = e.relays ::: extraRelays) - case r => r - } - } }