From 8d88efd27b5d1d3b2731ce8fae9dc225210a1d2c Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 3 Jul 2024 11:06:02 -0400 Subject: [PATCH] Migrating Lint to 1.3.1 --- .../amethyst/ImageUploadTesting.kt | 18 +- .../amethyst/ThreadAssemblerTest.kt | 6 +- .../notifications/PushDistributorHandler.kt | 11 +- .../notifications/PushMessageReceiver.kt | 5 +- .../material3/pullrefresh/PullRefresh.kt | 4 +- .../PullRefreshIndicatorTransform.kt | 3 +- .../com/vitorpamplona/amethyst/Amethyst.kt | 23 +- .../amethyst/EncryptedStorage.kt | 7 +- .../amethyst/model/AntiSpamFilter.kt | 13 +- .../vitorpamplona/amethyst/model/Channel.kt | 73 ++-- .../vitorpamplona/amethyst/model/Chatroom.kt | 6 +- .../amethyst/model/HashtagIcon.kt | 5 +- .../vitorpamplona/amethyst/model/MiniFhir.kt | 4 +- .../amethyst/model/ThreadAssembler.kt | 31 +- .../amethyst/model/ThreadLevelCalculator.kt | 15 +- .../amethyst/model/UrlCachedPreviewer.kt | 3 +- .../observables/LatestByKindAndAuthor.kt | 43 ++- .../model/observables/LatestByKindWithETag.kt | 26 +- .../service/AmethystNostrDataSource.kt | 4 +- .../amethyst/service/BlurHashImage.kt | 7 +- .../amethyst/service/EmojiUtils.kt | 4 +- .../amethyst/service/FileHeader.kt | 8 +- .../amethyst/service/LocationUtil.kt | 8 +- .../amethyst/service/MainThreadChecker.kt | 4 +- .../amethyst/service/Nip96MediaServers.kt | 8 +- .../amethyst/service/OnlineCheck.kt | 15 +- .../amethyst/service/PackageUtils.kt | 9 +- .../amethyst/service/lnurl/CachedLnInvoice.kt | 9 +- .../service/ots/OkHttpBlockstreamExplorer.kt | 6 +- .../service/ots/OkHttpCalendarAsyncSubmit.kt | 8 +- .../service/ots/OkHttpCalendarBuilder.kt | 8 +- .../amethyst/service/playback/VideoCache.kt | 6 +- .../playback/VideoViewedPositionCache.kt | 4 +- .../playback/WssDataStreamCollector.kt | 8 +- .../service/playback/WssStreamDataSource.kt | 21 +- .../service/previews/BahaUrlPreview.kt | 5 +- .../amethyst/service/previews/UrlInfoItem.kt | 8 +- .../service/previews/UrlPreviewUtils.kt | 15 +- .../amethyst/service/relays/EOSE.kt | 12 +- .../service/tts/TextToSpeechHelper.kt | 240 ++++++------ .../amethyst/ui/actions/ImageSaver.kt | 3 +- .../ui/actions/UrlUserTagTransformation.kt | 13 +- .../relays/BasicRelaySetupInfoModel.kt | 15 +- .../ui/actions/relays/DMRelayListViewModel.kt | 4 +- .../actions/relays/LocalRelayListViewModel.kt | 4 +- .../actions/relays/Nip65RelayListViewModel.kt | 30 +- .../relays/PrivateOutboxRelayListViewModel.kt | 4 +- .../relays/SearchRelayListViewModel.kt | 4 +- .../ui/components/AudioWaveformReadOnly.kt | 13 +- .../amethyst/ui/components/GenericLoadable.kt | 8 +- .../amethyst/ui/components/SplitItem.kt | 6 +- .../amethyst/ui/components/UrlPreviewState.kt | 8 +- .../ui/dal/BookmarkPrivateFeedFilter.kt | 8 +- .../ui/dal/BookmarkPublicFeedFilter.kt | 8 +- .../amethyst/ui/dal/ChannelFeedFilter.kt | 23 +- .../amethyst/ui/dal/ChatroomFeedFilter.kt | 14 +- .../ui/dal/ChatroomListKnownFeedFilter.kt | 24 +- .../ui/dal/ChatroomListNewFeedFilter.kt | 12 +- .../amethyst/ui/dal/CommunityFeedFilter.kt | 30 +- .../amethyst/ui/dal/DiscoverChatFeedFilter.kt | 25 +- .../ui/dal/DiscoverCommunityFeedFilter.kt | 60 ++- .../amethyst/ui/dal/DiscoverLiveFeedFilter.kt | 25 +- .../ui/dal/DiscoverMarketplaceFeedFilter.kt | 26 +- .../ui/dal/DiscoverNIP89FeedFilter.kt | 31 +- .../amethyst/ui/dal/DraftEventsFeedFilter.kt | 17 +- .../amethyst/ui/dal/FilterByListParams.kt | 5 +- .../amethyst/ui/dal/GeoHashFeedFilter.kt | 26 +- .../amethyst/ui/dal/HashtagFeedFilter.kt | 30 +- .../ui/dal/HomeConversationsFeedFilter.kt | 35 +- .../ui/dal/HomeNewThreadFeedFilter.kt | 40 +- .../NIP90ContentDiscoveryResponseFilter.kt | 30 +- .../amethyst/ui/dal/NotificationFeedFilter.kt | 36 +- .../amethyst/ui/dal/ThreadFeedFilter.kt | 26 +- ...UserProfileAppRecommendationsFeedFilter.kt | 20 +- .../ui/dal/UserProfileBookmarksFeedFilter.kt | 9 +- .../dal/UserProfileConversationsFeedFilter.kt | 31 +- .../ui/dal/UserProfileFollowersFeedFilter.kt | 14 +- .../ui/dal/UserProfileFollowsFeedFilter.kt | 9 +- .../ui/dal/UserProfileNewThreadFeedFilter.kt | 27 +- .../ui/dal/UserProfileReportsFeedFilter.kt | 25 +- .../ui/dal/UserProfileZapsFeedFilter.kt | 12 +- .../amethyst/ui/dal/VideoFeedFilter.kt | 26 +- .../amethyst/ui/navigation/AppNavigation.kt | 7 +- .../amethyst/ui/navigation/RouteMaker.kt | 16 +- .../vitorpamplona/amethyst/ui/note/Loaders.kt | 3 +- .../amethyst/ui/note/PollNoteViewModel.kt | 24 +- .../amethyst/ui/note/PubKeyFormatter.kt | 8 +- .../amethyst/ui/qrcode/QrCodeDrawer.kt | 62 ++- .../amethyst/ui/screen/AccountState.kt | 8 +- .../amethyst/ui/screen/CardFeedState.kt | 52 +-- .../amethyst/ui/screen/CardFeedViewModel.kt | 53 ++- .../amethyst/ui/screen/FeedState.kt | 4 +- .../amethyst/ui/screen/FeedViewModel.kt | 360 ++++++++++-------- .../amethyst/ui/screen/LnZapFeedState.kt | 13 +- .../amethyst/ui/screen/LnZapFeedViewModel.kt | 17 +- .../amethyst/ui/screen/RelayFeedView.kt | 4 +- .../amethyst/ui/screen/StringFeedState.kt | 8 +- .../amethyst/ui/screen/StringFeedViewModel.kt | 19 +- .../amethyst/ui/screen/UserFeedState.kt | 8 +- .../amethyst/ui/screen/UserFeedViewModel.kt | 64 ++-- .../ui/screen/loggedIn/HashtagScreen.kt | 6 +- .../ui/screen/loggedIn/NotificationScreen.kt | 28 +- .../service/lang/LanguageTranslatorService.kt | 19 +- .../PushNotificationReceiverService.kt | 5 +- .../com/vitorpamplona/amethyst/CharsetTest.kt | 3 +- .../amethyst/NewMessageTaggerKeyParseTest.kt | 12 +- .../amethyst/service/Nip96Test.kt | 11 +- .../ammolite/relays/Constants.kt | 4 +- .../vitorpamplona/ammolite/relays/EOSETime.kt | 8 +- .../ammolite/relays/NostrDataSource.kt | 14 +- .../ammolite/relays/RelayPool.kt | 16 +- .../ammolite/relays/RelayStats.kt | 4 +- .../ammolite/service/HttpClientManager.kt | 16 +- .../ammolite/service/MainThreadChecker.kt | 4 +- .../benchmark/MetaTagsParserBenchmark.kt | 7 +- .../benchmark/RichTextParserBenchmark.kt | 36 +- .../quartz/benchmark/BechBenchmark.kt | 3 +- .../quartz/benchmark/ContainsBenchmark.kt | 3 +- .../quartz/benchmark/HexBenchmark.kt | 32 +- build.gradle | 2 +- .../commons/richtext/RichTextParserTest.kt | 12 +- .../commons/compose/AsyncCachedState.kt | 18 +- .../amethyst/commons/compose/CachedState.kt | 18 +- .../amethyst/commons/data/DeletionIndex.kt | 5 +- .../amethyst/commons/data/LargeCache.kt | 58 ++- .../amethyst/commons/hashtags/Amethyst.kt | 3 +- .../amethyst/commons/hashtags/Btc.kt | 3 +- .../amethyst/commons/hashtags/Cashu.kt | 3 +- .../amethyst/commons/hashtags/Coffee.kt | 3 +- .../amethyst/commons/hashtags/Footstr.kt | 3 +- .../amethyst/commons/hashtags/Grownostr.kt | 3 +- .../amethyst/commons/hashtags/Lightning.kt | 3 +- .../amethyst/commons/hashtags/Mate.kt | 3 +- .../amethyst/commons/hashtags/Nostr.kt | 3 +- .../amethyst/commons/hashtags/Plebs.kt | 3 +- .../amethyst/commons/hashtags/Skull.kt | 3 +- .../amethyst/commons/hashtags/Tunestr.kt | 3 +- .../amethyst/commons/hashtags/Weed.kt | 3 +- .../amethyst/commons/hashtags/Zap.kt | 3 +- .../commons/preview/BlurHashDecoder.kt | 14 +- .../commons/preview/BlurHashDecoderOld.kt | 3 +- .../commons/preview/MetaTagsParser.kt | 14 +- .../richtext/RichTextParserSegments.kt | 83 +++- .../commons/robohash/RobohashAssembler.kt | 30 +- .../quartz/crypto/nip06/Bip39KeyPathTest.kt | 6 +- .../quartz/crypto/nip06/Bip39MnemonicsTest.kt | 5 +- .../vitorpamplona/quartz/crypto/KeyPair.kt | 4 +- .../quartz/crypto/SharedKeyCache.kt | 4 +- .../quartz/crypto/nip06/Bip39KeyPath.kt | 16 +- .../com/vitorpamplona/quartz/encoders/ATag.kt | 34 +- .../quartz/encoders/Bech32Util.kt | 4 +- .../vitorpamplona/quartz/encoders/HexUtils.kt | 13 +- .../quartz/encoders/LnInvoiceUtil.kt | 13 +- .../vitorpamplona/quartz/encoders/Lud06.kt | 5 +- .../quartz/encoders/Nip01Serializer.kt | 11 +- .../quartz/encoders/Nip30CustomEmoji.kt | 14 +- .../quartz/encoders/Nip47WalletConnect.kt | 6 +- .../quartz/encoders/Nip54InlineMetadata.kt | 24 +- .../quartz/encoders/Nip92MediaAttachments.kt | 31 +- .../quartz/encoders/RelayUrlFormatter.kt | 14 +- .../com/vitorpamplona/quartz/encoders/Tlv.kt | 10 +- .../quartz/events/AdvertisedRelayListEvent.kt | 69 ++-- .../quartz/events/AppDefinitionEvent.kt | 25 +- .../quartz/events/AudioHeaderEvent.kt | 3 +- .../quartz/events/AudioTrackEvent.kt | 8 +- .../quartz/events/BadgeProfilesEvent.kt | 4 +- .../quartz/events/BaseTextNoteEvent.kt | 9 +- .../quartz/events/ChannelCreateEvent.kt | 28 +- .../quartz/events/ChannelHideMessageEvent.kt | 3 +- .../quartz/events/ChannelListEvent.kt | 16 +- .../quartz/events/ChannelMessageEvent.kt | 3 +- .../quartz/events/ChannelMetadataEvent.kt | 3 +- .../quartz/events/ChannelMuteUserEvent.kt | 3 +- .../events/ChatMessageRelayListEvent.kt | 36 +- .../quartz/events/ClassifiedsEvent.kt | 10 +- .../quartz/events/CommunityListEvent.kt | 16 +- .../events/CommunityPostApprovalEvent.kt | 3 +- .../quartz/events/ContactListEvent.kt | 43 +-- .../quartz/events/DeletionEvent.kt | 22 +- .../vitorpamplona/quartz/events/DraftEvent.kt | 12 +- .../quartz/events/EmojiPackEvent.kt | 9 +- .../quartz/events/FileHeaderEvent.kt | 5 +- .../quartz/events/FileStorageEvent.kt | 9 +- .../quartz/events/GeneralListEvent.kt | 41 +- .../vitorpamplona/quartz/events/LnZapEvent.kt | 15 +- .../quartz/events/LnZapPaymentRequestEvent.kt | 20 +- .../events/LnZapPaymentResponseEvent.kt | 22 +- .../quartz/events/LnZapRequestEvent.kt | 4 +- .../quartz/events/LongTextNoteEvent.kt | 3 +- .../quartz/events/MuteListEvent.kt | 28 +- .../quartz/events/NIP17Factory.kt | 5 +- .../quartz/events/NIP90StatusEvent.kt | 20 +- .../vitorpamplona/quartz/events/OtsEvent.kt | 21 +- .../quartz/events/PrivateDmEvent.kt | 24 +- .../quartz/events/ReactionEvent.kt | 8 +- .../quartz/events/SearchRelayListEvent.kt | 36 +- .../quartz/events/TextNoteEvent.kt | 21 +- .../quartz/events/WikiNoteEvent.kt | 3 +- .../quartz/signers/NostrSigner.kt | 4 +- .../quartz/signers/NostrSignerExternal.kt | 6 +- .../quartz/encoders/NIP19ParserTest.kt | 49 ++- 201 files changed, 1858 insertions(+), 1814 deletions(-) diff --git a/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt b/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt index bd67a381dd..d8fe4b70a4 100644 --- a/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt +++ b/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt @@ -75,9 +75,21 @@ class ImageUploadTesting { ) val url = result.tags!!.first { it[0] == "url" }.get(1) - val size = result.tags!!.firstOrNull { it[0] == "size" }?.get(1)?.ifBlank { null } - val dim = result.tags!!.firstOrNull { it[0] == "dim" }?.get(1)?.ifBlank { null } - val hash = result.tags!!.firstOrNull { it[0] == "x" }?.get(1)?.ifBlank { null } + val size = + result.tags!! + .firstOrNull { it[0] == "size" } + ?.get(1) + ?.ifBlank { null } + val dim = + result.tags!! + .firstOrNull { it[0] == "dim" } + ?.get(1) + ?.ifBlank { null } + val hash = + result.tags!! + .firstOrNull { it[0] == "x" } + ?.get(1) + ?.ifBlank { null } val contentType = result.tags!!.first { it[0] == "m" }.get(1) val ox = result.tags!!.first { it[0] == "ox" }.get(1) diff --git a/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ThreadAssemblerTest.kt b/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ThreadAssemblerTest.kt index 39cf697111..cf43f60208 100644 --- a/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ThreadAssemblerTest.kt +++ b/amethyst/src/androidTest/java/com/vitorpamplona/amethyst/ThreadAssemblerTest.kt @@ -79,8 +79,7 @@ class ThreadAssemblerTest { {"id":"512962dbada5fd5015fc727a107d5c3f569662de67eab8e5da5a8065012cf11e","pubkey":"7fa56f5d6962ab1e3cd424e758c3002b8665f7b0d8dcee9fe9e288d7751ac194","created_at":1688194800,"kind":1,"tags":[["a","30023:6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93:1680612926599","","root"],["e","87a5bd25aa084cefb3357fc9c2a5b327254fab35fdd7b2d4bd0acddc63d0abe8","","reply"]],"content":"another one","sig":"b4bc4d8206a08de0a918043129b27c8863d17f60e4f58b4d2b535326625870d32640b04f247eb9eb5df1d62fe98c8e1b0341bdd119655553488300ec9d5b4036"}, {"id":"ce6e32e3e17b6901d2cc70b60f3743e24f885bb6e9da6d88cff516079eac1883","pubkey":"726a1e261cc6474674e8285e3951b3bb139be9a773d1acf49dc868db861a1c11","created_at":1688234921,"kind":1,"tags":[["a","30023:6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93:1680612926599","","root"],["e","512962dbada5fd5015fc727a107d5c3f569662de67eab8e5da5a8065012cf11e","","reply"]],"content":"yet another one, testing 0.0.3","sig":"13bd41c4029c6a7ee41cb03d12e831e9e9b6e14d43a61c78a72657070b45385ba2ce98e8121049fbcbdb7b2dd777c36c7867ba70b5e6a4798a9b866910ae5b62"} ] - """ - .trimIndent() + """.trimIndent() val header = """ @@ -111,8 +110,7 @@ class ThreadAssemblerTest { ["p","b9e76546ba06456ed301d9e52bc49fa48e70a6bf2282be7a1ae72947612023dc"] ] } - """ - .trimIndent() + """.trimIndent() @Test fun threadOrderTest() = diff --git a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt index 3a33a77f03..c928185c20 100644 --- a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt +++ b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt @@ -55,15 +55,11 @@ object PushDistributorHandler : PushDistributorActions { endpointInternal = "" } - override fun getSavedDistributor(): String { - return unifiedPush.getSavedDistributor(appContext) ?: "" - } + override fun getSavedDistributor(): String = unifiedPush.getSavedDistributor(appContext) ?: "" fun savedDistributorExists(): Boolean = getSavedDistributor().isNotEmpty() - override fun getInstalledDistributors(): List { - return unifiedPush.getDistributors(appContext) - } + override fun getInstalledDistributors(): List = unifiedPush.getDistributors(appContext) fun formattedDistributorNames(): List { val distributorsArray = getInstalledDistributors().toTypedArray() @@ -87,8 +83,7 @@ object PushDistributorHandler : PushDistributorActions { it } as String - } - .toTypedArray() + }.toTypedArray() return distributorsNameArray.toList() } diff --git a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt index b6313df505..6839761ddb 100644 --- a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt +++ b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt @@ -126,8 +126,7 @@ class PushMessageReceiver : MessagingReceiver() { pushHandler.removeEndpoint() } - fun notificationManager(): NotificationManager { - return ContextCompat.getSystemService(appContext, NotificationManager::class.java) + fun notificationManager(): NotificationManager = + ContextCompat.getSystemService(appContext, NotificationManager::class.java) as NotificationManager - } } diff --git a/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefresh.kt b/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefresh.kt index 3e750ff233..5594a8418f 100644 --- a/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefresh.kt +++ b/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefresh.kt @@ -118,7 +118,5 @@ private class PullRefreshNestedScrollConnection( else -> Offset.Zero } - override suspend fun onPreFling(available: Velocity): Velocity { - return Velocity(0f, onRelease(available.y)) - } + override suspend fun onPreFling(available: Velocity): Velocity = Velocity(0f, onRelease(available.y)) } diff --git a/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTransform.kt b/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTransform.kt index 68bfcd489c..6e8b9853ca 100644 --- a/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTransform.kt +++ b/amethyst/src/main/java/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTransform.kt @@ -63,8 +63,7 @@ fun Modifier.pullRefreshIndicatorTransform( ) { this@drawWithContent.drawContent() } - } - .graphicsLayer { + }.graphicsLayer { translationY = state.position - size.height if (scale && !state.refreshing) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt index 1199f184b5..152bfb9a13 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt @@ -61,7 +61,8 @@ class Amethyst : Application() { } val coilCache: DiskCache by lazy { - DiskCache.Builder() + DiskCache + .Builder() .directory(applicationContext.safeCacheDir.resolve("image_cache")) .maxSizePercent(0.2) .maximumMaxSizeBytes(500L * 1024 * 1024) // 250MB @@ -77,10 +78,18 @@ class Amethyst : Application() { if (BuildConfig.DEBUG) { StrictMode.setThreadPolicy( - ThreadPolicy.Builder().detectAll().penaltyLog().build(), + ThreadPolicy + .Builder() + .detectAll() + .penaltyLog() + .build(), ) StrictMode.setVmPolicy( - VmPolicy.Builder().detectAll().penaltyLog().build(), + VmPolicy + .Builder() + .detectAll() + .penaltyLog() + .build(), ) } @@ -94,13 +103,9 @@ class Amethyst : Application() { } } - fun imageLoaderBuilder(): ImageLoader.Builder { - return ImageLoader.Builder(applicationContext).diskCache { coilCache } - } + fun imageLoaderBuilder(): ImageLoader.Builder = ImageLoader.Builder(applicationContext).diskCache { coilCache } - fun encryptedStorage(npub: String? = null): EncryptedSharedPreferences { - return EncryptedStorage.preferences(instance, npub) - } + fun encryptedStorage(npub: String? = null): EncryptedSharedPreferences = EncryptedStorage.preferences(instance, npub) companion object { lateinit var instance: Amethyst diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt index 0768bfec1d..7a90f89ae6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt @@ -29,16 +29,15 @@ class EncryptedStorage { private const val PREFERENCES_NAME = "secret_keeper" // returns the preferences for each account or a global file if null. - fun prefsFileName(npub: String? = null): String { - return if (npub == null) PREFERENCES_NAME else "${PREFERENCES_NAME}_$npub" - } + fun prefsFileName(npub: String? = null): String = if (npub == null) PREFERENCES_NAME else "${PREFERENCES_NAME}_$npub" fun preferences( applicationContext: Context, npub: String? = null, ): EncryptedSharedPreferences { val masterKey: MasterKey = - MasterKey.Builder(applicationContext, MasterKey.DEFAULT_MASTER_KEY_ALIAS) + MasterKey + .Builder(applicationContext, MasterKey.DEFAULT_MASTER_KEY_ALIAS) .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) .build() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt index 2f0911488e..b68584e43a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt @@ -33,7 +33,10 @@ import com.vitorpamplona.quartz.encoders.Nip19Bech32 import com.vitorpamplona.quartz.events.Event import kotlinx.coroutines.Dispatchers -data class Spammer(val pubkeyHex: HexKey, var duplicatedMessages: Set) +data class Spammer( + val pubkeyHex: HexKey, + var duplicatedMessages: Set, +) class AntiSpamFilter { val recentMessages = LruCache(1000) @@ -109,7 +112,9 @@ class AntiSpamFilter { } @Stable -class AntiSpamLiveData(val cache: AntiSpamFilter) : LiveData(AntiSpamState(cache)) { +class AntiSpamLiveData( + val cache: AntiSpamFilter, +) : LiveData(AntiSpamState(cache)) { // Refreshes observers in batches. private val bundler = BundledUpdate(300, Dispatchers.IO) @@ -126,4 +131,6 @@ class AntiSpamLiveData(val cache: AntiSpamFilter) : LiveData(Anti } } -class AntiSpamState(val cache: AntiSpamFilter) +class AntiSpamState( + val cache: AntiSpamFilter, +) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt index 2c12a5147a..b0b8a3fe49 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt @@ -37,7 +37,9 @@ import com.vitorpamplona.quartz.events.LiveActivitiesEvent import kotlinx.coroutines.Dispatchers @Stable -class PublicChatChannel(idHex: String) : Channel(idHex) { +class PublicChatChannel( + idHex: String, +) : Channel(idHex) { var info = ChannelCreateEvent.ChannelData(null, null, null) fun updateChannelInfo( @@ -49,26 +51,22 @@ class PublicChatChannel(idHex: String) : Channel(idHex) { super.updateChannelInfo(creator, updatedAt) } - override fun toBestDisplayName(): String { - return info.name ?: super.toBestDisplayName() - } + override fun toBestDisplayName(): String = info.name ?: super.toBestDisplayName() - override fun summary(): String? { - return info.about - } + override fun summary(): String? = info.about override fun profilePicture(): String? { if (info.picture.isNullOrBlank()) return super.profilePicture() return info.picture ?: super.profilePicture() } - override fun anyNameStartsWith(prefix: String): Boolean { - return listOfNotNull(info.name, info.about).filter { it.contains(prefix, true) }.isNotEmpty() - } + override fun anyNameStartsWith(prefix: String): Boolean = listOfNotNull(info.name, info.about).filter { it.contains(prefix, true) }.isNotEmpty() } @Stable -class LiveActivitiesChannel(val address: ATag) : Channel(address.toTag()) { +class LiveActivitiesChannel( + val address: ATag, +) : Channel(address.toTag()) { var info: LiveActivitiesEvent? = null override fun idNote() = address.toNAddr() @@ -86,27 +84,22 @@ class LiveActivitiesChannel(val address: ATag) : Channel(address.toTag()) { super.updateChannelInfo(creator, updatedAt) } - override fun toBestDisplayName(): String { - return info?.title() ?: super.toBestDisplayName() - } + override fun toBestDisplayName(): String = info?.title() ?: super.toBestDisplayName() - override fun summary(): String? { - return info?.summary() - } + override fun summary(): String? = info?.summary() - override fun profilePicture(): String? { - return info?.image()?.ifBlank { null } - } + override fun profilePicture(): String? = info?.image()?.ifBlank { null } - override fun anyNameStartsWith(prefix: String): Boolean { - return listOfNotNull(info?.title(), info?.summary()) + override fun anyNameStartsWith(prefix: String): Boolean = + listOfNotNull(info?.title(), info?.summary()) .filter { it.contains(prefix, true) } .isNotEmpty() - } } @Stable -abstract class Channel(val idHex: String) { +abstract class Channel( + val idHex: String, +) { var creator: User? = null var updatedMetadataAt: Long = 0 val notes = LargeCache() @@ -118,21 +111,13 @@ abstract class Channel(val idHex: String) { open fun idDisplayNote() = idNote().toShortenHex() - open fun toBestDisplayName(): String { - return idDisplayNote() - } + open fun toBestDisplayName(): String = idDisplayNote() - open fun summary(): String? { - return null - } + open fun summary(): String? = null - open fun creatorName(): String? { - return creator?.toBestDisplayName() - } + open fun creatorName(): String? = creator?.toBestDisplayName() - open fun profilePicture(): String? { - return creator?.info?.banner - } + open fun profilePicture(): String? = creator?.info?.banner open fun updateChannelInfo( creator: User, @@ -167,10 +152,10 @@ abstract class Channel(val idHex: String) { fun pruneOldAndHiddenMessages(account: Account): Set { val important = - notes.filter { key, it -> - it.author?.let { author -> account.isHidden(author) } == false - } - .sortedWith(DefaultFeedOrder) + notes + .filter { key, it -> + it.author?.let { author -> account.isHidden(author) } == false + }.sortedWith(DefaultFeedOrder) .take(500) .toSet() @@ -182,7 +167,9 @@ abstract class Channel(val idHex: String) { } } -class ChannelLiveData(val channel: Channel) : LiveData(ChannelState(channel)) { +class ChannelLiveData( + val channel: Channel, +) : LiveData(ChannelState(channel)) { // Refreshes observers in batches. private val bundler = BundledUpdate(300, Dispatchers.IO) @@ -208,4 +195,6 @@ class ChannelLiveData(val channel: Channel) : LiveData(ChannelStat } } -class ChannelState(val channel: Channel) +class ChannelState( + val channel: Channel, +) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Chatroom.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Chatroom.kt index f986f1fe12..63e3094ba9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Chatroom.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Chatroom.kt @@ -26,7 +26,7 @@ import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.utils.TimeUtils @Stable -class Chatroom() { +class Chatroom { var authors: Set = setOf() var roomMessages: Set = setOf() var subject: String? = null @@ -72,9 +72,7 @@ class Chatroom() { } } - fun senderIntersects(keySet: Set): Boolean { - return authors.any { it.pubkeyHex in keySet } - } + fun senderIntersects(keySet: Set): Boolean = authors.any { it.pubkeyHex in keySet } fun pruneMessagesToTheLatestOnly(): Set { val sorted = roomMessages.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/HashtagIcon.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/HashtagIcon.kt index 536b969466..a274190810 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/HashtagIcon.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/HashtagIcon.kt @@ -68,8 +68,8 @@ fun RenderHashTagIcons() { } } -fun checkForHashtagWithIcon(tag: String): HashtagIcon? { - return when (tag.lowercase()) { +fun checkForHashtagWithIcon(tag: String): HashtagIcon? = + when (tag.lowercase()) { "₿itcoin", "bitcoin", "btc", "timechain", "bitcoiner", "bitcoiners" -> bitcoin "nostr", "nostrich", "nostriches", "thenostr" -> nostr "lightning", "lightningnetwork" -> lightning @@ -86,7 +86,6 @@ fun checkForHashtagWithIcon(tag: String): HashtagIcon? { "weed", "weedstr", "420", "cannabis", "marijuana" -> weed else -> null } -} val bitcoin = HashtagIcon(CustomHashTagIcons.Btc, "Bitcoin", Modifier.padding(start = 1.dp, bottom = 1.dp, top = 1.dp)) val nostr = HashtagIcon(CustomHashTagIcons.Nostr, "Nostr", Modifier.padding(start = 1.dp, bottom = 1.dp, top = 1.dp)) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/MiniFhir.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/MiniFhir.kt index 6bf60d1560..e770d9d6c7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/MiniFhir.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/MiniFhir.kt @@ -66,9 +66,7 @@ class HumanName( var family: String? = null, var given: ArrayList = arrayListOf(), ) { - fun assembleName(): String { - return given.joinToString(" ") + " " + family - } + fun assembleName(): String = given.joinToString(" ") + " " + family } class Bundle( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt index d8bfb83f0a..8694a0825a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt @@ -62,8 +62,7 @@ class ThreadAssembler { } else { null } - } - ?.filterNotNull() + }?.filterNotNull() if (roots != null && roots.isNotEmpty()) { return roots[0] @@ -148,9 +147,7 @@ class OnlyLatestVersionSet : MutableSet { } } - override fun addAll(elements: Collection): Boolean { - return elements.map { add(it) }.any() - } + override fun addAll(elements: Collection): Boolean = elements.map { add(it) }.any() override val size: Int get() = set.size @@ -160,29 +157,17 @@ class OnlyLatestVersionSet : MutableSet { map.clear() } - override fun isEmpty(): Boolean { - return set.isEmpty() - } + override fun isEmpty(): Boolean = set.isEmpty() - override fun containsAll(elements: Collection): Boolean { - return set.containsAll(elements) - } + override fun containsAll(elements: Collection): Boolean = set.containsAll(elements) - override fun contains(element: Note): Boolean { - return set.contains(element) - } + override fun contains(element: Note): Boolean = set.contains(element) - override fun iterator(): MutableIterator { - return set.iterator() - } + override fun iterator(): MutableIterator = set.iterator() - override fun retainAll(elements: Collection): Boolean { - return set.retainAll(elements) - } + override fun retainAll(elements: Collection): Boolean = set.retainAll(elements) - override fun removeAll(elements: Collection): Boolean { - return elements.map { remove(it) }.any() - } + override fun removeAll(elements: Collection): Boolean = elements.map { remove(it) }.any() override fun remove(element: Note): Boolean { element.address()?.let { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadLevelCalculator.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadLevelCalculator.kt index 0bc7518b6c..3c86c6e979 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadLevelCalculator.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/ThreadLevelCalculator.kt @@ -27,16 +27,20 @@ import java.time.Instant import java.time.ZoneId import java.time.format.DateTimeFormatter -data class LevelSignature(val signature: String, val createdAt: Long?, val author: User?) +data class LevelSignature( + val signature: String, + val createdAt: Long?, + val author: User?, +) object ThreadLevelCalculator { val levelFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd-HH:mm:ss") - private fun formattedDateTime(timestamp: Long): String { - return Instant.ofEpochSecond(timestamp) + private fun formattedDateTime(timestamp: Long): String = + Instant + .ofEpochSecond(timestamp) .atZone(ZoneId.systemDefault()) .format(levelFormatter) - } /** * This method caches signatures during each execution to avoid recalculation in longer threads @@ -76,8 +80,7 @@ object ThreadLevelCalculator { accountFollowingSet, now, ).apply { cachedSignatures.put(it, this) } - } - .maxByOrNull { it.signature.length } + }.maxByOrNull { it.signature.length } ) val parentSignature = parent?.signature?.removeSuffix(";") ?: "" diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt index 79c51f8017..466726a867 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt @@ -74,7 +74,6 @@ object UrlCachedPreviewer { onReady(state) } }, - ) - .fetchUrlPreview() + ).fetchUrlPreview() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindAndAuthor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindAndAuthor.kt index 41fb728963..996e4fb518 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindAndAuthor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindAndAuthor.kt @@ -27,7 +27,10 @@ import com.vitorpamplona.quartz.events.Event import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -class LatestByKindAndAuthor(private val kind: Int, private val pubkey: String) { +class LatestByKindAndAuthor( + private val kind: Int, + private val pubkey: String, +) { private val _latest = MutableStateFlow(null) val latest = _latest.asStateFlow() @@ -41,30 +44,30 @@ class LatestByKindAndAuthor(private val kind: Int, private val pubkey } } - fun canDelete(): Boolean { - return _latest.subscriptionCount.value == 0 - } + fun canDelete(): Boolean = _latest.subscriptionCount.value == 0 suspend fun init() { val latestNote = if ((kind in 10000..19999) || (kind in 30000..39999)) { - LocalCache.addressables.maxOrNullOf( - filter = { idHex: String, note: AddressableNote -> - note.event?.let { - it.kind() == kind && it.pubKey() == pubkey - } == true - }, - comparator = CreatedAtComparatorAddresses, - )?.event as? T + LocalCache.addressables + .maxOrNullOf( + filter = { idHex: String, note: AddressableNote -> + note.event?.let { + it.kind() == kind && it.pubKey() == pubkey + } == true + }, + comparator = CreatedAtComparatorAddresses, + )?.event as? T } else { - LocalCache.notes.maxOrNullOf( - filter = { idHex: String, note: Note -> - note.event?.let { - it.kind() == kind && it.pubKey() == pubkey - } == true - }, - comparator = CreatedAtComparator, - )?.event as? T + LocalCache.notes + .maxOrNullOf( + filter = { idHex: String, note: Note -> + note.event?.let { + it.kind() == kind && it.pubKey() == pubkey + } == true + }, + comparator = CreatedAtComparator, + )?.event as? T } _latest.tryEmit(latestNote) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindWithETag.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindWithETag.kt index 30796daa01..4b5af6888a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindWithETag.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/observables/LatestByKindWithETag.kt @@ -26,7 +26,10 @@ import com.vitorpamplona.quartz.events.Event import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -class LatestByKindWithETag(private val kind: Int, private val eTag: String) { +class LatestByKindWithETag( + private val kind: Int, + private val eTag: String, +) { private val _latest = MutableStateFlow(null) val latest = _latest.asStateFlow() @@ -40,20 +43,19 @@ class LatestByKindWithETag(private val kind: Int, private val eTag: S } } - fun canDelete(): Boolean { - return _latest.subscriptionCount.value == 0 - } + fun canDelete(): Boolean = _latest.subscriptionCount.value == 0 suspend fun init() { val latestNote = - LocalCache.notes.maxOrNullOf( - filter = { idHex: String, note: Note -> - note.event?.let { - it.kind() == kind && it.isTaggedEvent(eTag) - } == true - }, - comparator = CreatedAtComparator, - )?.event as? T + LocalCache.notes + .maxOrNullOf( + filter = { idHex: String, note: Note -> + note.event?.let { + it.kind() == kind && it.isTaggedEvent(eTag) + } == true + }, + comparator = CreatedAtComparator, + )?.event as? T _latest.tryEmit(latestNote) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt index 244d60a1fd..99e7d12b23 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/AmethystNostrDataSource.kt @@ -26,7 +26,9 @@ 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) { +abstract class AmethystNostrDataSource( + debugName: String, +) : NostrDataSource(debugName) { override fun consume( event: Event, relay: Relay, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt index 412289fbbe..b87e2f570e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt @@ -59,9 +59,7 @@ class BlurHashFetcher( data: Uri, options: Options, imageLoader: ImageLoader, - ): Fetcher { - return BlurHashFetcher(options, data) - } + ): Fetcher = BlurHashFetcher(options, data) } } @@ -72,7 +70,8 @@ object BlurHashRequester { ): ImageRequest { val encodedMessage = URLEncoder.encode(message, "utf-8") - return ImageRequest.Builder(context) + return ImageRequest + .Builder(context) .data("bluehash:$encodedMessage") .fetcherFactory(BlurHashFetcher.Factory) .build() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/EmojiUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/EmojiUtils.kt index 8f1e1ab60a..c47a21b0d6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/EmojiUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/EmojiUtils.kt @@ -22,9 +22,7 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.quartz.events.ImmutableListOfLists -fun String.isUTF16Char(pos: Int): Boolean { - return Character.charCount(this.codePointAt(pos)) == 2 -} +fun String.isUTF16Char(pos: Int): Boolean = Character.charCount(this.codePointAt(pos)) == 2 fun String.firstFullCharOld(): String { return when (this.length) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/FileHeader.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/FileHeader.kt index cdb33e6d61..1fc2400a2e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/FileHeader.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/FileHeader.kt @@ -236,10 +236,10 @@ fun MediaMetadataRetriever.prepareVideoHeight(): Int? { } } -class ByteArrayMediaDataSource(var imageData: ByteArray) : MediaDataSource() { - override fun getSize(): Long { - return imageData.size.toLong() - } +class ByteArrayMediaDataSource( + var imageData: ByteArray, +) : MediaDataSource() { + override fun getSize(): Long = imageData.size.toLong() @Throws(IOException::class) override fun readAt( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/LocationUtil.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/LocationUtil.kt index cf02079bf0..79ffb292c7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/LocationUtil.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/LocationUtil.kt @@ -33,7 +33,9 @@ import androidx.compose.runtime.mutableStateOf import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.MutableStateFlow -class LocationUtil(context: Context) { +class LocationUtil( + context: Context, +) { companion object { const val MIN_TIME: Long = 1000L const val MIN_DISTANCE: Float = 0.0f @@ -96,9 +98,7 @@ class LocationUtil(context: Context) { object CachedGeoLocations { val locationNames = LruCache(20) - fun cached(geoHashStr: String): String? { - return locationNames[geoHashStr] - } + fun cached(geoHashStr: String): String? = locationNames[geoHashStr] suspend fun geoLocate( geoHashStr: String, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/MainThreadChecker.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/MainThreadChecker.kt index 8d027dbdbf..a985b04de2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/MainThreadChecker.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/MainThreadChecker.kt @@ -31,4 +31,6 @@ fun checkNotInMainThread() { fun isMainThread() = Looper.myLooper() == Looper.getMainLooper() -class OnMainThreadException(str: String) : RuntimeException(str) +class OnMainThreadException( + str: String, +) : RuntimeException(str) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt index 07f7244eba..3aca30ca63 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt @@ -38,7 +38,10 @@ object Nip96MediaServers { ServerName("Void.cat", "https://void.cat"), ) - data class ServerName(val name: String, val baseUrl: String) + data class ServerName( + val name: String, + val baseUrl: String, + ) val cache: MutableMap = mutableMapOf() @@ -83,7 +86,8 @@ class Nip96Retriever { checkNotInMainThread() val request: Request = - Request.Builder() + Request + .Builder() .header("Accept", "application/nostr+json") .url(baseUrl.removeSuffix("/") + "/.well-known/nostr/nip96.json") .build() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt index 72e11ab2e1..72c8fd3965 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt @@ -32,7 +32,10 @@ import okhttp3.Request import okio.ByteString.Companion.toByteString import kotlin.coroutines.cancellation.CancellationException -@Immutable data class OnlineCheckResult(val timeInMs: Long, val online: Boolean) +@Immutable data class OnlineCheckResult( + val timeInMs: Long, + val online: Boolean, +) object OnlineChecker { val checkOnlineCache = LruCache(100) @@ -58,7 +61,8 @@ object OnlineChecker { val result = if (url.startsWith("wss")) { val request = - Request.Builder() + Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .url(url.replace("wss+livekit://", "wss://")) .header("Upgrade", "websocket") @@ -69,7 +73,9 @@ object OnlineChecker { .build() val client = - HttpClientManager.getHttpClient().newBuilder() + HttpClientManager + .getHttpClient() + .newBuilder() .eventListener(EventListener.NONE) .protocols(listOf(Protocol.HTTP_1_1)) .build() @@ -80,7 +86,8 @@ object OnlineChecker { } } else { val request = - Request.Builder() + Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .url(url) .get() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/PackageUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/PackageUtils.kt index 07a978d2e8..736911a541 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/PackageUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/PackageUtils.kt @@ -28,15 +28,12 @@ object PackageUtils { private fun isPackageInstalled( context: Context, target: String, - ): Boolean { - return context.packageManager.getInstalledApplications(0).find { info -> + ): Boolean = + context.packageManager.getInstalledApplications(0).find { info -> info.packageName == target } != null - } - fun isOrbotInstalled(context: Context): Boolean { - return isPackageInstalled(context, "org.torproject.android") - } + fun isOrbotInstalled(context: Context): Boolean = isPackageInstalled(context, "org.torproject.android") fun isExternalSignerInstalled(context: Context): Boolean { val intent = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/CachedLnInvoice.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/CachedLnInvoice.kt index 67a7edcc48..cd71080f2b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/CachedLnInvoice.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/CachedLnInvoice.kt @@ -27,14 +27,15 @@ import kotlinx.coroutines.CancellationException import java.text.NumberFormat @Stable -data class InvoiceAmount(val invoice: String, val amount: String?) +data class InvoiceAmount( + val invoice: String, + val amount: String?, +) object CachedLnInvoiceParser { val lnInvoicesCache = LruCache(20) - fun cached(lnurl: String): InvoiceAmount? { - return lnInvoicesCache[lnurl] - } + fun cached(lnurl: String): InvoiceAmount? = lnInvoicesCache[lnurl] fun parse(lnbcWord: String): InvoiceAmount? { val myInvoice = LnInvoiceUtil.findInvoice(lnbcWord) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpBlockstreamExplorer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpBlockstreamExplorer.kt index eeb0923956..defcf6cbb7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpBlockstreamExplorer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpBlockstreamExplorer.kt @@ -42,7 +42,8 @@ class OkHttpBlockstreamExplorer : BitcoinExplorer { val url = "$BLOCKSTREAM_API_URL/block/$hash" val request = - Request.Builder() + Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .header("Accept", "application/json") .url(url) @@ -79,7 +80,8 @@ class OkHttpBlockstreamExplorer : BitcoinExplorer { val url = "$BLOCKSTREAM_API_URL/block-height/$height" val request = - Request.Builder() + Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .url(url) .get() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarAsyncSubmit.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarAsyncSubmit.kt index 515f9150e5..855b7c7618 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarAsyncSubmit.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarAsyncSubmit.kt @@ -33,7 +33,10 @@ import java.util.concurrent.BlockingQueue /** * For making async calls to a calendar server */ -class OkHttpCalendarAsyncSubmit(private val url: String, private val digest: ByteArray) : ICalendarAsyncSubmit { +class OkHttpCalendarAsyncSubmit( + private val url: String, + private val digest: ByteArray, +) : ICalendarAsyncSubmit { private var queue: BlockingQueue>? = null fun setQueue(queue: BlockingQueue>?) { @@ -49,7 +52,8 @@ class OkHttpCalendarAsyncSubmit(private val url: String, private val digest: Byt val requestBody = digest.toRequestBody(mediaType) val request = - okhttp3.Request.Builder() + okhttp3.Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .header("Accept", "application/vnd.opentimestamps.v1") .header("Content-Type", "application/x-www-form-urlencoded") diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarBuilder.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarBuilder.kt index b8f9408a89..a565d5fdea 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarBuilder.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/ots/OkHttpCalendarBuilder.kt @@ -25,14 +25,10 @@ import com.vitorpamplona.quartz.ots.ICalendar import com.vitorpamplona.quartz.ots.ICalendarAsyncSubmit class OkHttpCalendarBuilder : CalendarBuilder { - override fun newSyncCalendar(url: String): ICalendar { - return OkHttpCalendar(url) - } + override fun newSyncCalendar(url: String): ICalendar = OkHttpCalendar(url) override fun newAsyncCalendar( url: String, digest: ByteArray, - ): ICalendarAsyncSubmit { - return OkHttpCalendarAsyncSubmit(url, digest) - } + ): ICalendarAsyncSubmit = OkHttpCalendarAsyncSubmit(url, digest) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoCache.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoCache.kt index c13aeb5609..cfcd9042d5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoCache.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoCache.kt @@ -59,12 +59,12 @@ class VideoCache { // This method should be called when proxy setting changes. fun renewCacheFactory(client: OkHttpClient) { cacheDataSourceFactory = - CacheDataSource.Factory() + CacheDataSource + .Factory() .setCache(simpleCache) .setUpstreamDataSourceFactory( OkHttpDataSource.Factory(client), - ) - .setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR) + ).setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR) } fun get(client: OkHttpClient): CacheDataSource.Factory { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoViewedPositionCache.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoViewedPositionCache.kt index e0867cd1cc..6159904808 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoViewedPositionCache.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/VideoViewedPositionCache.kt @@ -32,7 +32,5 @@ class VideoViewedPositionCache { cachedPosition.put(uri, position) } - fun get(uri: String): Long? { - return cachedPosition.get(uri) - } + fun get(uri: String): Long? = cachedPosition.get(uri) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssDataStreamCollector.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssDataStreamCollector.kt index 2af443c105..49fae28044 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssDataStreamCollector.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssDataStreamCollector.kt @@ -44,11 +44,7 @@ class WssDataStreamCollector : WebSocketListener() { wssData.removeAll(wssData) } - fun canStream(): Boolean { - return wssData.size > 0 - } + fun canStream(): Boolean = wssData.size > 0 - fun getNextStream(): ByteString { - return wssData.pollFirst() - } + fun getNextStream(): ByteString = wssData.pollFirst() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssStreamDataSource.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssStreamDataSource.kt index 0a95bd7d64..9e9be49a0e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssStreamDataSource.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/WssStreamDataSource.kt @@ -32,7 +32,9 @@ import okhttp3.WebSocket import kotlin.math.min @OptIn(UnstableApi::class) -class WssStreamDataSource(val httpClient: OkHttpClient) : BaseDataSource(true) { +class WssStreamDataSource( + val httpClient: OkHttpClient, +) : BaseDataSource(true) { val dataStreamCollector: WssDataStreamCollector = WssDataStreamCollector() var webSocketClient: WebSocket? = null @@ -46,11 +48,14 @@ class WssStreamDataSource(val httpClient: OkHttpClient) : BaseDataSource(true) { // which collects the data for us (Previous class). webSocketClient = httpClient.newWebSocket( - Request.Builder().apply { - dataSpec.httpRequestHeaders.forEach { entry -> - addHeader(entry.key, entry.value) - } - }.url(dataSpec.uri.toString()).build(), + Request + .Builder() + .apply { + dataSpec.httpRequestHeaders.forEach { entry -> + addHeader(entry.key, entry.value) + } + }.url(dataSpec.uri.toString()) + .build(), dataStreamCollector, ) @@ -106,7 +111,9 @@ class WssStreamDataSource(val httpClient: OkHttpClient) : BaseDataSource(true) { } // Factory class for DataSource - class Factory(val okHttpClient: OkHttpClient) : DataSource.Factory { + class Factory( + val okHttpClient: OkHttpClient, + ) : DataSource.Factory { override fun createDataSource(): DataSource = WssStreamDataSource(okHttpClient) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/BahaUrlPreview.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/BahaUrlPreview.kt index e5b326c9c7..0678a92c5f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/BahaUrlPreview.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/BahaUrlPreview.kt @@ -22,7 +22,10 @@ package com.vitorpamplona.amethyst.service.previews import kotlinx.coroutines.CancellationException -class BahaUrlPreview(val url: String, var callback: IUrlPreviewCallback?) { +class BahaUrlPreview( + val url: String, + var callback: IUrlPreviewCallback?, +) { suspend fun fetchUrlPreview(timeOut: Int = 30000) = try { fetch(timeOut) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlInfoItem.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlInfoItem.kt index 5f5fb186dd..720abcdabf 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlInfoItem.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlInfoItem.kt @@ -40,11 +40,7 @@ class UrlInfoItem( image } - fun fetchComplete(): Boolean { - return url.isNotEmpty() && image.isNotEmpty() - } + fun fetchComplete(): Boolean = url.isNotEmpty() && image.isNotEmpty() - fun allFetchComplete(): Boolean { - return title.isNotEmpty() && description.isNotEmpty() && image.isNotEmpty() - } + fun allFetchComplete(): Boolean = title.isNotEmpty() && description.isNotEmpty() && image.isNotEmpty() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt index 79fb36e324..fc99a7cd38 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt @@ -71,7 +71,12 @@ suspend fun getDocument( timeOut: Int = 30000, ): UrlInfoItem = withContext(Dispatchers.IO) { - val request: Request = Request.Builder().url(url).get().build() + val request: Request = + Request + .Builder() + .url(url) + .get() + .build() HttpClientManager.getHttpClient().newCall(request).execute().use { checkNotInMainThread() if (it.isSuccessful) { @@ -132,8 +137,8 @@ private val UNICODE_BOMS = "ffff0000".decodeHex(), ) -private fun BufferedSource.readBomAsCharset(): Charset? { - return when (select(UNICODE_BOMS)) { +private fun BufferedSource.readBomAsCharset(): Charset? = + when (select(UNICODE_BOMS)) { 0 -> Charsets.UTF_8 1 -> Charsets.UTF_16BE 2 -> Charsets.UTF_16LE @@ -142,7 +147,6 @@ private fun BufferedSource.readBomAsCharset(): Charset? { -1 -> null else -> throw AssertionError() } -} private val RE_CONTENT_TYPE_CHARSET = Regex("""charset=([^;]+)""") @@ -158,7 +162,8 @@ private fun detectCharset(bodyBytes: ByteArray): Charset { } } if (meta.attr(ATTRIBUTE_VALUE_HTTP_EQUIV).lowercase() == "content-type") { - RE_CONTENT_TYPE_CHARSET.find(meta.attr(CONTENT)) + RE_CONTENT_TYPE_CHARSET + .find(meta.attr(CONTENT)) ?.let { runCatching { Charset.forName(it.groupValues[1]) }.getOrNull() }?.let { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt index 83f2e97292..bb3693bd9e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relays/EOSE.kt @@ -23,7 +23,9 @@ package com.vitorpamplona.amethyst.service.relays import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.ammolite.relays.EOSETime -class EOSERelayList(var relayList: Map = emptyMap()) { +class EOSERelayList( + var relayList: Map = emptyMap(), +) { fun addOrUpdate( relayUrl: String, time: Long, @@ -37,7 +39,9 @@ class EOSERelayList(var relayList: Map = emptyMap()) { } } -class EOSEFollowList(var followList: Map = emptyMap()) { +class EOSEFollowList( + var followList: Map = emptyMap(), +) { fun addOrUpdate( listCode: String, relayUrl: String, @@ -54,7 +58,9 @@ class EOSEFollowList(var followList: Map = emptyMap()) { } } -class EOSEAccount(var users: Map = emptyMap()) { +class EOSEAccount( + var users: Map = emptyMap(), +) { fun addOrUpdate( user: User, listCode: String, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt index 26de2fed8b..351267a705 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt @@ -28,150 +28,152 @@ import androidx.lifecycle.LifecycleOwner import java.lang.ref.WeakReference import java.util.Locale -class TextToSpeechHelper private constructor(private val context: WeakReference) : - LifecycleEventObserver { - private val appContext - get() = context.get()!!.applicationContext +class TextToSpeechHelper private constructor( + private val context: WeakReference, +) : LifecycleEventObserver { + private val appContext + get() = context.get()!!.applicationContext - private var message: String? = null + private var message: String? = null - private var ttsEngine: TextToSpeechEngine? = null + private var ttsEngine: TextToSpeechEngine? = null - private var onStart: (() -> Unit)? = null + private var onStart: (() -> Unit)? = null - private var onDoneListener: (() -> Unit)? = null + private var onDoneListener: (() -> Unit)? = null - private var onErrorListener: ((String) -> Unit)? = null + private var onErrorListener: ((String) -> Unit)? = null - private var onHighlightListener: ((Pair) -> Unit)? = null + private var onHighlightListener: ((Pair) -> Unit)? = null - private var customActionForDestroy: (() -> Unit)? = null + private var customActionForDestroy: (() -> Unit)? = null - init { - Log.d("Init", "Init TTS") + init { + Log.d("Init", "Init TTS") + initTTS() + } + + fun registerLifecycle(owner: LifecycleOwner): TextToSpeechHelper { + owner.lifecycle.addObserver(this) + return this + } + + private fun initTTS() = + context.get()?.run { + ttsEngine = + TextToSpeechEngine + .getInstance() + .setOnCompletionListener { onDoneListener?.invoke() } + .setOnErrorListener { onErrorListener?.invoke(it) } + .setOnStartListener { onStart?.invoke() } + } + + fun speak(message: String): TextToSpeechHelper { + if (ttsEngine == null) { initTTS() } + this.message = message - fun registerLifecycle(owner: LifecycleOwner): TextToSpeechHelper { - owner.lifecycle.addObserver(this) - return this + ttsEngine?.initTTS( + appContext, + message, + ) + return this + } + + /** + * This method will highlight the text in the textView + * + * @exception Exception("Message can't be null for highlighting !! Call speak() first") + */ + fun highlight(): TextToSpeechHelper { + if (message == null) { + throw Exception("Message can't be null for highlighting !! Call speak() first") } + ttsEngine?.setHighlightedMessage(message!!) + ttsEngine?.setOnHighlightListener { i, i2 -> onHighlightListener?.invoke(Pair(i, i2)) } + return this + } - private fun initTTS() = - context.get()?.run { - ttsEngine = - TextToSpeechEngine.getInstance() - .setOnCompletionListener { onDoneListener?.invoke() } - .setOnErrorListener { onErrorListener?.invoke(it) } - .setOnStartListener { onStart?.invoke() } - } + fun removeHighlight(): TextToSpeechHelper { + message = null + onHighlightListener = null + return this + } - fun speak(message: String): TextToSpeechHelper { - if (ttsEngine == null) { - initTTS() - } - this.message = message + fun destroy(action: (() -> Unit) = {}) { + ttsEngine?.destroy() + ttsEngine = null + action.invoke() + instance = null + } - ttsEngine?.initTTS( - appContext, - message, - ) - return this - } + fun onStart(onStartListener: () -> Unit): TextToSpeechHelper { + this.onStart = onStartListener + return this + } - /** - * This method will highlight the text in the textView - * - * @exception Exception("Message can't be null for highlighting !! Call speak() first") - */ - fun highlight(): TextToSpeechHelper { - if (message == null) { - throw Exception("Message can't be null for highlighting !! Call speak() first") - } - ttsEngine?.setHighlightedMessage(message!!) - ttsEngine?.setOnHighlightListener { i, i2 -> onHighlightListener?.invoke(Pair(i, i2)) } - return this - } + fun onDone(onCompleteListener: () -> Unit): TextToSpeechHelper { + this.onDoneListener = onCompleteListener + return this + } - fun removeHighlight(): TextToSpeechHelper { - message = null - onHighlightListener = null - return this - } + fun onError(onErrorListener: (String) -> Unit): TextToSpeechHelper { + this.onErrorListener = onErrorListener + return this + } - fun destroy(action: (() -> Unit) = {}) { - ttsEngine?.destroy() - ttsEngine = null - action.invoke() - instance = null - } + fun onHighlight(onHighlightListener: (Pair) -> Unit): TextToSpeechHelper { + this.onHighlightListener = onHighlightListener + return this + } - fun onStart(onStartListener: () -> Unit): TextToSpeechHelper { - this.onStart = onStartListener - return this - } + fun setCustomActionForDestroy(action: () -> Unit): TextToSpeechHelper { + customActionForDestroy = action + return this + } - fun onDone(onCompleteListener: () -> Unit): TextToSpeechHelper { - this.onDoneListener = onCompleteListener - return this - } + fun setLanguage(locale: Locale): TextToSpeechHelper { + ttsEngine?.setLanguage(locale) + return this + } - fun onError(onErrorListener: (String) -> Unit): TextToSpeechHelper { - this.onErrorListener = onErrorListener - return this - } + fun setPitchAndSpeed( + pitch: Float = DEF_SPEECH_AND_PITCH, + speed: Float = DEF_SPEECH_AND_PITCH, + ): TextToSpeechHelper { + ttsEngine?.setPitchAndSpeed(pitch, speed) + return this + } - fun onHighlight(onHighlightListener: (Pair) -> Unit): TextToSpeechHelper { - this.onHighlightListener = onHighlightListener - return this - } + fun resetPitchAndSpeed(): TextToSpeechHelper { + ttsEngine?.resetPitchAndSpeed() + return this + } - fun setCustomActionForDestroy(action: () -> Unit): TextToSpeechHelper { - customActionForDestroy = action - return this - } + companion object { + private var instance: TextToSpeechHelper? = null - fun setLanguage(locale: Locale): TextToSpeechHelper { - ttsEngine?.setLanguage(locale) - return this - } - - fun setPitchAndSpeed( - pitch: Float = DEF_SPEECH_AND_PITCH, - speed: Float = DEF_SPEECH_AND_PITCH, - ): TextToSpeechHelper { - ttsEngine?.setPitchAndSpeed(pitch, speed) - return this - } - - fun resetPitchAndSpeed(): TextToSpeechHelper { - ttsEngine?.resetPitchAndSpeed() - return this - } - - companion object { - private var instance: TextToSpeechHelper? = null - - fun getInstance(context: Context): TextToSpeechHelper { - synchronized(TextToSpeechHelper::class.java) { - if (instance == null) { - instance = TextToSpeechHelper(WeakReference(context)) - } - return instance!! + fun getInstance(context: Context): TextToSpeechHelper { + synchronized(TextToSpeechHelper::class.java) { + if (instance == null) { + instance = TextToSpeechHelper(WeakReference(context)) } - } - } - - override fun onStateChanged( - source: LifecycleOwner, - event: Lifecycle.Event, - ) { - if ( - event == Lifecycle.Event.ON_DESTROY || - event == Lifecycle.Event.ON_STOP || - event == Lifecycle.Event.ON_PAUSE - ) { - destroy { customActionForDestroy?.invoke() } + return instance!! } } } + + override fun onStateChanged( + source: LifecycleOwner, + event: Lifecycle.Event, + ) { + if ( + event == Lifecycle.Event.ON_DESTROY || + event == Lifecycle.Event.ON_STOP || + event == Lifecycle.Event.ON_PAUSE + ) { + destroy { customActionForDestroy?.invoke() } + } + } +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt index d044d249e2..63dcd3a239 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt @@ -88,7 +88,8 @@ object ImageSaver { val client = HttpClientManager.getHttpClient() val request = - Request.Builder() + Request + .Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") .get() .url(url) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UrlUserTagTransformation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UrlUserTagTransformation.kt index 7c2c34965d..265f328918 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UrlUserTagTransformation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UrlUserTagTransformation.kt @@ -35,12 +35,15 @@ import com.vitorpamplona.quartz.encoders.decodePublicKey import com.vitorpamplona.quartz.encoders.toHexKey import kotlin.coroutines.cancellation.CancellationException -data class RangesChanges(val original: TextRange, val modified: TextRange) +data class RangesChanges( + val original: TextRange, + val modified: TextRange, +) -class UrlUserTagTransformation(val color: Color) : VisualTransformation { - override fun filter(text: AnnotatedString): TransformedText { - return buildAnnotatedStringWithUrlHighlighting(text, color) - } +class UrlUserTagTransformation( + val color: Color, +) : VisualTransformation { + override fun filter(text: AnnotatedString): TransformedText = buildAnnotatedStringWithUrlHighlighting(text, color) } fun buildAnnotatedStringWithUrlHighlighting( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt index 9eea0faa91..a4f64e1b52 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoModel.kt @@ -78,12 +78,15 @@ abstract class BasicRelaySetupInfoModel : ViewModel() { _relays.update { val relayList = getRelayList() ?: emptyList() - relayList.map { relayUrl -> - BasicRelaySetupInfo( - RelayUrlFormatter.normalize(relayUrl), - RelayStats.get(relayUrl), - ) - }.distinctBy { it.url }.sortedBy { it.relayStat.receivedBytes }.reversed() + relayList + .map { relayUrl -> + BasicRelaySetupInfo( + RelayUrlFormatter.normalize(relayUrl), + RelayStats.get(relayUrl), + ) + }.distinctBy { it.url } + .sortedBy { it.relayStat.receivedBytes } + .reversed() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/DMRelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/DMRelayListViewModel.kt index 27c0534ecc..5dff04edc9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/DMRelayListViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/DMRelayListViewModel.kt @@ -21,9 +21,7 @@ package com.vitorpamplona.amethyst.ui.actions.relays class DMRelayListViewModel : BasicRelaySetupInfoModel() { - override fun getRelayList(): List? { - return account.getDMRelayList()?.relays() - } + override fun getRelayList(): List? = account.getDMRelayList()?.relays() override fun saveRelayList(urlList: List) { account.saveDMRelayList(urlList) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/LocalRelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/LocalRelayListViewModel.kt index 6c5359b365..803eb87b40 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/LocalRelayListViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/LocalRelayListViewModel.kt @@ -21,9 +21,7 @@ package com.vitorpamplona.amethyst.ui.actions.relays class LocalRelayListViewModel : BasicRelaySetupInfoModel() { - override fun getRelayList(): List? { - return account.localRelayServers.toList() - } + override fun getRelayList(): List? = account.localRelayServers.toList() override fun saveRelayList(urlList: List) { account.updateLocalRelayServers(urlList.toSet()) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt index c41ce2c1d5..2fdfe7237b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Nip65RelayListViewModel.kt @@ -105,23 +105,29 @@ class Nip65RelayListViewModel : ViewModel() { _homeRelays.update { val relayList = account.getNIP65RelayList()?.writeRelays() ?: emptyList() - relayList.map { relayUrl -> - BasicRelaySetupInfo( - RelayUrlFormatter.normalize(relayUrl), - RelayStats.get(relayUrl), - ) - }.distinctBy { it.url }.sortedBy { it.relayStat.receivedBytes }.reversed() + relayList + .map { relayUrl -> + BasicRelaySetupInfo( + RelayUrlFormatter.normalize(relayUrl), + RelayStats.get(relayUrl), + ) + }.distinctBy { it.url } + .sortedBy { it.relayStat.receivedBytes } + .reversed() } _notificationRelays.update { val relayList = account.getNIP65RelayList()?.readRelays() ?: emptyList() - relayList.map { relayUrl -> - BasicRelaySetupInfo( - RelayUrlFormatter.normalize(relayUrl), - RelayStats.get(relayUrl), - ) - }.distinctBy { it.url }.sortedBy { it.relayStat.receivedBytes }.reversed() + relayList + .map { relayUrl -> + BasicRelaySetupInfo( + RelayUrlFormatter.normalize(relayUrl), + RelayStats.get(relayUrl), + ) + }.distinctBy { it.url } + .sortedBy { it.relayStat.receivedBytes } + .reversed() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/PrivateOutboxRelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/PrivateOutboxRelayListViewModel.kt index 8d5ce78377..92f2c91373 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/PrivateOutboxRelayListViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/PrivateOutboxRelayListViewModel.kt @@ -21,9 +21,7 @@ package com.vitorpamplona.amethyst.ui.actions.relays class PrivateOutboxRelayListViewModel : BasicRelaySetupInfoModel() { - override fun getRelayList(): List? { - return account.getPrivateOutboxRelayList()?.relays() - } + override fun getRelayList(): List? = account.getPrivateOutboxRelayList()?.relays() override fun saveRelayList(urlList: List) { account.savePrivateOutboxRelayList(urlList) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/SearchRelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/SearchRelayListViewModel.kt index da89cd2456..cd17862160 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/SearchRelayListViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/SearchRelayListViewModel.kt @@ -21,9 +21,7 @@ package com.vitorpamplona.amethyst.ui.actions.relays class SearchRelayListViewModel : BasicRelaySetupInfoModel() { - override fun getRelayList(): List? { - return account.getSearchRelayList()?.relays() - } + override fun getRelayList(): List? = account.getSearchRelayList()?.relays() override fun saveRelayList(urlList: List) { account.saveSearchRelayList(urlList) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/AudioWaveformReadOnly.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/AudioWaveformReadOnly.kt index 7002a976e4..ac1006b0fe 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/AudioWaveformReadOnly.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/AudioWaveformReadOnly.kt @@ -101,11 +101,11 @@ fun AudioWaveformReadOnly( minHeight = MIN_SPIKE_HEIGHT, maxHeight = canvasSize.height.coerceAtLeast(MIN_SPIKE_HEIGHT), ) - } - .map { animateFloatAsState(it, spikeAnimationSpec).value } + }.map { animateFloatAsState(it, spikeAnimationSpec).value } Canvas( modifier = - Modifier.fillMaxWidth() + Modifier + .fillMaxWidth() .requiredHeight(48.dp) .graphicsLayer(alpha = DEFAULT_GRAPHICS_LAYER_ALPHA) .then(modifier), @@ -161,8 +161,7 @@ private fun List.toDrawableAmplitudes( AmplitudeType.Avg -> data.average() AmplitudeType.Max -> data.max() AmplitudeType.Min -> data.min() - } - .toFloat() + }.toFloat() .coerceIn(minHeight, maxHeight) } return when { @@ -198,9 +197,7 @@ internal fun Iterable.chunkToSize( internal fun Iterable.normalize( min: Float, max: Float, -): List { - return map { (max - min) * ((it - min()) / (max() - min())) + min } -} +): List = map { (max - min) * ((it - min()) / (max() - min())) + min } private fun Int.safeDiv(value: Int): Float { return if (value == 0) return 0F else this / value.toFloat() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/GenericLoadable.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/GenericLoadable.kt index 6817b873ff..f2eb7d9e1e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/GenericLoadable.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/GenericLoadable.kt @@ -26,9 +26,13 @@ import androidx.compose.runtime.Immutable sealed class GenericLoadable { @Immutable class Loading : GenericLoadable() - @Immutable class Loaded(val loaded: T) : GenericLoadable() + @Immutable class Loaded( + val loaded: T, + ) : GenericLoadable() @Immutable class Empty : GenericLoadable() - @Immutable class Error(val errorMessage: String) : GenericLoadable() + @Immutable class Error( + val errorMessage: String, + ) : GenericLoadable() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/SplitItem.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/SplitItem.kt index 887ae463f1..8998cd0a49 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/SplitItem.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/SplitItem.kt @@ -25,12 +25,14 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import kotlin.math.abs -class SplitItem(val key: T) { +class SplitItem( + val key: T, +) { // 0 to 1 var percentage by mutableStateOf(0f) } -class Split() { +class Split { var items: List> by mutableStateOf(emptyList()) fun addItem( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreviewState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreviewState.kt index beef6d7712..533acdef20 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreviewState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreviewState.kt @@ -27,9 +27,13 @@ import com.vitorpamplona.amethyst.service.previews.UrlInfoItem sealed class UrlPreviewState { @Immutable object Loading : UrlPreviewState() - @Immutable class Loaded(val previewInfo: UrlInfoItem) : UrlPreviewState() + @Immutable class Loaded( + val previewInfo: UrlInfoItem, + ) : UrlPreviewState() @Immutable object Empty : UrlPreviewState() - @Immutable class Error(val errorMessage: String) : UrlPreviewState() + @Immutable class Error( + val errorMessage: String, + ) : UrlPreviewState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt index 107c6cb95e..3cae7c2e0e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt @@ -24,10 +24,10 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -class BookmarkPrivateFeedFilter(val account: Account) : FeedFilter() { - override fun feedKey(): String { - return account.userProfile().latestBookmarkList?.id ?: "" - } +class BookmarkPrivateFeedFilter( + val account: Account, +) : FeedFilter() { + override fun feedKey(): String = account.userProfile().latestBookmarkList?.id ?: "" override fun feed(): List { val bookmarks = account.userProfile().latestBookmarkList diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPublicFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPublicFeedFilter.kt index 37832131a0..032c842962 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPublicFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPublicFeedFilter.kt @@ -24,10 +24,10 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -class BookmarkPublicFeedFilter(val account: Account) : FeedFilter() { - override fun feedKey(): String { - return account.userProfile().latestBookmarkList?.id ?: "" - } +class BookmarkPublicFeedFilter( + val account: Account, +) : FeedFilter() { + override fun feedKey(): String = account.userProfile().latestBookmarkList?.id ?: "" override fun feed(): List { val bookmarks = account.userProfile().latestBookmarkList diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt index 87e1133534..09cd201880 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt @@ -24,27 +24,24 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.Note -class ChannelFeedFilter(val channel: Channel, val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return channel.idHex - } +class ChannelFeedFilter( + val channel: Channel, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = channel.idHex // returns the last Note of each user. - override fun feed(): List { - return sort( + override fun feed(): List = + sort( channel.notes.filterIntoSet { key, it -> account.isAcceptable(it) }, ) - } - override fun applyFilter(collection: Set): Set { - return collection + override fun applyFilter(collection: Set): Set = + collection .filter { channel.notes.containsKey(it.idHex) && account.isAcceptable(it) } .toSet() - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt index 8cbd4b1fdc..234da7305f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt @@ -24,12 +24,12 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.quartz.events.ChatroomKey -class ChatroomFeedFilter(val withUser: ChatroomKey, val account: Account) : - AdditiveFeedFilter() { +class ChatroomFeedFilter( + val withUser: ChatroomKey, + val account: Account, +) : AdditiveFeedFilter() { // returns the last Note of each user. - override fun feedKey(): String { - return withUser.hashCode().toString() - } + override fun feedKey(): String = withUser.hashCode().toString() override fun feed(): List { val messages = account.userProfile().privateChatrooms[withUser] ?: return emptyList() @@ -46,7 +46,5 @@ class ChatroomFeedFilter(val withUser: ChatroomKey, val account: Account) : return collection.filter { it in messages.roomMessages && account.isAcceptable(it) }.toSet() } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt index 7a7846a414..70e0074c72 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt @@ -28,10 +28,10 @@ import com.vitorpamplona.quartz.events.ChannelMessageEvent import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.ChatroomKeyable -class ChatroomListKnownFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex - } +class ChatroomListKnownFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex // returns the last Note of each user. override fun feed(): List { @@ -56,7 +56,8 @@ class ChatroomListKnownFeedFilter(val account: Account) : AdditiveFeedFilter - it.notes.filter { key, it -> account.isAcceptable(it) && it.event != null } + it.notes + .filter { key, it -> account.isAcceptable(it) && it.event != null } .sortedWith(DefaultFeedOrder) .firstOrNull() } @@ -136,7 +137,11 @@ class ChatroomListKnownFeedFilter(val account: Account) : AdditiveFeedFilter { val followingChannels = - account.userProfile().latestContactList?.taggedEvents()?.toSet() ?: emptySet() + account + .userProfile() + .latestContactList + ?.taggedEvents() + ?.toSet() ?: emptySet() val newRelevantPublicMessages = mutableMapOf() newItems .filter { it.event is ChannelMessageEvent } @@ -177,7 +182,8 @@ class ChatroomListKnownFeedFilter(val account: Account) : AdditiveFeedFilter): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListNewFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListNewFeedFilter.kt index 87cc2c66a2..1e6589e95f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListNewFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListNewFeedFilter.kt @@ -27,10 +27,10 @@ import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.ChatroomKeyable import com.vitorpamplona.quartz.events.PrivateDmEvent -class ChatroomListNewFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex - } +class ChatroomListNewFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex // returns the last Note of each user. override fun feed(): List { @@ -137,7 +137,5 @@ class ChatroomListNewFeedFilter(val account: Account) : AdditiveFeedFilter return newRelevantPrivateMessages } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/CommunityFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/CommunityFeedFilter.kt index 4a30b7d774..1b3f628bfb 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/CommunityFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/CommunityFeedFilter.kt @@ -27,10 +27,11 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent -class CommunityFeedFilter(val note: AddressableNote, val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + note.idHex - } +class CommunityFeedFilter( + val note: AddressableNote, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + note.idHex override fun feed(): List { val myPubKey = account.userProfile().pubkeyHex @@ -42,23 +43,23 @@ class CommunityFeedFilter(val note: AddressableNote, val account: Account) : Add return sort(result) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) private fun innerApplyFilter(collection: Collection): Set { val myPubKey = account.userProfile().pubkeyHex - return collection.mapNotNull { - filterMap(it, myPubKey) - }.flatten().toSet() + return collection + .mapNotNull { + filterMap(it, myPubKey) + }.flatten() + .toSet() } private fun filterMap( note: Note, myPubKey: HexKey, - ): List? { - return if ( + ): List? = + if ( // Only Approvals note.event is CommunityPostApprovalEvent && // Of the given community @@ -74,9 +75,6 @@ class CommunityFeedFilter(val note: AddressableNote, val account: Account) : Add } else { null } - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverChatFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverChatFeedFilter.kt index 0eabe34228..92a4900d1f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverChatFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverChatFeedFilter.kt @@ -29,17 +29,16 @@ import com.vitorpamplona.quartz.events.IsInPublicChatChannel import com.vitorpamplona.quartz.events.MuteListEvent import com.vitorpamplona.quartz.events.PeopleListEvent -open class DiscoverChatFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultDiscoveryFollowList.value - } +open class DiscoverChatFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultDiscoveryFollowList.value == + override fun showHiddenKey(): Boolean = + account.defaultDiscoveryFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultDiscoveryFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val params = buildFilterParams(account) @@ -63,18 +62,15 @@ open class DiscoverChatFeedFilter(val account: Account) : AdditiveFeedFilter): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( userHex = account.userProfile().pubkeyHex, selectedListName = account.defaultDiscoveryFollowList.value, followLists = account.liveDiscoveryFollowLists.value, hiddenUsers = account.flowHiddenUsers.value, ) - } protected open fun innerApplyFilter(collection: Collection): Set { val params = buildFilterParams(account) @@ -120,7 +116,6 @@ open class DiscoverChatFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultDiscoveryFollowList.value - } +open class DiscoverCommunityFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultDiscoveryFollowList.value == + override fun showHiddenKey(): Boolean = + account.defaultDiscoveryFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultDiscoveryFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val filterParams = @@ -67,9 +66,7 @@ open class DiscoverCommunityFeedFilter(val account: Account) : AdditiveFeedFilte return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) protected open fun innerApplyFilter(collection: Collection): Set { // here, we need to look for CommunityDefinition in new collection AND new CommunityDefinition from Post Approvals @@ -81,28 +78,30 @@ open class DiscoverCommunityFeedFilter(val account: Account) : AdditiveFeedFilte hiddenUsers = account.flowHiddenUsers.value, ) - return collection.mapNotNull { note -> - // note event here will never be null - val noteEvent = note.event - if (noteEvent is CommunityDefinitionEvent && filterParams.match(noteEvent)) { - listOf(note) - } else if (noteEvent is CommunityPostApprovalEvent) { - noteEvent.communities().mapNotNull { - val definitionNote = LocalCache.getOrCreateAddressableNote(it) - val definitionEvent = definitionNote.event + return collection + .mapNotNull { note -> + // note event here will never be null + val noteEvent = note.event + if (noteEvent is CommunityDefinitionEvent && filterParams.match(noteEvent)) { + listOf(note) + } else if (noteEvent is CommunityPostApprovalEvent) { + noteEvent.communities().mapNotNull { + val definitionNote = LocalCache.getOrCreateAddressableNote(it) + val definitionEvent = definitionNote.event - if (definitionEvent == null && shouldInclude(it, filterParams)) { - definitionNote - } else if (definitionEvent is CommunityDefinitionEvent && filterParams.match(definitionEvent)) { - definitionNote - } else { - null + if (definitionEvent == null && shouldInclude(it, filterParams)) { + definitionNote + } else if (definitionEvent is CommunityDefinitionEvent && filterParams.match(definitionEvent)) { + definitionNote + } else { + null + } } + } else { + null } - } else { - null - } - }.flatten().toSet() + }.flatten() + .toSet() } private fun shouldInclude( @@ -123,7 +122,6 @@ open class DiscoverCommunityFeedFilter(val account: Account) : AdditiveFeedFilte { it.createdAt() }, { it.idHex }, ), - ) - .reversed() + ).reversed() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverLiveFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverLiveFeedFilter.kt index ebce2500a2..abb993745e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverLiveFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverLiveFeedFilter.kt @@ -34,18 +34,13 @@ import com.vitorpamplona.quartz.events.PeopleListEvent open class DiscoverLiveFeedFilter( val account: Account, ) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + followList() - } + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + followList() - open fun followList(): String { - return account.defaultDiscoveryFollowList.value - } + open fun followList(): String = account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || followList() == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val allChannelNotes = LocalCache.channels.mapNotNull { _, channel -> LocalCache.getNoteIfExists(channel.idHex) } @@ -56,9 +51,7 @@ open class DiscoverLiveFeedFilter( return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) protected open fun innerApplyFilter(collection: Collection): Set { val filterParams = @@ -92,16 +85,14 @@ open class DiscoverLiveFeedFilter( { (it.event as? LiveActivitiesEvent)?.starts() ?: it.createdAt() }, { it.idHex }, ), - ) - .reversed() + ).reversed() } - fun convertStatusToOrder(status: String?): Int { - return when (status) { + fun convertStatusToOrder(status: String?): Int = + when (status) { STATUS_LIVE -> 2 STATUS_PLANNED -> 1 STATUS_ENDED -> 0 else -> 0 } - } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverMarketplaceFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverMarketplaceFeedFilter.kt index 0be87e5b8d..8d96f4b83e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverMarketplaceFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverMarketplaceFeedFilter.kt @@ -30,18 +30,13 @@ import com.vitorpamplona.quartz.events.PeopleListEvent open class DiscoverMarketplaceFeedFilter( val account: Account, ) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + followList() - } + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + followList() - open fun followList(): String { - return account.defaultDiscoveryFollowList.value - } + open fun followList(): String = account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || followList() == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val params = buildFilterParams(account) @@ -55,18 +50,15 @@ open class DiscoverMarketplaceFeedFilter( return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( account.userProfile().pubkeyHex, account.defaultDiscoveryFollowList.value, account.liveDiscoveryFollowLists.value, account.flowHiddenUsers.value, ) - } protected open fun innerApplyFilter(collection: Collection): Set { val params = buildFilterParams(account) @@ -77,7 +69,5 @@ open class DiscoverMarketplaceFeedFilter( } } - override fun sort(collection: Set): List { - return collection.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() - } + override fun sort(collection: Set): List = collection.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverNIP89FeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverNIP89FeedFilter.kt index d572884704..abb509d0fc 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverNIP89FeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DiscoverNIP89FeedFilter.kt @@ -34,18 +34,13 @@ open class DiscoverNIP89FeedFilter( val lastAnnounced = 90 * 24 * 60 * 60 // 90 Days ago // TODO better than announced would be last active, as this requires the DVM provider to regularly update the NIP89 announcement - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + followList() - } + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + followList() - open fun followList(): String { - return account.defaultDiscoveryFollowList.value - } + open fun followList(): String = account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || followList() == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val filterParams = buildFilterParams(account) @@ -58,18 +53,15 @@ open class DiscoverNIP89FeedFilter( return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( account.userProfile().pubkeyHex, account.defaultDiscoveryFollowList.value, account.liveDiscoveryFollowLists.value, account.flowHiddenUsers.value, ) - } fun acceptDVM(note: Note): Boolean { val noteEvent = note.event @@ -88,13 +80,10 @@ open class DiscoverNIP89FeedFilter( noteEvent.createdAt > TimeUtils.now() - lastAnnounced // && params.match(noteEvent) } - protected open fun innerApplyFilter(collection: Collection): Set { - return collection.filterTo(HashSet()) { + protected open fun innerApplyFilter(collection: Collection): Set = + collection.filterTo(HashSet()) { acceptDVM(it) } - } - override fun sort(collection: Set): List { - return collection.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() - } + override fun sort(collection: Set): List = collection.sortedWith(compareBy({ it.createdAt() }, { it.idHex })).reversed() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DraftEventsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DraftEventsFeedFilter.kt index 883bc8df0c..25bebe5d60 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DraftEventsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/DraftEventsFeedFilter.kt @@ -25,16 +25,15 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.quartz.events.DraftEvent -class DraftEventsFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex - } +class DraftEventsFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex - override fun applyFilter(collection: Set): Set { - return collection.filterTo(HashSet()) { + override fun applyFilter(collection: Set): Set = + collection.filterTo(HashSet()) { acceptableEvent(it) } - } override fun feed(): List { val drafts = @@ -50,7 +49,5 @@ class DraftEventsFeedFilter(val account: Account) : AdditiveFeedFilter() { return noteEvent is DraftEvent && noteEvent.pubKey == account.userProfile().pubkeyHex } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/FilterByListParams.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/FilterByListParams.kt index dad30487f2..80b5bd65b7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/FilterByListParams.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/FilterByListParams.kt @@ -91,13 +91,12 @@ class FilterByListParams( selectedListName: String, followLists: Account.LiveFollowLists?, hiddenUsers: Account.LiveHiddenUsers, - ): FilterByListParams { - return FilterByListParams( + ): FilterByListParams = + FilterByListParams( isGlobal = selectedListName == GLOBAL_FOLLOWS, isHiddenList = showHiddenKey(selectedListName, userHex), followLists = followLists, hiddenLists = hiddenUsers, ) - } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/GeoHashFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/GeoHashFeedFilter.kt index e2fa72fe63..f2cd9b72ef 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/GeoHashFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/GeoHashFeedFilter.kt @@ -31,10 +31,11 @@ import com.vitorpamplona.quartz.events.PrivateDmEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -class GeoHashFeedFilter(val tag: String, val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + tag - } +class GeoHashFeedFilter( + val tag: String, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + tag override fun feed(): List { val notes = @@ -45,19 +46,15 @@ class GeoHashFeedFilter(val tag: String, val account: Account) : AdditiveFeedFil return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection.filterTo(HashSet()) { acceptableEvent(it, tag) } - } + private fun innerApplyFilter(collection: Collection): Set = collection.filterTo(HashSet()) { acceptableEvent(it, tag) } fun acceptableEvent( it: Note, geoTag: String, - ): Boolean { - return ( + ): Boolean = + ( it.event is TextNoteEvent || it.event is LongTextNoteEvent || it.event is WikiNoteEvent || @@ -66,9 +63,6 @@ class GeoHashFeedFilter(val tag: String, val account: Account) : AdditiveFeedFil it.event is PollNoteEvent || it.event is AudioHeaderEvent ) && it.event?.isTaggedGeoHash(geoTag) == true && account.isAcceptable(it) - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HashtagFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HashtagFeedFilter.kt index 7aeebbc814..0f5c7950eb 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HashtagFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HashtagFeedFilter.kt @@ -33,10 +33,11 @@ import com.vitorpamplona.quartz.events.RepostEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -class HashtagFeedFilter(val tag: String, val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + tag - } +class HashtagFeedFilter( + val tag: String, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + tag override fun feed(): List { val notes = @@ -47,19 +48,15 @@ class HashtagFeedFilter(val tag: String, val account: Account) : AdditiveFeedFil return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection.filterTo(HashSet()) { acceptableEvent(it, tag) } - } + private fun innerApplyFilter(collection: Collection): Set = collection.filterTo(HashSet()) { acceptableEvent(it, tag) } fun acceptableEvent( it: Note, hashTag: String, - ): Boolean { - return ( + ): Boolean = + ( it.event is TextNoteEvent || it.event is RepostEvent || it.event is GenericRepostEvent || @@ -69,10 +66,9 @@ class HashtagFeedFilter(val tag: String, val account: Account) : AdditiveFeedFil it.event is PrivateDmEvent || it.event is PollNoteEvent || it.event is AudioHeaderEvent - ) && it.event?.isTaggedHash(hashTag) == true && account.isAcceptable(it) - } + ) && + it.event?.isTaggedHash(hashTag) == true && + account.isAcceptable(it) - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeConversationsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeConversationsFeedFilter.kt index c5c2981fb8..c4a46c40e1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeConversationsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeConversationsFeedFilter.kt @@ -30,15 +30,14 @@ import com.vitorpamplona.quartz.events.PeopleListEvent import com.vitorpamplona.quartz.events.PollNoteEvent import com.vitorpamplona.quartz.events.TextNoteEvent -class HomeConversationsFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList.value - } +class HomeConversationsFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultHomeFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + account.defaultHomeFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultHomeFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val filterParams = buildFilterParams(account) @@ -50,18 +49,15 @@ class HomeConversationsFeedFilter(val account: Account) : AdditiveFeedFilter): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( userHex = account.userProfile().pubkeyHex, selectedListName = account.defaultHomeFollowList.value, followLists = account.liveHomeFollowLists.value, hiddenUsers = account.flowHiddenUsers.value, ) - } private fun innerApplyFilter(collection: Collection): Set { val filterParams = buildFilterParams(account) @@ -74,16 +70,15 @@ class HomeConversationsFeedFilter(val account: Account) : AdditiveFeedFilter): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeNewThreadFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeNewThreadFeedFilter.kt index 6e1f9df7e5..06bbd44dda 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeNewThreadFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeNewThreadFeedFilter.kt @@ -36,24 +36,22 @@ import com.vitorpamplona.quartz.events.RepostEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -class HomeNewThreadFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList.value - } +class HomeNewThreadFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultHomeFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + account.defaultHomeFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultHomeFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( userHex = account.userProfile().pubkeyHex, selectedListName = account.defaultHomeFollowList.value, followLists = account.liveHomeFollowLists.value, hiddenUsers = account.flowHiddenUsers.value, ) - } override fun feed(): List { val gRelays = account.activeGlobalRelays().toSet() @@ -73,9 +71,7 @@ class HomeNewThreadFeedFilter(val account: Account) : AdditiveFeedFilter() return sort(notes + longFormNotes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) private fun innerApplyFilter(collection: Collection): Set { val gRelays = account.activeGlobalRelays().toSet() @@ -107,13 +103,13 @@ class HomeNewThreadFeedFilter(val account: Account) : AdditiveFeedFilter() ) && filterParams.match(noteEvent, isGlobalRelay) && it.isNewThread() } - override fun sort(collection: Set): List { - return collection.distinctBy { - if (it.event is RepostEvent || it.event is GenericRepostEvent) { - it.replyTo?.lastOrNull()?.idHex ?: it.idHex // only the most recent repost per feed. - } else { - it.idHex - } - }.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = + collection + .distinctBy { + if (it.event is RepostEvent || it.event is GenericRepostEvent) { + it.replyTo?.lastOrNull()?.idHex ?: it.idHex // only the most recent repost per feed. + } else { + it.idHex + } + }.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryResponseFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryResponseFilter.kt index fef70a0b5d..3349fe3313 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryResponseFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NIP90ContentDiscoveryResponseFilter.kt @@ -35,18 +35,13 @@ open class NIP90ContentDiscoveryResponseFilter( ) : AdditiveFeedFilter() { var latestNote: Note? = null - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + request - } + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + request - open fun followList(): String { - return account.defaultDiscoveryFollowList.value - } + open fun followList(): String = account.defaultDiscoveryFollowList.value - override fun showHiddenKey(): Boolean { - return followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + followList() == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || followList() == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } fun acceptableEvent(note: Note): Boolean { val noteEvent = note.event @@ -71,18 +66,15 @@ open class NIP90ContentDiscoveryResponseFilter( } } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( account.userProfile().pubkeyHex, account.defaultDiscoveryFollowList.value, account.liveDiscoveryFollowLists.value, account.flowHiddenUsers.value, ) - } protected open fun innerApplyFilter(collection: Collection): Set { // val params = buildFilterParams(account) @@ -95,9 +87,11 @@ open class NIP90ContentDiscoveryResponseFilter( val noteEvent = latestNote?.event as? NIP90ContentDiscoveryResponseEvent ?: return setOf() - return noteEvent.innerTags().mapNotNull { - LocalCache.checkGetOrCreateNote(it) - }.toSet() + return noteEvent + .innerTags() + .mapNotNull { + LocalCache.checkGetOrCreateNote(it) + }.toSet() } override fun sort(collection: Set): List { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NotificationFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NotificationFeedFilter.kt index 613d806f2f..2a97d17f43 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NotificationFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/NotificationFeedFilter.kt @@ -44,26 +44,24 @@ import com.vitorpamplona.quartz.events.PeopleListEvent import com.vitorpamplona.quartz.events.ReactionEvent import com.vitorpamplona.quartz.events.RepostEvent -class NotificationFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultNotificationFollowList.value - } +class NotificationFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultNotificationFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultNotificationFollowList.value == + override fun showHiddenKey(): Boolean = + account.defaultNotificationFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultNotificationFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( userHex = account.userProfile().pubkeyHex, selectedListName = account.defaultNotificationFollowList.value, followLists = account.liveNotificationFollowLists.value, hiddenUsers = account.flowHiddenUsers.value, ) - } override fun feed(): List { val filterParams = buildFilterParams(account) @@ -76,9 +74,7 @@ class NotificationFeedFilter(val account: Account) : AdditiveFeedFilter() return sort(notifications) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) private fun innerApplyFilter(collection: Collection): Set { val filterParams = buildFilterParams(account) @@ -123,9 +119,7 @@ class NotificationFeedFilter(val account: Account) : AdditiveFeedFilter() tagsAnEventByUser(it, loggedInUserHex) } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) fun tagsAnEventByUser( note: Note, @@ -153,11 +147,17 @@ class NotificationFeedFilter(val account: Account) : AdditiveFeedFilter() } if (event is ReactionEvent) { - return note.replyTo?.lastOrNull()?.author?.pubkeyHex == authorHex + return note.replyTo + ?.lastOrNull() + ?.author + ?.pubkeyHex == authorHex } if (event is RepostEvent || event is GenericRepostEvent) { - return note.replyTo?.lastOrNull()?.author?.pubkeyHex == authorHex + return note.replyTo + ?.lastOrNull() + ?.author + ?.pubkeyHex == authorHex } return true diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ThreadFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ThreadFeedFilter.kt index a981c189c1..a907fc9aea 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ThreadFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/ThreadFeedFilter.kt @@ -29,10 +29,11 @@ import com.vitorpamplona.amethyst.model.ThreadLevelCalculator import com.vitorpamplona.quartz.utils.TimeUtils @Immutable -class ThreadFeedFilter(val account: Account, val noteId: String) : FeedFilter() { - override fun feedKey(): String { - return noteId - } +class ThreadFeedFilter( + val account: Account, + val noteId: String, +) : FeedFilter() { + override fun feedKey(): String = noteId override fun feed(): List { val cachedSignatures: MutableMap = mutableMapOf() @@ -44,14 +45,15 @@ class ThreadFeedFilter(val account: Account, val noteId: String) : FeedFilter { - ThreadLevelCalculator.replyLevelSignature( - it, - eventsInHex, - cachedSignatures, - account.userProfile(), - followingKeySet, - now, - ).signature + ThreadLevelCalculator + .replyLevelSignature( + it, + eventsInHex, + cachedSignatures, + account.userProfile(), + followingKeySet, + now, + ).signature } return eventsToWatch.sortedWith(order) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileAppRecommendationsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileAppRecommendationsFeedFilter.kt index 332281ce84..d85ac7d1f2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileAppRecommendationsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileAppRecommendationsFeedFilter.kt @@ -25,10 +25,10 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.quartz.events.AppRecommendationEvent -class UserProfileAppRecommendationsFeedFilter(val user: User) : AdditiveFeedFilter() { - override fun feedKey(): String { - return user.pubkeyHex - } +class UserProfileAppRecommendationsFeedFilter( + val user: User, +) : AdditiveFeedFilter() { + override fun feedKey(): String = user.pubkeyHex override fun feed(): List { val recommendations = @@ -39,13 +39,9 @@ class UserProfileAppRecommendationsFeedFilter(val user: User) : AdditiveFeedFilt return sort(recommendations) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection.mapNotNull { filterMap(it) }.flatten().toSet() - } + private fun innerApplyFilter(collection: Collection): Set = collection.mapNotNull { filterMap(it) }.flatten().toSet() fun filterMap(it: Note): List? { val noteEvent = it.event @@ -58,7 +54,5 @@ class UserProfileAppRecommendationsFeedFilter(val user: User) : AdditiveFeedFilt return null } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileBookmarksFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileBookmarksFeedFilter.kt index 3ef42a2251..8044ab846a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileBookmarksFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileBookmarksFeedFilter.kt @@ -25,10 +25,11 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User -class UserProfileBookmarksFeedFilter(val user: User, val account: Account) : FeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + user.pubkeyHex - } +class UserProfileBookmarksFeedFilter( + val user: User, + val account: Account, +) : FeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + user.pubkeyHex override fun feed(): List { val notes = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileConversationsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileConversationsFeedFilter.kt index 0af8e0d6a2..5c45a676e7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileConversationsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileConversationsFeedFilter.kt @@ -29,11 +29,11 @@ import com.vitorpamplona.quartz.events.LiveActivitiesChatMessageEvent import com.vitorpamplona.quartz.events.PollNoteEvent import com.vitorpamplona.quartz.events.TextNoteEvent -class UserProfileConversationsFeedFilter(val user: User, val account: Account) : - AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + user.pubkeyHex - } +class UserProfileConversationsFeedFilter( + val user: User, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + user.pubkeyHex override fun feed(): List { val notes = @@ -49,27 +49,22 @@ class UserProfileConversationsFeedFilter(val user: User, val account: Account) : return sort(notes + longFormNotes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection.filterTo(HashSet()) { acceptableEvent(it) } - } + private fun innerApplyFilter(collection: Collection): Set = collection.filterTo(HashSet()) { acceptableEvent(it) } - fun acceptableEvent(it: Note): Boolean { - return it.author == user && + fun acceptableEvent(it: Note): Boolean = + it.author == user && ( it.event is TextNoteEvent || it.event is PollNoteEvent || it.event is ChannelMessageEvent || it.event is LiveActivitiesChatMessageEvent - ) && !it.isNewThread() && account.isAcceptable(it) - } + ) && + !it.isNewThread() && + account.isAcceptable(it) - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) override fun limit() = 200 } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowersFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowersFeedFilter.kt index ddd9e1436c..29165cb065 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowersFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowersFeedFilter.kt @@ -24,16 +24,16 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.User -class UserProfileFollowersFeedFilter(val user: User, val account: Account) : FeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + user.pubkeyHex - } +class UserProfileFollowersFeedFilter( + val user: User, + val account: Account, +) : FeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + user.pubkeyHex - override fun feed(): List { - return LocalCache.users.filter { _, it -> + override fun feed(): List = + LocalCache.users.filter { _, it -> it.isFollowing(user) && !account.isHidden(it) } - } override fun limit() = 400 } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowsFeedFilter.kt index 9ec0cad686..a05722c621 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileFollowsFeedFilter.kt @@ -25,10 +25,11 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.quartz.events.ContactListEvent -class UserProfileFollowsFeedFilter(val user: User, val account: Account) : FeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + user.pubkeyHex - } +class UserProfileFollowsFeedFilter( + val user: User, + val account: Account, +) : FeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + user.pubkeyHex val cache: MutableMap> = mutableMapOf() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileNewThreadFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileNewThreadFeedFilter.kt index 94dd771283..7a55c6dc33 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileNewThreadFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileNewThreadFeedFilter.kt @@ -37,11 +37,11 @@ import com.vitorpamplona.quartz.events.RepostEvent import com.vitorpamplona.quartz.events.TextNoteEvent import com.vitorpamplona.quartz.events.WikiNoteEvent -class UserProfileNewThreadFeedFilter(val user: User, val account: Account) : - AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + user.pubkeyHex - } +class UserProfileNewThreadFeedFilter( + val user: User, + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + user.pubkeyHex override fun feed(): List { val notes = @@ -57,16 +57,12 @@ class UserProfileNewThreadFeedFilter(val user: User, val account: Account) : return sort(notes + longFormNotes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection.filterTo(HashSet()) { acceptableEvent(it) } - } + private fun innerApplyFilter(collection: Collection): Set = collection.filterTo(HashSet()) { acceptableEvent(it) } - fun acceptableEvent(it: Note): Boolean { - return it.author == user && + fun acceptableEvent(it: Note): Boolean = + it.author == user && ( it.event is TextNoteEvent || it.event is ClassifiedsEvent || @@ -79,11 +75,8 @@ class UserProfileNewThreadFeedFilter(val user: User, val account: Account) : it.event is AudioTrackEvent || it.event is AudioHeaderEvent ) && it.isNewThread() && account.isAcceptable(it) - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) override fun limit() = 200 } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileReportsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileReportsFeedFilter.kt index 4eeffd9428..931d500a13 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileReportsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileReportsFeedFilter.kt @@ -24,28 +24,21 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.quartz.events.ReportEvent -class UserProfileReportsFeedFilter(val user: User) : AdditiveFeedFilter() { - override fun feedKey(): String { - return user.pubkeyHex - } +class UserProfileReportsFeedFilter( + val user: User, +) : AdditiveFeedFilter() { + override fun feedKey(): String = user.pubkeyHex - override fun feed(): List { - return sort(innerApplyFilter(user.reports.values.flatten())) - } + override fun feed(): List = sort(innerApplyFilter(user.reports.values.flatten())) - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) - private fun innerApplyFilter(collection: Collection): Set { - return collection + private fun innerApplyFilter(collection: Collection): Set = + collection .filter { it.event is ReportEvent && it.event?.isTaggedUser(user.pubkeyHex) == true } .toSet() - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) override fun limit() = 400 } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileZapsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileZapsFeedFilter.kt index 075f03f2d7..3341528294 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileZapsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/UserProfileZapsFeedFilter.kt @@ -24,14 +24,12 @@ import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.ui.screen.ZapReqResponse import com.vitorpamplona.quartz.events.zaps.UserZaps -class UserProfileZapsFeedFilter(val user: User) : FeedFilter() { - override fun feedKey(): String { - return user.pubkeyHex - } +class UserProfileZapsFeedFilter( + val user: User, +) : FeedFilter() { + override fun feedKey(): String = user.pubkeyHex - override fun feed(): List { - return UserZaps.forProfileFeed(user.zaps) - } + override fun feed(): List = UserZaps.forProfileFeed(user.zaps) override fun limit() = 400 } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt index 664fbbb3d2..20629b0d60 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt @@ -31,15 +31,14 @@ import com.vitorpamplona.quartz.events.PeopleListEvent import com.vitorpamplona.quartz.events.VideoHorizontalEvent import com.vitorpamplona.quartz.events.VideoVerticalEvent -class VideoFeedFilter(val account: Account) : AdditiveFeedFilter() { - override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultStoriesFollowList.value - } +class VideoFeedFilter( + val account: Account, +) : AdditiveFeedFilter() { + override fun feedKey(): String = account.userProfile().pubkeyHex + "-" + account.defaultStoriesFollowList.value - override fun showHiddenKey(): Boolean { - return account.defaultStoriesFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || + override fun showHiddenKey(): Boolean = + account.defaultStoriesFollowList.value == PeopleListEvent.blockListFor(account.userProfile().pubkeyHex) || account.defaultStoriesFollowList.value == MuteListEvent.blockListFor(account.userProfile().pubkeyHex) - } override fun feed(): List { val params = buildFilterParams(account) @@ -52,9 +51,7 @@ class VideoFeedFilter(val account: Account) : AdditiveFeedFilter() { return sort(notes) } - override fun applyFilter(collection: Set): Set { - return innerApplyFilter(collection) - } + override fun applyFilter(collection: Set): Set = innerApplyFilter(collection) private fun innerApplyFilter(collection: Collection): Set { val params = buildFilterParams(account) @@ -78,16 +75,13 @@ class VideoFeedFilter(val account: Account) : AdditiveFeedFilter() { account.isAcceptable(it) } - fun buildFilterParams(account: Account): FilterByListParams { - return FilterByListParams.create( + fun buildFilterParams(account: Account): FilterByListParams = + FilterByListParams.create( userHex = account.userProfile().pubkeyHex, selectedListName = account.defaultStoriesFollowList.value, followLists = account.liveStoriesFollowLists.value, hiddenUsers = account.flowHiddenUsers.value, ) - } - override fun sort(collection: Set): List { - return collection.sortedWith(DefaultFeedOrder) - } + override fun sort(collection: Set): List = collection.sortedWith(DefaultFeedOrder) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index d0906b5f17..7debedfc59 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -385,7 +385,12 @@ fun AppNavigation( val activity = LocalContext.current.getActivity() var currentIntentNextPage by remember { - mutableStateOf(activity.intent?.data?.toString()?.ifBlank { null }) + mutableStateOf( + activity.intent + ?.data + ?.toString() + ?.ifBlank { null }, + ) } currentIntentNextPage?.let { intentNextPage -> diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/RouteMaker.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/RouteMaker.kt index ba50cd8b4d..e3911fa22a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/RouteMaker.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/RouteMaker.kt @@ -126,18 +126,10 @@ fun routeToMessage( user: User, draftMessage: String?, accountViewModel: AccountViewModel, -): String { - return routeToMessage(user.pubkeyHex, draftMessage, accountViewModel) -} +): String = routeToMessage(user.pubkeyHex, draftMessage, accountViewModel) -fun routeFor(note: Channel): String { - return "Channel/${note.idHex}" -} +fun routeFor(note: Channel): String = "Channel/${note.idHex}" -fun routeFor(user: User): String { - return "User/${user.pubkeyHex}" -} +fun routeFor(user: User): String = "User/${user.pubkeyHex}" -fun authorRouteFor(note: Note): String { - return "User/${note.author?.pubkeyHex}" -} +fun authorRouteFor(note: Note): String = "User/${note.author?.pubkeyHex}" diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/Loaders.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/Loaders.kt index 1e2d605e95..72af667e77 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/Loaders.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/Loaders.kt @@ -206,7 +206,8 @@ fun LoadCityName( val geoHash = runCatching { geohashStr.toGeoHash() }.getOrNull() if (geoHash != null) { val newCityName = - CachedGeoLocations.geoLocate(geohashStr, geoHash.toLocation(), context) + CachedGeoLocations + .geoLocate(geohashStr, geoHash.toLocation(), context) ?.ifBlank { null } if (newCityName != null && newCityName != cityName) { cityName = newCityName diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt index 5f4949bc8c..33405a42c2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNoteViewModel.kt @@ -86,7 +86,11 @@ class PollNoteViewModel : ViewModel() { valueMinimumBD = valueMinimum?.let { BigDecimal(it) } valueMaximumBD = valueMaximum?.let { BigDecimal(it) } consensusThreshold = - pollEvent?.getTagLong(CONSENSUS_THRESHOLD)?.toFloat()?.div(100)?.toBigDecimal() + pollEvent + ?.getTagLong(CONSENSUS_THRESHOLD) + ?.toFloat() + ?.div(100) + ?.toBigDecimal() closedAt = pollEvent?.getTagLong(CLOSED_AT) totalZapped = BigDecimal.ZERO @@ -138,7 +142,8 @@ class PollNoteViewModel : ViewModel() { fun isVoteAmountAtomic() = valueMaximum != null && valueMinimum != null && valueMinimum == valueMaximum fun isPollClosed(): Boolean = - closedAt?.let { // allow 2 minute leeway for zap to propagate + closedAt?.let { + // allow 2 minute leeway for zap to propagate pollNote?.createdAt()?.plus(it * (86400 + 120))!! < TimeUtils.now() } == true @@ -221,17 +226,16 @@ class PollNoteViewModel : ViewModel() { fun cachedIsPollOptionZappedBy( option: Int, user: User, - ): Boolean { - return pollNote!!.zaps.any { + ): Boolean = + pollNote!!.zaps.any { val zapEvent = it.value?.event as? LnZapEvent val privateZapAuthor = (it.key.event as? LnZapRequestEvent)?.cachedPrivateZap() zapEvent?.zappedPollOption() == option && (it.key.author?.pubkeyHex == user.pubkeyHex || privateZapAuthor?.pubKey == user.pubkeyHex) } - } - private fun zappedPollOptionAmount(option: Int): BigDecimal { - return pollNote?.zaps?.values?.sumOf { + private fun zappedPollOptionAmount(option: Int): BigDecimal = + pollNote?.zaps?.values?.sumOf { val event = it?.event as? LnZapEvent val zapAmount = event?.amount ?: BigDecimal.ZERO val isValidAmount = isValidInputVoteAmount(event?.amount) @@ -243,10 +247,9 @@ class PollNoteViewModel : ViewModel() { } } ?: BigDecimal.ZERO - } - private fun totalZapped(): BigDecimal { - return pollNote?.zaps?.values?.sumOf { + private fun totalZapped(): BigDecimal = + pollNote?.zaps?.values?.sumOf { val zapEvent = (it?.event as? LnZapEvent) val zapAmount = zapEvent?.amount ?: BigDecimal.ZERO val isValidAmount = isValidInputVoteAmount(zapEvent?.amount) @@ -258,7 +261,6 @@ class PollNoteViewModel : ViewModel() { } } ?: BigDecimal.ZERO - } fun createZapOptionsThatMatchThePollingParameters(): List { val options = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PubKeyFormatter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PubKeyFormatter.kt index 1ef0395157..d06ed9ccb4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PubKeyFormatter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/PubKeyFormatter.kt @@ -23,15 +23,11 @@ package com.vitorpamplona.amethyst.ui.note import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.toHexKey -fun ByteArray.toShortenHex(): String { - return toHexKey().toShortenHex() -} +fun ByteArray.toShortenHex(): String = toHexKey().toShortenHex() fun String.toShortenHex(): String { if (length <= 16) return this return replaceRange(8, length - 8, ":") } -fun HexKey.toDisplayHexKey(): String { - return this.toShortenHex() -} +fun HexKey.toDisplayHexKey(): String = this.toShortenHex() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeDrawer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeDrawer.kt index 3ede38d988..a030c4dd22 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeDrawer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeDrawer.kt @@ -161,32 +161,31 @@ fun DrawScope.drawAllQrCodeDataBits( second = bytes.height, ), ), - ) - .forEach { section -> - for (y in section.first.second until section.second.second) { - for (x in section.first.first until section.second.first) { - if (bytes[x, y] == 1.toByte()) { - drawPath( - color = color, - path = - newPath { - addRect( - rect = - Rect( - offset = - Offset( - x = QR_MARGIN_PX + x * size.width, - y = QR_MARGIN_PX + y * size.height, - ), - size = size, - ), - ) - }, - ) - } + ).forEach { section -> + for (y in section.first.second until section.second.second) { + for (x in section.first.first until section.second.first) { + if (bytes[x, y] == 1.toByte()) { + drawPath( + color = color, + path = + newPath { + addRect( + rect = + Rect( + offset = + Offset( + x = QR_MARGIN_PX + x * size.width, + y = QR_MARGIN_PX + y * size.height, + ), + size = size, + ), + ) + }, + ) } } } + } } const val FINDER_PATTERN_ROW_COUNT = 7 @@ -216,15 +215,14 @@ internal fun DrawScope.drawQrCodeFinders( Offset(x = sideLength - (QR_MARGIN_PX + finderPatternSize.width), y = QR_MARGIN_PX), // Draw bottom finder pattern. Offset(x = QR_MARGIN_PX, y = sideLength - (QR_MARGIN_PX + finderPatternSize.height)), - ) - .forEach { offset -> - drawQrCodeFinder( - topLeft = offset, - finderPatternSize = finderPatternSize, - cornerRadius = CornerRadius.Zero, - color = color, - ) - } + ).forEach { offset -> + drawQrCodeFinder( + topLeft = offset, + finderPatternSize = finderPatternSize, + cornerRadius = CornerRadius.Zero, + color = color, + ) + } } /** This func is responsible for drawing a single finder pattern, for a QR code */ diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountState.kt index c92cc8ed6f..af7f2d5b4e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountState.kt @@ -27,11 +27,15 @@ sealed class AccountState { object LoggedOff : AccountState() - class LoggedInViewOnly(val account: Account) : AccountState() { + class LoggedInViewOnly( + val account: Account, + ) : AccountState() { val currentViewModelStore = AccountCentricViewModelStore(account) } - class LoggedIn(val account: Account) : AccountState() { + class LoggedIn( + val account: Account, + ) : AccountState() { val currentViewModelStore = AccountCentricViewModelStore(account) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt index a492d570a1..1c55e5faee 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt @@ -32,37 +32,38 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap @Immutable -abstract class Card() { +abstract class Card { abstract fun createdAt(): Long abstract fun id(): String } @Immutable -class BadgeCard(val note: Note) : Card() { - override fun createdAt(): Long { - return note.createdAt() ?: 0 - } +class BadgeCard( + val note: Note, +) : Card() { + override fun createdAt(): Long = note.createdAt() ?: 0 override fun id() = note.idHex } @Immutable -class NoteCard(val note: Note) : Card() { - override fun createdAt(): Long { - return note.createdAt() ?: 0 - } +class NoteCard( + val note: Note, +) : Card() { + override fun createdAt(): Long = note.createdAt() ?: 0 override fun id() = note.idHex } @Immutable -class ZapUserSetCard(val user: User, val zapEvents: ImmutableList) : Card() { +class ZapUserSetCard( + val user: User, + val zapEvents: ImmutableList, +) : Card() { val createdAt = zapEvents.maxOf { it.createdAt() ?: 0 } - override fun createdAt(): Long { - return createdAt - } + override fun createdAt(): Long = createdAt override fun id() = user.pubkeyHex + "U" + createdAt } @@ -95,22 +96,19 @@ class MultiSetCard( ?.content() ?.firstFullCharOrEmoji(ImmutableListOfLists(it.event?.tags() ?: emptyArray())) ?: "+" - } - .mapValues { it.value.toImmutableList() } + }.mapValues { it.value.toImmutableList() } .toImmutableMap() - override fun createdAt(): Long { - return maxCreatedAt - } + override fun createdAt(): Long = maxCreatedAt override fun id() = note.idHex + "X" + maxCreatedAt + "X" + minCreatedAt } @Immutable -class MessageSetCard(val note: Note) : Card() { - override fun createdAt(): Long { - return note.createdAt() ?: 0 - } +class MessageSetCard( + val note: Note, +) : Card() { + override fun createdAt(): Long = note.createdAt() ?: 0 override fun id() = note.idHex } @@ -120,10 +118,14 @@ sealed class CardFeedState { @Immutable object Loading : CardFeedState() @Stable - class Loaded(val feed: MutableState>, val showHidden: MutableState) : - CardFeedState() + class Loaded( + val feed: MutableState>, + val showHidden: MutableState, + ) : CardFeedState() @Immutable object Empty : CardFeedState() - @Immutable class FeedError(val errorMessage: String) : CardFeedState() + @Immutable class FeedError( + val errorMessage: String, + ) : CardFeedState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt index d41d246239..fa8642af1a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt @@ -60,17 +60,21 @@ import java.time.format.DateTimeFormatter import kotlin.time.measureTimedValue @Stable -class NotificationViewModel(val account: Account) : - CardFeedViewModel(NotificationFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NotificationViewModel { - return NotificationViewModel(account) as NotificationViewModel - } +class NotificationViewModel( + val account: Account, +) : CardFeedViewModel(NotificationFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NotificationViewModel = NotificationViewModel(account) as NotificationViewModel } } @Stable -open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), InvalidatableViewModel { +open class CardFeedViewModel( + val localFilter: FeedFilter, +) : ViewModel(), + InvalidatableViewModel { private val _feedContent = MutableStateFlow(CardFeedState.Loading) val feedContent = _feedContent.asStateFlow() @@ -167,7 +171,11 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I .forEach { zapEvent -> val zappedPost = zapEvent.replyTo?.lastOrNull() if (zappedPost != null) { - val zapRequest = zappedPost.zaps.filter { it.value == zapEvent }.keys.firstOrNull() + val zapRequest = + zappedPost.zaps + .filter { it.value == zapEvent } + .keys + .firstOrNull() if (zapRequest != null) { // var newZapRequestEvent = LocalCache.checkPrivateZap(zapRequest.event as Event) // zapRequest.event = newZapRequestEvent @@ -182,7 +190,11 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I LocalCache.getUserIfExists(it) // don't create user if it doesn't exist } if (author != null) { - val zapRequest = author.zaps.filter { it.value == zapEvent }.keys.firstOrNull() + val zapRequest = + author.zaps + .filter { it.value == zapEvent } + .keys + .firstOrNull() if (zapRequest != null) { zapsPerUser .getOrPut(author, { mutableListOf() }) @@ -218,7 +230,8 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I val singleList = (boostsInCard + zapsInCard.map { it.response } + reactionsInCard).groupBy { sdf.format( - Instant.ofEpochSecond(it.createdAt() ?: 0) + Instant + .ofEpochSecond(it.createdAt() ?: 0) .atZone(ZoneId.systemDefault()) .toLocalDateTime(), ) @@ -242,10 +255,8 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I zapsInCard.filter { it.response in chunk }.toImmutableList(), ) } - } - .flatten() - } - .flatten() + }.flatten() + }.flatten() val userZaps = zapsPerUser @@ -253,7 +264,8 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I val byDay = user.value.groupBy { sdf.format( - Instant.ofEpochSecond(it.createdAt() ?: 0) + Instant + .ofEpochSecond(it.createdAt() ?: 0) .atZone(ZoneId.systemDefault()) .toLocalDateTime(), ) @@ -268,8 +280,7 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I .toImmutableList(), ) } - } - .flatten() + }.flatten() val textNoteCards = notes @@ -278,8 +289,7 @@ open class CardFeedViewModel(val localFilter: FeedFilter) : ViewModel(), I it.event !is RepostEvent && it.event !is GenericRepostEvent && it.event !is LnZapEvent - } - .map { + }.map { if (it.event is PrivateDmEvent || it.event is ChatMessageEvent) { MessageSetCard(it) } else if (it.event is BadgeAwardEvent) { @@ -464,7 +474,10 @@ fun equalImmutableLists( } @Immutable -data class CombinedZap(val request: Note, val response: Note) { +data class CombinedZap( + val request: Note, + val response: Note, +) { fun createdAt() = response.createdAt() fun idHex() = response.idHex diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedState.kt index 4061e144cd..3e92c707aa 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedState.kt @@ -34,5 +34,7 @@ sealed class FeedState { object Empty : FeedState() - class FeedError(val errorMessage: String) : FeedState() + class FeedError( + val errorMessage: String, + ) : FeedState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt index 422bd15a2c..94e80f3429 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt @@ -73,248 +73,302 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -class NostrChannelFeedViewModel(val channel: Channel, val account: Account) : - FeedViewModel(ChannelFeedFilter(channel, account)) { - class Factory(val channel: Channel, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrChannelFeedViewModel { - return NostrChannelFeedViewModel(channel, account) as NostrChannelFeedViewModel - } +class NostrChannelFeedViewModel( + val channel: Channel, + val account: Account, +) : FeedViewModel(ChannelFeedFilter(channel, account)) { + class Factory( + val channel: Channel, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrChannelFeedViewModel = NostrChannelFeedViewModel(channel, account) as NostrChannelFeedViewModel } } -class NostrChatroomFeedViewModel(val user: ChatroomKey, val account: Account) : - FeedViewModel(ChatroomFeedFilter(user, account)) { - class Factory(val user: ChatroomKey, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrChatRoomFeedViewModel { - return NostrChatroomFeedViewModel(user, account) as NostrChatRoomFeedViewModel - } +class NostrChatroomFeedViewModel( + val user: ChatroomKey, + val account: Account, +) : FeedViewModel(ChatroomFeedFilter(user, account)) { + class Factory( + val user: ChatroomKey, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrChatRoomFeedViewModel = NostrChatroomFeedViewModel(user, account) as NostrChatRoomFeedViewModel } } @Stable -class NostrVideoFeedViewModel(val account: Account) : FeedViewModel(VideoFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrVideoFeedViewModel { - return NostrVideoFeedViewModel(account) as NostrVideoFeedViewModel - } +class NostrVideoFeedViewModel( + val account: Account, +) : FeedViewModel(VideoFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrVideoFeedViewModel = NostrVideoFeedViewModel(account) as NostrVideoFeedViewModel } } -class NostrDiscoverMarketplaceFeedViewModel(val account: Account) : - FeedViewModel( +class NostrDiscoverMarketplaceFeedViewModel( + val account: Account, +) : FeedViewModel( DiscoverMarketplaceFeedFilter(account), ) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDiscoverMarketplaceFeedViewModel { - return NostrDiscoverMarketplaceFeedViewModel(account) as NostrDiscoverMarketplaceFeedViewModel - } + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDiscoverMarketplaceFeedViewModel = NostrDiscoverMarketplaceFeedViewModel(account) as NostrDiscoverMarketplaceFeedViewModel } } -class NostrDiscoverNIP89FeedViewModel(val account: Account) : - FeedViewModel( +class NostrDiscoverNIP89FeedViewModel( + val account: Account, +) : FeedViewModel( DiscoverNIP89FeedFilter(account), ) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDiscoverNIP89FeedViewModel { - return NostrDiscoverNIP89FeedViewModel(account) as NostrDiscoverNIP89FeedViewModel - } + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDiscoverNIP89FeedViewModel = NostrDiscoverNIP89FeedViewModel(account) as NostrDiscoverNIP89FeedViewModel } } -class NostrDiscoverLiveFeedViewModel(val account: Account) : - FeedViewModel(DiscoverLiveFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDiscoverLiveFeedViewModel { - return NostrDiscoverLiveFeedViewModel(account) as NostrDiscoverLiveFeedViewModel - } +class NostrDiscoverLiveFeedViewModel( + val account: Account, +) : FeedViewModel(DiscoverLiveFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDiscoverLiveFeedViewModel = NostrDiscoverLiveFeedViewModel(account) as NostrDiscoverLiveFeedViewModel } } -class NostrDiscoverCommunityFeedViewModel(val account: Account) : - FeedViewModel(DiscoverCommunityFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDiscoverCommunityFeedViewModel { - return NostrDiscoverCommunityFeedViewModel(account) as NostrDiscoverCommunityFeedViewModel - } +class NostrDiscoverCommunityFeedViewModel( + val account: Account, +) : FeedViewModel(DiscoverCommunityFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDiscoverCommunityFeedViewModel = NostrDiscoverCommunityFeedViewModel(account) as NostrDiscoverCommunityFeedViewModel } } -class NostrDiscoverChatFeedViewModel(val account: Account) : - FeedViewModel(DiscoverChatFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDiscoverChatFeedViewModel { - return NostrDiscoverChatFeedViewModel(account) as NostrDiscoverChatFeedViewModel - } +class NostrDiscoverChatFeedViewModel( + val account: Account, +) : FeedViewModel(DiscoverChatFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDiscoverChatFeedViewModel = NostrDiscoverChatFeedViewModel(account) as NostrDiscoverChatFeedViewModel } } -class NostrThreadFeedViewModel(account: Account, noteId: String) : - FeedViewModel(ThreadFeedFilter(account, noteId)) { - class Factory(val account: Account, val noteId: String) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrThreadFeedViewModel { - return NostrThreadFeedViewModel(account, noteId) as NostrThreadFeedViewModel - } +class NostrThreadFeedViewModel( + account: Account, + noteId: String, +) : FeedViewModel(ThreadFeedFilter(account, noteId)) { + class Factory( + val account: Account, + val noteId: String, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrThreadFeedViewModel = NostrThreadFeedViewModel(account, noteId) as NostrThreadFeedViewModel } } -class NostrUserProfileNewThreadsFeedViewModel(val user: User, val account: Account) : - FeedViewModel(UserProfileNewThreadFeedFilter(user, account)) { - class Factory(val user: User, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileNewThreadsFeedViewModel { - return NostrUserProfileNewThreadsFeedViewModel(user, account) +class NostrUserProfileNewThreadsFeedViewModel( + val user: User, + val account: Account, +) : FeedViewModel(UserProfileNewThreadFeedFilter(user, account)) { + class Factory( + val user: User, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileNewThreadsFeedViewModel = + NostrUserProfileNewThreadsFeedViewModel(user, account) as NostrUserProfileNewThreadsFeedViewModel - } } } -class NostrUserProfileConversationsFeedViewModel(val user: User, val account: Account) : - FeedViewModel(UserProfileConversationsFeedFilter(user, account)) { - class Factory(val user: User, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileConversationsFeedViewModel { - return NostrUserProfileConversationsFeedViewModel(user, account) +class NostrUserProfileConversationsFeedViewModel( + val user: User, + val account: Account, +) : FeedViewModel(UserProfileConversationsFeedFilter(user, account)) { + class Factory( + val user: User, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileConversationsFeedViewModel = + NostrUserProfileConversationsFeedViewModel(user, account) as NostrUserProfileConversationsFeedViewModel - } } } -class NostrHashtagFeedViewModel(val hashtag: String, val account: Account) : - FeedViewModel(HashtagFeedFilter(hashtag, account)) { - class Factory(val hashtag: String, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrHashtagFeedViewModel { - return NostrHashtagFeedViewModel(hashtag, account) as NostrHashtagFeedViewModel - } +class NostrHashtagFeedViewModel( + val hashtag: String, + val account: Account, +) : FeedViewModel(HashtagFeedFilter(hashtag, account)) { + class Factory( + val hashtag: String, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrHashtagFeedViewModel = NostrHashtagFeedViewModel(hashtag, account) as NostrHashtagFeedViewModel } } -class NostrGeoHashFeedViewModel(val geohash: String, val account: Account) : - FeedViewModel(GeoHashFeedFilter(geohash, account)) { - class Factory(val geohash: String, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrGeoHashFeedViewModel { - return NostrGeoHashFeedViewModel(geohash, account) as NostrGeoHashFeedViewModel - } +class NostrGeoHashFeedViewModel( + val geohash: String, + val account: Account, +) : FeedViewModel(GeoHashFeedFilter(geohash, account)) { + class Factory( + val geohash: String, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrGeoHashFeedViewModel = NostrGeoHashFeedViewModel(geohash, account) as NostrGeoHashFeedViewModel } } -class NostrCommunityFeedViewModel(val note: AddressableNote, val account: Account) : - FeedViewModel(CommunityFeedFilter(note, account)) { - class Factory(val note: AddressableNote, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrCommunityFeedViewModel { - return NostrCommunityFeedViewModel(note, account) as NostrCommunityFeedViewModel - } +class NostrCommunityFeedViewModel( + val note: AddressableNote, + val account: Account, +) : FeedViewModel(CommunityFeedFilter(note, account)) { + class Factory( + val note: AddressableNote, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrCommunityFeedViewModel = NostrCommunityFeedViewModel(note, account) as NostrCommunityFeedViewModel } } -class NostrUserProfileReportFeedViewModel(val user: User) : - FeedViewModel(UserProfileReportsFeedFilter(user)) { - class Factory(val user: User) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileReportFeedViewModel { - return NostrUserProfileReportFeedViewModel(user) as NostrUserProfileReportFeedViewModel - } +class NostrUserProfileReportFeedViewModel( + val user: User, +) : FeedViewModel(UserProfileReportsFeedFilter(user)) { + class Factory( + val user: User, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileReportFeedViewModel = NostrUserProfileReportFeedViewModel(user) as NostrUserProfileReportFeedViewModel } } -class NostrUserProfileBookmarksFeedViewModel(val user: User, val account: Account) : - FeedViewModel(UserProfileBookmarksFeedFilter(user, account)) { - class Factory(val user: User, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileBookmarksFeedViewModel { - return NostrUserProfileBookmarksFeedViewModel(user, account) +class NostrUserProfileBookmarksFeedViewModel( + val user: User, + val account: Account, +) : FeedViewModel(UserProfileBookmarksFeedFilter(user, account)) { + class Factory( + val user: User, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileBookmarksFeedViewModel = + NostrUserProfileBookmarksFeedViewModel(user, account) as NostrUserProfileBookmarksFeedViewModel - } } } -class NostrChatroomListKnownFeedViewModel(val account: Account) : - FeedViewModel(ChatroomListKnownFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrChatroomListKnownFeedViewModel { - return NostrChatroomListKnownFeedViewModel(account) as NostrChatroomListKnownFeedViewModel - } +class NostrChatroomListKnownFeedViewModel( + val account: Account, +) : FeedViewModel(ChatroomListKnownFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrChatroomListKnownFeedViewModel = NostrChatroomListKnownFeedViewModel(account) as NostrChatroomListKnownFeedViewModel } } -class NostrChatroomListNewFeedViewModel(val account: Account) : - FeedViewModel(ChatroomListNewFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrChatroomListNewFeedViewModel { - return NostrChatroomListNewFeedViewModel(account) as NostrChatroomListNewFeedViewModel - } +class NostrChatroomListNewFeedViewModel( + val account: Account, +) : FeedViewModel(ChatroomListNewFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrChatroomListNewFeedViewModel = NostrChatroomListNewFeedViewModel(account) as NostrChatroomListNewFeedViewModel } } @Stable -class NostrHomeFeedViewModel(val account: Account) : - FeedViewModel(HomeNewThreadFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrHomeFeedViewModel { - return NostrHomeFeedViewModel(account) as NostrHomeFeedViewModel - } +class NostrHomeFeedViewModel( + val account: Account, +) : FeedViewModel(HomeNewThreadFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrHomeFeedViewModel = NostrHomeFeedViewModel(account) as NostrHomeFeedViewModel } } @Stable -class NostrHomeRepliesFeedViewModel(val account: Account) : - FeedViewModel(HomeConversationsFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrHomeRepliesFeedViewModel { - return NostrHomeRepliesFeedViewModel(account) as NostrHomeRepliesFeedViewModel - } +class NostrHomeRepliesFeedViewModel( + val account: Account, +) : FeedViewModel(HomeConversationsFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrHomeRepliesFeedViewModel = NostrHomeRepliesFeedViewModel(account) as NostrHomeRepliesFeedViewModel } } @Stable -class NostrBookmarkPublicFeedViewModel(val account: Account) : - FeedViewModel(BookmarkPublicFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrBookmarkPublicFeedViewModel { - return NostrBookmarkPublicFeedViewModel(account) as NostrBookmarkPublicFeedViewModel - } +class NostrBookmarkPublicFeedViewModel( + val account: Account, +) : FeedViewModel(BookmarkPublicFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrBookmarkPublicFeedViewModel = NostrBookmarkPublicFeedViewModel(account) as NostrBookmarkPublicFeedViewModel } } @Stable -class NostrBookmarkPrivateFeedViewModel(val account: Account) : - FeedViewModel(BookmarkPrivateFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrBookmarkPrivateFeedViewModel { - return NostrBookmarkPrivateFeedViewModel(account) as NostrBookmarkPrivateFeedViewModel - } +class NostrBookmarkPrivateFeedViewModel( + val account: Account, +) : FeedViewModel(BookmarkPrivateFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrBookmarkPrivateFeedViewModel = NostrBookmarkPrivateFeedViewModel(account) as NostrBookmarkPrivateFeedViewModel } } @Stable -class NostrNIP90ContentDiscoveryFeedViewModel(val account: Account, val dvmkey: String, val requestid: String) : - FeedViewModel(NIP90ContentDiscoveryResponseFilter(account, dvmkey, requestid)) { - class Factory(val account: Account, val dvmkey: String, val requestid: String) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrNIP90ContentDiscoveryFeedViewModel { - return NostrNIP90ContentDiscoveryFeedViewModel(account, dvmkey, requestid) as NostrNIP90ContentDiscoveryFeedViewModel - } +class NostrNIP90ContentDiscoveryFeedViewModel( + val account: Account, + val dvmkey: String, + val requestid: String, +) : FeedViewModel(NIP90ContentDiscoveryResponseFilter(account, dvmkey, requestid)) { + class Factory( + val account: Account, + val dvmkey: String, + val requestid: String, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrNIP90ContentDiscoveryFeedViewModel = NostrNIP90ContentDiscoveryFeedViewModel(account, dvmkey, requestid) as NostrNIP90ContentDiscoveryFeedViewModel } } @Stable -class NostrDraftEventsFeedViewModel(val account: Account) : - FeedViewModel(DraftEventsFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrDraftEventsFeedViewModel { - return NostrDraftEventsFeedViewModel(account) as NostrDraftEventsFeedViewModel - } +class NostrDraftEventsFeedViewModel( + val account: Account, +) : FeedViewModel(DraftEventsFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrDraftEventsFeedViewModel = NostrDraftEventsFeedViewModel(account) as NostrDraftEventsFeedViewModel } } -class NostrUserAppRecommendationsFeedViewModel(val user: User) : - FeedViewModel(UserProfileAppRecommendationsFeedFilter(user)) { - class Factory(val user: User) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserAppRecommendationsFeedViewModel { - return NostrUserAppRecommendationsFeedViewModel(user) +class NostrUserAppRecommendationsFeedViewModel( + val user: User, +) : FeedViewModel(UserProfileAppRecommendationsFeedFilter(user)) { + class Factory( + val user: User, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserAppRecommendationsFeedViewModel = + NostrUserAppRecommendationsFeedViewModel(user) as NostrUserAppRecommendationsFeedViewModel - } } } @Stable -abstract class FeedViewModel(val localFilter: FeedFilter) : - ViewModel(), InvalidatableViewModel { +abstract class FeedViewModel( + val localFilter: FeedFilter, +) : ViewModel(), + InvalidatableViewModel { private val _feedContent = MutableStateFlow(FeedState.Loading) val feedContent = _feedContent.asStateFlow() @@ -391,7 +445,9 @@ abstract class FeedViewModel(val localFilter: FeedFilter) : } else { val deletedEventIds = deletionEvents.flatMapTo(HashSet()) { it.deleteEvents() } val deletedEventAddresses = deletionEvents.flatMapTo(HashSet()) { it.deleteAddresses() } - oldNotesState.feed.value.filter { !it.wasOrShouldBeDeletedBy(deletedEventIds, deletedEventAddresses) }.toImmutableList() + oldNotesState.feed.value + .filter { !it.wasOrShouldBeDeletedBy(deletedEventIds, deletedEventAddresses) } + .toImmutableList() } val newList = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedState.kt index 387dc1f9bb..afc9e3002e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedState.kt @@ -26,15 +26,22 @@ import androidx.compose.runtime.Stable import com.vitorpamplona.amethyst.model.Note import kotlinx.collections.immutable.ImmutableList -@Immutable data class ZapReqResponse(val zapRequest: Note, val zapEvent: Note) +@Immutable data class ZapReqResponse( + val zapRequest: Note, + val zapEvent: Note, +) @Stable sealed class LnZapFeedState { object Loading : LnZapFeedState() - class Loaded(val feed: MutableState>) : LnZapFeedState() + class Loaded( + val feed: MutableState>, + ) : LnZapFeedState() object Empty : LnZapFeedState() - class FeedError(val errorMessage: String) : LnZapFeedState() + class FeedError( + val errorMessage: String, + ) : LnZapFeedState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt index a0db78fc0b..0f5ba5c8c2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/LnZapFeedViewModel.kt @@ -41,17 +41,20 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -class NostrUserProfileZapsFeedViewModel(user: User) : - LnZapFeedViewModel(UserProfileZapsFeedFilter(user)) { - class Factory(val user: User) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileZapsFeedViewModel { - return NostrUserProfileZapsFeedViewModel(user) as NostrUserProfileZapsFeedViewModel - } +class NostrUserProfileZapsFeedViewModel( + user: User, +) : LnZapFeedViewModel(UserProfileZapsFeedFilter(user)) { + class Factory( + val user: User, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileZapsFeedViewModel = NostrUserProfileZapsFeedViewModel(user) as NostrUserProfileZapsFeedViewModel } } @Stable -open class LnZapFeedViewModel(val dataSource: FeedFilter) : ViewModel() { +open class LnZapFeedViewModel( + val dataSource: FeedFilter, +) : ViewModel() { private val _feedContent = MutableStateFlow(LnZapFeedState.Loading) val feedContent = _feedContent.asStateFlow() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt index 38b5550b16..37889bcf8d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt @@ -50,7 +50,9 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @Stable -class RelayFeedViewModel : ViewModel(), InvalidatableViewModel { +class RelayFeedViewModel : + ViewModel(), + InvalidatableViewModel { val order = compareByDescending { it.lastEvent } .thenByDescending { it.counter } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedState.kt index 14aec737f3..37612a9e2e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedState.kt @@ -26,9 +26,13 @@ import kotlinx.collections.immutable.ImmutableList sealed class StringFeedState { object Loading : StringFeedState() - class Loaded(val feed: MutableState>) : StringFeedState() + class Loaded( + val feed: MutableState>, + ) : StringFeedState() object Empty : StringFeedState() - class FeedError(val errorMessage: String) : StringFeedState() + class FeedError( + val errorMessage: String, + ) : StringFeedState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt index 600d8b7566..fc04151a0b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/StringFeedViewModel.kt @@ -41,20 +41,23 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -class NostrHiddenWordsFeedViewModel(val account: Account) : - StringFeedViewModel( +class NostrHiddenWordsFeedViewModel( + val account: Account, +) : StringFeedViewModel( HiddenWordsFeedFilter(account), ) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrHiddenWordsFeedViewModel { - return NostrHiddenWordsFeedViewModel(account) as NostrHiddenWordsFeedViewModel - } + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrHiddenWordsFeedViewModel = NostrHiddenWordsFeedViewModel(account) as NostrHiddenWordsFeedViewModel } } @Stable -open class StringFeedViewModel(val dataSource: FeedFilter) : - ViewModel(), InvalidatableViewModel { +open class StringFeedViewModel( + val dataSource: FeedFilter, +) : ViewModel(), + InvalidatableViewModel { private val _feedContent = MutableStateFlow(StringFeedState.Loading) val feedContent = _feedContent.asStateFlow() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedState.kt index 2feffee929..ceea2886ec 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedState.kt @@ -27,9 +27,13 @@ import kotlinx.collections.immutable.ImmutableList sealed class UserFeedState { object Loading : UserFeedState() - class Loaded(val feed: MutableState>) : UserFeedState() + class Loaded( + val feed: MutableState>, + ) : UserFeedState() object Empty : UserFeedState() - class FeedError(val errorMessage: String) : UserFeedState() + class FeedError( + val errorMessage: String, + ) : UserFeedState() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt index 252d3fdb07..8cb420a1f2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt @@ -45,47 +45,59 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -class NostrUserProfileFollowsUserFeedViewModel(val user: User, val account: Account) : - UserFeedViewModel(UserProfileFollowsFeedFilter(user, account)) { - class Factory(val user: User, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileFollowsUserFeedViewModel { - return NostrUserProfileFollowsUserFeedViewModel(user, account) +class NostrUserProfileFollowsUserFeedViewModel( + val user: User, + val account: Account, +) : UserFeedViewModel(UserProfileFollowsFeedFilter(user, account)) { + class Factory( + val user: User, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileFollowsUserFeedViewModel = + NostrUserProfileFollowsUserFeedViewModel(user, account) as NostrUserProfileFollowsUserFeedViewModel - } } } -class NostrUserProfileFollowersUserFeedViewModel(val user: User, val account: Account) : - UserFeedViewModel(UserProfileFollowersFeedFilter(user, account)) { - class Factory(val user: User, val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrUserProfileFollowersUserFeedViewModel { - return NostrUserProfileFollowersUserFeedViewModel(user, account) +class NostrUserProfileFollowersUserFeedViewModel( + val user: User, + val account: Account, +) : UserFeedViewModel(UserProfileFollowersFeedFilter(user, account)) { + class Factory( + val user: User, + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrUserProfileFollowersUserFeedViewModel = + NostrUserProfileFollowersUserFeedViewModel(user, account) as NostrUserProfileFollowersUserFeedViewModel - } } } -class NostrHiddenAccountsFeedViewModel(val account: Account) : - UserFeedViewModel(HiddenAccountsFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrHiddenAccountsFeedViewModel { - return NostrHiddenAccountsFeedViewModel(account) as NostrHiddenAccountsFeedViewModel - } +class NostrHiddenAccountsFeedViewModel( + val account: Account, +) : UserFeedViewModel(HiddenAccountsFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrHiddenAccountsFeedViewModel = NostrHiddenAccountsFeedViewModel(account) as NostrHiddenAccountsFeedViewModel } } -class NostrSpammerAccountsFeedViewModel(val account: Account) : - UserFeedViewModel(SpammerAccountsFeedFilter(account)) { - class Factory(val account: Account) : ViewModelProvider.Factory { - override fun create(modelClass: Class): NostrSpammerAccountsFeedViewModel { - return NostrSpammerAccountsFeedViewModel(account) as NostrSpammerAccountsFeedViewModel - } +class NostrSpammerAccountsFeedViewModel( + val account: Account, +) : UserFeedViewModel(SpammerAccountsFeedFilter(account)) { + class Factory( + val account: Account, + ) : ViewModelProvider.Factory { + override fun create(modelClass: Class): NostrSpammerAccountsFeedViewModel = NostrSpammerAccountsFeedViewModel(account) as NostrSpammerAccountsFeedViewModel } } @Stable -open class UserFeedViewModel(val dataSource: FeedFilter) : - ViewModel(), InvalidatableViewModel { +open class UserFeedViewModel( + val dataSource: FeedFilter, +) : ViewModel(), + InvalidatableViewModel { private val _feedContent = MutableStateFlow(UserFeedState.Loading) val feedContent = _feedContent.asStateFlow() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt index bce5dd76b6..3f9c8602e4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt @@ -160,7 +160,11 @@ fun HashtagActionOptions( tag: String, accountViewModel: AccountViewModel, ) { - val userState by accountViewModel.userProfile().live().follows.observeAsState() + val userState by accountViewModel + .userProfile() + .live() + .follows + .observeAsState() val isFollowingTag by remember(userState) { derivedStateOf { userState?.user?.isFollowingHashtagCached(tag) ?: false } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt index d607f0ba50..3412afeaae 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt @@ -221,7 +221,8 @@ fun SummaryBar(model: UserReactionsViewModel) { Row( modifier = - Modifier.padding(vertical = 10.dp, horizontal = 20.dp) + Modifier + .padding(vertical = 10.dp, horizontal = 20.dp) .clickable(onClick = { showChart = !showChart }), ) { ProvideChartStyle( @@ -264,39 +265,36 @@ private fun ObserveAndShowChart( } @Stable -class LabelValueFormatter(val axisLabels: State>) : - AxisValueFormatter { +class LabelValueFormatter( + val axisLabels: State>, +) : AxisValueFormatter { override fun formatValue( value: Float, chartValues: ChartValues, - ): String { - return axisLabels.value[value.roundToInt()] - } + ): String = axisLabels.value[value.roundToInt()] } @Stable -class CountAxisValueFormatter() : AxisValueFormatter { +class CountAxisValueFormatter : AxisValueFormatter { override fun formatValue( value: Float, chartValues: ChartValues, - ): String { - return showCount(value.roundToInt()) - } + ): String = showCount(value.roundToInt()) } @Stable -class AmountAxisValueFormatter(val showDecimals: Boolean) : - AxisValueFormatter { +class AmountAxisValueFormatter( + val showDecimals: Boolean, +) : AxisValueFormatter { override fun formatValue( value: Float, chartValues: ChartValues, - ): String { - return if (showDecimals) { + ): String = + if (showDecimals) { showAmount(value.toBigDecimal()) } else { showAmountAxis(value.toBigDecimal()) } - } } var dfG: DecimalFormat = DecimalFormat("#G") diff --git a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/lang/LanguageTranslatorService.kt b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/lang/LanguageTranslatorService.kt index 6586a0e13f..adc62a017d 100644 --- a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/lang/LanguageTranslatorService.kt +++ b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/lang/LanguageTranslatorService.kt @@ -48,7 +48,8 @@ object LanguageTranslatorService { var executorService = Executors.newCachedThreadPool() private val options = - LanguageIdentificationOptions.Builder() + LanguageIdentificationOptions + .Builder() .setExecutor(executorService) .setConfidenceThreshold(0.6f) .build() @@ -62,9 +63,7 @@ object LanguageTranslatorService { private val translators = object : LruCache(3) { - override fun create(options: TranslatorOptions): Translator { - return Translation.getClient(options) - } + override fun create(options: TranslatorOptions): Translator = Translation.getClient(options) override fun entryRemoved( evicted: Boolean, @@ -80,9 +79,7 @@ object LanguageTranslatorService { translators.evictAll() } - fun identifyLanguage(text: String): Task { - return languageIdentification.identifyLanguage(text) - } + fun identifyLanguage(text: String): Task = languageIdentification.identifyLanguage(text) fun translate( text: String, @@ -98,7 +95,8 @@ object LanguageTranslatorService { } val options = - TranslatorOptions.Builder() + TranslatorOptions + .Builder() .setExecutor(executorService) .setSourceLanguage(sourceLangCode) .setTargetLanguage(targetLangCode) @@ -204,8 +202,8 @@ object LanguageTranslatorService { text: String, dontTranslateFrom: Set, translateTo: String, - ): Task { - return identifyLanguage(text).onSuccessTask(executorService) { + ): Task = + identifyLanguage(text).onSuccessTask(executorService) { if (it.equals(translateTo, true)) { Tasks.forCanceled() } else if (it != "und" && !dontTranslateFrom.contains(it)) { @@ -214,5 +212,4 @@ object LanguageTranslatorService { Tasks.forCanceled() } } - } } diff --git a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt index 3b28a38437..a51e4094f0 100644 --- a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt +++ b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt @@ -88,8 +88,7 @@ class PushNotificationReceiverService : FirebaseMessagingService() { } } - fun notificationManager(): NotificationManager { - return ContextCompat.getSystemService(applicationContext, NotificationManager::class.java) + fun notificationManager(): NotificationManager = + ContextCompat.getSystemService(applicationContext, NotificationManager::class.java) as NotificationManager - } } diff --git a/amethyst/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt b/amethyst/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt index e06bdc333e..785a27140d 100644 --- a/amethyst/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt +++ b/amethyst/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt @@ -104,8 +104,7 @@ class CharsetTest { "\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2" + "\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E" + "\uDEC2\uD83E\uDEC2" - ) - .firstFullChar(), + ).firstFullChar(), ) } } diff --git a/amethyst/src/test/java/com/vitorpamplona/amethyst/NewMessageTaggerKeyParseTest.kt b/amethyst/src/test/java/com/vitorpamplona/amethyst/NewMessageTaggerKeyParseTest.kt index 7511e31235..ae82373ddd 100644 --- a/amethyst/src/test/java/com/vitorpamplona/amethyst/NewMessageTaggerKeyParseTest.kt +++ b/amethyst/src/test/java/com/vitorpamplona/amethyst/NewMessageTaggerKeyParseTest.kt @@ -37,17 +37,11 @@ import org.junit.Test class NewMessageTaggerKeyParseTest { val dao: Dao = object : Dao { - override suspend fun getOrCreateUser(hex: String): User { - return User(hex) - } + override suspend fun getOrCreateUser(hex: String): User = User(hex) - override suspend fun getOrCreateNote(hex: String): Note { - return Note(hex) - } + override suspend fun getOrCreateNote(hex: String): Note = Note(hex) - override suspend fun checkGetOrCreateAddressableNote(hex: String): Note? { - return Note(hex) - } + override suspend fun checkGetOrCreateAddressableNote(hex: String): Note? = Note(hex) } @Test diff --git a/amethyst/src/test/java/com/vitorpamplona/amethyst/service/Nip96Test.kt b/amethyst/src/test/java/com/vitorpamplona/amethyst/service/Nip96Test.kt index 44a3505000..d0da8d164a 100644 --- a/amethyst/src/test/java/com/vitorpamplona/amethyst/service/Nip96Test.kt +++ b/amethyst/src/test/java/com/vitorpamplona/amethyst/service/Nip96Test.kt @@ -112,8 +112,7 @@ class Nip96Test { } } } - """ - .trimIndent() + """.trimIndent() @Test() fun parseNostrBuild() { @@ -132,7 +131,13 @@ class Nip96Test { assertEquals("https://nostr.build", info.plans["free"]?.url) assertEquals(26214400L, info.plans["free"]?.maxByteSize) assertEquals(listOf(0, 0), info.plans["free"]?.fileExpiration) - assertEquals(listOf("image", "video"), info.plans["free"]?.mediaTransformations?.keys?.sorted()) + assertEquals( + listOf("image", "video"), + info.plans["free"] + ?.mediaTransformations + ?.keys + ?.sorted(), + ) assertEquals(26843545600L, info.plans["creator"]?.maxByteSize) assertEquals(10737418240L, info.plans["professional"]?.maxByteSize) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt index 8c49189c13..fe08e6395d 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Constants.kt @@ -29,9 +29,7 @@ object Constants { setOf(FeedType.FOLLOWS, FeedType.PUBLIC_CHATS, FeedType.PRIVATE_DMS, FeedType.GLOBAL) val activeTypesSearch = setOf(FeedType.SEARCH) - fun convertDefaultRelays(): Array { - return defaultRelays.map { Relay(it.url, it.read, it.write, it.feedTypes) }.toTypedArray() - } + fun convertDefaultRelays(): Array = defaultRelays.map { Relay(it.url, it.read, it.write, it.feedTypes) }.toTypedArray() val defaultRelays = arrayOf( diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt index 4d0ed60e4f..b042363272 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/EOSETime.kt @@ -20,8 +20,8 @@ */ package com.vitorpamplona.ammolite.relays -class EOSETime(var time: Long) { - override fun toString(): String { - return time.toString() - } +class EOSETime( + var time: Long, +) { + override fun toString(): String = time.toString() } diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt index 666b550613..82fa8ed8b4 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt @@ -34,12 +34,18 @@ import kotlinx.coroutines.launch import java.util.UUID import java.util.concurrent.atomic.AtomicBoolean -abstract class NostrDataSource(val debugName: String) { +abstract class NostrDataSource( + val debugName: String, +) { private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) private var subscriptions = mapOf() - data class Counter(val subscriptionId: String, val eventKind: Int, var counter: Int) + data class Counter( + val subscriptionId: String, + val eventKind: Int, + var counter: Int, + ) private var eventCounter = mapOf() var changingFilters = AtomicBoolean() @@ -58,9 +64,7 @@ abstract class NostrDataSource(val debugName: String) { fun hashCodeFields( str1: String, str2: Int, - ): Int { - return 31 * str1.hashCode() + str2.hashCode() - } + ): Int = 31 * str1.hashCode() + str2.hashCode() private val clientListener = object : Client.Listener() { diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt index 0bc96ce90c..40e02dbe5a 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayPool.kt @@ -47,21 +47,13 @@ object RelayPool : Relay.Listener { MutableSharedFlow(1, 1, onBufferOverflow = BufferOverflow.DROP_OLDEST) val statusFlow: SharedFlow = _statusFlow.asSharedFlow() - fun availableRelays(): Int { - return relays.size - } + fun availableRelays(): Int = relays.size - fun connectedRelays(): Int { - return relays.count { it.isConnected() } - } + fun connectedRelays(): Int = relays.count { it.isConnected() } - fun getRelay(url: String): Relay? { - return relays.firstOrNull { it.url == url } - } + fun getRelay(url: String): Relay? = relays.firstOrNull { it.url == url } - fun getRelays(url: String): List { - return relays.filter { it.url == url } - } + fun getRelays(url: String): List = relays.filter { it.url == url } fun getAll() = relays diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt index 2db9be54f8..df0f5a5d15 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/RelayStats.kt @@ -26,9 +26,7 @@ import com.vitorpamplona.quartz.utils.TimeUtils object RelayStats { private val innerCache = mutableMapOf() - fun get(url: String): RelayStat { - return innerCache.getOrPut(url) { RelayStat() } - } + fun get(url: String): RelayStat = innerCache.getOrPut(url) { RelayStat() } fun addBytesReceived( url: String, 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 20b14bcae4..62e907a61c 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/HttpClientManager.kt @@ -59,9 +59,7 @@ object HttpClientManager { } } - fun getDefaultProxy(): Proxy? { - return this.internalProxy - } + fun getDefaultProxy(): Proxy? = this.internalProxy fun setDefaultTimeout(timeout: Duration) { Log.d("HttpClient", "Changing timeout to: $timeout") @@ -87,7 +85,8 @@ object HttpClientManager { ): OkHttpClient { val seconds = if (proxy != null) timeout.seconds * 3 else timeout.seconds val duration = Duration.ofSeconds(seconds) - return OkHttpClient.Builder() + return OkHttpClient + .Builder() .proxy(proxy) .readTimeout(duration) .connectTimeout(duration) @@ -123,8 +122,8 @@ object HttpClientManager { } } - fun getHttpClient(useProxy: Boolean = true): OkHttpClient { - return if (useProxy) { + fun getHttpClient(useProxy: Boolean = true): OkHttpClient = + if (useProxy) { if (this.defaultHttpClient == null) { this.defaultHttpClient = buildHttpClient(internalProxy, defaultTimeout) } @@ -135,13 +134,10 @@ object HttpClientManager { } defaultHttpClientWithoutProxy!! } - } fun initProxy( useProxy: Boolean, hostname: String, port: Int, - ): Proxy? { - return if (useProxy) Proxy(Proxy.Type.SOCKS, InetSocketAddress(hostname, port)) else null - } + ): Proxy? = if (useProxy) Proxy(Proxy.Type.SOCKS, InetSocketAddress(hostname, port)) else null } diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt index 9b09960738..ff549f5e3d 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/service/MainThreadChecker.kt @@ -31,4 +31,6 @@ fun checkNotInMainThread() { fun isMainThread() = Looper.myLooper() == Looper.getMainLooper() -class OnMainThreadException(str: String) : RuntimeException(str) +class OnMainThreadException( + str: String, +) : RuntimeException(str) diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/MetaTagsParserBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/MetaTagsParserBenchmark.kt index 53df805775..273c3d775e 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/MetaTagsParserBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/MetaTagsParserBenchmark.kt @@ -35,8 +35,11 @@ import java.nio.charset.Charset @RunWith(AndroidJUnit4::class) class MetaTagsParserBenchmark { private val html = - getInstrumentation().context.assets.open("github_amethyst.html") - .readBytes().toString(Charset.forName("utf-8")) + getInstrumentation() + .context.assets + .open("github_amethyst.html") + .readBytes() + .toString(Charset.forName("utf-8")) @get:Rule val benchmarkRule = BenchmarkRule() diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/RichTextParserBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/RichTextParserBenchmark.kt index 684c1bc6ab..190eb3ff90 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/RichTextParserBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/RichTextParserBenchmark.kt @@ -59,11 +59,13 @@ class RichTextParserBenchmark { fun parseImageUrl() { benchmarkRule.measureRepeated { assertTrue( - RichTextParser().parseText( - "first https://m.primal.net/HeKw.jpg second", - EmptyTagList, - null, - ).paragraphs[0].words[1] is ImageSegment, + RichTextParser() + .parseText( + "first https://m.primal.net/HeKw.jpg second", + EmptyTagList, + null, + ).paragraphs[0] + .words[1] is ImageSegment, ) } } @@ -72,11 +74,13 @@ class RichTextParserBenchmark { fun parseNoSchemeUrl() { benchmarkRule.measureRepeated { assertTrue( - RichTextParser().parseText( - "first amethyst.social second", - EmptyTagList, - null, - ).paragraphs[0].words[1] is LinkSegment, + RichTextParser() + .parseText( + "first amethyst.social second", + EmptyTagList, + null, + ).paragraphs[0] + .words[1] is LinkSegment, ) } } @@ -85,11 +89,13 @@ class RichTextParserBenchmark { fun parseHashtag() { benchmarkRule.measureRepeated { assertTrue( - RichTextParser().parseText( - "first #amethyst second", - EmptyTagList, - null, - ).paragraphs[0].words[1] is HashTagSegment, + RichTextParser() + .parseText( + "first #amethyst second", + EmptyTagList, + null, + ).paragraphs[0] + .words[1] is HashTagSegment, ) } } diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/BechBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/BechBenchmark.kt index 879200c914..0bd3b3f743 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/BechBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/BechBenchmark.kt @@ -83,8 +83,7 @@ class BechBenchmark { -123, 6, 92, - ) - .map { it.toByte() } + ).map { it.toByte() } benchmarkRule.measureRepeated { assertEquals(expected, myUser.bechToBytes().toList()) } } } diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/ContainsBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/ContainsBenchmark.kt index 112132d3bc..bb5ee9238d 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/ContainsBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/ContainsBenchmark.kt @@ -38,8 +38,7 @@ class ContainsBenchmark { """Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. -""" - .intern() +""".intern() val atTheMiddle = DualCase("Lorem Ipsum".lowercase(), "Lorem Ipsum".uppercase()) val atTheBeginning = DualCase("contrAry".lowercase(), "contrAry".uppercase()) diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt index 8a4744cde8..b18c944c21 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt @@ -43,28 +43,48 @@ class HexBenchmark { @Test fun hexDecodeOurs() { - benchmarkRule.measureRepeated { com.vitorpamplona.quartz.encoders.Hex.decode(testHex) } + benchmarkRule.measureRepeated { + com.vitorpamplona.quartz.encoders.Hex + .decode(testHex) + } } @Test fun hexEncodeOurs() { - val bytes = com.vitorpamplona.quartz.encoders.Hex.decode(testHex) + val bytes = + com.vitorpamplona.quartz.encoders.Hex + .decode(testHex) benchmarkRule.measureRepeated { - assertEquals(testHex, com.vitorpamplona.quartz.encoders.Hex.encode(bytes)) + assertEquals( + testHex, + com.vitorpamplona.quartz.encoders.Hex + .encode(bytes), + ) } } @Test fun hexDecodeBaseSecp() { - benchmarkRule.measureRepeated { fr.acinq.secp256k1.Hex.decode(testHex) } + benchmarkRule.measureRepeated { + fr.acinq.secp256k1.Hex + .decode(testHex) + } } @Test fun hexEncodeBaseSecp() { - val bytes = fr.acinq.secp256k1.Hex.decode(testHex) + val bytes = + fr.acinq.secp256k1.Hex + .decode(testHex) - benchmarkRule.measureRepeated { assertEquals(testHex, fr.acinq.secp256k1.Hex.encode(bytes)) } + benchmarkRule.measureRepeated { + assertEquals( + testHex, + fr.acinq.secp256k1.Hex + .encode(bytes), + ) + } } @Test diff --git a/build.gradle b/build.gradle index bcfa3d173a..306762d2b8 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ subprojects { target '**/*.kt' targetExclude("$layout.buildDirectory/**/*.kt") - ktlint("1.1.0") + ktlint("1.3.1") licenseHeaderFile rootProject.file('spotless/copyright.kt'), "package|import|class|object|sealed|open|interface|abstract " } diff --git a/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserTest.kt b/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserTest.kt index a940c9ca71..81e444c652 100644 --- a/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserTest.kt +++ b/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserTest.kt @@ -681,8 +681,7 @@ class RichTextParserTest { 🕵️ @nostrin "The Nostr Inspector" npub17m7f7q08k4x746s2v45eyvwppck32dcahw7uj2mu5txuswldgqkqw9zms7 - """ - .trimIndent() + """.trimIndent() @Test fun testTextToParse() { @@ -4044,7 +4043,11 @@ class RichTextParserTest { org.junit.Assert.assertTrue(state.customEmoji.isEmpty()) org.junit.Assert.assertEquals( "Hi, how are you doing? ", - state.paragraphs.firstOrNull()?.words?.firstOrNull()?.segmentText, + state.paragraphs + .firstOrNull() + ?.words + ?.firstOrNull() + ?.segmentText, ) } @@ -4071,8 +4074,7 @@ class RichTextParserTest { See how it can be done here: https://lnshort.it/live-stream-embeds/ https://nostr.build/i/fd53fcf5ad950fbe45127e4bcee1b59e8301d41de6beee211f45e344db214e8a.jpg - """ - .trimIndent() + """.trimIndent() val state = RichTextParser() diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/AsyncCachedState.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/AsyncCachedState.kt index 87710c5b06..7d1504e681 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/AsyncCachedState.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/AsyncCachedState.kt @@ -29,26 +29,24 @@ import androidx.compose.runtime.produceState fun produceCachedStateAsync( cache: AsyncCachedState, key: K, -): State { - return produceState(initialValue = cache.cached(key), key1 = key) { +): State = + produceState(initialValue = cache.cached(key), key1 = key) { cache.update(key) { value = it } } -} @Composable fun produceCachedStateAsync( cache: AsyncCachedState, key: String, updateValue: K, -): State { - return produceState(initialValue = cache.cached(updateValue), key1 = key) { +): State = + produceState(initialValue = cache.cached(updateValue), key1 = key) { cache.update(updateValue) { value = it } } -} interface AsyncCachedState { fun cached(k: K): V? @@ -59,12 +57,12 @@ interface AsyncCachedState { ) } -abstract class GenericBaseCacheAsync(capacity: Int) : AsyncCachedState { +abstract class GenericBaseCacheAsync( + capacity: Int, +) : AsyncCachedState { private val cache = LruCache(capacity) - override fun cached(k: K): V? { - return cache[k] - } + override fun cached(k: K): V? = cache[k] override suspend fun update( k: K, diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/CachedState.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/CachedState.kt index 0e9add75fa..3cc746608e 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/CachedState.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/compose/CachedState.kt @@ -29,22 +29,20 @@ import androidx.compose.runtime.produceState fun produceCachedState( cache: CachedState, key: K, -): State { - return produceState(initialValue = cache.cached(key), key1 = key) { +): State = + produceState(initialValue = cache.cached(key), key1 = key) { value = cache.update(key) } -} @Composable fun produceCachedState( cache: CachedState, key: String, updateValue: K, -): State { - return produceState(initialValue = cache.cached(updateValue), key1 = key) { +): State = + produceState(initialValue = cache.cached(updateValue), key1 = key) { value = cache.update(updateValue) } -} interface CachedState { fun cached(k: K): V? @@ -52,12 +50,12 @@ interface CachedState { suspend fun update(k: K): V? } -abstract class GenericBaseCache(capacity: Int) : CachedState { +abstract class GenericBaseCache( + capacity: Int, +) : CachedState { private val cache = LruCache(capacity) - override fun cached(k: K): V? { - return cache[k] - } + override fun cached(k: K): V? = cache[k] override suspend fun update(k: K): V? { cache[k]?.let { return it } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/DeletionIndex.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/DeletionIndex.kt index 642d6f5774..01f777da8f 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/DeletionIndex.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/DeletionIndex.kt @@ -26,7 +26,10 @@ import com.vitorpamplona.quartz.events.DeletionEvent import com.vitorpamplona.quartz.events.Event class DeletionIndex { - data class DeletionRequest(val reference: String, val publicKey: HexKey) : Comparable { + data class DeletionRequest( + val reference: String, + val publicKey: HexKey, + ) : Comparable { override fun compareTo(other: DeletionRequest): Int { val compared = reference.compareTo(other.reference) diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/LargeCache.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/LargeCache.kt index 02e96bd2bf..2df08520bb 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/LargeCache.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/data/LargeCache.kt @@ -167,7 +167,9 @@ fun interface BiFilter { ): Boolean } -class BiFilterCollector(val filter: BiFilter) : BiConsumer { +class BiFilterCollector( + val filter: BiFilter, +) : BiConsumer { var results: ArrayList = ArrayList() override fun accept( @@ -180,7 +182,9 @@ class BiFilterCollector(val filter: BiFilter) : BiConsumer { } } -class BiFilterUniqueCollector(val filter: BiFilter) : BiConsumer { +class BiFilterUniqueCollector( + val filter: BiFilter, +) : BiConsumer { var results: HashSet = HashSet() override fun accept( @@ -200,7 +204,9 @@ fun interface BiMapper { ): R? } -class BiMapCollector(val mapper: BiMapper) : BiConsumer { +class BiMapCollector( + val mapper: BiMapper, +) : BiConsumer { var results: ArrayList = ArrayList() override fun accept( @@ -214,7 +220,9 @@ class BiMapCollector(val mapper: BiMapper) : BiConsumer } } -class BiMapUniqueCollector(val mapper: BiMapper) : BiConsumer { +class BiMapUniqueCollector( + val mapper: BiMapper, +) : BiConsumer { var results: HashSet = HashSet() override fun accept( @@ -228,7 +236,9 @@ class BiMapUniqueCollector(val mapper: BiMapper) : BiConsumer } } -class BiMapFlattenCollector(val mapper: BiMapper?>) : BiConsumer { +class BiMapFlattenCollector( + val mapper: BiMapper?>, +) : BiConsumer { var results: ArrayList = ArrayList() override fun accept( @@ -242,7 +252,9 @@ class BiMapFlattenCollector(val mapper: BiMapper?>) } } -class BiMapFlattenUniqueCollector(val mapper: BiMapper?>) : BiConsumer { +class BiMapFlattenUniqueCollector( + val mapper: BiMapper?>, +) : BiConsumer { var results: HashSet = HashSet() override fun accept( @@ -263,7 +275,9 @@ fun interface BiNotNullMapper { ): R } -class BiNotNullMapCollector(val mapper: BiNotNullMapper) : BiConsumer { +class BiNotNullMapCollector( + val mapper: BiNotNullMapper, +) : BiConsumer { var results: ArrayList = ArrayList() override fun accept( @@ -281,7 +295,10 @@ fun interface BiSumOf { ): Int } -class BiMaxOfCollector(val filter: BiFilter, val comparator: Comparator) : BiConsumer { +class BiMaxOfCollector( + val filter: BiFilter, + val comparator: Comparator, +) : BiConsumer { var maxK: K? = null var maxV: V? = null @@ -298,7 +315,9 @@ class BiMaxOfCollector(val filter: BiFilter, val comparator: Compara } } -class BiSumOfCollector(val mapper: BiSumOf) : BiConsumer { +class BiSumOfCollector( + val mapper: BiSumOf, +) : BiConsumer { var sum = 0 override fun accept( @@ -316,7 +335,9 @@ fun interface BiSumOfLong { ): Long } -class BiSumOfLongCollector(val mapper: BiSumOfLong) : BiConsumer { +class BiSumOfLongCollector( + val mapper: BiSumOfLong, +) : BiConsumer { var sum = 0L override fun accept( @@ -327,7 +348,9 @@ class BiSumOfLongCollector(val mapper: BiSumOfLong) : BiConsumer(val mapper: BiNotNullMapper) : BiConsumer { +class BiGroupByCollector( + val mapper: BiNotNullMapper, +) : BiConsumer { var results = HashMap>() override fun accept( @@ -347,7 +370,9 @@ class BiGroupByCollector(val mapper: BiNotNullMapper) : BiCons } } -class BiCountByGroupCollector(val mapper: BiNotNullMapper) : BiConsumer { +class BiCountByGroupCollector( + val mapper: BiNotNullMapper, +) : BiConsumer { var results = HashMap() override fun accept( @@ -365,7 +390,10 @@ class BiCountByGroupCollector(val mapper: BiNotNullMapper) : B } } -class BiSumByGroupCollector(val mapper: BiNotNullMapper, val sumOf: BiNotNullMapper) : BiConsumer { +class BiSumByGroupCollector( + val mapper: BiNotNullMapper, + val sumOf: BiNotNullMapper, +) : BiConsumer { var results = HashMap() override fun accept( @@ -383,7 +411,9 @@ class BiSumByGroupCollector(val mapper: BiNotNullMapper, val s } } -class BiCountIfCollector(val filter: BiFilter) : BiConsumer { +class BiCountIfCollector( + val filter: BiFilter, +) : BiConsumer { var count = 0 override fun accept( diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Amethyst.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Amethyst.kt index 7d892a11b1..257dc78028 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Amethyst.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Amethyst.kt @@ -129,8 +129,7 @@ public val CustomHashTagIcons.Amethyst: ImageVector curveTo(125.96f, 142.56f, 166.87f, 142.54f, 170.13f, 142.54f) close() } - } - .build() + }.build() return customHashTagIconsAmethyst!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Btc.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Btc.kt index 0b72823585..48c6f69b89 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Btc.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Btc.kt @@ -118,8 +118,7 @@ public val CustomHashTagIcons.Btc: ImageVector curveToRelative(3.1295f, 0.78f, 13.2078f, 2.2358f, 11.5799f, 8.7678f) close() } - } - .build() + }.build() return customHashTagIconsBtc!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Cashu.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Cashu.kt index 3fb29a022f..1f4ad7e404 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Cashu.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Cashu.kt @@ -274,8 +274,7 @@ public val CustomHashTagIcons.Cashu: ImageVector lineToRelative(-9.439f, -0.043f) close() } - } - .build() + }.build() return customHashTagIconsCashu!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Coffee.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Coffee.kt index c0b4a855af..1e5c1b49d6 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Coffee.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Coffee.kt @@ -344,8 +344,7 @@ public val CustomHashTagIcons.Coffee: ImageVector curveTo(338.856f, -2.773f, 332.82f, 9.412f, 335.914f, 14.7f) close() } - } - .build() + }.build() return customHashTagIconsCoffee!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Footstr.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Footstr.kt index 01163d9f21..2128b19351 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Footstr.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Footstr.kt @@ -154,8 +154,7 @@ public val CustomHashTagIcons.Footstr: ImageVector curveToRelative(7.881f, -1.9f, 12.632f, -11.136f, 5.51f, -16.777f) curveToRelative(-3.211f, -2.542f, -8.913f, -2.1f, -12.721f, -1.212f) } - } - .build() + }.build() return customHashTagIconsFootStr!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Grownostr.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Grownostr.kt index f2a8388565..f9bf649e42 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Grownostr.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Grownostr.kt @@ -289,8 +289,7 @@ public val CustomHashTagIcons.Grownostr: ImageVector curveToRelative(-9.678f, 2.827f, -17.397f, 1.076f, -25.003f, 7.709f) close() } - } - .build() + }.build() return customHashTagIconsGrowNostr!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Lightning.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Lightning.kt index f606837008..879430bc16 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Lightning.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Lightning.kt @@ -193,8 +193,7 @@ public val CustomHashTagIcons.Lightning: ImageVector lineTo(276.0f, 279.0f) close() } - } - .build() + }.build() return customHashTagIconsLightning!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Mate.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Mate.kt index 63dda952e5..1a95b82cbf 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Mate.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Mate.kt @@ -232,8 +232,7 @@ public val CustomHashTagIcons.Mate: ImageVector curveToRelative(-2.036f, -1.667f, -3.397f, -3.386f, -4.315f, -3.471f) close() } - } - .build() + }.build() return customHashTagIconsMate!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Nostr.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Nostr.kt index ebf5bfb46a..c28bf3334b 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Nostr.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Nostr.kt @@ -143,8 +143,7 @@ public val CustomHashTagIcons.Nostr: ImageVector curveToRelative(-1.387f, 1.776f, 0.99f, 4.574f, 1.938f, 5.986f) close() } - } - .build() + }.build() return customHashTagIconsNostr!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Plebs.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Plebs.kt index e8c7ba2cbb..e39b23b2c9 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Plebs.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Plebs.kt @@ -166,8 +166,7 @@ public val CustomHashTagIcons.Plebs: ImageVector curveToRelative(23.685f, -4.025f, 130.22f, 11.249f, 120.457f, -7.015f) close() } - } - .build() + }.build() return customHashTagIconsPlebs!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Skull.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Skull.kt index 0d489a0cd4..793658b407 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Skull.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Skull.kt @@ -548,8 +548,7 @@ public val CustomHashTagIcons.Skull: ImageVector curveToRelative(2.294f, -5.109f, 2.624f, -11.389f, 1.046f, -16.732f) close() } - } - .build() + }.build() return customHashTagIconsSkull!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Tunestr.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Tunestr.kt index 62f2ad074f..14c3d65b41 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Tunestr.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Tunestr.kt @@ -136,8 +136,7 @@ public val CustomHashTagIcons.Tunestr: ImageVector curveTo(506.86f, 353.05f, 563.32f, 375.71f, 574.98f, 419.21f) close() } - } - .build() + }.build() return customHashTagIconsTunestr!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Weed.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Weed.kt index 6cf55d6df4..7d7c161a64 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Weed.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Weed.kt @@ -542,8 +542,7 @@ public val CustomHashTagIcons.Weed: ImageVector curveToRelative(-1.99f, 1.4f, -4.1f, 3.02f, -6.42f, 4.75f) close() } - } - .build() + }.build() return customHashTagIconsWeed!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Zap.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Zap.kt index b318ef509c..834c4b459c 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Zap.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/hashtags/Zap.kt @@ -127,8 +127,7 @@ public val CustomHashTagIcons.Zap: ImageVector curveToRelative(4.996f, -0.006f, 7.714f, -0.11f, 12.882f, -0.037f) close() } - } - .build() + }.build() return customHashTagIconsZap!! } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoder.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoder.kt index 5f6841fd7e..a95e9894d2 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoder.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoder.kt @@ -98,16 +98,12 @@ object BlurHashDecoder { private fun decode83At( str: String, at: Int = 0, - ): Int { - return charMap[str[at].code] - } + ): Int = charMap[str[at].code] private fun decode83Fixed2( str: String, from: Int = 0, - ): Int { - return charMap[str[from].code] * 83 + charMap[str[from + 1].code] - } + ): Int = charMap[str[from].code] * 83 + charMap[str[from + 1].code] private fun decode83( str: String, @@ -328,9 +324,9 @@ object BlurHashDecoder { '|', '}', '~', - ) - .mapIndexed { i, c -> c.code to i } - .toMap().let { charMap -> + ).mapIndexed { i, c -> c.code to i } + .toMap() + .let { charMap -> Array(255) { charMap[it] ?: 0 } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoderOld.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoderOld.kt index fa7012e479..ee2429ce29 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoderOld.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/BlurHashDecoderOld.kt @@ -312,7 +312,6 @@ object BlurHashDecoderOld { '|', '}', '~', - ) - .mapIndexed { i, c -> c to i } + ).mapIndexed { i, c -> c to i } .toMap() } diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt index 9d70f82468..4ecdcf149b 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt @@ -22,7 +22,9 @@ package com.vitorpamplona.amethyst.commons.preview import kotlinx.collections.immutable.toImmutableMap -data class MetaTag(private val attrs: Map) { +data class MetaTag( + private val attrs: Map, +) { /** * Returns a value of an attribute specified by its name (case insensitive), or empty string if it doesn't exist. */ @@ -51,9 +53,15 @@ object MetaTagsParser { } } - private data class RawTag(val isEnd: Boolean, val name: String, val attrPart: String) + private data class RawTag( + val isEnd: Boolean, + val name: String, + val attrPart: String, + ) - private class TagScanner(private val input: String) { + private class TagScanner( + private val input: String, + ) { private var p = 0 fun exhausted(): Boolean = p >= input.length diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt index 4937c1f40d..4b2a7495ee 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt @@ -35,56 +35,97 @@ data class RichTextViewerState( ) @Immutable -data class ParagraphState(val words: ImmutableList, val isRTL: Boolean) +data class ParagraphState( + val words: ImmutableList, + val isRTL: Boolean, +) @Immutable -open class Segment(val segmentText: String) +open class Segment( + val segmentText: String, +) @Immutable -class ImageSegment(segment: String) : Segment(segment) +class ImageSegment( + segment: String, +) : Segment(segment) @Immutable -class LinkSegment(segment: String) : Segment(segment) +class LinkSegment( + segment: String, +) : Segment(segment) @Immutable -class EmojiSegment(segment: String) : Segment(segment) +class EmojiSegment( + segment: String, +) : Segment(segment) @Immutable -class InvoiceSegment(segment: String) : Segment(segment) +class InvoiceSegment( + segment: String, +) : Segment(segment) @Immutable -class WithdrawSegment(segment: String) : Segment(segment) +class WithdrawSegment( + segment: String, +) : Segment(segment) @Immutable -class CashuSegment(segment: String) : Segment(segment) +class CashuSegment( + segment: String, +) : Segment(segment) @Immutable -class EmailSegment(segment: String) : Segment(segment) +class EmailSegment( + segment: String, +) : Segment(segment) @Immutable -class PhoneSegment(segment: String) : Segment(segment) +class PhoneSegment( + segment: String, +) : Segment(segment) @Immutable -class BechSegment(segment: String) : Segment(segment) +class BechSegment( + segment: String, +) : Segment(segment) @Immutable -open class HashIndexSegment(segment: String, val hex: String, val extras: String?) : - Segment(segment) +open class HashIndexSegment( + segment: String, + val hex: String, + val extras: String?, +) : Segment(segment) @Immutable -class HashIndexUserSegment(segment: String, hex: String, extras: String?) : - HashIndexSegment(segment, hex, extras) +class HashIndexUserSegment( + segment: String, + hex: String, + extras: String?, +) : HashIndexSegment(segment, hex, extras) @Immutable -class HashIndexEventSegment(segment: String, hex: String, extras: String?) : - HashIndexSegment(segment, hex, extras) +class HashIndexEventSegment( + segment: String, + hex: String, + extras: String?, +) : HashIndexSegment(segment, hex, extras) @Immutable -class HashTagSegment(segment: String, val hashtag: String, val extras: String?) : Segment(segment) +class HashTagSegment( + segment: String, + val hashtag: String, + val extras: String?, +) : Segment(segment) @Immutable -class SchemelessUrlSegment(segment: String, val url: String, val extras: String?) : - Segment(segment) +class SchemelessUrlSegment( + segment: String, + val url: String, + val extras: String?, +) : Segment(segment) @Immutable -class RegularTextSegment(segment: String) : Segment(segment) +class RegularTextSegment( + segment: String, +) : Segment(segment) diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt index a84ec2630f..0a45343afd 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt @@ -139,9 +139,7 @@ fun RobohashPreview() { } class RobohashAssembler { - private fun byteMod10(byte: Byte): Int { - return byte.toUByte().toInt() % 10 - } + private fun byteMod10(byte: Byte): Int = byte.toUByte().toInt() % 10 private fun reduce( start: Int, @@ -153,15 +151,14 @@ class RobohashAssembler { g: Byte, b: Byte, makeLight: Boolean, - ): Color { - return if (makeLight) { + ): Color = + if (makeLight) { // > 150-256 color channels Color(reduce(150, r), reduce(150, g), reduce(150, b)) } else { // < 50-100 color channels Color(reduce(50, r), reduce(50, g), reduce(50, b)) } - } fun build( msg: String, @@ -268,13 +265,14 @@ inline fun roboBuilder( name: String = "", autoMirror: Boolean = false, block: ImageVector.Builder.() -> Unit, -) = ImageVector.Builder( - name = name, - defaultWidth = DefaultSize, - defaultHeight = DefaultSize, - viewportWidth = VIEWPORT_SIZE, - viewportHeight = VIEWPORT_SIZE, - autoMirror = autoMirror, -).apply { - block() -}.build() +) = ImageVector + .Builder( + name = name, + defaultWidth = DefaultSize, + defaultHeight = DefaultSize, + viewportWidth = VIEWPORT_SIZE, + viewportHeight = VIEWPORT_SIZE, + autoMirror = autoMirror, + ).apply { + block() + }.build() diff --git a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPathTest.kt b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPathTest.kt index 5a114de884..d60d479d8f 100644 --- a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPathTest.kt +++ b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPathTest.kt @@ -33,11 +33,11 @@ class Bip39KeyPathTest { .derive(Hardener.hardened(44L)) .derive(Hardener.hardened(1237L)) - private fun nip6Path(account: Long): KeyPath { - return nip6Base.derive(Hardener.hardened(account)) + private fun nip6Path(account: Long): KeyPath = + nip6Base + .derive(Hardener.hardened(account)) .derive(0L) .derive(0L) - } @Test fun testKeyPath() { diff --git a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39MnemonicsTest.kt b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39MnemonicsTest.kt index af0697e1c9..8e804f7b1b 100644 --- a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39MnemonicsTest.kt +++ b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip06/Bip39MnemonicsTest.kt @@ -37,7 +37,10 @@ class Bip39MnemonicsTest { private val tests = jacksonObjectMapper() .readTree( - InstrumentationRegistry.getInstrumentation().context.assets.open("bip39.vectors.json"), + InstrumentationRegistry + .getInstrumentation() + .context.assets + .open("bip39.vectors.json"), ) @Test diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/KeyPair.kt b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/KeyPair.kt index e06f3c3dc2..d6390abc2d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/KeyPair.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/KeyPair.kt @@ -54,7 +54,5 @@ class KeyPair( } } - override fun toString(): String { - return "KeyPair(privateKey=${privKey?.toHexKey()}, publicKey=${pubKey.toHexKey()}" - } + override fun toString(): String = "KeyPair(privateKey=${privKey?.toHexKey()}, publicKey=${pubKey.toHexKey()}" } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/SharedKeyCache.kt b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/SharedKeyCache.kt index 766841128d..810c8925cc 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/SharedKeyCache.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/SharedKeyCache.kt @@ -42,9 +42,7 @@ class SharedKeyCache { fun get( privateKey: ByteArray, pubKey: ByteArray, - ): ByteArray? { - return sharedKeyCache[combinedHashCode(privateKey, pubKey)] - } + ): ByteArray? = sharedKeyCache[combinedHashCode(privateKey, pubKey)] fun add( privateKey: ByteArray, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPath.kt b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPath.kt index f3dcf5227d..e6b84ed8b9 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPath.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip06/Bip39KeyPath.kt @@ -20,24 +20,20 @@ */ package com.vitorpamplona.quartz.crypto.nip06 -class KeyPath(val path: List) { +class KeyPath( + val path: List, +) { constructor(path: String) : this(computePath(path)) val lastChildNumber: Long get() = if (path.isEmpty()) 0L else path.last() fun derive(number: Long): KeyPath = KeyPath(path + listOf(number)) - fun append(index: Long): KeyPath { - return KeyPath(path + listOf(index)) - } + fun append(index: Long): KeyPath = KeyPath(path + listOf(index)) - fun append(indexes: List): KeyPath { - return KeyPath(path + indexes) - } + fun append(indexes: List): KeyPath = KeyPath(path + indexes) - fun append(that: KeyPath): KeyPath { - return KeyPath(path + that.path) - } + fun append(that: KeyPath): KeyPath = KeyPath(path + that.path) override fun toString(): String = asString('\'') diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/ATag.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/ATag.kt index 69fc67c4f2..dd4dcfc7d5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/ATag.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/ATag.kt @@ -24,20 +24,23 @@ import android.util.Log import androidx.compose.runtime.Immutable @Immutable -data class ATag(val kind: Int, val pubKeyHex: String, val dTag: String, val relay: String?) { +data class ATag( + val kind: Int, + val pubKeyHex: String, + val dTag: String, + val relay: String?, +) { fun toTag() = assembleATag(kind, pubKeyHex, dTag) - fun toNAddr(): String { - return TlvBuilder() + fun toNAddr(): String = + TlvBuilder() .apply { addString(Nip19Bech32.TlvTypes.SPECIAL, dTag) addStringIfNotNull(Nip19Bech32.TlvTypes.RELAY, relay) addHex(Nip19Bech32.TlvTypes.AUTHOR, pubKeyHex) addInt(Nip19Bech32.TlvTypes.KIND, kind) - } - .build() + }.build() .toNAddress() - } companion object { fun assembleATag( @@ -46,26 +49,23 @@ data class ATag(val kind: Int, val pubKeyHex: String, val dTag: String, val rela dTag: String, ) = "$kind:$pubKeyHex:$dTag" - fun isATag(key: String): Boolean { - return key.startsWith("naddr1") || key.contains(":") - } + fun isATag(key: String): Boolean = key.startsWith("naddr1") || key.contains(":") fun parse( address: String, relay: String?, - ): ATag? { - return if (address.startsWith("naddr") || address.startsWith("nostr:naddr")) { + ): ATag? = + if (address.startsWith("naddr") || address.startsWith("nostr:naddr")) { parseNAddr(address) } else { parseAtag(address, relay) } - } fun parseAtag( atag: String, relay: String?, - ): ATag? { - return try { + ): ATag? = + try { val parts = atag.split(":") Hex.decode(parts[1]) ATag(parts[0].toInt(), parts[1], parts[2], relay) @@ -73,16 +73,14 @@ data class ATag(val kind: Int, val pubKeyHex: String, val dTag: String, val rela Log.w("ATag", "Error parsing A Tag: $atag: ${t.message}") null } - } - fun parseAtagUnckecked(atag: String): ATag? { - return try { + fun parseAtagUnckecked(atag: String): ATag? = + try { val parts = atag.split(":") ATag(parts[0].toInt(), parts[1], parts[2], null) } catch (t: Throwable) { null } - } fun parseNAddr(naddr: String): ATag? { try { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Bech32Util.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Bech32Util.kt index f3ce3903c1..643da6a5eb 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Bech32Util.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Bech32Util.kt @@ -51,7 +51,9 @@ object Bech32 { const val ALPHABET: String = "qpzry9x8gf2tvdw0s3jn54khce6mua7l" const val ALPHABET_UPPERCASE: String = "QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L" - enum class Encoding(val constant: Int) { + enum class Encoding( + val constant: Int, + ) { Bech32(1), Bech32m(0x2bc830a3), Beck32WithoutChecksum(0), diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt index ec7025ad5b..1dd43bae57 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt @@ -23,23 +23,18 @@ package com.vitorpamplona.quartz.encoders /** Makes the distinction between String and Hex * */ typealias HexKey = String -fun ByteArray.toHexKey(): HexKey { - return Hex.encode(this) -} +fun ByteArray.toHexKey(): HexKey = Hex.encode(this) -fun HexKey.hexToByteArray(): ByteArray { - return Hex.decode(this) -} +fun HexKey.hexToByteArray(): ByteArray = Hex.decode(this) object HexValidator { - private fun isHexChar(c: Char): Boolean { - return when (c) { + private fun isHexChar(c: Char): Boolean = + when (c) { in '0'..'9' -> true in 'a'..'f' -> true in 'A'..'F' -> true else -> false } - } fun isHex(hex: String?): Boolean { if (hex == null) return false diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/LnInvoiceUtil.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/LnInvoiceUtil.kt index 6fadab0566..eb4d0b234a 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/LnInvoiceUtil.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/LnInvoiceUtil.kt @@ -205,7 +205,9 @@ object LnInvoiceUtil { return polymod(combined) == 1 } - class AddressFormatException(message: String) : Exception(message) + class AddressFormatException( + message: String, + ) : Exception(message) fun decodeUnlimitedLength(invoice: String): Boolean { var lower = false @@ -278,19 +280,16 @@ object LnInvoiceUtil { val OneNano = BigDecimal("0.000000001") val OnePico = BigDecimal("0.000000000001") - fun getAmountInSats(invoice: String): BigDecimal { - return getAmount(invoice).multiply(OneHundredK) - } + fun getAmountInSats(invoice: String): BigDecimal = getAmount(invoice).multiply(OneHundredK) - private fun multiplier(multiplier: String): BigDecimal { - return when (multiplier.lowercase()) { + private fun multiplier(multiplier: String): BigDecimal = + when (multiplier.lowercase()) { "m" -> OneMili "u" -> OneMicro "n" -> OneNano "p" -> OnePico else -> throw IllegalArgumentException("Invalid multiplier: $multiplier") } - } /** * Finds LN invoice in the provided input string and returns it. For example for input = "aaa bbb diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Lud06.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Lud06.kt index 775a7c85fa..e8c4e021d0 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Lud06.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Lud06.kt @@ -48,13 +48,12 @@ class Lud06 { } } - fun toLnUrlp(str: String): String? { - return try { + fun toLnUrlp(str: String): String? = + try { String(Bech32.decodeBytes(str, false).second) } catch (t: Throwable) { t.printStackTrace() Log.w("Lud06ToLud16", "Fail to convert LUD06 to LUD16", t) null } - } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip01Serializer.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip01Serializer.kt index 49bf9b8469..ea96077333 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip01Serializer.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip01Serializer.kt @@ -47,9 +47,12 @@ class Nip01Serializer { fun dump() } - class BufferedDigestWriter(val digest: MessageDigest) : Writer { + class BufferedDigestWriter( + val digest: MessageDigest, + ) : Writer { val utf8Encoder = - Charsets.UTF_8.newEncoder() + Charsets.UTF_8 + .newEncoder() .onMalformedInput(CodingErrorAction.IGNORE) .onUnmappableCharacter(CodingErrorAction.IGNORE) @@ -151,9 +154,7 @@ class Nip01Serializer { stringBuilder.append(value.toInt().toChar()) } - override fun toString(): String { - return stringBuilder.toString() - } + override fun toString(): String = stringBuilder.toString() override fun dump() { } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip30CustomEmoji.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip30CustomEmoji.kt index 809a10fdb6..40fd2cf03b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip30CustomEmoji.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip30CustomEmoji.kt @@ -48,9 +48,7 @@ class Nip30CustomEmoji { return input.contains(":") } - fun createEmojiMap(tags: ImmutableListOfLists): Map { - return tags.lists.filter { it.size > 2 && it[0] == "emoji" }.associate { ":${it[1]}:" to it[2] } - } + fun createEmojiMap(tags: ImmutableListOfLists): Map = tags.lists.filter { it.size > 2 && it[0] == "emoji" }.associate { ":${it[1]}:" to it[2] } fun assembleAnnotatedList( input: String, @@ -105,9 +103,13 @@ class Nip30CustomEmoji { } } - @Immutable open class Renderable() + @Immutable open class Renderable - @Immutable class TextType(val text: String) : Renderable() + @Immutable class TextType( + val text: String, + ) : Renderable() - @Immutable class ImageUrlType(val url: String) : Renderable() + @Immutable class ImageUrlType( + val url: String, + ) : Renderable() } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip47WalletConnect.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip47WalletConnect.kt index 0196b779b9..ce77cf6c82 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip47WalletConnect.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip47WalletConnect.kt @@ -52,5 +52,9 @@ class Nip47WalletConnect { } } - data class Nip47URI(val pubKeyHex: HexKey, val relayUri: String?, val secret: HexKey?) + data class Nip47URI( + val pubKeyHex: HexKey, + val relayUri: String?, + val secret: HexKey?, + ) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip54InlineMetadata.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip54InlineMetadata.kt index f9be3b979a..f495298695 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip54InlineMetadata.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip54InlineMetadata.kt @@ -40,17 +40,18 @@ class Nip54InlineMetadata { tags: Array>, ): String { val extension = - tags.mapNotNull { - if (it.isNotEmpty() && it[0] != "url") { - if (it.size > 1) { - "${it[0]}=${URLEncoder.encode(it[1], "utf-8")}" + tags + .mapNotNull { + if (it.isNotEmpty() && it[0] != "url") { + if (it.size > 1) { + "${it[0]}=${URLEncoder.encode(it[1], "utf-8")}" + } else { + "${it[0]}}=" + } } else { - "${it[0]}}=" + null } - } else { - null - } - }.joinToString("&") + }.joinToString("&") return if (imageUrl.contains("#")) { "$imageUrl&$extension" @@ -59,14 +60,13 @@ class Nip54InlineMetadata { } } - fun parse(url: String): Map { - return try { + fun parse(url: String): Map = + try { fragments(URI(url)) } catch (e: Exception) { if (e is CancellationException) throw e emptyMap() } - } private fun fragments(uri: URI): Map { if (uri.rawFragment == null) return emptyMap() diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip92MediaAttachments.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip92MediaAttachments.kt index bd217f8840..6bfc6ece1e 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip92MediaAttachments.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Nip92MediaAttachments.kt @@ -38,8 +38,8 @@ class Nip92MediaAttachments { fun createTag( imageUrl: String, tags: Array>, - ): Array { - return arrayOf( + ): Array = + arrayOf( IMETA, "url $imageUrl", ) + @@ -54,23 +54,22 @@ class Nip92MediaAttachments { null } } - } fun parse( imageUrl: String, tags: Array>, - ): Map { - return tags.firstOrNull { - it.size > 1 && it[0] == IMETA && it[1] == "url $imageUrl" - }?.let { tagList -> - tagList.associate { tag -> - val parts = tag.split(" ", limit = 2) - when (parts.size) { - 2 -> parts[0] to parts[1] - 1 -> parts[0] to "" - else -> "" to "" + ): Map = + tags + .firstOrNull { + it.size > 1 && it[0] == IMETA && it[1] == "url $imageUrl" + }?.let { tagList -> + tagList.associate { tag -> + val parts = tag.split(" ", limit = 2) + when (parts.size) { + 2 -> parts[0] to parts[1] + 1 -> parts[0] to "" + else -> "" to "" + } } - } - } ?: emptyMap() - } + } ?: emptyMap() } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/RelayUrlFormatter.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/RelayUrlFormatter.kt index 2679e9a0b7..bbdd0f2073 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/RelayUrlFormatter.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/RelayUrlFormatter.kt @@ -24,9 +24,12 @@ import org.czeal.rfc3986.URIReference class RelayUrlFormatter { companion object { - fun displayUrl(url: String): String { - return url.trim().removePrefix("wss://").removePrefix("ws://").removeSuffix("/") - } + fun displayUrl(url: String): String = + url + .trim() + .removePrefix("wss://") + .removePrefix("ws://") + .removeSuffix("/") fun normalize(url: String): String { val newUrl = @@ -49,12 +52,11 @@ class RelayUrlFormatter { } } - fun getHttpsUrl(dirtyUrl: String): String { - return if (dirtyUrl.contains("://")) { + fun getHttpsUrl(dirtyUrl: String): String = + if (dirtyUrl.contains("://")) { dirtyUrl.replace("wss://", "https://").replace("ws://", "http://") } else { "https://$dirtyUrl" } - } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Tlv.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Tlv.kt index 81254a688d..284a99f1f4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Tlv.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/Tlv.kt @@ -24,7 +24,7 @@ import java.io.ByteArrayOutputStream import java.nio.ByteBuffer import java.nio.ByteOrder -class TlvBuilder() { +class TlvBuilder { val outputStream = ByteArrayOutputStream() private fun add( @@ -65,9 +65,7 @@ class TlvBuilder() { data: Int?, ) = data?.let { addInt(type, it) } - fun build(): ByteArray { - return outputStream.toByteArray() - } + fun build(): ByteArray = outputStream.toByteArray() } fun Int.to32BitByteArray(): ByteArray { @@ -81,7 +79,9 @@ fun ByteArray.toInt32(): Int? { return ByteBuffer.wrap(this, 0, 4).order(ByteOrder.BIG_ENDIAN).int } -class Tlv(val data: Map>) { +class Tlv( + val data: Map>, +) { fun asInt(type: Byte) = data[type]?.mapNotNull { it.toInt32() } fun asHex(type: Byte) = data[type]?.map { it.toHexKey().intern() } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt index e5add50ad5..8d8e035338 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt @@ -37,8 +37,8 @@ class AdvertisedRelayListEvent( ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { override fun dTag() = FIXED_D_TAG - fun relays(): List { - return tags.mapNotNull { + fun relays(): List = + tags.mapNotNull { if (it.size > 1 && it[0] == "r") { val type = when (it.getOrNull(2)) { @@ -52,24 +52,23 @@ class AdvertisedRelayListEvent( null } } - } - fun readRelays(): List? { - return tags.mapNotNull { - if (it.size > 1 && it[0] == "r") { - when (it.getOrNull(2)) { - "read" -> it[1] - "write" -> null - else -> it[1] + fun readRelays(): List? = + tags + .mapNotNull { + if (it.size > 1 && it[0] == "r") { + when (it.getOrNull(2)) { + "read" -> it[1] + "write" -> null + else -> it[1] + } + } else { + null } - } else { - null - } - }.ifEmpty { null } - } + }.ifEmpty { null } - fun writeRelays(): List { - return tags.mapNotNull { + fun writeRelays(): List = + tags.mapNotNull { if (it.size > 1 && it[0] == "r") { when (it.getOrNull(2)) { "read" -> null @@ -80,20 +79,15 @@ class AdvertisedRelayListEvent( null } } - } companion object { const val KIND = 10002 const val FIXED_D_TAG = "" const val ALT = "Relay list to discover the user's content" - fun createAddressATag(pubKey: HexKey): ATag { - return ATag(KIND, pubKey, FIXED_D_TAG, null) - } + fun createAddressATag(pubKey: HexKey): ATag = ATag(KIND, pubKey, FIXED_D_TAG, null) - fun createAddressTag(pubKey: HexKey): String { - return ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) - } + fun createAddressTag(pubKey: HexKey): String = ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) fun updateRelayList( earlierVersion: AdvertisedRelayListEvent, @@ -103,9 +97,11 @@ class AdvertisedRelayListEvent( onReady: (AdvertisedRelayListEvent) -> Unit, ) { val tags = - earlierVersion.tags.filter { it[0] != "r" }.plus( - relays.map(::createRelayTag), - ).toTypedArray() + earlierVersion.tags + .filter { it[0] != "r" } + .plus( + relays.map(::createRelayTag), + ).toTypedArray() signer.sign(createdAt, KIND, tags, earlierVersion.content, onReady) } @@ -119,20 +115,18 @@ class AdvertisedRelayListEvent( create(relays, signer, createdAt, onReady) } - fun createRelayTag(relay: AdvertisedRelayInfo): Array { - return if (relay.type == AdvertisedRelayType.BOTH) { + fun createRelayTag(relay: AdvertisedRelayInfo): Array = + if (relay.type == AdvertisedRelayType.BOTH) { arrayOf("r", relay.relayUrl) } else { arrayOf("r", relay.relayUrl, relay.type.code) } - } - fun createTagArray(relays: List): Array> { - return relays + fun createTagArray(relays: List): Array> = + relays .map(::createRelayTag) .plusElement(arrayOf("alt", ALT)) .toTypedArray() - } fun create( list: List, @@ -147,10 +141,15 @@ class AdvertisedRelayListEvent( } } - @Immutable data class AdvertisedRelayInfo(val relayUrl: String, val type: AdvertisedRelayType) + @Immutable data class AdvertisedRelayInfo( + val relayUrl: String, + val type: AdvertisedRelayType, + ) @Immutable - enum class AdvertisedRelayType(val code: String) { + enum class AdvertisedRelayType( + val code: String, + ) { BOTH(""), READ("read"), WRITE("write"), diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt index dacc186b93..5ccad15c81 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt @@ -58,31 +58,20 @@ class AppMetadata { @Transient var tags: ImmutableListOfLists? = null - fun anyName(): String? { - return displayName ?: name ?: username - } + fun anyName(): String? = displayName ?: name ?: username - fun anyNameStartsWith(prefix: String): Boolean { - return listOfNotNull(name, username, displayName, nip05, lud06, lud16).any { + fun anyNameStartsWith(prefix: String): Boolean = + listOfNotNull(name, username, displayName, nip05, lud06, lud16).any { it.contains(prefix, true) } - } - fun lnAddress(): String? { - return lud16 ?: lud06 - } + fun lnAddress(): String? = lud16 ?: lud06 - fun bestName(): String? { - return displayName ?: name ?: username - } + fun bestName(): String? = displayName ?: name ?: username - fun nip05(): String? { - return nip05 - } + fun nip05(): String? = nip05 - fun profilePicture(): String? { - return picture - } + fun profilePicture(): String? = picture fun cleanBlankNames() { if (picture?.isNotEmpty() == true) picture = picture?.trim() diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt index db596d0c0e..3ddc1aca71 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt @@ -76,8 +76,7 @@ class AudioHeaderEvent( } }, arrayOf("alt", ALT), - ) - .toTypedArray() + ).toTypedArray() signer.sign(createdAt, KIND, tags, description, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt index 3724b2b137..e250a206c4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt @@ -73,12 +73,14 @@ class AudioTrackEvent( cover?.let { arrayOf(COVER, it) }, subject?.let { arrayOf(SUBJECT, it) }, arrayOf("alt", ALT), - ) - .toTypedArray() + ).toTypedArray() signer.sign(createdAt, KIND, tags, "", onReady) } } } -@Immutable data class Participant(val key: String, val role: String?) +@Immutable data class Participant( + val key: String, + val role: String?, +) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt index f38ab0e8a9..e939c58577 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt @@ -42,8 +42,6 @@ class BadgeProfilesEvent( private const val STANDARD_D_TAG = "profile_badges" private const val ALT = "List of accepted badges by the author" - fun createAddressTag(pubKey: HexKey): ATag { - return ATag(KIND, pubKey, STANDARD_D_TAG, null) - } + fun createAddressTag(pubKey: HexKey): ATag = ATag(KIND, pubKey, STANDARD_D_TAG, null) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt index 39c15752ad..e9c0c8f7e4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt @@ -192,10 +192,11 @@ open class BaseTextNoteEvent( fun tagsWithoutCitations(): List { val repliesTo = replyTos() val tagAddresses = - taggedAddresses().filter { - it.kind != CommunityDefinitionEvent.KIND && (kind != WikiNoteEvent.KIND || it.kind != WikiNoteEvent.KIND) - // removes forks from itself. - }.map { it.toTag() } + taggedAddresses() + .filter { + it.kind != CommunityDefinitionEvent.KIND && (kind != WikiNoteEvent.KIND || it.kind != WikiNoteEvent.KIND) + // removes forks from itself. + }.map { it.toTag() } if (repliesTo.isEmpty() && tagAddresses.isEmpty()) return emptyList() val citations = findCitations() diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt index 0d081e9fb3..f3dad8aec1 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt @@ -54,18 +54,16 @@ class ChannelCreateEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ChannelCreateEvent) -> Unit, - ) { - return create( - ChannelData( - name, - about, - picture, - ), - signer, - createdAt, - onReady, - ) - } + ) = create( + ChannelData( + name, + about, + picture, + ), + signer, + createdAt, + onReady, + ) fun create( channelInfo: ChannelData?, @@ -94,5 +92,9 @@ class ChannelCreateEvent( } } - @Immutable data class ChannelData(val name: String?, val about: String?, val picture: String?) + @Immutable data class ChannelData( + val name: String?, + val about: String?, + val picture: String?, + ) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt index 5611deb0d2..7d0207c24f 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt @@ -33,7 +33,8 @@ class ChannelHideMessageEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig), IsInPublicChatChannel { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + IsInPublicChatChannel { override fun channel() = tags.firstOrNull { it.size > 3 && it[0] == "e" && it[3] == "root" }?.get(1) ?: tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelListEvent.kt index 1837019ee9..489ed4b1c3 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelListEvent.kt @@ -62,9 +62,7 @@ class ChannelListEvent( const val FIXED_D_TAG = "" const val ALT = "Public Chat List" - fun blockListFor(pubKeyHex: HexKey): String { - return "$KIND:$pubKeyHex:" - } + fun blockListFor(pubKeyHex: HexKey): String = "$KIND:$pubKeyHex:" fun createListWithTag( key: String, @@ -101,9 +99,7 @@ class ChannelListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ChannelListEvent) -> Unit, - ) { - return createListWithTag("e", eventId, isPrivate, signer, createdAt, onReady) - } + ) = createListWithTag("e", eventId, isPrivate, signer, createdAt, onReady) fun addEvents( earlierVersion: ChannelListEvent, @@ -152,9 +148,7 @@ class ChannelListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ChannelListEvent) -> Unit, - ) { - return addTag(earlierVersion, "e", event, isPrivate, signer, createdAt, onReady) - } + ) = addTag(earlierVersion, "e", event, isPrivate, signer, createdAt, onReady) fun addTag( earlierVersion: ChannelListEvent, @@ -202,9 +196,7 @@ class ChannelListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ChannelListEvent) -> Unit, - ) { - return removeTag(earlierVersion, "e", event, isPrivate, signer, createdAt, onReady) - } + ) = removeTag(earlierVersion, "e", event, isPrivate, signer, createdAt, onReady) fun removeTag( earlierVersion: ChannelListEvent, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt index f9480e731c..104a4aace6 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt @@ -34,7 +34,8 @@ class ChannelMessageEvent( tags: Array>, content: String, sig: HexKey, -) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), IsInPublicChatChannel { +) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), + IsInPublicChatChannel { override fun channel() = tags.firstOrNull { it.size > 3 && it[0] == "e" && it[3] == "root" }?.get(1) ?: tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt index 8b7b9fae39..2690168042 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt @@ -34,7 +34,8 @@ class ChannelMetadataEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig), IsInPublicChatChannel { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + IsInPublicChatChannel { override fun channel() = tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) fun channelInfo() = diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt index fe9265495b..d695223408 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt @@ -33,7 +33,8 @@ class ChannelMuteUserEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig), IsInPublicChatChannel { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + IsInPublicChatChannel { override fun channel() = tags.firstOrNull { it.size > 3 && it[0] == "e" && it[3] == "root" }?.get(1) ?: tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageRelayListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageRelayListEvent.kt index b43188ae90..61cf8aa49d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageRelayListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageRelayListEvent.kt @@ -37,33 +37,29 @@ class ChatMessageRelayListEvent( ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { override fun dTag() = FIXED_D_TAG - fun relays(): List { - return tags.mapNotNull { + fun relays(): List = + tags.mapNotNull { if (it.size > 1 && it[0] == "relay") { it[1] } else { null } } - } companion object { const val KIND = 10050 const val FIXED_D_TAG = "" - fun createAddressATag(pubKey: HexKey): ATag { - return ATag(KIND, pubKey, FIXED_D_TAG, null) - } + fun createAddressATag(pubKey: HexKey): ATag = ATag(KIND, pubKey, FIXED_D_TAG, null) - fun createAddressTag(pubKey: HexKey): String { - return ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) - } + fun createAddressTag(pubKey: HexKey): String = ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) - fun createTagArray(relays: List): Array> { - return relays.map { - arrayOf("relay", it) - }.plusElement(arrayOf("alt", "Relay list to receive private messages")).toTypedArray() - } + fun createTagArray(relays: List): Array> = + relays + .map { + arrayOf("relay", it) + }.plusElement(arrayOf("alt", "Relay list to receive private messages")) + .toTypedArray() fun updateRelayList( earlierVersion: ChatMessageRelayListEvent, @@ -73,11 +69,13 @@ class ChatMessageRelayListEvent( onReady: (ChatMessageRelayListEvent) -> Unit, ) { val tags = - earlierVersion.tags.filter { it[0] != "relay" }.plus( - relays.map { - arrayOf("relay", it) - }, - ).toTypedArray() + earlierVersion.tags + .filter { it[0] != "relay" } + .plus( + relays.map { + arrayOf("relay", it) + }, + ).toTypedArray() signer.sign(createdAt, KIND, tags, earlierVersion.content, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt index dbc6a02967..bcd9def65b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt @@ -79,7 +79,9 @@ class ClassifiedsEvent( null } - enum class CONDITION(val value: String) { + enum class CONDITION( + val value: String, + ) { NEW("new"), USED_LIKE_NEW("like new"), USED_GOOD("good"), @@ -202,4 +204,8 @@ class ClassifiedsEvent( } } -data class Price(val amount: String, val currency: String?, val frequency: String?) +data class Price( + val amount: String, + val currency: String?, + val frequency: String?, +) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityListEvent.kt index 21d692a90a..9ab0866af3 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityListEvent.kt @@ -67,9 +67,7 @@ class CommunityListEvent( const val FIXED_D_TAG = "" const val ALT = "Community List" - fun blockListFor(pubKeyHex: HexKey): String { - return "$KIND:$pubKeyHex:" - } + fun blockListFor(pubKeyHex: HexKey): String = "$KIND:$pubKeyHex:" fun createListWithTag( key: String, @@ -106,9 +104,7 @@ class CommunityListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (CommunityListEvent) -> Unit, - ) { - return createListWithTag("a", address.toTag(), isPrivate, signer, createdAt, onReady) - } + ) = createListWithTag("a", address.toTag(), isPrivate, signer, createdAt, onReady) fun addEvents( earlierVersion: CommunityListEvent, @@ -157,9 +153,7 @@ class CommunityListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (CommunityListEvent) -> Unit, - ) { - return addTag(earlierVersion, "a", address.toTag(), isPrivate, signer, createdAt, onReady) - } + ) = addTag(earlierVersion, "a", address.toTag(), isPrivate, signer, createdAt, onReady) fun addTag( earlierVersion: CommunityListEvent, @@ -207,9 +201,7 @@ class CommunityListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (CommunityListEvent) -> Unit, - ) { - return removeTag(earlierVersion, "a", address.toTag(), isPrivate, signer, createdAt, onReady) - } + ) = removeTag(earlierVersion, "a", address.toTag(), isPrivate, signer, createdAt, onReady) fun removeTag( earlierVersion: CommunityListEvent, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt index 430ccbaae1..90ef3030bd 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt @@ -68,8 +68,7 @@ class CommunityPostApprovalEvent( it[0] == "e" || (it[0] == "a" && ATag.parse(it[1], null)?.kind != CommunityDefinitionEvent.KIND) ) - } - .map { it[1] } + }.map { it[1] } companion object { const val KIND = 4550 diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt index b782e376e5..ac01356746 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt @@ -32,7 +32,10 @@ import com.vitorpamplona.quartz.encoders.toHexKey import com.vitorpamplona.quartz.signers.NostrSigner import com.vitorpamplona.quartz.utils.TimeUtils -@Immutable data class Contact(val pubKeyHex: String, val relayUri: String?) +@Immutable data class Contact( + val pubKeyHex: String, + val relayUri: String?, +) @Stable class ContactListEvent( @@ -391,7 +394,10 @@ class ContactListEvent( } } - data class ReadWrite(val read: Boolean, val write: Boolean) + data class ReadWrite( + val read: Boolean, + val write: Boolean, + ) } @Stable @@ -420,31 +426,20 @@ class UserMetadata { @Transient var tags: ImmutableListOfLists? = null - fun anyName(): String? { - return displayName ?: name ?: username - } + fun anyName(): String? = displayName ?: name ?: username - fun anyNameStartsWith(prefix: String): Boolean { - return listOfNotNull(name, username, displayName, nip05, lud06, lud16).any { + fun anyNameStartsWith(prefix: String): Boolean = + listOfNotNull(name, username, displayName, nip05, lud06, lud16).any { it.contains(prefix, true) } - } - fun lnAddress(): String? { - return lud16 ?: lud06 - } + fun lnAddress(): String? = lud16 ?: lud06 - fun bestName(): String? { - return displayName ?: name ?: username - } + fun bestName(): String? = displayName ?: name ?: username - fun nip05(): String? { - return nip05 - } + fun nip05(): String? = nip05 - fun profilePicture(): String? { - return picture - } + fun profilePicture(): String? = picture fun cleanBlankNames() { if (picture?.isNotEmpty() == true) picture = picture?.trim() @@ -473,10 +468,10 @@ class UserMetadata { } } -@Stable class ImmutableListOfLists(val lists: Array>) +@Stable class ImmutableListOfLists( + val lists: Array>, +) val EmptyTagList = ImmutableListOfLists(emptyArray()) -fun Array>.toImmutableListOfLists(): ImmutableListOfLists { - return ImmutableListOfLists(this) -} +fun Array>.toImmutableListOfLists(): ImmutableListOfLists = ImmutableListOfLists(this) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt index e93dd45484..fb23c4281f 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt @@ -54,11 +54,12 @@ class DeletionEvent( val tags = mutableListOf>() val kinds = - deleteEvents.mapTo(HashSet()) { - "${it.kind}" - }.map { - arrayOf("k", it) - } + deleteEvents + .mapTo(HashSet()) { + "${it.kind}" + }.map { + arrayOf("k", it) + } tags.addAll(deleteEvents.map { arrayOf("e", it.id) }) tags.addAll(deleteEvents.mapNotNull { if (it is AddressableEvent) arrayOf("a", it.address().toTag()) else null }) @@ -78,11 +79,12 @@ class DeletionEvent( val tags = mutableListOf>() val kinds = - deleteEvents.mapTo(HashSet()) { - "${it.kind}" - }.map { - arrayOf("k", it) - } + deleteEvents + .mapTo(HashSet()) { + "${it.kind}" + }.map { + arrayOf("k", it) + } tags.addAll(deleteEvents.map { arrayOf("e", it.id) }) tags.addAll(kinds) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/DraftEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/DraftEvent.kt index 30b762fb65..7d19975dff 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/DraftEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/DraftEvent.kt @@ -41,13 +41,9 @@ class DraftEvent( fun isDeleted() = content == "" - fun preCachedDraft(signer: NostrSigner): Event? { - return cachedInnerEvent[signer.pubKey] - } + fun preCachedDraft(signer: NostrSigner): Event? = cachedInnerEvent[signer.pubKey] - fun preCachedDraft(pubKey: HexKey): Event? { - return cachedInnerEvent[pubKey] - } + fun preCachedDraft(pubKey: HexKey): Event? = cachedInnerEvent[pubKey] fun allCache() = cachedInnerEvent.values @@ -114,9 +110,7 @@ class DraftEvent( fun createAddressTag( pubKey: HexKey, dTag: String, - ): String { - return ATag.assembleATag(KIND, pubKey, dTag) - } + ): String = ATag.assembleATag(KIND, pubKey, dTag) fun create( dTag: String, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt index 73a09f0138..0599fc9b88 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt @@ -56,10 +56,11 @@ class EmojiPackEvent( } @Immutable -data class EmojiUrl(val code: String, val url: String) { - fun encode(): String { - return ":$code:$url" - } +data class EmojiUrl( + val code: String, + val url: String, +) { + fun encode(): String = ":$code:$url" companion object { fun decode(encodedEmojiSetup: String): EmojiUrl? { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt index 2dd61b26b8..a477f42ae2 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt @@ -123,4 +123,7 @@ class FileHeaderEvent( } } -data class AESGCM(val key: String, val nonce: String) +data class AESGCM( + val key: String, + val nonce: String, +) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt index 0a72d616fe..d65506e658 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt @@ -42,14 +42,13 @@ class FileStorageEvent( fun decryptKey() = tags.firstOrNull { it.size > 2 && it[0] == DECRYPT }?.let { AESGCM(it[1], it[2]) } - fun decode(): ByteArray? { - return try { + fun decode(): ByteArray? = + try { Base64.getDecoder().decode(content) } catch (e: Exception) { Log.e("FileStorageEvent", "Unable to decode base 64 ${e.message} $content") null } - } companion object { const val KIND = 1064 @@ -58,9 +57,7 @@ class FileStorageEvent( private const val TYPE = "type" private const val DECRYPT = "decrypt" - fun encode(bytes: ByteArray): String { - return Base64.getEncoder().encodeToString(bytes) - } + fun encode(bytes: ByteArray): String = Base64.getEncoder().encodeToString(bytes) fun create( mimeType: String, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt index 5628c5820f..dfa32eb793 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt @@ -56,9 +56,7 @@ abstract class GeneralListEvent( fun nameOrTitle() = name() ?: title() - fun cachedPrivateTags(): Array>? { - return privateTagsCache - } + fun cachedPrivateTags(): Array>? = privateTagsCache fun filterTagList( key: String, @@ -79,16 +77,14 @@ abstract class GeneralListEvent( isPrivate: Boolean, signer: NostrSigner, onReady: (Boolean) -> Unit, - ) { - return if (isPrivate) { - privateTagsOrEmpty(signer = signer) { - onReady( - it.any { it.size > 1 && it[0] == key && it[1] == tag }, - ) - } - } else { - onReady(isTagged(key, tag)) + ) = if (isPrivate) { + privateTagsOrEmpty(signer = signer) { + onReady( + it.any { it.size > 1 && it[0] == key && it[1] == tag }, + ) } + } else { + onReady(isTagged(key, tag)) } fun privateTags( @@ -147,24 +143,16 @@ abstract class GeneralListEvent( onReady: (List) -> Unit, ) = privateTags(signer) { onReady(filterAddresses(it)) } - fun filterUsers(tags: Array>): List { - return tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] } - } + fun filterUsers(tags: Array>): List = tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] } - fun filterHashtags(tags: Array>): List { - return tags.filter { it.size > 1 && it[0] == "t" }.map { it[1] } - } + fun filterHashtags(tags: Array>): List = tags.filter { it.size > 1 && it[0] == "t" }.map { it[1] } - fun filterGeohashes(tags: Array>): List { - return tags.filter { it.size > 1 && it[0] == "g" }.map { it[1] } - } + fun filterGeohashes(tags: Array>): List = tags.filter { it.size > 1 && it[0] == "g" }.map { it[1] } - fun filterEvents(tags: Array>): List { - return tags.filter { it.size > 1 && it[0] == "e" }.map { it[1] } - } + fun filterEvents(tags: Array>): List = tags.filter { it.size > 1 && it[0] == "e" }.map { it[1] } - fun filterAddresses(tags: Array>): List { - return tags + fun filterAddresses(tags: Array>): List = + tags .filter { it.firstOrNull() == "a" } .mapNotNull { val aTagValue = it.getOrNull(1) @@ -172,7 +160,6 @@ abstract class GeneralListEvent( if (aTagValue != null) ATag.parse(aTagValue, relay) else null } - } companion object { fun createPrivateTags( diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt index 50407d634a..67a49a68ce 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt @@ -33,7 +33,8 @@ class LnZapEvent( tags: Array>, content: String, sig: HexKey, -) : LnZapEventInterface, Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + LnZapEventInterface { // This event is also kept in LocalCache (same object) @Transient val zapRequest: LnZapRequestEvent? @@ -55,7 +56,11 @@ class LnZapEvent( override fun zappedPollOption(): Int? = try { - zapRequest?.tags?.firstOrNull { it.size > 1 && it[0] == POLL_OPTION }?.get(1)?.toInt() + zapRequest + ?.tags + ?.firstOrNull { it.size > 1 && it[0] == POLL_OPTION } + ?.get(1) + ?.toInt() } catch (e: Exception) { Log.e("LnZapEvent", "ZappedPollOption failed to parse", e) null @@ -75,9 +80,7 @@ class LnZapEvent( } } - override fun content(): String { - return content - } + override fun content(): String = content fun lnInvoice() = tags.firstOrNull { it.size > 1 && it[0] == "bolt11" }?.get(1) @@ -88,7 +91,7 @@ class LnZapEvent( const val ALT = "Zap event" } - enum class ZapType() { + enum class ZapType { PUBLIC, PRIVATE, ANONYMOUS, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt index 8b1bde062f..1727b07057 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt @@ -44,9 +44,7 @@ class LnZapPaymentRequestEvent( fun walletServicePubKey() = tags.firstOrNull { it.size > 1 && it[0] == "p" }?.get(1) - fun talkingWith(oneSideHex: String): HexKey { - return if (pubKey == oneSideHex) walletServicePubKey() ?: pubKey else pubKey - } + fun talkingWith(oneSideHex: String): HexKey = if (pubKey == oneSideHex) walletServicePubKey() ?: pubKey else pubKey fun lnInvoice( signer: NostrSigner, @@ -97,16 +95,20 @@ class LnZapPaymentRequestEvent( // REQUEST OBJECTS -abstract class Request(var method: String? = null) +abstract class Request( + var method: String? = null, +) // PayInvoice Call -class PayInvoiceParams(var invoice: String? = null) +class PayInvoiceParams( + var invoice: String? = null, +) -class PayInvoiceMethod(var params: PayInvoiceParams? = null) : Request("pay_invoice") { +class PayInvoiceMethod( + var params: PayInvoiceParams? = null, +) : Request("pay_invoice") { companion object { - fun create(bolt11: String): PayInvoiceMethod { - return PayInvoiceMethod(PayInvoiceParams(bolt11)) - } + fun create(bolt11: String): PayInvoiceMethod = PayInvoiceMethod(PayInvoiceParams(bolt11)) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt index 7bb9c1db49..45e1320b18 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt @@ -46,9 +46,7 @@ class LnZapPaymentResponseEvent( fun requestId() = tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) - fun talkingWith(oneSideHex: String): HexKey { - return if (pubKey == oneSideHex) requestAuthor() ?: pubKey else pubKey - } + fun talkingWith(oneSideHex: String): HexKey = if (pubKey == oneSideHex) requestAuthor() ?: pubKey else pubKey private fun plainContent( signer: NostrSigner, @@ -97,13 +95,21 @@ abstract class Response( // PayInvoice Call -class PayInvoiceSuccessResponse(val result: PayInvoiceResultParams? = null) : - Response("pay_invoice") { - class PayInvoiceResultParams(val preimage: String) +class PayInvoiceSuccessResponse( + val result: PayInvoiceResultParams? = null, +) : Response("pay_invoice") { + class PayInvoiceResultParams( + val preimage: String, + ) } -class PayInvoiceErrorResponse(val error: PayInvoiceErrorParams? = null) : Response("pay_invoice") { - class PayInvoiceErrorParams(val code: ErrorType?, val message: String?) +class PayInvoiceErrorResponse( + val error: PayInvoiceErrorParams? = null, +) : Response("pay_invoice") { + class PayInvoiceErrorParams( + val code: ErrorType?, + val message: String?, + ) enum class ErrorType { @JsonProperty(value = "RATE_LIMITED") diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt index f003caa4e0..33727f11ba 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt @@ -75,9 +75,7 @@ class LnZapRequestEvent( return null } - fun cachedPrivateZap(): LnZapPrivateEvent? { - return privateZapEvent - } + fun cachedPrivateZap(): LnZapPrivateEvent? = privateZapEvent fun decryptPrivateZap( signer: NostrSigner, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt index 5f95758c21..7fbe65d577 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt @@ -34,7 +34,8 @@ class LongTextNoteEvent( tags: Array>, content: String, sig: HexKey, -) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), AddressableEvent { +) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), + AddressableEvent { override fun dTag() = tags.firstOrNull { it.size > 1 && it[0] == "d" }?.get(1) ?: "" override fun address() = ATag(kind, pubKey, dTag(), null) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt index 195819b6be..a1e556813b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt @@ -71,9 +71,7 @@ class MuteListEvent( const val FIXED_D_TAG = "" const val ALT = "Mute List" - fun blockListFor(pubKeyHex: HexKey): String { - return "10000:$pubKeyHex:" - } + fun blockListFor(pubKeyHex: HexKey): String = "10000:$pubKeyHex:" fun createListWithTag( key: String, @@ -110,9 +108,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return createListWithTag("p", pubKeyHex, isPrivate, signer, createdAt, onReady) - } + ) = createListWithTag("p", pubKeyHex, isPrivate, signer, createdAt, onReady) fun createListWithWord( word: String, @@ -120,9 +116,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return createListWithTag("word", word, isPrivate, signer, createdAt, onReady) - } + ) = createListWithTag("word", word, isPrivate, signer, createdAt, onReady) fun addUsers( earlierVersion: MuteListEvent, @@ -171,9 +165,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return addTag(earlierVersion, "word", word, isPrivate, signer, createdAt, onReady) - } + ) = addTag(earlierVersion, "word", word, isPrivate, signer, createdAt, onReady) fun addUser( earlierVersion: MuteListEvent, @@ -182,9 +174,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return addTag(earlierVersion, "p", pubKeyHex, isPrivate, signer, createdAt, onReady) - } + ) = addTag(earlierVersion, "p", pubKeyHex, isPrivate, signer, createdAt, onReady) fun addTag( earlierVersion: MuteListEvent, @@ -232,9 +222,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return removeTag(earlierVersion, "word", word, isPrivate, signer, createdAt, onReady) - } + ) = removeTag(earlierVersion, "word", word, isPrivate, signer, createdAt, onReady) fun removeUser( earlierVersion: MuteListEvent, @@ -243,9 +231,7 @@ class MuteListEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit, - ) { - return removeTag(earlierVersion, "p", pubKeyHex, isPrivate, signer, createdAt, onReady) - } + ) = removeTag(earlierVersion, "p", pubKeyHex, isPrivate, signer, createdAt, onReady) fun removeTag( earlierVersion: MuteListEvent, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP17Factory.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP17Factory.kt index 2e35339916..370df42b77 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP17Factory.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP17Factory.kt @@ -24,7 +24,10 @@ import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.signers.NostrSigner class NIP17Factory { - data class Result(val msg: Event, val wraps: List) + data class Result( + val msg: Event, + val wraps: List, + ) private fun recursiveGiftWrapCreation( event: Event, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP90StatusEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP90StatusEvent.kt index e92ac9d32e..a6cf48debf 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP90StatusEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/NIP90StatusEvent.kt @@ -34,22 +34,27 @@ class NIP90StatusEvent( content: String, sig: HexKey, ) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { - class StatusCode(val code: String, val description: String) + class StatusCode( + val code: String, + val description: String, + ) - class AmountInvoice(val amount: Long?, val lnInvoice: String?) + class AmountInvoice( + val amount: Long?, + val lnInvoice: String?, + ) - fun status(): StatusCode? { - return tags.firstOrNull { it.size > 1 && it[0] == "status" }?.let { + fun status(): StatusCode? = + tags.firstOrNull { it.size > 1 && it[0] == "status" }?.let { if (it.size > 2 && content == "") { StatusCode(it[1], it[2]) } else { StatusCode(it[1], content) } } - } - fun firstAmount(): AmountInvoice? { - return tags.firstOrNull { it.size > 1 && it[0] == "amount" }?.let { + fun firstAmount(): AmountInvoice? = + tags.firstOrNull { it.size > 1 && it[0] == "amount" }?.let { val amount = it[1].toLongOrNull() if (it.size > 2) { if (it[2].isNotBlank()) { @@ -65,7 +70,6 @@ class NIP90StatusEvent( } } } - } companion object { const val KIND = 7000 diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/OtsEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/OtsEvent.kt index 7b66464891..6dccecdaf9 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/OtsEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/OtsEvent.kt @@ -54,22 +54,17 @@ class OtsEvent( fun digest() = digestEvent()?.hexToByteArray() - fun otsByteArray(): ByteArray { - return Base64.getDecoder().decode(content) - } + fun otsByteArray(): ByteArray = Base64.getDecoder().decode(content) - fun cacheVerify(): Long? { - return if (verifiedTime != null) { + fun cacheVerify(): Long? = + if (verifiedTime != null) { verifiedTime } else { verifiedTime = verify() verifiedTime } - } - fun verify(): Long? { - return digestEvent()?.let { OtsEvent.verify(otsByteArray(), it) } - } + fun verify(): Long? = digestEvent()?.let { OtsEvent.verify(otsByteArray(), it) } fun info(): String { val detachedOts = DetachedTimestampFile.deserialize(otsByteArray()) @@ -111,16 +106,12 @@ class OtsEvent( fun verify( otsFile: String, eventId: HexKey, - ): Long? { - return verify(Base64.getDecoder().decode(otsFile), eventId) - } + ): Long? = verify(Base64.getDecoder().decode(otsFile), eventId) fun verify( otsFile: ByteArray, eventId: HexKey, - ): Long? { - return verify(DetachedTimestampFile.deserialize(otsFile), eventId) - } + ): Long? = verify(DetachedTimestampFile.deserialize(otsFile), eventId) fun verify( detachedOts: DetachedTimestampFile, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt index 4ead7e44ae..6dd21b0300 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt @@ -37,7 +37,8 @@ class PrivateDmEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig), ChatroomKeyable { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + ChatroomKeyable { @Transient private var decryptedContent: Map = mapOf() override fun isContentEncoded() = true @@ -60,13 +61,9 @@ class PrivateDmEvent( } } - fun talkingWith(oneSideHex: String): HexKey { - return if (pubKey == oneSideHex) verifiedRecipientPubKey() ?: pubKey else pubKey - } + fun talkingWith(oneSideHex: String): HexKey = if (pubKey == oneSideHex) verifiedRecipientPubKey() ?: pubKey else pubKey - override fun chatroomKey(toRemove: String): ChatroomKey { - return ChatroomKey(persistentSetOf(talkingWith(toRemove))) - } + override fun chatroomKey(toRemove: String): ChatroomKey = ChatroomKey(persistentSetOf(talkingWith(toRemove))) /** * To be fully compatible with nip-04, we read e-tags that are in violation to nip-18. @@ -76,13 +73,9 @@ class PrivateDmEvent( */ fun replyTo() = tags.firstOrNull { it.size > 1 && it[0] == "e" }?.get(1) - fun with(pubkeyHex: String): Boolean { - return pubkeyHex == pubKey || tags.any { it.size > 1 && it[0] == "p" && it[1] == pubkeyHex } - } + fun with(pubkeyHex: String): Boolean = pubkeyHex == pubKey || tags.any { it.size > 1 && it[0] == "p" && it[1] == pubkeyHex } - fun cachedContentFor(signer: NostrSigner): String? { - return decryptedContent[signer.pubKey] - } + fun cachedContentFor(signer: NostrSigner): String? = decryptedContent[signer.pubKey] fun plainContent( signer: NostrSigner, @@ -178,11 +171,10 @@ class PrivateDmEvent( } } -fun geohashMipMap(geohash: String): Array> { - return geohash.indices +fun geohashMipMap(geohash: String): Array> = + geohash.indices .asSequence() .map { arrayOf("g", geohash.substring(0, it + 1)) } .toList() .reversed() .toTypedArray() -} diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt index a3c9b53d63..6073a9abb4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt @@ -46,18 +46,14 @@ class ReactionEvent( signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit, - ) { - return create("\u26A0\uFE0F", originalNote, signer, createdAt, onReady) - } + ) = create("\u26A0\uFE0F", originalNote, signer, createdAt, onReady) fun createLike( originalNote: EventInterface, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit, - ) { - return create("+", originalNote, signer, createdAt, onReady) - } + ) = create("+", originalNote, signer, createdAt, onReady) fun create( content: String, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/SearchRelayListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/SearchRelayListEvent.kt index 1514c2571e..16a6326009 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/SearchRelayListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/SearchRelayListEvent.kt @@ -37,33 +37,29 @@ class SearchRelayListEvent( ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { override fun dTag() = FIXED_D_TAG - fun relays(): List { - return tags.mapNotNull { + fun relays(): List = + tags.mapNotNull { if (it.size > 1 && it[0] == "relay") { it[1] } else { null } } - } companion object { const val KIND = 10007 const val FIXED_D_TAG = "" - fun createAddressATag(pubKey: HexKey): ATag { - return ATag(KIND, pubKey, FIXED_D_TAG, null) - } + fun createAddressATag(pubKey: HexKey): ATag = ATag(KIND, pubKey, FIXED_D_TAG, null) - fun createAddressTag(pubKey: HexKey): String { - return ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) - } + fun createAddressTag(pubKey: HexKey): String = ATag.assembleATag(KIND, pubKey, FIXED_D_TAG) - fun createTagArray(relays: List): Array> { - return relays.map { - arrayOf("relay", it) - }.plusElement(arrayOf("alt", "Relay list to use for Search")).toTypedArray() - } + fun createTagArray(relays: List): Array> = + relays + .map { + arrayOf("relay", it) + }.plusElement(arrayOf("alt", "Relay list to use for Search")) + .toTypedArray() fun updateRelayList( earlierVersion: SearchRelayListEvent, @@ -73,11 +69,13 @@ class SearchRelayListEvent( onReady: (SearchRelayListEvent) -> Unit, ) { val tags = - earlierVersion.tags.filter { it[0] != "relay" }.plus( - relays.map { - arrayOf("relay", it) - }, - ).toTypedArray() + earlierVersion.tags + .filter { it[0] != "relay" } + .plus( + relays.map { + arrayOf("relay", it) + }, + ).toTypedArray() signer.sign(createdAt, KIND, tags, earlierVersion.content, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt index 160871b078..da7fca088c 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt @@ -134,9 +134,7 @@ class TextNoteEvent( } } -fun findURLs(text: String): List { - return UrlDetector(text, UrlDetectorOptions.Default).detect().map { it.originalUrl } -} +fun findURLs(text: String): List = UrlDetector(text, UrlDetectorOptions.Default).detect().map { it.originalUrl } /** * Returns a list of NIP-10 marked tags that are also ordered at best effort to support the @@ -163,13 +161,12 @@ fun List.positionalMarkedTags( o2 == replyingTo -> -1 // reply event being responded to goes last else -> 0 // keep the relative order for any other tag } -} - .map { - when (it) { - root -> arrayOf(tagName, it, "", "root") - replyingTo -> arrayOf(tagName, it, "", "reply") - forkedFrom -> arrayOf(tagName, it, "", "fork") - in directMentions -> arrayOf(tagName, it, "", "mention") - else -> arrayOf(tagName, it) - } +}.map { + when (it) { + root -> arrayOf(tagName, it, "", "root") + replyingTo -> arrayOf(tagName, it, "", "reply") + forkedFrom -> arrayOf(tagName, it, "", "fork") + in directMentions -> arrayOf(tagName, it, "", "mention") + else -> arrayOf(tagName, it) } +} diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/WikiNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/WikiNoteEvent.kt index 696e2846b2..f92d8730a7 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/WikiNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/WikiNoteEvent.kt @@ -34,7 +34,8 @@ class WikiNoteEvent( tags: Array>, content: String, sig: HexKey, -) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), AddressableEvent { +) : BaseTextNoteEvent(id, pubKey, createdAt, KIND, tags, content, sig), + AddressableEvent { override fun dTag() = tags.firstOrNull { it.size > 1 && it[0] == "d" }?.get(1) ?: "" override fun address() = ATag(kind, pubKey, dTag(), null) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt index 25df198b57..dad1dac918 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt @@ -27,7 +27,9 @@ import com.vitorpamplona.quartz.events.EventFactory import com.vitorpamplona.quartz.events.LnZapPrivateEvent import com.vitorpamplona.quartz.events.LnZapRequestEvent -abstract class NostrSigner(val pubKey: HexKey) { +abstract class NostrSigner( + val pubKey: HexKey, +) { abstract fun sign( createdAt: Long, kind: Int, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt index 0ff8dbce28..b61df49f0a 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt @@ -66,8 +66,7 @@ class NostrSignerExternal( localEvent.content, localEvent.sig, ) as? T? - ) - ?.let { onReady(it) } + )?.let { onReady(it) } } else { ( EventFactory.create( @@ -79,8 +78,7 @@ class NostrSignerExternal( event.content, signature.split("-")[0], ) as? T? - ) - ?.let { onReady(it) } + )?.let { onReady(it) } } } } diff --git a/quartz/src/test/java/com/vitorpamplona/quartz/encoders/NIP19ParserTest.kt b/quartz/src/test/java/com/vitorpamplona/quartz/encoders/NIP19ParserTest.kt index 21f9262f31..bc5788e7d9 100644 --- a/quartz/src/test/java/com/vitorpamplona/quartz/encoders/NIP19ParserTest.kt +++ b/quartz/src/test/java/com/vitorpamplona/quartz/encoders/NIP19ParserTest.kt @@ -132,9 +132,10 @@ class NIP19ParserTest { @Test fun nAddrParserPablo() { val result = - Nip19Bech32.uriToRoute( - "naddr1qq2hs7p30p6kcunxxamkgcnyd33xxve3veshyq3qyujphdcz69z6jafxpnldae3xtymdekfeatkt3r4qusr3w5krqspqxpqqqpaxjlg805f", - )?.entity as? Nip19Bech32.NAddress + Nip19Bech32 + .uriToRoute( + "naddr1qq2hs7p30p6kcunxxamkgcnyd33xxve3veshyq3qyujphdcz69z6jafxpnldae3xtymdekfeatkt3r4qusr3w5krqspqxpqqqpaxjlg805f", + )?.entity as? Nip19Bech32.NAddress assertNotNull(result) assertEquals( @@ -149,9 +150,10 @@ class NIP19ParserTest { @Test fun nAddrParserGizmo() { val result = - Nip19Bech32.uriToRoute( - "naddr1qpqrvvfnvccrzdryxgunzvtxvgukge34xfjnqdpcv9sk2desxgmrscesvserzd3h8ycrywphvg6nsvf58ycnqef3v5mnsvt98pjnqdfs8ypzq3huhccxt6h34eupz3jeynjgjgek8lel2f4adaea0svyk94a3njdqvzqqqr4gudhrkyk", - )?.entity as? Nip19Bech32.NAddress + Nip19Bech32 + .uriToRoute( + "naddr1qpqrvvfnvccrzdryxgunzvtxvgukge34xfjnqdpcv9sk2desxgmrscesvserzd3h8ycrywphvg6nsvf58ycnqef3v5mnsvt98pjnqdfs8ypzq3huhccxt6h34eupz3jeynjgjgek8lel2f4adaea0svyk94a3njdqvzqqqr4gudhrkyk", + )?.entity as? Nip19Bech32.NAddress assertNotNull(result) assertEquals( @@ -166,9 +168,10 @@ class NIP19ParserTest { @Test fun nAddrParserGizmo2() { val result = - Nip19Bech32.uriToRoute( - "naddr1qq9rzd3h8y6nqwf5xyuqygzxljlrqe027xh8sy2xtyjwfzfrxcll8afxh4hh847psjckhkxwf5psgqqqw4rsty50fx", - )?.entity as? Nip19Bech32.NAddress + Nip19Bech32 + .uriToRoute( + "naddr1qq9rzd3h8y6nqwf5xyuqygzxljlrqe027xh8sy2xtyjwfzfrxcll8afxh4hh847psjckhkxwf5psgqqqw4rsty50fx", + )?.entity as? Nip19Bech32.NAddress assertNotNull(result) assertEquals( @@ -219,9 +222,10 @@ class NIP19ParserTest { @Test fun nEventParser() { val result = - Nip19Bech32.uriToRoute( - "nostr:nevent1qqstvrl6wftd8ht4g0vrp6m30tjs6pdxcvk977g769dcvlptkzu4ftqppamhxue69uhkummnw3ezumt0d5pzp78lz8r60568sd2a8dx3wnj6gume02gxaf92vx4fk67qv5kpagt6qvzqqqqqqygqr86c", - )?.entity as? Nip19Bech32.NEvent + Nip19Bech32 + .uriToRoute( + "nostr:nevent1qqstvrl6wftd8ht4g0vrp6m30tjs6pdxcvk977g769dcvlptkzu4ftqppamhxue69uhkummnw3ezumt0d5pzp78lz8r60568sd2a8dx3wnj6gume02gxaf92vx4fk67qv5kpagt6qvzqqqqqqygqr86c", + )?.entity as? Nip19Bech32.NEvent assertNotNull(result) assertEquals("b60ffa7256d3dd7543d830eb717ae50d05a6c32c5f791ed15b867c2bb0b954ac", result?.hex) @@ -233,9 +237,10 @@ class NIP19ParserTest { @Test fun nEventParser2() { val result = - Nip19Bech32.uriToRoute( - "nostr:nevent1qqsplpuwsgrrmq85rfup6w3w777rxmcmadu590emfx6z4msj2844euqpz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqye3a70w", - )?.entity as? Nip19Bech32.NEvent + Nip19Bech32 + .uriToRoute( + "nostr:nevent1qqsplpuwsgrrmq85rfup6w3w777rxmcmadu590emfx6z4msj2844euqpz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqye3a70w", + )?.entity as? Nip19Bech32.NEvent assertNotNull(result) assertEquals("1f878e82063d80f41a781d3a2ef7bc336f1beb7942bf3b49b42aee1251eb5cf0", result?.hex) @@ -247,9 +252,10 @@ class NIP19ParserTest { @Test fun nEventParser3() { val result = - Nip19Bech32.uriToRoute( - "nostr:nevent1qqsg6gechd3dhzx38n4z8a2lylzgsmmgeamhmtzz72m9ummsnf0xjfspsdmhxue69uhkummn9ekx7mpvwaehxw309ahx7um5wghx77r5wghxgetk93mhxue69uhhyetvv9ujumn0wd68ytnzvuk8wumn8ghj7mn0wd68ytn9d9h82mny0fmkzmn6d9njuumsv93k2trhwden5te0wfjkccte9ehx7um5wghxyctwvsk8wumn8ghj7un9d3shjtnyv9kh2uewd9hs3kqsdn", - )?.entity as? Nip19Bech32.NEvent + Nip19Bech32 + .uriToRoute( + "nostr:nevent1qqsg6gechd3dhzx38n4z8a2lylzgsmmgeamhmtzz72m9ummsnf0xjfspsdmhxue69uhkummn9ekx7mpvwaehxw309ahx7um5wghx77r5wghxgetk93mhxue69uhhyetvv9ujumn0wd68ytnzvuk8wumn8ghj7mn0wd68ytn9d9h82mny0fmkzmn6d9njuumsv93k2trhwden5te0wfjkccte9ehx7um5wghxyctwvsk8wumn8ghj7un9d3shjtnyv9kh2uewd9hs3kqsdn", + )?.entity as? Nip19Bech32.NEvent assertNotNull(result) assertEquals("8d2338bb62db88d13cea23f55f27c4886f68cf777dac42f2b65e6f709a5e6926", result?.hex) @@ -262,9 +268,10 @@ class NIP19ParserTest { @Test fun nEventParserInvalidChecksum() { val result = - Nip19Bech32.uriToRoute( - "nostr:nevent1qqsyxq8v0730nz38dupnjzp5jegkyz4gu2ptwcps4v32hjnrap0q0espz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqyn3t9gj", - )?.entity as? Nip19Bech32.NEvent + Nip19Bech32 + .uriToRoute( + "nostr:nevent1qqsyxq8v0730nz38dupnjzp5jegkyz4gu2ptwcps4v32hjnrap0q0espz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqyn3t9gj", + )?.entity as? Nip19Bech32.NEvent assertNotNull(result) assertEquals("4300ec7fa2f98a276f033908349651620aa8e282b76030ab22abca63e85e07e6", result?.hex)