From c06c03928e69bd3b9d592f17ed5facc5f6b83a79 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 11 Sep 2025 18:36:42 -0400 Subject: [PATCH] Fixes the use of index relays and search relays to load users and events as well as become the default for global feeds. --- .../vitorpamplona/amethyst/model/Account.kt | 21 +++-- .../model/preferences/UISharedPreferences.kt | 3 - .../MergedFollowPlusMineRelayListsState.kt | 5 - ...usMineWithIndexAndSearchRelayListsState.kt | 92 +++++++++++++++++++ ...dFollowPlusMineWithIndexRelayListsState.kt | 87 ++++++++++++++++++ ...FollowPlusMineWithSearchRelayListsState.kt | 87 ++++++++++++++++++ .../amethyst/model/torState/TorRelayState.kt | 1 - .../loaders/FilterMissingAddressables.kt | 2 +- .../event/loaders/FilterMissingEvents.kt | 2 +- .../user/loaders/UserLoaderSubAssembler.kt | 2 +- .../SearchWatcherSubAssembler.kt | 17 ++-- .../ThreadEventLoaderSubAssembler.kt | 2 +- .../amethyst/ui/tor/TorSettingsFlow.kt | 4 - 13 files changed, 293 insertions(+), 32 deletions(-) create mode 100644 amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexAndSearchRelayListsState.kt create mode 100644 amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexRelayListsState.kt create mode 100644 amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithSearchRelayListsState.kt diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 6a49bfb00..53037cb48 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -81,6 +81,9 @@ import com.vitorpamplona.amethyst.model.nip96FileStorage.FileStorageServerListSt import com.vitorpamplona.amethyst.model.nipB7Blossom.BlossomServerListState import com.vitorpamplona.amethyst.model.serverList.MergedFollowListsState import com.vitorpamplona.amethyst.model.serverList.MergedFollowPlusMineRelayListsState +import com.vitorpamplona.amethyst.model.serverList.MergedFollowPlusMineWithIndexAndSearchRelayListsState +import com.vitorpamplona.amethyst.model.serverList.MergedFollowPlusMineWithIndexRelayListsState +import com.vitorpamplona.amethyst.model.serverList.MergedFollowPlusMineWithSearchRelayListsState import com.vitorpamplona.amethyst.model.serverList.MergedServerListState import com.vitorpamplona.amethyst.model.serverList.TrustedRelayListsState import com.vitorpamplona.amethyst.model.topNavFeeds.FeedDecryptionCaches @@ -305,7 +308,10 @@ class Account( // Follows Relays val followOutboxesOrProxy = FollowListOutboxOrProxyRelays(kind3FollowList, blockedRelayList, proxyRelayList, cache, scope) - val followPlusAllMine = MergedFollowPlusMineRelayListsState(followOutboxesOrProxy, nip65RelayList, privateStorageRelayList, localRelayList, indexerRelayList, scope) + val followPlusAllMineWithIndex = MergedFollowPlusMineWithIndexRelayListsState(followOutboxesOrProxy, nip65RelayList, privateStorageRelayList, localRelayList, indexerRelayList, scope) + val followPlusAllMineWithSearch = MergedFollowPlusMineWithSearchRelayListsState(followOutboxesOrProxy, nip65RelayList, privateStorageRelayList, localRelayList, searchRelayList, scope) + val followPlusAllMineWithIndexAndSearch = MergedFollowPlusMineWithIndexAndSearchRelayListsState(followOutboxesOrProxy, nip65RelayList, privateStorageRelayList, localRelayList, indexerRelayList, searchRelayList, scope) + val defaultGlobalRelays = MergedFollowPlusMineRelayListsState(followOutboxesOrProxy, nip65RelayList, privateStorageRelayList, localRelayList, scope) // keeps a cache of the outbox relays for each author val followsPerRelay = FollowsPerOutboxRelay(kind3FollowList, blockedRelayList, proxyRelayList, cache, scope).flow @@ -338,7 +344,7 @@ class Account( feedFilterListName = settings.defaultHomeFollowList, allFollows = allFollows.flow, locationFlow = geolocationFlow, - followsRelays = followPlusAllMine.flow, + followsRelays = defaultGlobalRelays.flow, blockedRelays = blockedRelayList.flow, proxyRelays = proxyRelayList.flow, caches = feedDecryptionCaches, @@ -353,7 +359,7 @@ class Account( feedFilterListName = settings.defaultStoriesFollowList, allFollows = allFollows.flow, locationFlow = geolocationFlow, - followsRelays = followPlusAllMine.flow, + followsRelays = defaultGlobalRelays.flow, blockedRelays = blockedRelayList.flow, proxyRelays = proxyRelayList.flow, caches = feedDecryptionCaches, @@ -368,7 +374,7 @@ class Account( feedFilterListName = settings.defaultDiscoveryFollowList, allFollows = allFollows.flow, locationFlow = geolocationFlow, - followsRelays = followPlusAllMine.flow, + followsRelays = defaultGlobalRelays.flow, blockedRelays = blockedRelayList.flow, proxyRelays = proxyRelayList.flow, caches = feedDecryptionCaches, @@ -383,7 +389,7 @@ class Account( feedFilterListName = settings.defaultNotificationFollowList, allFollows = allFollows.flow, locationFlow = geolocationFlow, - followsRelays = followPlusAllMine.flow, + followsRelays = defaultGlobalRelays.flow, blockedRelays = blockedRelayList.flow, proxyRelays = proxyRelayList.flow, caches = feedDecryptionCaches, @@ -686,7 +692,8 @@ class Account( fun computeRelayListToBroadcast(event: Event): Set { if (event is MetadataEvent || event is AdvertisedRelayListEvent) { - return followPlusAllMine.flow.value + client.relayStatusFlow().value.available + // everywhere + return followPlusAllMineWithIndex.flow.value + client.relayStatusFlow().value.available } if (event is GiftWrapEvent) { val receiver = event.recipientPubKey() @@ -886,7 +893,7 @@ class Account( } fun sendLiterallyEverywhere(event: Event) { - client.send(event, outboxRelays.flow.value + indexerRelayList.flow.value + client.relayStatusFlow().value.available) + client.send(event, followPlusAllMineWithIndex.flow.value + client.relayStatusFlow().value.available) cache.justConsumeMyOwnEvent(event) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt index f4fcf34d1..791f72ca5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt @@ -158,9 +158,7 @@ class TorSharedPreferences( try { // Get the preference flow and take the first value. val preferences = context.sharedPreferencesDataStore.data.first() - println("AABBCC Loading TorSettings: ${preferences[TOR_SETTINGS]}") preferences[TOR_SETTINGS]?.let { - println("AABBCC Loading TorSettings: $it") JsonMapper.mapper.readValue(it) } } catch (e: Exception) { @@ -171,7 +169,6 @@ class TorSharedPreferences( suspend fun save(torSettings: TorSettings) { try { - println("AABBCC Saving TorSettings: $torSettings") val str = JsonMapper.mapper.writeValueAsString(torSettings) context.sharedPreferencesDataStore.edit { preferences -> preferences[TOR_SETTINGS] = str diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineRelayListsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineRelayListsState.kt index 35474e98a..6498e7bed 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineRelayListsState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineRelayListsState.kt @@ -23,7 +23,6 @@ package com.vitorpamplona.amethyst.model.serverList import com.vitorpamplona.amethyst.model.edits.PrivateStorageRelayListState import com.vitorpamplona.amethyst.model.localRelays.LocalRelayListState import com.vitorpamplona.amethyst.model.nip02FollowLists.FollowListOutboxOrProxyRelays -import com.vitorpamplona.amethyst.model.nip51Lists.indexerRelays.IndexerRelayListState import com.vitorpamplona.amethyst.model.nip65RelayList.Nip65RelayListState import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import kotlinx.coroutines.CoroutineScope @@ -40,7 +39,6 @@ class MergedFollowPlusMineRelayListsState( val nip65RelayList: Nip65RelayListState, val privateOutboxRelayList: PrivateStorageRelayListState, val localRelayList: LocalRelayListState, - val indexerRelayList: IndexerRelayListState, val scope: CoroutineScope, ) { fun mergeLists(lists: Array>): Set = lists.reduce { acc, set -> acc + set } @@ -53,7 +51,6 @@ class MergedFollowPlusMineRelayListsState( nip65RelayList.inboxFlow, privateOutboxRelayList.flow, localRelayList.flow, - indexerRelayList.flow, ), ::mergeLists, ).onStart { @@ -65,7 +62,6 @@ class MergedFollowPlusMineRelayListsState( nip65RelayList.inboxFlow.value, privateOutboxRelayList.flow.value, localRelayList.flow.value, - indexerRelayList.flow.value, ), ), ) @@ -80,7 +76,6 @@ class MergedFollowPlusMineRelayListsState( nip65RelayList.inboxFlow.value, privateOutboxRelayList.flow.value, localRelayList.flow.value, - indexerRelayList.flow.value, ), ), ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexAndSearchRelayListsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexAndSearchRelayListsState.kt new file mode 100644 index 000000000..68956135b --- /dev/null +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexAndSearchRelayListsState.kt @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.amethyst.model.serverList + +import com.vitorpamplona.amethyst.model.edits.PrivateStorageRelayListState +import com.vitorpamplona.amethyst.model.localRelays.LocalRelayListState +import com.vitorpamplona.amethyst.model.nip02FollowLists.FollowListOutboxOrProxyRelays +import com.vitorpamplona.amethyst.model.nip51Lists.indexerRelays.IndexerRelayListState +import com.vitorpamplona.amethyst.model.nip51Lists.searchRelays.SearchRelayListState +import com.vitorpamplona.amethyst.model.nip65RelayList.Nip65RelayListState +import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.stateIn + +class MergedFollowPlusMineWithIndexAndSearchRelayListsState( + val followsOutboxOrProxyRelayList: FollowListOutboxOrProxyRelays, + val nip65RelayList: Nip65RelayListState, + val privateOutboxRelayList: PrivateStorageRelayListState, + val localRelayList: LocalRelayListState, + val indexerRelayList: IndexerRelayListState, + val searchRelayListsState: SearchRelayListState, + val scope: CoroutineScope, +) { + fun mergeLists(lists: Array>): Set = lists.reduce { acc, set -> acc + set } + + val flow: StateFlow> = + combine( + listOf( + followsOutboxOrProxyRelayList.flow, + nip65RelayList.outboxFlow, + nip65RelayList.inboxFlow, + privateOutboxRelayList.flow, + localRelayList.flow, + indexerRelayList.flow, + searchRelayListsState.flow, + ), + ::mergeLists, + ).onStart { + emit( + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + indexerRelayList.flow.value, + searchRelayListsState.flow.value, + ), + ), + ) + }.flowOn(Dispatchers.Default) + .stateIn( + scope, + SharingStarted.Eagerly, + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + indexerRelayList.flow.value, + searchRelayListsState.flow.value, + ), + ), + ) +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexRelayListsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexRelayListsState.kt new file mode 100644 index 000000000..ae22655e8 --- /dev/null +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithIndexRelayListsState.kt @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.amethyst.model.serverList + +import com.vitorpamplona.amethyst.model.edits.PrivateStorageRelayListState +import com.vitorpamplona.amethyst.model.localRelays.LocalRelayListState +import com.vitorpamplona.amethyst.model.nip02FollowLists.FollowListOutboxOrProxyRelays +import com.vitorpamplona.amethyst.model.nip51Lists.indexerRelays.IndexerRelayListState +import com.vitorpamplona.amethyst.model.nip65RelayList.Nip65RelayListState +import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.stateIn + +class MergedFollowPlusMineWithIndexRelayListsState( + val followsOutboxOrProxyRelayList: FollowListOutboxOrProxyRelays, + val nip65RelayList: Nip65RelayListState, + val privateOutboxRelayList: PrivateStorageRelayListState, + val localRelayList: LocalRelayListState, + val indexerRelayList: IndexerRelayListState, + val scope: CoroutineScope, +) { + fun mergeLists(lists: Array>): Set = lists.reduce { acc, set -> acc + set } + + val flow: StateFlow> = + combine( + listOf( + followsOutboxOrProxyRelayList.flow, + nip65RelayList.outboxFlow, + nip65RelayList.inboxFlow, + privateOutboxRelayList.flow, + localRelayList.flow, + indexerRelayList.flow, + ), + ::mergeLists, + ).onStart { + emit( + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + indexerRelayList.flow.value, + ), + ), + ) + }.flowOn(Dispatchers.Default) + .stateIn( + scope, + SharingStarted.Eagerly, + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + indexerRelayList.flow.value, + ), + ), + ) +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithSearchRelayListsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithSearchRelayListsState.kt new file mode 100644 index 000000000..68e5af6b9 --- /dev/null +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/serverList/MergedFollowPlusMineWithSearchRelayListsState.kt @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.amethyst.model.serverList + +import com.vitorpamplona.amethyst.model.edits.PrivateStorageRelayListState +import com.vitorpamplona.amethyst.model.localRelays.LocalRelayListState +import com.vitorpamplona.amethyst.model.nip02FollowLists.FollowListOutboxOrProxyRelays +import com.vitorpamplona.amethyst.model.nip51Lists.searchRelays.SearchRelayListState +import com.vitorpamplona.amethyst.model.nip65RelayList.Nip65RelayListState +import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.stateIn + +class MergedFollowPlusMineWithSearchRelayListsState( + val followsOutboxOrProxyRelayList: FollowListOutboxOrProxyRelays, + val nip65RelayList: Nip65RelayListState, + val privateOutboxRelayList: PrivateStorageRelayListState, + val localRelayList: LocalRelayListState, + val searchRelayListsState: SearchRelayListState, + val scope: CoroutineScope, +) { + fun mergeLists(lists: Array>): Set = lists.reduce { acc, set -> acc + set } + + val flow: StateFlow> = + combine( + listOf( + followsOutboxOrProxyRelayList.flow, + nip65RelayList.outboxFlow, + nip65RelayList.inboxFlow, + privateOutboxRelayList.flow, + localRelayList.flow, + searchRelayListsState.flow, + ), + ::mergeLists, + ).onStart { + emit( + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + searchRelayListsState.flow.value, + ), + ), + ) + }.flowOn(Dispatchers.Default) + .stateIn( + scope, + SharingStarted.Eagerly, + mergeLists( + arrayOf( + followsOutboxOrProxyRelayList.flow.value, + nip65RelayList.outboxFlow.value, + nip65RelayList.inboxFlow.value, + privateOutboxRelayList.flow.value, + localRelayList.flow.value, + searchRelayListsState.flow.value, + ), + ), + ) +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt index 6b0dfc6a4..ae9dcd791 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt @@ -93,7 +93,6 @@ class TorRelayState( trustedRelays, dmRelays, ) { torSettings: TorRelaySettings, trustedRelayList: Set, dmRelayList: Set -> - println("AABBCC New tor evaluation: $torSettings $trustedRelayList $dmRelayList") emit( TorRelayEvaluation( torSettings = torSettings, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingAddressables.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingAddressables.kt index cb16b55d5..f228907e0 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingAddressables.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingAddressables.kt @@ -71,7 +71,7 @@ fun filterMissingAddressables(keys: List): List - val default = key.account.followPlusAllMine.flow.value + val default = key.account.followPlusAllMineWithSearch.flow.value if (key.note is AddressableNote && key.note.event == null) { potentialRelaysToFindAddress(key.note).ifEmpty { default }.forEach { relayUrl -> add(relayUrl, key.note.address) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingEvents.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingEvents.kt index 7b5e21544..d76b06042 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingEvents.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/loaders/FilterMissingEvents.kt @@ -71,7 +71,7 @@ fun filterMissingEvents(keys: List): List - val default = key.account.followPlusAllMine.flow.value + val default = key.account.followPlusAllMineWithSearch.flow.value if (key.note !is AddressableNote && key.note.event == null) { potentialRelaysToFindEvent(key.note).ifEmpty { default }.forEach { relayUrl -> diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/loaders/UserLoaderSubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/loaders/UserLoaderSubAssembler.kt index f5d589172..357f29434 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/loaders/UserLoaderSubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/loaders/UserLoaderSubAssembler.kt @@ -46,7 +46,7 @@ class UserLoaderSubAssembler( val defaultRelays = mutableSetOf() keys.mapTo(mutableSetOf()) { it.account }.forEach { - defaultRelays.addAll(it.followPlusAllMine.flow.value) + defaultRelays.addAll(it.followPlusAllMineWithIndexAndSearch.flow.value) it.kind3FollowList.flow.value.authors.forEach { val user = LocalCache.getOrCreateUser(it) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/searchCommand/subassemblies/SearchWatcherSubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/searchCommand/subassemblies/SearchWatcherSubAssembler.kt index 7df1dae31..098d8e071 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/searchCommand/subassemblies/SearchWatcherSubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/searchCommand/subassemblies/SearchWatcherSubAssembler.kt @@ -55,27 +55,28 @@ class SearchWatcherSubAssembler( if (mySearchString.isBlank()) return null - val defaultRelays = key.account.followPlusAllMine.flow.value + val defaultRelaysWithIndexAndSearch = key.account.followPlusAllMineWithIndexAndSearch.flow.value + val defaultRelaysWithSearch = key.account.followPlusAllMineWithSearch.flow.value val directFilters = runCatching { if (Hex.isHex(mySearchString)) { val hexKey = Hex.decode(mySearchString).toHexKey() - filterByAuthor(hexKey, defaultRelays) + filterByEvent(hexKey, defaultRelays) + filterByAuthor(hexKey, defaultRelaysWithIndexAndSearch) + filterByEvent(hexKey, defaultRelaysWithSearch) } else { val parsed = Nip19Parser.uriToRoute(mySearchString)?.entity if (parsed != null) { cache.consume(parsed) when (parsed) { - is NSec -> filterByAuthor(parsed.toPubKeyHex(), defaultRelays) - is NPub -> filterByAuthor(parsed.hex, defaultRelays) - is NProfile -> filterByAuthor(parsed.hex, defaultRelays) - is NNote -> filterByEvent(parsed.hex, defaultRelays) - is NEvent -> filterByEvent(parsed.hex, defaultRelays) + is NSec -> filterByAuthor(parsed.toPubKeyHex(), defaultRelaysWithIndexAndSearch) + is NPub -> filterByAuthor(parsed.hex, defaultRelaysWithIndexAndSearch) + is NProfile -> filterByAuthor(parsed.hex, defaultRelaysWithIndexAndSearch) + is NNote -> filterByEvent(parsed.hex, defaultRelaysWithSearch) + is NEvent -> filterByEvent(parsed.hex, defaultRelaysWithSearch) is NEmbed -> emptyList() is NRelay -> emptyList() - is NAddress -> filterByAddress(parsed, defaultRelays) + is NAddress -> filterByAddress(parsed, defaultRelaysWithSearch) else -> emptyList() } } else { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/datasources/subassembies/ThreadEventLoaderSubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/datasources/subassembies/ThreadEventLoaderSubAssembler.kt index 1fd74d441..077bb01f4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/datasources/subassembies/ThreadEventLoaderSubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/datasources/subassembies/ThreadEventLoaderSubAssembler.kt @@ -46,7 +46,7 @@ class ThreadEventLoaderSubAssembler( since: SincePerRelayMap?, ): List? { val branches = ThreadAssembler().findThreadFor(key.eventId) ?: return null - val defaultRelays = key.account.followPlusAllMine.flow.value + val defaultRelays = key.account.followPlusAllMineWithSearch.flow.value return filterMissingEventsForThread(branches, defaultRelays) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorSettingsFlow.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorSettingsFlow.kt index dc70e1d9e..d4d765d26 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorSettingsFlow.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorSettingsFlow.kt @@ -94,8 +94,6 @@ class TorSettingsFlow( fun update(torSettings: TorSettings): Boolean { var any = false - println("AABBCC updating 1 $torSettings") - if (torType.value != torSettings.torType) { torType.tryEmit(torSettings.torType) any = true @@ -150,8 +148,6 @@ class TorSettingsFlow( any = true } - println("AABBCC updating 2 ${toSettings()}") - return any }