From 51335e06f1ddeac6c3a52fa5ee8a0645be2b942c Mon Sep 17 00:00:00 2001 From: Believethehype <1097224+believethehype@users.noreply.github.com> Date: Thu, 16 May 2024 13:52:22 +0200 Subject: [PATCH 1/3] Fix order of Events in DVM feeds --- .../amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt index 82398916b..6a8241713 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt @@ -25,6 +25,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note +import com.vitorpamplona.quartz.encoders.toHexKey import com.vitorpamplona.quartz.events.MuteListEvent import com.vitorpamplona.quartz.events.NIP90ContentDiscoveryResponseEvent import com.vitorpamplona.quartz.events.PeopleListEvent @@ -63,14 +64,16 @@ open class NIP90ContentDiscoveryFilter( var eventContent = note.event?.content() - var collection: HashSet = hashSetOf() + var collection: MutableSet = mutableSetOf() val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) var json = mapper.readValue(eventContent, Array::class.java) for (element in json) { // var test = mapper.readValue(element.toString(), Array::class.java) // TODO. This is ugly. how to Kotlin? + var id = element.toString().trimStart('[').trimStart('e').trimStart(',').trimEnd(']').trimStart().trimEnd() var note = LocalCache.checkGetOrCreateNote(id) + if (note != null) { collection.add(note) } @@ -78,7 +81,7 @@ open class NIP90ContentDiscoveryFilter( return collection.toList() } else { - return sort(notes) + return listOf() } } @@ -112,7 +115,7 @@ open class NIP90ContentDiscoveryFilter( var eventContent = note.event?.content() println(eventContent) - val collection: HashSet = hashSetOf() + val collection: MutableSet = mutableSetOf() val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) var json = mapper.readValue(eventContent, Array::class.java) for (element in json) { @@ -122,12 +125,13 @@ open class NIP90ContentDiscoveryFilter( val note = LocalCache.checkGetOrCreateNote(id) if (note != null) { + println(note.id().toHexKey()) collection.add(note) } } return collection } else { - return notes + return hashSetOf() } } From 7f2b8519f3f132361ff51329f128db0e69e478a0 Mon Sep 17 00:00:00 2001 From: Believethehype <1097224+believethehype@users.noreply.github.com> Date: Thu, 16 May 2024 14:07:11 +0200 Subject: [PATCH 2/3] improve parsing --- .../ui/dal/NIP90ContentDiscoveryFilter.kt | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt index 6a8241713..0fc4cc2a9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryFilter.kt @@ -25,7 +25,6 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.quartz.encoders.toHexKey import com.vitorpamplona.quartz.events.MuteListEvent import com.vitorpamplona.quartz.events.NIP90ContentDiscoveryResponseEvent import com.vitorpamplona.quartz.events.PeopleListEvent @@ -66,14 +65,10 @@ open class NIP90ContentDiscoveryFilter( var collection: MutableSet = mutableSetOf() val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - var json = mapper.readValue(eventContent, Array::class.java) - for (element in json) { - // var test = mapper.readValue(element.toString(), Array::class.java) - // TODO. This is ugly. how to Kotlin? - - var id = element.toString().trimStart('[').trimStart('e').trimStart(',').trimEnd(']').trimStart().trimEnd() - var note = LocalCache.checkGetOrCreateNote(id) - + var etags = mapper.readValue(eventContent, List::class.java) + for (element in etags) { + var tag = mapper.readValue(mapper.writeValueAsString(element), Array::class.java) + val note = LocalCache.checkGetOrCreateNote(tag[1].toString()) if (note != null) { collection.add(note) } @@ -113,19 +108,15 @@ open class NIP90ContentDiscoveryFilter( var note = sorted.first() var eventContent = note.event?.content() - println(eventContent) + // println(eventContent) val collection: MutableSet = mutableSetOf() val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - var json = mapper.readValue(eventContent, Array::class.java) - for (element in json) { - // var test = mapper.readValue(element.toString(), Array::class.java) - // TODO. This is ugly. how to Kotlin? - var id = element.toString().trimStart('[').trimStart('e').trimStart(',').trimEnd(']').trimStart().trimEnd() - - val note = LocalCache.checkGetOrCreateNote(id) + var etags = mapper.readValue(eventContent, Array::class.java) + for (element in etags) { + var tag = mapper.readValue(mapper.writeValueAsString(element), Array::class.java) + val note = LocalCache.checkGetOrCreateNote(tag[1].toString()) if (note != null) { - println(note.id().toHexKey()) collection.add(note) } } From b74fa975ba0c3ccb28162b3e3e3aea02478071d7 Mon Sep 17 00:00:00 2001 From: Believethehype <1097224+believethehype@users.noreply.github.com> Date: Thu, 16 May 2024 14:24:13 +0200 Subject: [PATCH 3/3] Show DVM Status Limitation: This will only show the first reply from the DVM, if mutliple status updates follow they will be ignored. --- .../loggedIn/NIP90ContentDiscoveryScreen.kt | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt index 66a40016f..d2b42e677 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt @@ -122,26 +122,27 @@ fun RenderNostrNIP90ContentDiscoveryScreen( thread.join() } - // TODO 2 Get the latest event from the statusFeedViewModel - // TODO How do we extract the latest event.content (or event.status) from statusFeedViewModel - // TODO We want to update dvmStatus with the content of the latest Status event + // TODO this shows the status but there might be a better way var dvmStatus = "DVM is processing..." + val thread = + Thread { + println(dvmStatus) + while (resultFeedViewModel.localFilter.feed().isEmpty()) { + try { + if (statusFeedViewModel.localFilter.feed().isNotEmpty()) { + statusFeedViewModel.localFilter.feed()[0].event?.let { dvmStatus = it.content() } + println(dvmStatus) + break + } else { + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } - /* if (statusFeedViewModel.localFilter.feed().isNotEmpty()) { - statusFeedViewModel.localFilter.feed()[0].event?.let { Text(text = it.content()) } - } else { - Text(text = "Nah") - } - - DVMStatusView( - statusFeedViewModel, - null, - enablePullRefresh = false, - accountViewModel = accountViewModel, - nav = nav, - )*/ - - // Text(text = dvminfo) + thread.start() + thread.join() HorizontalPager(state = pagerState) { RefresheableBox(resultFeedViewModel, false) {