From 66e4021d7bed6d467b02ec4fbb9305da75b4cca5 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 24 Jun 2024 10:52:34 -0300 Subject: [PATCH] Move all relay and datasource to ammolite package --- ammolite/build.gradle | 6 ++ .../ammolite/relays}/BundledUpdate.kt | 4 +- .../vitorpamplona/ammolite}/relays/Client.kt | 13 ++-- .../ammolite}/relays/Constants.kt | 3 +- .../vitorpamplona/ammolite/relays/EOSETime.kt | 27 ++++++++ .../ammolite}/relays/JsonFilter.kt | 2 +- .../ammolite/relays}/NostrDataSource.kt | 25 +++----- .../vitorpamplona/ammolite}/relays/Relay.kt | 10 ++- .../ammolite/relays/RelayBriefInfoCache.kt | 46 ++++++++++++++ .../ammolite}/relays/RelayPool.kt | 5 +- .../ammolite/relays}/RelaySetupInfo.kt | 3 +- .../ammolite}/relays/RelayStats.kt | 2 +- .../ammolite}/relays/Subscription.kt | 2 +- .../ammolite}/relays/TypedFilter.kt | 2 +- .../ammolite/service/HttpClientManager.kt | 18 +++--- .../ammolite/service/MainThreadChecker.kt | 34 ++++++++++ .../amethyst/LocalPreferences.kt | 4 +- .../vitorpamplona/amethyst/ServiceManager.kt | 21 +------ .../vitorpamplona/amethyst/model/Account.kt | 63 +++++++++++++++---- .../amethyst/model/AntiSpamFilter.kt | 6 +- .../vitorpamplona/amethyst/model/Channel.kt | 2 +- .../amethyst/model/LocalCache.kt | 4 +- .../com/vitorpamplona/amethyst/model/Note.kt | 30 ++------- .../com/vitorpamplona/amethyst/model/User.kt | 6 +- .../service/AmethystNostrDataSource.kt | 49 +++++++++++++++ .../service/NostrAccountDataSource.kt | 16 ++--- .../service/NostrChannelDataSource.kt | 8 +-- .../service/NostrChatroomDataSource.kt | 8 +-- .../service/NostrChatroomListDataSource.kt | 10 +-- .../service/NostrCommunityDataSource.kt | 8 +-- .../service/NostrDiscoveryDataSource.kt | 8 +-- .../service/NostrGeohashDataSource.kt | 8 +-- .../service/NostrHashtagDataSource.kt | 8 +-- .../amethyst/service/NostrHomeDataSource.kt | 8 +-- .../NostrLnZapPaymentResponseDataSource.kt | 12 ++-- .../NostrSearchEventOrUserDataSource.kt | 10 +-- .../service/NostrSingleChannelDataSource.kt | 10 +-- .../service/NostrSingleEventDataSource.kt | 10 +-- .../service/NostrSingleUserDataSource.kt | 10 +-- .../amethyst/service/NostrThreadDataSource.kt | 8 +-- .../service/NostrUserProfileDataSource.kt | 8 +-- .../amethyst/service/NostrVideoDataSource.kt | 8 +-- .../amethyst/service/relays/EOSE.kt | 7 +-- .../amethyst/ui/actions/EditPostViewModel.kt | 2 +- .../amethyst/ui/actions/NewMediaModel.kt | 2 +- .../amethyst/ui/actions/NewPostViewModel.kt | 2 +- .../ui/actions/RelaySelectionDialog.kt | 4 +- .../ui/actions/relays/AllRelayListView.kt | 4 +- .../ui/actions/relays/BasicRelaySetupInfo.kt | 6 +- .../relays/BasicRelaySetupInfoDialog.kt | 2 +- .../relays/BasicRelaySetupInfoModel.kt | 2 +- .../ui/actions/relays/Kind3RelayListView.kt | 8 +-- .../actions/relays/Kind3RelayListViewModel.kt | 8 +-- .../actions/relays/Nip65RelayListViewModel.kt | 2 +- .../actions/relays/RelayInformationDialog.kt | 4 +- .../ui/actions/relays/RelayUrlEditField.kt | 2 +- .../amethyst/ui/navigation/AppTopBar.kt | 4 +- .../amethyst/ui/navigation/DrawerContent.kt | 4 +- .../amethyst/ui/note/RelayListRow.kt | 2 +- .../amethyst/ui/note/UserReactionsRow.kt | 2 +- .../amethyst/ui/note/types/RelayList.kt | 2 +- .../ui/screen/AccountStateViewModel.kt | 2 +- .../amethyst/ui/screen/CardFeedViewModel.kt | 4 +- .../amethyst/ui/screen/FeedViewModel.kt | 4 +- .../amethyst/ui/screen/LnZapFeedViewModel.kt | 2 +- .../amethyst/ui/screen/RelayFeedView.kt | 2 +- .../amethyst/ui/screen/StringFeedViewModel.kt | 2 +- .../amethyst/ui/screen/UserFeedViewModel.kt | 2 +- .../ui/screen/loggedIn/AccountViewModel.kt | 2 +- .../ui/screen/loggedIn/SearchScreen.kt | 2 +- 70 files changed, 392 insertions(+), 244 deletions(-) rename {app/src/main/java/com/vitorpamplona/amethyst/ui/components => ammolite/src/main/java/com/vitorpamplona/ammolite/relays}/BundledUpdate.kt (97%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/Client.kt (96%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/Constants.kt (97%) create mode 100644 ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/JsonFilter.kt (98%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite/relays}/NostrDataSource.kt (93%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/Relay.kt (98%) create mode 100644 ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayBriefInfoCache.kt rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/RelayPool.kt (98%) rename {app/src/main/java/com/vitorpamplona/amethyst/model => ammolite/src/main/java/com/vitorpamplona/ammolite/relays}/RelaySetupInfo.kt (92%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/RelayStats.kt (98%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/Subscription.kt (98%) rename {app/src/main/java/com/vitorpamplona/amethyst/service => ammolite/src/main/java/com/vitorpamplona/ammolite}/relays/TypedFilter.kt (95%) create mode 100644 ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt create mode 100644 app/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt diff --git a/ammolite/build.gradle b/ammolite/build.gradle index 2d06634ce..8a14671f0 100644 --- a/ammolite/build.gradle +++ b/ammolite/build.gradle @@ -15,6 +15,10 @@ android { consumerProguardFiles "consumer-rules.pro" } + buildFeatures { + buildConfig = true + } + buildTypes { release { minifyEnabled true @@ -45,6 +49,8 @@ dependencies { implementation libs.androidx.core.ktx implementation libs.androidx.appcompat implementation libs.material + implementation project(path: ':quartz') + implementation libs.androidx.runtime.runtime testImplementation libs.junit androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.espresso.core diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/BundledUpdate.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/BundledUpdate.kt similarity index 97% rename from app/src/main/java/com/vitorpamplona/amethyst/ui/components/BundledUpdate.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/BundledUpdate.kt index be77cf5f6..0a26b050b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/BundledUpdate.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/BundledUpdate.kt @@ -18,10 +18,10 @@ * 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.ui.components +package com.vitorpamplona.ammolite.relays import androidx.compose.runtime.Stable -import com.vitorpamplona.amethyst.service.checkNotInMainThread +import com.vitorpamplona.ammolite.service.checkNotInMainThread import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt similarity index 96% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 34c494813..5fef76836 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -18,11 +18,10 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import android.util.Log -import com.vitorpamplona.amethyst.model.RelaySetupInfo -import com.vitorpamplona.amethyst.service.checkNotInMainThread +import com.vitorpamplona.ammolite.service.checkNotInMainThread import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.EventInterface import kotlinx.coroutines.DelicateCoroutinesApi @@ -50,7 +49,7 @@ object Client : RelayPool.Listener { if (onlyIfChanged) { if (!isSameRelaySetConfig(relays)) { - if (this.relays.isNotEmpty()) { + if (Client.relays.isNotEmpty()) { RelayPool.disconnect() RelayPool.unregister(this) RelayPool.unloadRelays() @@ -61,11 +60,11 @@ object Client : RelayPool.Listener { RelayPool.register(this) RelayPool.loadRelays(newRelays) RelayPool.requestAndWatch() - this.relays = newRelays.toTypedArray() + Client.relays = newRelays.toTypedArray() } } } else { - if (this.relays.isNotEmpty()) { + if (Client.relays.isNotEmpty()) { RelayPool.disconnect() RelayPool.unregister(this) RelayPool.unloadRelays() @@ -76,7 +75,7 @@ object Client : RelayPool.Listener { RelayPool.register(this) RelayPool.loadRelays(newRelays) RelayPool.requestAndWatch() - this.relays = newRelays.toTypedArray() + Client.relays = newRelays.toTypedArray() } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt similarity index 97% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt index f0d8189b8..8c49189c1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt @@ -18,9 +18,8 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.quartz.encoders.RelayUrlFormatter object Constants { diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt new file mode 100644 index 000000000..4d0ed60e4 --- /dev/null +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2024 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.ammolite.relays + +class EOSETime(var time: Long) { + override fun toString(): String { + return time.toString() + } +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/JsonFilter.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/JsonFilter.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/JsonFilter.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/JsonFilter.kt index eac7b0f8f..8d36668be 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/JsonFilter.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/JsonFilter.kt @@ -18,7 +18,7 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import com.vitorpamplona.quartz.events.Event diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt similarity index 93% rename from app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt index 4b6beb515..c27b79fb2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt @@ -18,15 +18,10 @@ * 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.service +package com.vitorpamplona.ammolite.relays import android.util.Log -import com.vitorpamplona.amethyst.model.LocalCache -import com.vitorpamplona.amethyst.service.relays.Client -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.service.relays.Subscription -import com.vitorpamplona.amethyst.ui.components.BundledUpdate -import com.vitorpamplona.quartz.events.AddressableEvent +import com.vitorpamplona.ammolite.service.checkNotInMainThread import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.CoroutineScope @@ -279,20 +274,20 @@ abstract class NostrDataSource(val debugName: String) { event: Event, relay: Relay, ) { - LocalCache.verifyAndConsume(event, relay) +// LocalCache.verifyAndConsume(event, relay) } open fun markAsSeenOnRelay( eventId: String, relay: Relay, ) { - val note = LocalCache.getNoteIfExists(eventId) - val noteEvent = note?.event - if (noteEvent is AddressableEvent) { - LocalCache.getAddressableNoteIfExists(noteEvent.address().toTag())?.addRelay(relay) - } else { - note?.addRelay(relay) - } +// val note = LocalCache.getNoteIfExists(eventId) +// val noteEvent = note?.event +// if (noteEvent is AddressableEvent) { +// LocalCache.getAddressableNoteIfExists(noteEvent.address().toTag())?.addRelay(relay) +// } else { +// note?.addRelay(relay) +// } } open fun markAsEOSE( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt index 0475ed4c3..9c7af4c02 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt @@ -18,14 +18,12 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import android.util.Log -import com.vitorpamplona.amethyst.BuildConfig -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache -import com.vitorpamplona.amethyst.model.RelaySetupInfo -import com.vitorpamplona.amethyst.service.checkNotInMainThread +import com.vitorpamplona.ammolite.BuildConfig import com.vitorpamplona.ammolite.service.HttpClientManager +import com.vitorpamplona.ammolite.service.checkNotInMainThread import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.EventInterface @@ -123,7 +121,7 @@ class Relay( val request = Request .Builder() - .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") + .header("User-Agent", HttpClientManager.getDefaultUserAgentHeader()) .url(url.trim()) .build() diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayBriefInfoCache.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayBriefInfoCache.kt new file mode 100644 index 000000000..51757c1a9 --- /dev/null +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayBriefInfoCache.kt @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2024 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.ammolite.relays + +import android.util.LruCache +import androidx.compose.runtime.Immutable +import com.vitorpamplona.quartz.encoders.RelayUrlFormatter + +object RelayBriefInfoCache { + val cache = LruCache(50) + + @Immutable + class RelayBriefInfo( + val url: String, + ) { + val displayUrl: String = RelayUrlFormatter.displayUrl(url).intern() + val favIcon: String = "https://$displayUrl/favicon.ico".intern() + } + + fun get(url: String): RelayBriefInfo { + val info = cache[url] + if (info != null) return info + + val newInfo = RelayBriefInfo(url) + cache.put(url, newInfo) + return newInfo + } +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt index 3a3ffaa74..0bc96ce90 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt @@ -18,11 +18,10 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import androidx.compose.runtime.Immutable -import com.vitorpamplona.amethyst.model.RelaySetupInfo -import com.vitorpamplona.amethyst.service.checkNotInMainThread +import com.vitorpamplona.ammolite.service.checkNotInMainThread import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.EventInterface import kotlinx.coroutines.DelicateCoroutinesApi diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/RelaySetupInfo.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelaySetupInfo.kt similarity index 92% rename from app/src/main/java/com/vitorpamplona/amethyst/model/RelaySetupInfo.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelaySetupInfo.kt index 6f9094c54..6c18edca8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/RelaySetupInfo.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelaySetupInfo.kt @@ -18,10 +18,9 @@ * 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 +package com.vitorpamplona.ammolite.relays import androidx.compose.runtime.Immutable -import com.vitorpamplona.amethyst.service.relays.FeedType @Immutable data class RelaySetupInfo( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayStats.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayStats.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt index 60a05958d..2db9be54f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayStats.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt @@ -18,7 +18,7 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import androidx.collection.LruCache import com.vitorpamplona.quartz.utils.TimeUtils diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Subscription.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Subscription.kt similarity index 98% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/Subscription.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Subscription.kt index ebd0ce388..9f93b4104 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Subscription.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Subscription.kt @@ -18,7 +18,7 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays import java.util.UUID diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/TypedFilter.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/TypedFilter.kt similarity index 95% rename from app/src/main/java/com/vitorpamplona/amethyst/service/relays/TypedFilter.kt rename to ammolite/src/main/java/com/vitorpamplona/ammolite/relays/TypedFilter.kt index 4817e7b30..84841a3e4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/TypedFilter.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/TypedFilter.kt @@ -18,7 +18,7 @@ * 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.service.relays +package com.vitorpamplona.ammolite.relays class TypedFilter( val types: Set, diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt index 56d96feed..20b14bcae 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt @@ -39,7 +39,7 @@ object HttpClientManager { private var defaultTimeout = DEFAULT_TIMEOUT_ON_WIFI private var defaultHttpClient: OkHttpClient? = null private var defaultHttpClientWithoutProxy: OkHttpClient? = null - private var internalInterceptor: Interceptor = DefaultContentTypeInterceptor() + private var userAgent: String = "Amethyst" // fires off every time value of the property changes private var internalProxy: Proxy? by @@ -73,12 +73,14 @@ object HttpClientManager { } } - fun setDefaultInterceptor(interceptor: Interceptor) { - Log.d("HttpClient", "Changing interceptor") - this.internalInterceptor = interceptor + fun setDefaultUserAgent(userAgentHeader: String) { + Log.d("HttpClient", "Changing userAgent") + this.userAgent = userAgentHeader this.defaultHttpClient = buildHttpClient(internalProxy, defaultTimeout) } + fun getDefaultUserAgentHeader() = this.userAgent + private fun buildHttpClient( proxy: Proxy?, timeout: Duration, @@ -90,20 +92,22 @@ object HttpClientManager { .readTimeout(duration) .connectTimeout(duration) .writeTimeout(duration) - .addInterceptor(internalInterceptor) + .addInterceptor(DefaultContentTypeInterceptor(userAgent)) .followRedirects(true) .followSslRedirects(true) .build() } - class DefaultContentTypeInterceptor : Interceptor { + class DefaultContentTypeInterceptor( + private val userAgentHeader: String, + ) : Interceptor { @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response { val originalRequest: Request = chain.request() val requestWithUserAgent: Request = originalRequest .newBuilder() - .header("User-Agent", "Amethyst") + .header("User-Agent", userAgentHeader) .build() return chain.proceed(requestWithUserAgent) } diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt new file mode 100644 index 000000000..9b0996073 --- /dev/null +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2024 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.ammolite.service + +import android.os.Looper +import com.vitorpamplona.ammolite.BuildConfig + +fun checkNotInMainThread() { + if (BuildConfig.DEBUG && isMainThread()) { + throw OnMainThreadException("It should not be in the MainThread") + } +} + +fun isMainThread() = Looper.myLooper() == Looper.getMainLooper() + +class OnMainThreadException(str: String) : RuntimeException(str) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index 4cb6574e6..22bf19827 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -31,10 +31,10 @@ import com.vitorpamplona.amethyst.model.DefaultReactions import com.vitorpamplona.amethyst.model.DefaultZapAmounts import com.vitorpamplona.amethyst.model.GLOBAL_FOLLOWS import com.vitorpamplona.amethyst.model.KIND3_FOLLOWS -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.model.Settings import com.vitorpamplona.amethyst.service.Nip96MediaServers import com.vitorpamplona.amethyst.service.checkNotInMainThread +import com.vitorpamplona.ammolite.relays.RelaySetupInfo import com.vitorpamplona.ammolite.service.HttpClientManager import com.vitorpamplona.quartz.crypto.KeyPair import com.vitorpamplona.quartz.encoders.HexKey @@ -75,7 +75,7 @@ private object PrefKeys { const val SAVED_ACCOUNTS = "all_saved_accounts" const val NOSTR_PRIVKEY = "nostr_privkey" const val NOSTR_PUBKEY = "nostr_pubkey" - const val RELAYS = "relays" + const val RELAYS = "com/vitorpamplona/ammolite/relays/relays" const val DONT_TRANSLATE_FROM = "dontTranslateFrom" const val LOCAL_RELAY_SERVERS = "localRelayServers" const val LANGUAGE_PREFS = "languagePreferences" diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt index 6136950c7..aec03f645 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt @@ -46,7 +46,7 @@ import com.vitorpamplona.amethyst.service.NostrSingleUserDataSource import com.vitorpamplona.amethyst.service.NostrThreadDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource import com.vitorpamplona.amethyst.service.NostrVideoDataSource -import com.vitorpamplona.amethyst.service.relays.Client +import com.vitorpamplona.ammolite.relays.Client import com.vitorpamplona.ammolite.service.HttpClientManager import com.vitorpamplona.quartz.encoders.bechToBytes import com.vitorpamplona.quartz.encoders.decodePublicKeyAsHexOrNull @@ -60,10 +60,6 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -import okhttp3.Interceptor -import okhttp3.Request -import okhttp3.Response -import java.io.IOException @Stable class ServiceManager { @@ -90,7 +86,7 @@ class ServiceManager { // Resets Proxy Use HttpClientManager.setDefaultProxy(account?.proxy) - HttpClientManager.setDefaultInterceptor(DefaultContentTypeInterceptor()) + HttpClientManager.setDefaultUserAgent("Amethyst/${BuildConfig.VERSION_NAME}") LocalCache.antiSpam.active = account?.filterSpamFromStrangers ?: true Coil.setImageLoader { Amethyst.instance @@ -254,16 +250,3 @@ class ServiceManager { forceRestart(null, false, true) } } - -class DefaultContentTypeInterceptor : Interceptor { - @Throws(IOException::class) - override fun intercept(chain: Interceptor.Chain): Response { - val originalRequest: Request = chain.request() - val requestWithUserAgent: Request = - originalRequest - .newBuilder() - .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") - .build() - return chain.proceed(requestWithUserAgent) - } -} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 81a9f568e..50a4f7d55 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -36,13 +36,14 @@ import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.Nip96MediaServers import com.vitorpamplona.amethyst.service.NostrLnZapPaymentResponseDataSource import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.service.relays.Client -import com.vitorpamplona.amethyst.service.relays.Constants -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.service.relays.TypedFilter -import com.vitorpamplona.amethyst.ui.components.BundledUpdate +import com.vitorpamplona.ammolite.relays.BundledUpdate +import com.vitorpamplona.ammolite.relays.Client +import com.vitorpamplona.ammolite.relays.Constants +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.ammolite.relays.RelaySetupInfo +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.crypto.KeyPair import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey @@ -265,7 +266,13 @@ class Account( newDMRelaySet.forEach { newUrl -> if (mappedRelaySet.none { it.url == newUrl }) { - mappedRelaySet = mappedRelaySet + RelaySetupInfo(newUrl, true, true, setOf(FeedType.PRIVATE_DMS)) + mappedRelaySet = mappedRelaySet + + RelaySetupInfo( + newUrl, true, true, + setOf( + FeedType.PRIVATE_DMS, + ), + ) } } @@ -284,7 +291,13 @@ class Account( searchRelaySet.forEach { newUrl -> if (mappedRelaySet.none { it.url == newUrl }) { - mappedRelaySet = mappedRelaySet + RelaySetupInfo(newUrl, true, false, setOf(FeedType.SEARCH)) + mappedRelaySet = mappedRelaySet + + RelaySetupInfo( + newUrl, true, false, + setOf( + FeedType.SEARCH, + ), + ) } } @@ -303,7 +316,13 @@ class Account( privateOutboxRelaySet.forEach { newUrl -> if (mappedRelaySet.none { it.url == newUrl }) { - mappedRelaySet = mappedRelaySet + RelaySetupInfo(newUrl, true, true, setOf(FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, FeedType.GLOBAL, FeedType.PRIVATE_DMS)) + mappedRelaySet = mappedRelaySet + + RelaySetupInfo( + newUrl, true, true, + setOf( + FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, FeedType.GLOBAL, FeedType.PRIVATE_DMS, + ), + ) } } @@ -322,7 +341,13 @@ class Account( localRelayServers.forEach { newUrl -> if (mappedRelaySet.none { it.url == newUrl }) { - mappedRelaySet = mappedRelaySet + RelaySetupInfo(newUrl, true, true, setOf(FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, FeedType.GLOBAL, FeedType.PRIVATE_DMS)) + mappedRelaySet = mappedRelaySet + + RelaySetupInfo( + newUrl, true, true, + setOf( + FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, FeedType.GLOBAL, FeedType.PRIVATE_DMS, + ), + ) } } @@ -336,7 +361,13 @@ class Account( if (nip65setup != null) { val write = nip65setup.type == AdvertisedRelayListEvent.AdvertisedRelayType.BOTH || nip65setup.type == AdvertisedRelayListEvent.AdvertisedRelayType.READ - RelaySetupInfo(relay.url, true, relay.write || write, relay.feedTypes + setOf(FeedType.FOLLOWS, FeedType.GLOBAL, FeedType.PUBLIC_CHATS)) + RelaySetupInfo( + relay.url, true, relay.write || write, + relay.feedTypes + + setOf( + FeedType.FOLLOWS, FeedType.GLOBAL, FeedType.PUBLIC_CHATS, + ), + ) } else { relay } @@ -346,7 +377,13 @@ class Account( if (mappedRelaySet.none { it.url == newNip65Setup.relayUrl }) { val write = newNip65Setup.type == AdvertisedRelayListEvent.AdvertisedRelayType.BOTH || newNip65Setup.type == AdvertisedRelayListEvent.AdvertisedRelayType.READ - mappedRelaySet = mappedRelaySet + RelaySetupInfo(newNip65Setup.relayUrl, true, write, setOf(FeedType.FOLLOWS, FeedType.PUBLIC_CHATS)) + mappedRelaySet = mappedRelaySet + + RelaySetupInfo( + newNip65Setup.relayUrl, true, write, + setOf( + FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, + ), + ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt index b5063e67c..2f0911488 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt @@ -25,9 +25,9 @@ import android.util.LruCache import androidx.compose.runtime.Stable import androidx.lifecycle.LiveData import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.service.relays.RelayStats -import com.vitorpamplona.amethyst.ui.components.BundledUpdate +import com.vitorpamplona.ammolite.relays.BundledUpdate +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.ammolite.relays.RelayStats import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.Nip19Bech32 import com.vitorpamplona.quartz.events.Event diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt index 0c127556e..2c12a5147 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt @@ -25,9 +25,9 @@ import androidx.lifecycle.LiveData import com.vitorpamplona.amethyst.commons.data.LargeCache import com.vitorpamplona.amethyst.service.NostrSingleChannelDataSource import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder import com.vitorpamplona.amethyst.ui.note.toShortenHex +import com.vitorpamplona.ammolite.relays.BundledUpdate import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.Hex import com.vitorpamplona.quartz.encoders.HexKey diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index a88e97566..ccf4d3105 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -29,8 +29,8 @@ import com.vitorpamplona.amethyst.commons.data.LargeCache import com.vitorpamplona.amethyst.model.observables.LatestByKindAndAuthor import com.vitorpamplona.amethyst.model.observables.LatestByKindWithETag import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.ui.components.BundledInsert +import com.vitorpamplona.ammolite.relays.BundledInsert +import com.vitorpamplona.ammolite.relays.Relay import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.HexValidator diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt index fc05e4e2d..055476c11 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -20,7 +20,6 @@ */ package com.vitorpamplona.amethyst.model -import android.util.LruCache import androidx.compose.runtime.Immutable import androidx.compose.runtime.Stable import androidx.lifecycle.LiveData @@ -29,18 +28,18 @@ import androidx.lifecycle.distinctUntilChanged import com.vitorpamplona.amethyst.service.NostrSingleEventDataSource import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.amethyst.service.firstFullCharOrEmoji -import com.vitorpamplona.amethyst.service.relays.EOSETime -import com.vitorpamplona.amethyst.service.relays.Relay import com.vitorpamplona.amethyst.ui.actions.relays.updated -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.note.combineWith import com.vitorpamplona.amethyst.ui.note.toShortenHex +import com.vitorpamplona.ammolite.relays.BundledUpdate +import com.vitorpamplona.ammolite.relays.EOSETime +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.Hex import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.LnInvoiceUtil import com.vitorpamplona.quartz.encoders.Nip19Bech32 -import com.vitorpamplona.quartz.encoders.RelayUrlFormatter import com.vitorpamplona.quartz.encoders.toNote import com.vitorpamplona.quartz.events.AddressableEvent import com.vitorpamplona.quartz.events.BaseTextNoteEvent @@ -1010,24 +1009,3 @@ class NoteLoadingLiveData( @Immutable class NoteState( val note: Note, ) - -object RelayBriefInfoCache { - val cache = LruCache(50) - - @Immutable - class RelayBriefInfo( - val url: String, - ) { - val displayUrl: String = RelayUrlFormatter.displayUrl(url).intern() - val favIcon: String = "https://$displayUrl/favicon.ico".intern() - } - - fun get(url: String): RelayBriefInfo { - val info = cache[url] - if (info != null) return info - - val newInfo = RelayBriefInfo(url) - cache.put(url, newInfo) - return newInfo - } -} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt index 9844ef622..078c53579 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -27,10 +27,10 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.distinctUntilChanged import com.vitorpamplona.amethyst.service.NostrSingleUserDataSource import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.service.relays.EOSETime -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.note.toShortenHex +import com.vitorpamplona.ammolite.relays.BundledUpdate +import com.vitorpamplona.ammolite.relays.EOSETime +import com.vitorpamplona.ammolite.relays.Relay import com.vitorpamplona.quartz.encoders.Hex import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.Lud06 diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt new file mode 100644 index 000000000..244d60a1f --- /dev/null +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2024 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.service + +import com.vitorpamplona.amethyst.model.LocalCache +import com.vitorpamplona.ammolite.relays.NostrDataSource +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.quartz.events.AddressableEvent +import com.vitorpamplona.quartz.events.Event + +abstract class AmethystNostrDataSource(debugName: String) : NostrDataSource(debugName) { + override fun consume( + event: Event, + relay: Relay, + ) { + LocalCache.verifyAndConsume(event, relay) + } + + override fun markAsSeenOnRelay( + eventId: String, + relay: Relay, + ) { + val note = LocalCache.getNoteIfExists(eventId) + val noteEvent = note?.event + if (noteEvent is AddressableEvent) { + LocalCache.getAddressableNoteIfExists(noteEvent.address().toTag())?.addRelay(relay) + } else { + note?.addRelay(relay) + } + } +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt index 298bcb6b3..d844308a6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt @@ -23,14 +23,14 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.User -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.Client import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.EOSETime -import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.Client +import com.vitorpamplona.ammolite.relays.EOSETime +import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent import com.vitorpamplona.quartz.events.BadgeAwardEvent @@ -70,7 +70,7 @@ import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.utils.TimeUtils // TODO: Migrate this to a property of AccountVi -object NostrAccountDataSource : NostrDataSource("AccountData") { +object NostrAccountDataSource : AmethystNostrDataSource("AccountData") { lateinit var account: Account var otherAccounts = listOf() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChannelDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChannelDataSource.kt index 8b820d284..dee51163a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChannelDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChannelDataSource.kt @@ -24,13 +24,13 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.LiveActivitiesChannel import com.vitorpamplona.amethyst.model.PublicChatChannel -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.ChannelMessageEvent import com.vitorpamplona.quartz.events.LiveActivitiesChatMessageEvent -object NostrChannelDataSource : NostrDataSource("ChatroomFeed") { +object NostrChannelDataSource : AmethystNostrDataSource("ChatroomFeed") { var account: Account? = null var channel: Channel? = null diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomDataSource.kt index ecb0efe56..86858a07b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomDataSource.kt @@ -22,13 +22,13 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.PrivateDmEvent -object NostrChatroomDataSource : NostrDataSource("ChatroomFeed") { +object NostrChatroomDataSource : AmethystNostrDataSource("ChatroomFeed") { lateinit var account: Account private var withRoom: ChatroomKey? = null diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomListDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomListDataSource.kt index e650a9f45..35631e73f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomListDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrChatroomListDataSource.kt @@ -22,16 +22,16 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.ChannelCreateEvent import com.vitorpamplona.quartz.events.ChannelMessageEvent import com.vitorpamplona.quartz.events.ChannelMetadataEvent import com.vitorpamplona.quartz.events.PrivateDmEvent -object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") { +object NostrChatroomListDataSource : AmethystNostrDataSource("MailBoxFeed") { lateinit var account: Account val latestEOSEs = EOSEAccount() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrCommunityDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrCommunityDataSource.kt index a4e0aacec..f96db2371 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrCommunityDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrCommunityDataSource.kt @@ -21,13 +21,13 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.AddressableNote -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.CommunityDefinitionEvent import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent -object NostrCommunityDataSource : NostrDataSource("SingleCommunityFeed") { +object NostrCommunityDataSource : AmethystNostrDataSource("SingleCommunityFeed") { private var communityToWatch: AddressableNote? = null private fun createLoadCommunityFilter(): TypedFilter? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt index 160daee76..62401ba1f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDiscoveryDataSource.kt @@ -23,9 +23,9 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AppDefinitionEvent import com.vitorpamplona.quartz.events.ChannelCreateEvent import com.vitorpamplona.quartz.events.ChannelMessageEvent @@ -39,7 +39,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch -object NostrDiscoveryDataSource : NostrDataSource("DiscoveryFeed") { +object NostrDiscoveryDataSource : AmethystNostrDataSource("DiscoveryFeed") { lateinit var account: Account val scope = Amethyst.instance.applicationIOScope diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrGeohashDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrGeohashDataSource.kt index 70e505287..55ba2e658 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrGeohashDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrGeohashDataSource.kt @@ -20,9 +20,9 @@ */ package com.vitorpamplona.amethyst.service -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AudioHeaderEvent import com.vitorpamplona.quartz.events.AudioTrackEvent import com.vitorpamplona.quartz.events.ChannelMessageEvent @@ -34,7 +34,7 @@ import com.vitorpamplona.quartz.events.PollNoteEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -object NostrGeohashDataSource : NostrDataSource("SingleGeoHashFeed") { +object NostrGeohashDataSource : AmethystNostrDataSource("SingleGeoHashFeed") { private var geohashToWatch: String? = null fun createLoadHashtagFilter(): TypedFilter? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHashtagDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHashtagDataSource.kt index cea761f7e..d13d6d695 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHashtagDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHashtagDataSource.kt @@ -20,9 +20,9 @@ */ package com.vitorpamplona.amethyst.service -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AudioHeaderEvent import com.vitorpamplona.quartz.events.AudioTrackEvent import com.vitorpamplona.quartz.events.ChannelMessageEvent @@ -34,7 +34,7 @@ import com.vitorpamplona.quartz.events.PollNoteEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -object NostrHashtagDataSource : NostrDataSource("SingleHashtagFeed") { +object NostrHashtagDataSource : AmethystNostrDataSource("SingleHashtagFeed") { private var hashtagToWatch: String? = null fun createLoadHashtagFilter(): TypedFilter? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt index be917641c..2417d2f29 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrHomeDataSource.kt @@ -23,9 +23,9 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AudioHeaderEvent import com.vitorpamplona.quartz.events.AudioTrackEvent import com.vitorpamplona.quartz.events.ClassifiedsEvent @@ -45,7 +45,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -object NostrHomeDataSource : NostrDataSource("HomeFeed") { +object NostrHomeDataSource : AmethystNostrDataSource("HomeFeed") { lateinit var account: Account val scope = Amethyst.instance.applicationIOScope diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrLnZapPaymentResponseDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrLnZapPaymentResponseDataSource.kt index 0cd136ccb..cd5a927db 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrLnZapPaymentResponseDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrLnZapPaymentResponseDataSource.kt @@ -20,11 +20,11 @@ */ package com.vitorpamplona.amethyst.service -import com.vitorpamplona.amethyst.service.relays.Client -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.Relay -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.Client +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.Relay +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.LnZapPaymentResponseEvent import com.vitorpamplona.quartz.events.RelayAuthEvent import com.vitorpamplona.quartz.signers.NostrSigner @@ -34,7 +34,7 @@ class NostrLnZapPaymentResponseDataSource( private val toUserHex: String, private val replyingToHex: String, private val authSigner: NostrSigner, -) : NostrDataSource("LnZapPaymentResponseFeed") { +) : AmethystNostrDataSource("LnZapPaymentResponseFeed") { val feedTypes = setOf(FeedType.WALLET_CONNECT) private fun createWalletConnectServiceWatcher(): TypedFilter { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt index 429f2117c..432765728 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSearchEventOrUserDataSource.kt @@ -20,10 +20,10 @@ */ package com.vitorpamplona.amethyst.service -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.crypto.KeyPair import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.Hex @@ -52,7 +52,7 @@ import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent import kotlin.coroutines.cancellation.CancellationException -object NostrSearchEventOrUserDataSource : NostrDataSource("SearchEventFeed") { +object NostrSearchEventOrUserDataSource : AmethystNostrDataSource("SearchEventFeed") { private var searchString: String? = null private fun createAnythingWithIDFilter(): List? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleChannelDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleChannelDataSource.kt index 73003b297..129e8746c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleChannelDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleChannelDataSource.kt @@ -23,14 +23,14 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.LiveActivitiesChannel import com.vitorpamplona.amethyst.model.PublicChatChannel -import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.ChannelCreateEvent import com.vitorpamplona.quartz.events.ChannelMetadataEvent -object NostrSingleChannelDataSource : NostrDataSource("SingleChannelFeed") { +object NostrSingleChannelDataSource : AmethystNostrDataSource("SingleChannelFeed") { private var channelsToWatch = setOf() private fun createMetadataChangeFilter(): TypedFilter? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt index ae21fd1bc..cde6acce8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt @@ -23,10 +23,10 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User -import com.vitorpamplona.amethyst.service.relays.EOSETime -import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.EOSETime +import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent import com.vitorpamplona.quartz.events.DeletionEvent import com.vitorpamplona.quartz.events.GenericRepostEvent @@ -43,7 +43,7 @@ import com.vitorpamplona.quartz.events.RepostEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.TextNoteModificationEvent -object NostrSingleEventDataSource : NostrDataSource("SingleEventFeed") { +object NostrSingleEventDataSource : AmethystNostrDataSource("SingleEventFeed") { private var eventsToWatch = setOf() private var addressesToWatch = setOf() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt index e1a768992..7cfb2604a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt @@ -21,16 +21,16 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.User -import com.vitorpamplona.amethyst.service.relays.EOSETime -import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.EOSETime +import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent import com.vitorpamplona.quartz.events.MetadataEvent import com.vitorpamplona.quartz.events.ReportEvent import com.vitorpamplona.quartz.events.StatusEvent -object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") { +object NostrSingleUserDataSource : AmethystNostrDataSource("SingleUserFeed") { private var usersToWatch = setOf() fun createUserMetadataFilter(): List? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrThreadDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrThreadDataSource.kt index 4d6d730a1..3fae129a4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrThreadDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrThreadDataSource.kt @@ -21,11 +21,11 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.ThreadAssembler -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter -object NostrThreadDataSource : NostrDataSource("SingleThreadFeed") { +object NostrThreadDataSource : AmethystNostrDataSource("SingleThreadFeed") { private var eventToWatch: String? = null fun createLoadEventsIfNotLoadedFilter(): TypedFilter? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrUserProfileDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrUserProfileDataSource.kt index 58ab69b5b..19e16f2ec 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrUserProfileDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrUserProfileDataSource.kt @@ -21,9 +21,9 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.User -import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.COMMON_FEED_TYPES +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.AppRecommendationEvent import com.vitorpamplona.quartz.events.AudioHeaderEvent import com.vitorpamplona.quartz.events.AudioTrackEvent @@ -43,7 +43,7 @@ import com.vitorpamplona.quartz.events.RepostEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -object NostrUserProfileDataSource : NostrDataSource("UserProfileFeed") { +object NostrUserProfileDataSource : AmethystNostrDataSource("UserProfileFeed") { var user: User? = null fun loadUserProfile(user: User?) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt index 9cca2cfd2..2dc2c18f2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt @@ -23,9 +23,9 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.relays.EOSEAccount -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.JsonFilter -import com.vitorpamplona.amethyst.service.relays.TypedFilter +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.JsonFilter +import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.quartz.events.FileHeaderEvent import com.vitorpamplona.quartz.events.FileStorageHeaderEvent import com.vitorpamplona.quartz.events.VideoHorizontalEvent @@ -37,7 +37,7 @@ import kotlinx.coroutines.launch val SUPPORTED_VIDEO_FEED_MIME_TYPES = listOf("image/jpeg", "image/gif", "image/png", "image/webp", "video/mp4", "video/mpeg", "video/webm", "audio/aac", "audio/mpeg", "audio/webm", "audio/wav", "image/avif") val SUPPORTED_VIDEO_FEED_MIME_TYPES_SET = SUPPORTED_VIDEO_FEED_MIME_TYPES.toSet() -object NostrVideoDataSource : NostrDataSource("VideoFeed") { +object NostrVideoDataSource : AmethystNostrDataSource("VideoFeed") { lateinit var account: Account val scope = Amethyst.instance.applicationIOScope diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt index a99a83878..83f2e9729 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt @@ -21,12 +21,7 @@ package com.vitorpamplona.amethyst.service.relays import com.vitorpamplona.amethyst.model.User - -class EOSETime(var time: Long) { - override fun toString(): String { - return time.toString() - } -} +import com.vitorpamplona.ammolite.relays.EOSETime class EOSERelayList(var relayList: Map = emptyMap()) { fun addOrUpdate( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt index abfc5d22f..a951d4a7a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt @@ -36,13 +36,13 @@ import com.vitorpamplona.amethyst.commons.richtext.RichTextParser import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.ammolite.relays.RelaySetupInfo import com.vitorpamplona.quartz.events.FileHeaderEvent import com.vitorpamplona.quartz.events.FileStorageEvent import com.vitorpamplona.quartz.events.FileStorageHeaderEvent diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaModel.kt index 91c0bf1c8..c9d3ccf79 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaModel.kt @@ -31,12 +31,12 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Account -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.Nip96MediaServers import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.stringRes +import com.vitorpamplona.ammolite.relays.RelaySetupInfo import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 854d96a96..9a420cb51 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -40,7 +40,6 @@ import com.vitorpamplona.amethyst.commons.richtext.RichTextParser import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.LocationUtil @@ -49,6 +48,7 @@ import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.components.Split import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.ammolite.relays.RelaySetupInfo import com.vitorpamplona.quartz.encoders.Hex import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.toNpub diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt index fceca3760..4d28188f9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt @@ -46,13 +46,13 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import com.vitorpamplona.amethyst.R -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.service.Nip11Retriever import com.vitorpamplona.amethyst.ui.actions.relays.RelayInformationDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.FeedPadding +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache +import com.vitorpamplona.ammolite.relays.RelaySetupInfo import com.vitorpamplona.quartz.encoders.Nip11RelayInformation import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt index 3db105155..a24f599c5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt @@ -47,8 +47,6 @@ import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R -import com.vitorpamplona.amethyst.service.relays.Constants -import com.vitorpamplona.amethyst.service.relays.RelayStat import com.vitorpamplona.amethyst.ui.actions.CloseButton import com.vitorpamplona.amethyst.ui.actions.SaveButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel @@ -58,6 +56,8 @@ import com.vitorpamplona.amethyst.ui.theme.MinHorzSpacer import com.vitorpamplona.amethyst.ui.theme.RowColSpacing import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.grayText +import com.vitorpamplona.ammolite.relays.Constants +import com.vitorpamplona.ammolite.relays.RelayStat @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfo.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfo.kt index be695f995..2d03d4ad7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfo.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfo.kt @@ -21,9 +21,9 @@ package com.vitorpamplona.amethyst.ui.actions.relays import androidx.compose.runtime.Immutable -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.RelayStat +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache +import com.vitorpamplona.ammolite.relays.RelayStat @Immutable data class BasicRelaySetupInfo( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoDialog.kt index cc69a83c4..134320ed0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoDialog.kt @@ -28,11 +28,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.FeatureSetType -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache import com.vitorpamplona.amethyst.service.Nip11Retriever import com.vitorpamplona.amethyst.ui.actions.RelayInfoDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.stringRes +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache @Composable fun BasicRelaySetupInfoDialog( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt index 69fb9a41a..9eea0faa9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt @@ -24,7 +24,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.Nip11CachedRetriever -import com.vitorpamplona.amethyst.service.relays.RelayStats +import com.vitorpamplona.ammolite.relays.RelayStats import com.vitorpamplona.quartz.encoders.RelayUrlFormatter import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt index 0eba7699e..8741f2cdb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt @@ -67,12 +67,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.FeatureSetType -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache import com.vitorpamplona.amethyst.service.Nip11CachedRetriever import com.vitorpamplona.amethyst.service.Nip11Retriever -import com.vitorpamplona.amethyst.service.relays.Constants -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.RelayStat import com.vitorpamplona.amethyst.ui.actions.RelayInfoDialog import com.vitorpamplona.amethyst.ui.note.RenderRelayIcon import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel @@ -91,6 +87,10 @@ import com.vitorpamplona.amethyst.ui.theme.allGoodColor import com.vitorpamplona.amethyst.ui.theme.largeRelayIconModifier import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.warningColor +import com.vitorpamplona.ammolite.relays.Constants +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache +import com.vitorpamplona.ammolite.relays.RelayStat import com.vitorpamplona.quartz.encoders.RelayUrlFormatter import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListViewModel.kt index bbd00140b..de48cb790 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListViewModel.kt @@ -23,11 +23,11 @@ package com.vitorpamplona.amethyst.ui.actions.relays import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.model.Account -import com.vitorpamplona.amethyst.model.RelaySetupInfo import com.vitorpamplona.amethyst.service.Nip11CachedRetriever -import com.vitorpamplona.amethyst.service.relays.Constants -import com.vitorpamplona.amethyst.service.relays.FeedType -import com.vitorpamplona.amethyst.service.relays.RelayStats +import com.vitorpamplona.ammolite.relays.Constants +import com.vitorpamplona.ammolite.relays.FeedType +import com.vitorpamplona.ammolite.relays.RelaySetupInfo +import com.vitorpamplona.ammolite.relays.RelayStats import com.vitorpamplona.quartz.encoders.RelayUrlFormatter import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt index 615a41e03..c41ce2c1d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt @@ -24,7 +24,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.Nip11CachedRetriever -import com.vitorpamplona.amethyst.service.relays.RelayStats +import com.vitorpamplona.ammolite.relays.RelayStats import com.vitorpamplona.quartz.encoders.RelayUrlFormatter import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt index fa4b5c086..368f5b3ee 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt @@ -49,8 +49,6 @@ import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.FeatureSetType -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache -import com.vitorpamplona.amethyst.service.relays.RelayStats import com.vitorpamplona.amethyst.ui.actions.CloseButton import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.components.ClickableEmail @@ -67,6 +65,8 @@ import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer import com.vitorpamplona.amethyst.ui.theme.StdPadding import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer import com.vitorpamplona.amethyst.ui.theme.largeRelayIconModifier +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache +import com.vitorpamplona.ammolite.relays.RelayStats import com.vitorpamplona.quartz.encoders.Nip11RelayInformation import com.vitorpamplona.quartz.events.EmptyTagList import kotlinx.collections.immutable.toImmutableList diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayUrlEditField.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayUrlEditField.kt index ded0da398..3cbe0af8a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayUrlEditField.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayUrlEditField.kt @@ -36,11 +36,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import com.vitorpamplona.amethyst.R -import com.vitorpamplona.amethyst.service.relays.RelayStat import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.Size10dp import com.vitorpamplona.amethyst.ui.theme.placeholderText +import com.vitorpamplona.ammolite.relays.RelayStat import com.vitorpamplona.quartz.encoders.RelayUrlFormatter @Composable diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt index f8faac59e..ca2a34b62 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt @@ -97,8 +97,6 @@ import com.vitorpamplona.amethyst.service.NostrSingleUserDataSource import com.vitorpamplona.amethyst.service.NostrThreadDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource import com.vitorpamplona.amethyst.service.NostrVideoDataSource -import com.vitorpamplona.amethyst.service.relays.Client -import com.vitorpamplona.amethyst.service.relays.RelayPool import com.vitorpamplona.amethyst.ui.components.LoadNote import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage import com.vitorpamplona.amethyst.ui.note.AmethystIcon @@ -138,6 +136,8 @@ import com.vitorpamplona.amethyst.ui.theme.Size22Modifier import com.vitorpamplona.amethyst.ui.theme.Size34dp import com.vitorpamplona.amethyst.ui.theme.Size40dp import com.vitorpamplona.amethyst.ui.theme.placeholderText +import com.vitorpamplona.ammolite.relays.Client +import com.vitorpamplona.ammolite.relays.RelayPool import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.ContactListEvent import com.vitorpamplona.quartz.events.MuteListEvent diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index 4202294fc..2b83b0d60 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -85,8 +85,6 @@ import com.vitorpamplona.amethyst.BuildConfig import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.FeatureSetType import com.vitorpamplona.amethyst.model.User -import com.vitorpamplona.amethyst.service.relays.RelayPool -import com.vitorpamplona.amethyst.service.relays.RelayPoolStatus import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView import com.vitorpamplona.amethyst.ui.components.ClickableText import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji @@ -110,6 +108,8 @@ import com.vitorpamplona.amethyst.ui.theme.bannerModifier import com.vitorpamplona.amethyst.ui.theme.drawerSpacing import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.profileContentHeaderModifier +import com.vitorpamplona.ammolite.relays.RelayPool +import com.vitorpamplona.ammolite.relays.RelayPoolStatus import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.ImmutableListOfLists diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt index 39a5b3dd6..c9c3bed9a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt @@ -40,7 +40,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.FeatureSetType import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache import com.vitorpamplona.amethyst.service.Nip11CachedRetriever import com.vitorpamplona.amethyst.service.Nip11Retriever import com.vitorpamplona.amethyst.ui.actions.relays.RelayInformationDialog @@ -54,6 +53,7 @@ import com.vitorpamplona.amethyst.ui.theme.Size17dp import com.vitorpamplona.amethyst.ui.theme.StdStartPadding import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.relayIconModifier +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache @Composable public fun RelayBadgesHorizontal( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt index 4d07867c4..9b2e8fd5d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserReactionsRow.kt @@ -57,7 +57,6 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledInsert import com.vitorpamplona.amethyst.ui.screen.loggedIn.showAmountAxis import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange @@ -66,6 +65,7 @@ import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size24Modifier import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.placeholderText +import com.vitorpamplona.ammolite.relays.BundledInsert import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.BaseTextNoteEvent import com.vitorpamplona.quartz.events.GenericRepostEvent diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayList.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayList.kt index 5bef0fcdb..59f0a69e3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayList.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayList.kt @@ -44,13 +44,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.model.RelayBriefInfoCache import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView import com.vitorpamplona.amethyst.ui.components.ShowMoreButton import com.vitorpamplona.amethyst.ui.note.AddRelayButton import com.vitorpamplona.amethyst.ui.note.RemoveRelayButton import com.vitorpamplona.amethyst.ui.note.getGradient import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache import com.vitorpamplona.quartz.events.RelaySetEvent import kotlinx.collections.immutable.toImmutableList diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt index cffbdf57b..e7ba98d21 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt @@ -29,7 +29,7 @@ import com.vitorpamplona.amethyst.LocalPreferences import com.vitorpamplona.amethyst.ServiceManager import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.Nip05NostrAddressVerifier -import com.vitorpamplona.amethyst.service.relays.Client +import com.vitorpamplona.ammolite.relays.Client import com.vitorpamplona.ammolite.service.HttpClientManager import com.vitorpamplona.quartz.crypto.CryptoUtils import com.vitorpamplona.quartz.crypto.KeyPair diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt index 26134adc5..d41d24623 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt @@ -32,11 +32,11 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledInsert -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter import com.vitorpamplona.amethyst.ui.dal.FeedFilter import com.vitorpamplona.amethyst.ui.dal.NotificationFeedFilter +import com.vitorpamplona.ammolite.relays.BundledInsert +import com.vitorpamplona.ammolite.relays.BundledUpdate import com.vitorpamplona.quartz.events.BadgeAwardEvent import com.vitorpamplona.quartz.events.ChannelCreateEvent import com.vitorpamplona.quartz.events.ChannelMetadataEvent diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt index c4ca09313..422bd15a2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt @@ -33,8 +33,6 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledInsert -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter import com.vitorpamplona.amethyst.ui.dal.BookmarkPrivateFeedFilter import com.vitorpamplona.amethyst.ui.dal.BookmarkPublicFeedFilter @@ -62,6 +60,8 @@ import com.vitorpamplona.amethyst.ui.dal.UserProfileConversationsFeedFilter import com.vitorpamplona.amethyst.ui.dal.UserProfileNewThreadFeedFilter import com.vitorpamplona.amethyst.ui.dal.UserProfileReportsFeedFilter import com.vitorpamplona.amethyst.ui.dal.VideoFeedFilter +import com.vitorpamplona.ammolite.relays.BundledInsert +import com.vitorpamplona.ammolite.relays.BundledUpdate import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.DeletionEvent import kotlinx.collections.immutable.ImmutableList diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt index 1465d73ea..a0db78fc0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt @@ -29,9 +29,9 @@ import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.FeedFilter import com.vitorpamplona.amethyst.ui.dal.UserProfileZapsFeedFilter +import com.vitorpamplona.ammolite.relays.BundledUpdate import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt index dafa52a53..38b5550b1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt @@ -38,11 +38,11 @@ import com.vitorpamplona.amethyst.model.RelayInfo import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.UserState import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.note.RelayCompose import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.DividerThickness import com.vitorpamplona.amethyst.ui.theme.FeedPadding +import com.vitorpamplona.ammolite.relays.BundledUpdate import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt index 438c5849b..600d8b756 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt @@ -29,9 +29,9 @@ import androidx.lifecycle.viewModelScope import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.FeedFilter import com.vitorpamplona.amethyst.ui.dal.HiddenWordsFeedFilter +import com.vitorpamplona.ammolite.relays.BundledUpdate import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt index 58a5b8b4e..252d3fdb0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt @@ -30,12 +30,12 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.dal.FeedFilter import com.vitorpamplona.amethyst.ui.dal.HiddenAccountsFeedFilter import com.vitorpamplona.amethyst.ui.dal.SpammerAccountsFeedFilter import com.vitorpamplona.amethyst.ui.dal.UserProfileFollowersFeedFilter import com.vitorpamplona.amethyst.ui.dal.UserProfileFollowsFeedFilter +import com.vitorpamplona.ammolite.relays.BundledUpdate import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index c1d0fac33..092109738 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -59,7 +59,6 @@ import com.vitorpamplona.amethyst.service.OnlineChecker import com.vitorpamplona.amethyst.service.ZapPaymentHandler import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.amethyst.ui.actions.Dao -import com.vitorpamplona.amethyst.ui.components.BundledInsert import com.vitorpamplona.amethyst.ui.components.UrlPreviewState import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.navigation.bottomNavigationItems @@ -69,6 +68,7 @@ import com.vitorpamplona.amethyst.ui.note.showAmount import com.vitorpamplona.amethyst.ui.screen.CombinedZap import com.vitorpamplona.amethyst.ui.screen.SettingsState import com.vitorpamplona.amethyst.ui.stringRes +import com.vitorpamplona.ammolite.relays.BundledInsert import com.vitorpamplona.ammolite.service.HttpClientManager import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt index 04587f108..b2f8e7b60 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt @@ -76,7 +76,6 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.service.checkNotInMainThread -import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.note.AboutDisplay import com.vitorpamplona.amethyst.ui.note.ChannelName import com.vitorpamplona.amethyst.ui.note.ClearTextIcon @@ -92,6 +91,7 @@ import com.vitorpamplona.amethyst.ui.theme.FeedPadding import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.StdTopPadding import com.vitorpamplona.amethyst.ui.theme.placeholderText +import com.vitorpamplona.ammolite.relays.BundledUpdate import com.vitorpamplona.quartz.events.findHashtags import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.FlowPreview