From bad1b0eb31c73137e003bc59f4e23c76c4a60bf9 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Wed, 17 Jun 2026 18:10:06 +0300 Subject: [PATCH] Fork Aux to make Torch --- composeApp/build.gradle.kts | 8 +- .../src/androidMain/AndroidManifest.xml | 4 +- .../torch}/android/MainActivity.kt | 13 +- .../torch/android/TorchApplication.kt} | 5 +- .../torch}/compose/AppVersion.android.kt | 4 +- .../torch}/compose/Platform.android.kt | 4 +- .../torch}/compose/PlatformContext.android.kt | 2 +- .../PlatformDatabaseBuilder.android.kt | 12 +- .../compose/extensions/Phoenix.android.kt | 8 +- .../ui/composable/widgets/nfc/HceMonitor.kt | 0 .../widgets/nfc/NfcReaderMonitor.kt | 0 .../ui/composable/widgets/nfc/NfcState.kt | 0 .../torch}/compose/ui/theme/Theme.android.kt | 2 +- .../view/model/NavigationViewModel.android.kt | 12 +- .../acinq/phoenix/android/BusinessManager.kt | 11 +- .../android/services/ChannelsWatcher.kt | 2 +- .../android/services/ContactsPhotoCleaner.kt | 2 +- .../phoenix/android/services/DailyConnect.kt | 2 +- .../services/InflightPaymentsWatcher.kt | 6 +- .../services/PaymentsForegroundService.kt | 10 +- .../phoenix/utils/ContactsPhotoHelper.kt | 2 +- .../phoenix/utils/SystemNotificationHelper.kt | 7 +- .../extensions/AndroidContextExtensions.kt | 2 +- .../ac/cord/auxiliary/compose/AuxGlobal.kt | 7 - .../ac/cord/auxiliary/compose/Platform.kt | 7 - .../cord/auxiliary/compose/PlatformContext.kt | 3 - .../auxiliary/compose/database/AuxDatabase.kt | 176 ----------- .../database/AuxDatabaseConstructor.kt | 9 - .../builder/PlatformDatabaseBuilder.kt | 23 -- .../dao/BroadcastNostrEventReceiptDao.kt | 22 -- ...geBroadcastNostrEventRequestRelationDao.kt | 20 -- .../dao/ChatMessageNostrEventRelationDao.kt | 12 - .../database/dao/GiftWrapMessageDao.kt | 18 -- .../compose/database/dao/GiftWrapSealDao.kt | 18 -- .../compose/database/dao/MentionDao.kt | 22 -- .../dao/NegentropySynchronizeResultDao.kt | 16 - .../database/dao/NostrEventRelayDao.kt | 16 - .../compose/database/dao/ParticipantDao.kt | 24 -- .../auxiliary/compose/database/dao/PostDao.kt | 23 -- .../compose/database/dao/ReactionDao.kt | 19 -- .../compose/database/dao/RecentSearchDao.kt | 23 -- .../compose/database/dao/RelayDao.kt | 20 -- .../database/dao/RepostedRelationDao.kt | 21 -- .../dao/SynchronizeNostrEventResultDao.kt | 11 - .../database/dao/UnsignedNostrEventDao.kt | 35 -- .../model/intermdiate/LocalAccount.kt | 45 --- .../LocalBroadcastNostrEventRequest.kt | 16 - .../model/intermdiate/LocalChatMessage.kt | 40 --- .../model/intermdiate/LocalMention.kt | 16 - .../model/intermdiate/LocalParticipant.kt | 16 - .../model/intermdiate/LocalProfile.kt | 16 - .../database/model/typealiases/HexArray.kt | 4 - .../database/model/typealiases/KindArray.kt | 3 - .../typealiases/SynchronizationFilterArray.kt | 5 - .../repository/DatabasePostRepository.kt | 10 - .../repository/DatabaseSearchRepository.kt | 16 - .../InvalidNostrPrivateKeyException.kt | 3 - .../compose/managers/AuxDatabaseManager.kt | 30 -- .../repository/CachingImportRepository.kt | 43 --- .../compose/repository/PostRepository.kt | 4 - .../navigation/routes/BlankRoute.kt | 6 - .../navigation/routes/LandingRoute.kt | 6 - .../ui/composable/navigation/routes/Route.kt | 3 - .../navigation/routes/SignInRoute.kt | 6 - .../routes/SovereignWalletStartupRoute.kt | 6 - .../compose/ui/view/state/FeedListUIState.kt | 13 - .../ui/view/state/HomeScreenUIState.kt | 15 - .../ui/view/state/WriteNewNoteUIState.kt | 27 -- .../view/state/form/WriteNewNoteFormState.kt | 7 - .../torch}/compose/AppVersion.kt | 2 +- .../kotlin/at/torch/compose/Platform.kt | 7 + .../at/torch/compose/PlatformContext.kt | 3 + .../torch/compose/TorchApp.kt} | 16 +- .../kotlin/at/torch/compose/TorchGlobal.kt | 7 + .../torch}/compose/cryptography/Extensions.kt | 11 +- .../torch/compose/database/TorchDatabase.kt | 115 +++++++ .../database/TorchDatabaseConstructor.kt | 9 + .../builder/PlatformDatabaseBuilder.kt | 21 ++ .../database/converters/AuxConverters.kt | 19 +- .../dao/BroadcastNostrEventReceiptDao.kt | 21 ++ .../dao/BroadcastNostrEventRequestDao.kt | 14 +- ...geBroadcastNostrEventReceiptRelationDao.kt | 5 +- ...geBroadcastNostrEventRequestRelationDao.kt | 14 + .../compose/database/dao/ChatMessageDao.kt | 13 +- .../dao/ChatMessageNostrEventRelationDao.kt | 11 + .../compose/database/dao/ChatRoomDao.kt | 12 +- .../compose/database/dao/ConnectionDao.kt | 13 +- .../database/dao/GiftWrapMessageDao.kt | 15 + .../database/dao/GiftWrapPayloadDao.kt | 9 +- .../compose/database/dao/GiftWrapSealDao.kt | 15 + .../database/dao/InReplyToRelationDao.kt | 11 +- .../torch/compose/database/dao/MentionDao.kt | 18 ++ .../dao/NegentropySynchronizeRequestDao.kt | 10 +- .../dao/NegentropySynchronizeResultDao.kt | 10 + .../torch}/compose/database/dao/NostrDao.kt | 196 ++++++------ .../compose/database/dao/NostrEventDao.kt | 46 ++- .../database/dao/NostrEventRelayDao.kt | 12 + .../compose/database/dao/NostrNip17Dao.kt | 54 ++-- .../compose/database/dao/ParticipantDao.kt | 18 ++ .../at/torch/compose/database/dao/PostDao.kt | 21 ++ .../torch}/compose/database/dao/ProfileDao.kt | 25 +- .../compose/database/dao/QuotedRelationDao.kt | 11 +- .../torch/compose/database/dao/ReactionDao.kt | 18 ++ .../compose/database/dao/RecentSearchDao.kt | 22 ++ .../at/torch/compose/database/dao/RelayDao.kt | 19 ++ .../database/dao/RepostedRelationDao.kt | 20 ++ .../dao/SynchronizeNostrEventRequestDao.kt | 9 +- .../dao/SynchronizeNostrEventResultDao.kt | 10 + .../database/dao/UnsignedNostrEventDao.kt | 33 ++ .../torch}/compose/database/dao/ZapDao.kt | 4 +- .../model/BroadcastNostrEventReceipt.kt | 7 +- .../model/BroadcastNostrEventRequest.kt | 9 +- .../compose/database/model/ChatMessage.kt | 11 +- ...ssageBroadcastNostrEventReceiptRelation.kt | 7 +- ...ssageBroadcastNostrEventRequestRelation.kt | 7 +- .../model/ChatMessageNostrEventRelation.kt | 10 +- .../torch}/compose/database/model/ChatRoom.kt | 11 +- .../compose/database/model/Connection.kt | 13 +- .../compose/database/model/GiftWrapMessage.kt | 19 +- .../compose/database/model/GiftWrapPayload.kt | 12 +- .../compose/database/model/GiftWrapSeal.kt | 12 +- .../database/model/InReplyToRelation.kt | 14 +- .../torch}/compose/database/model/Mention.kt | 12 +- .../model/NegentropySynchronizeRequest.kt | 14 +- .../model/NegentropySynchronizeResult.kt | 8 +- .../compose/database/model/NostrEvent.kt | 19 +- .../compose/database/model/NostrEventRelay.kt | 12 +- .../compose/database/model/Participant.kt | 11 +- .../torch}/compose/database/model/Post.kt | 18 +- .../torch}/compose/database/model/Profile.kt | 37 +-- .../compose/database/model/QuotedRelation.kt | 15 +- .../torch}/compose/database/model/Reaction.kt | 19 +- .../compose/database/model/RecentSearch.kt | 9 +- .../torch}/compose/database/model/Relay.kt | 2 +- .../database/model/RepostedRelation.kt | 15 +- .../model/SynchronizeNostrEventRequest.kt | 13 +- .../model/SynchronizeNostrEventResult.kt | 6 +- .../database/model/UnsignedNostrEvent.kt | 12 +- .../torch}/compose/database/model/Zap.kt | 15 +- .../model/intermdiate/LocalAccount.kt | 39 +++ .../LocalBroadcastNostrEventRequest.kt | 14 + .../model/intermdiate/LocalChatMessage.kt | 34 ++ .../model/intermdiate/LocalChatRoom.kt | 13 +- .../intermdiate/LocalInReplyToNostrEvent.kt | 21 +- .../model/intermdiate/LocalMention.kt | 14 + .../model/intermdiate/LocalNostrEvent.kt | 34 +- .../model/intermdiate/LocalParticipant.kt | 14 + .../database/model/intermdiate/LocalPost.kt | 6 +- .../model/intermdiate/LocalProfile.kt | 14 + .../intermdiate/LocalProfileWithFollowers.kt | 13 +- .../intermdiate/LocalProfileWithFollowing.kt | 13 +- .../intermdiate/LocalQuotedNostrEvent.kt | 39 ++- .../intermdiate/LocalRepostedNostrEvent.kt | 21 +- .../model/traits/BroadcastableEntity.kt | 2 +- .../database/model/traits/LocalStoreEntity.kt | 2 +- .../database/model/traits/NostrEventEntity.kt | 2 +- .../model/traits/OptionalNostrEventEntity.kt | 2 +- .../model/traits/ProfilePublicKeyEntity.kt | 2 +- .../database/model/traits/ReplyingToEntity.kt | 2 +- .../model/traits/SoftDeletableEntity.kt | 2 +- .../model/traits/TimestampedEntity.kt | 2 +- .../model/traits/UnsignedNostrEventEntity.kt | 2 +- .../model/traits/UserViewableEntity.kt | 2 +- .../database/model/typealiases/HexArray.kt | 4 + .../database/model/typealiases/KindArray.kt | 3 + .../typealiases/SynchronizationFilterArray.kt | 3 + .../model/types/SynchronizationFilter.kt | 2 +- .../repository/DatabaseChatRepository.kt | 43 ++- .../repository/DatabaseNostrRepository.kt | 177 +++++------ .../repository/DatabasePostRepository.kt | 7 + .../repository/DatabaseSearchRepository.kt | 12 + .../GiftWrapImpersonationException.kt | 2 +- .../GiftWrapSealDecryptionException.kt | 2 +- .../exceptions/GiftWrapUnsealException.kt | 2 +- .../InvalidNostrPrivateKeyException.kt | 3 + .../compose/exceptions/NetworkException.kt | 2 +- .../exceptions/NostrNoticeException.kt | 2 +- .../exceptions/NostrPublishException.kt | 2 +- .../compose/exceptions/SignatureException.kt | 2 +- .../exceptions/SigningKeyNotFoundException.kt | 2 +- .../exceptions/SigningRejectedException.kt | 2 +- .../torch}/compose/extensions/Credentials.kt | 6 +- .../torch}/compose/extensions/Instant.kt | 2 +- .../torch}/compose/extensions/Phoenix.kt | 2 +- .../compose/managers/AuxDatabaseManager.kt | 28 ++ .../torch}/compose/network/UserAgent.kt | 2 +- .../torch}/compose/network/dto/RelayDTO.kt | 6 +- .../compose/network/relays/FallbackRelays.kt | 4 +- .../network/relays/NostrPublishResult.kt | 4 +- .../compose/network/relays/RelayPool.kt | 75 ++--- .../network/relays/RelaysSocketManager.kt | 35 +- .../broadcast/BroadcastEventResponse.kt | 2 +- .../relays/broadcast/BroadcastRequestBody.kt | 2 +- .../network/serialization/CommonJson.kt | 2 +- .../network/serialization/SocketsJson.kt | 5 +- .../network/sockets/NostrIncomingMessage.kt | 15 +- .../sockets/NostrIncomingMessageExt.kt | 2 +- .../sockets/NostrIncomingMessageParser.kt | 15 +- .../sockets/NostrOutgoingMessageBuilder.kt | 2 +- .../network/sockets/NostrSocketClient.kt | 2 +- .../sockets/NostrSocketClientFactory.kt | 2 +- .../network/sockets/NostrSocketClientImpl.kt | 8 +- .../compose/network/sockets/NostrVerb.kt | 2 +- .../sockets/SocketConnectionCallbacks.kt | 2 +- .../torch}/compose/nostr/Relays.kt | 2 +- .../repository/CachingImportRepository.kt | 40 +++ .../compose/repository/ChatRepository.kt | 46 ++- .../repository/NostrNotaryRepository.kt | 47 ++- .../repository/NostrPublisherRepository.kt | 35 +- .../compose/repository/NostrRepository.kt | 167 +++++----- .../compose/repository/PostRepository.kt | 4 + .../compose/repository/RelayRepository.kt | 5 +- .../compose/repository/SearchRepository.kt | 8 +- .../torch}/compose/ui/BlurHashDecoder.kt | 6 +- .../ui/composable/ChatRoomDetailScreen.kt | 50 ++- .../ui/composable/CreateProfileScreen.kt | 45 ++- .../compose/ui/composable/HomeScreen.kt | 88 +++--- .../composable/ImplementationPendingScreen.kt | 5 +- .../compose/ui/composable/LandingScreen.kt | 5 +- .../compose/ui/composable/LoadingScreen.kt | 10 +- .../ui/composable/NostrEventDetailScreen.kt | 57 ++-- .../ui/composable/SearchResultScreen.kt | 57 ++-- .../compose/ui/composable/SearchScreen.kt | 73 ++--- .../compose/ui/composable/SignInScreen.kt | 35 +- .../ui/composable/SocialPreconditionScreen.kt | 5 +- .../SovereignWalletStartupScreen.kt | 68 ++-- .../ui/composable/UnannouncedProfileScreen.kt | 9 +- .../ui/composable/UnindexedProfileScreen.kt | 9 +- .../ui/composable/UnqueuedProfileScreen.kt | 9 +- .../UnqueuedProfileSynchronizationScreen.kt | 19 +- .../ui/composable/UnsignedProfileScreen.kt | 9 +- .../ui/composable/UnsyncedProfileScreen.kt | 9 +- .../ui/composable/WriteNewNoteScreen.kt | 86 +++-- .../ui/composable/navigation/TorchNavHost.kt} | 298 ++++++++---------- .../routes/AuthenticatedProfileRoute.kt | 2 +- .../navigation/routes/BlankRoute.kt | 6 + .../navigation/routes/ChatRoomDetailRoute.kt | 2 +- .../navigation/routes/CreateProfileRoute.kt | 2 +- .../composable/navigation/routes/FeedRoute.kt | 2 +- .../routes/ImplementationPendingRoute.kt | 2 +- .../navigation/routes/LandingRoute.kt | 6 + .../navigation/routes/LoadingRoute.kt | 2 +- .../routes/NostrEventDetailRoute.kt | 2 +- .../ui/composable/navigation/routes/Route.kt | 3 + .../navigation/routes/SearchResultRoute.kt | 2 +- .../navigation/routes/SearchRoute.kt | 2 +- .../navigation/routes/SignInRoute.kt | 6 + .../routes/SocialPreconditionRoute.kt | 2 +- .../routes/SovereignWalletStartupRoute.kt | 6 + .../routes/UnannouncedProfileRoute.kt | 2 +- .../routes/UnindexedProfileRoute.kt | 2 +- .../navigation/routes/UnqueuedProfileRoute.kt | 2 +- .../UnqueuedProfileSynchronizationRoute.kt | 2 +- .../navigation/routes/UnsignedProfileRoute.kt | 2 +- .../navigation/routes/UnsyncedProfileRoute.kt | 2 +- .../navigation/routes/WriteNewNoteRoute.kt | 2 +- .../widgets/LoadingDataIndicator.kt | 5 +- .../composable/widgets/buttons/Clickable.kt | 0 .../widgets/coil/forwardingPainter.kt | 2 +- .../composable/widgets/content/ArticleCard.kt | 27 +- .../composable/widgets/content/Constants.kt | 6 +- .../widgets/content/ContentParser.kt | 67 ++-- .../widgets/content/ContentSegment.kt | 2 +- .../widgets/content/FullScreenImageViewer.kt | 4 +- .../ui/composable/widgets/content/Helpers.kt | 27 +- .../widgets/content/ImageWithContextMenu.kt | 8 +- .../widgets/content/InvoicePayState.kt | 2 +- .../widgets/content/LightningInvoiceCard.kt | 2 +- .../composable/widgets/content/LinkPreview.kt | 11 +- .../widgets/content/LiveStreamCard.kt | 9 +- .../widgets/content/LiveStreamCardContent.kt | 23 +- .../widgets/content/LoadingAsyncImage.kt | 2 +- .../composable/widgets/content/MediaMeta.kt | 2 +- .../composable/widgets/content/NoteActions.kt | 4 +- .../ui/composable/widgets/content/OgData.kt | 2 +- .../widgets/content/QuotedAddressableNote.kt | 5 +- .../composable/widgets/content/QuotedNote.kt | 25 +- .../composable/widgets/content/RichContent.kt | 47 ++- .../widgets/content/UnsupportedKindBadge.kt | 2 +- .../widgets/detail/MetadataEventDetail.kt | 93 +++--- .../widgets/detail/TextNoteEventDetail.kt | 60 ++-- .../widgets/dialogs/BottomSheetDialog.kt | 0 .../composable/widgets/feed/EventListView.kt | 67 ++-- .../widgets/feed/TextNoteFeedItem.kt | 92 +++--- .../widgets/profile/ProfileAvatar.kt | 44 +-- .../widgets/profile/ProfileColor.kt | 5 +- .../composable/widgets/wallet/WalletAvatar.kt | 2 +- .../widgets/wallet/WalletsSelector.kt | 6 +- .../torch}/compose/ui/theme/Color.kt | 2 +- .../torch}/compose/ui/theme/Theme.kt | 4 +- .../torch}/compose/ui/theme/Type.kt | 0 .../ChatRoomDetailMessageListViewModel.kt | 52 ++- .../ui/view/model/ChatRoomDetailViewModel.kt | 27 +- .../ui/view/model/ChatRoomListViewModel.kt | 54 ++-- .../ui/view/model/CreateProfileViewModel.kt | 12 +- .../ui/view/model/FeedListViewModel.kt | 51 ++- .../ui/view/model/FollowersListViewModel.kt | 42 +-- .../ui/view/model/FollowingListViewModel.kt | 42 +-- .../compose/ui/view/model/HomeViewModel.kt | 33 +- .../ui/view/model/InReplyToViewModel.kt | 59 ++-- .../model/MetadataEventDetailViewModel.kt | 53 ++-- .../ui/view/model/NavigationViewModel.kt | 38 ++- .../view/model/NostrEventDetailViewModel.kt | 32 +- .../compose/ui/view/model/NotaryViewModel.kt | 20 +- .../ui/view/model/SearchResultViewModel.kt | 47 ++- .../compose/ui/view/model/SearchViewModel.kt | 29 +- .../ui/view/model/SignInToProfileViewModel.kt | 20 +- .../model/SovereignWalletStartupViewModel.kt | 21 +- .../ui/view/model/SovereignWalletViewModel.kt | 23 +- .../ui/view/model/SynchronizationViewModel.kt | 71 ++--- ...UnqueuedProfileSynchronizationViewModel.kt | 18 +- .../ui/view/model/WriteNewNoteViewModel.kt | 52 ++- .../state/ChatRoomDetailMessageListUIState.kt | 6 +- .../ui/view/state/ChatRoomDetailUIState.kt | 6 +- .../ui/view/state/ChatRoomListUIState.kt | 6 +- .../ui/view/state/CreateProfileUIState.kt | 6 +- .../compose/ui/view/state/FeedListUIState.kt | 11 + .../ui/view/state/FollowersListUIState.kt | 6 +- .../ui/view/state/FollowingListUIState.kt | 6 +- .../ui/view/state/HomeScreenUIState.kt | 12 + .../view/state/MetadataEventDetailUIState.kt | 8 +- .../ui/view/state/NavigationUIState.kt | 19 +- .../ui/view/state/NostrEventDetailUIState.kt | 6 +- .../ui/view/state/SearchResultListUIState.kt | 6 +- .../compose/ui/view/state/SearchUIState.kt | 6 +- .../ui/view/state/SignInToProfileUIState.kt | 2 +- .../ui/view/state/SovereignWalletUIState.kt | 4 +- .../ui/view/state/WriteNewNoteUIState.kt | 24 ++ .../view/state/form/CreateProfileFormState.kt | 2 +- .../state/form/SignInToProfileFormState.kt | 2 +- .../compose/ui/view/state/form/TextField.kt | 2 +- .../view/state/form/WriteNewNoteFormState.kt | 5 + .../auxiliary/compose/ComposeAppCommonTest.kt | 2 +- .../auxiliary/compose/PlatformContext.ios.kt | 3 - .../torch}/compose/AppVersion.ios.kt | 2 +- .../torch}/compose/MainViewController.kt | 10 +- .../torch}/compose/Platform.ios.kt | 3 +- .../at/torch/compose/PlatformContext.ios.kt | 3 + .../builder/PlatformDatabaseBuilder.ios.kt | 16 +- .../torch}/compose/extensions/Phoenix.ios.kt | 2 +- .../torch}/compose/ui/theme/Theme.ios.kt | 2 +- .../ui/view/model/NavigationViewModel.ios.kt | 4 +- settings.gradle.kts | 2 +- 343 files changed, 2747 insertions(+), 3382 deletions(-) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/android/MainActivity.kt (76%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary/android/InomboloApplication.kt => at/torch/android/TorchApplication.kt} (88%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/AppVersion.android.kt (70%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/Platform.android.kt (53%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/PlatformContext.android.kt (73%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/builder/PlatformDatabaseBuilder.android.kt (65%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/extensions/Phoenix.android.kt (88%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/nfc/HceMonitor.kt (100%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/nfc/NfcReaderMonitor.kt (100%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/nfc/NfcState.kt (100%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/theme/Theme.android.kt (94%) rename composeApp/src/androidMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/NavigationViewModel.android.kt (95%) delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxGlobal.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/Platform.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabase.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabaseConstructor.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventReceiptDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageNostrEventRelationDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapMessageDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapSealDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/MentionDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeResultDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventRelayDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ParticipantDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/PostDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ReactionDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RecentSearchDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RelayDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RepostedRelationDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventResultDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/UnsignedNostrEventDao.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalAccount.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatMessage.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalMention.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalParticipant.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfile.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/HexArray.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/KindArray.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/SynchronizationFilterArray.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabasePostRepository.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseSearchRepository.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/InvalidNostrPrivateKeyException.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/managers/AuxDatabaseManager.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/CachingImportRepository.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/PostRepository.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/BlankRoute.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LandingRoute.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/Route.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SignInRoute.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FeedListUIState.kt delete mode 100755 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/HomeScreenUIState.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/WriteNewNoteUIState.kt delete mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/WriteNewNoteFormState.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/AppVersion.kt (77%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/Platform.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/PlatformContext.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary/compose/AuxApp.kt => at/torch/compose/TorchApp.kt} (66%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/TorchGlobal.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/cryptography/Extensions.kt (72%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabaseConstructor.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/converters/AuxConverters.kt (76%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventReceiptDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/BroadcastNostrEventRequestDao.kt (51%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt (50%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ChatMessageDao.kt (61%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageNostrEventRelationDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ChatRoomDao.kt (62%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ConnectionDao.kt (58%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapMessageDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/GiftWrapPayloadDao.kt (58%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapSealDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/InReplyToRelationDao.kt (59%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MentionDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/NegentropySynchronizeRequestDao.kt (65%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeResultDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/NostrDao.kt (86%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/NostrEventDao.kt (73%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventRelayDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/NostrNip17Dao.kt (77%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ParticipantDao.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/PostDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ProfileDao.kt (51%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/QuotedRelationDao.kt (60%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ReactionDao.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RecentSearchDao.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RelayDao.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RepostedRelationDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/SynchronizeNostrEventRequestDao.kt (66%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventResultDao.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/UnsignedNostrEventDao.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/dao/ZapDao.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/BroadcastNostrEventReceipt.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/BroadcastNostrEventRequest.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/ChatMessage.kt (76%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/ChatMessageNostrEventRelation.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/ChatRoom.kt (89%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Connection.kt (68%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/GiftWrapMessage.kt (84%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/GiftWrapPayload.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/GiftWrapSeal.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/InReplyToRelation.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Mention.kt (69%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/NegentropySynchronizeRequest.kt (81%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/NegentropySynchronizeResult.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/NostrEvent.kt (95%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/NostrEventRelay.kt (59%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Participant.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Post.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Profile.kt (81%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/QuotedRelation.kt (71%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Reaction.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/RecentSearch.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Relay.kt (82%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/RepostedRelation.kt (71%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/SynchronizeNostrEventRequest.kt (81%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/SynchronizeNostrEventResult.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/UnsignedNostrEvent.kt (81%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/Zap.kt (75%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalAccount.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatMessage.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalChatRoom.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt (80%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalMention.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalNostrEvent.kt (74%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalParticipant.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalPost.kt (59%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfile.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalProfileWithFollowers.kt (55%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalProfileWithFollowing.kt (55%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt (76%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/BroadcastableEntity.kt (62%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/LocalStoreEntity.kt (59%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/NostrEventEntity.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/OptionalNostrEventEntity.kt (68%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/ProfilePublicKeyEntity.kt (68%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/ReplyingToEntity.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/SoftDeletableEntity.kt (60%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/TimestampedEntity.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/UnsignedNostrEventEntity.kt (56%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/traits/UserViewableEntity.kt (60%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/HexArray.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/KindArray.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/SynchronizationFilterArray.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/model/types/SynchronizationFilter.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/repository/DatabaseChatRepository.kt (84%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/repository/DatabaseNostrRepository.kt (79%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabasePostRepository.kt create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseSearchRepository.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/GiftWrapImpersonationException.kt (72%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/GiftWrapSealDecryptionException.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/GiftWrapUnsealException.kt (71%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/InvalidNostrPrivateKeyException.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/NetworkException.kt (50%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/NostrNoticeException.kt (50%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/NostrPublishException.kt (51%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/SignatureException.kt (70%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/SigningKeyNotFoundException.kt (74%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/exceptions/SigningRejectedException.kt (72%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/extensions/Credentials.kt (91%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/extensions/Instant.kt (93%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/extensions/Phoenix.kt (91%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/managers/AuxDatabaseManager.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/UserAgent.kt (79%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/dto/RelayDTO.kt (79%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/FallbackRelays.kt (71%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/NostrPublishResult.kt (54%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/RelayPool.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/RelaysSocketManager.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/broadcast/BroadcastEventResponse.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/relays/broadcast/BroadcastRequestBody.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/serialization/CommonJson.kt (95%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/serialization/SocketsJson.kt (76%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrIncomingMessage.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrIncomingMessageExt.kt (95%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrIncomingMessageParser.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrOutgoingMessageBuilder.kt (96%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrSocketClient.kt (94%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrSocketClientFactory.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrSocketClientImpl.kt (96%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/NostrVerb.kt (94%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/network/sockets/SocketConnectionCallbacks.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/nostr/Relays.kt (98%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/repository/CachingImportRepository.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/ChatRepository.kt (63%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/NostrNotaryRepository.kt (65%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/NostrPublisherRepository.kt (61%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/NostrRepository.kt (51%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/repository/PostRepository.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/RelayRepository.kt (53%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/repository/SearchRepository.kt (54%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/BlurHashDecoder.kt (95%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/ChatRoomDetailScreen.kt (82%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/CreateProfileScreen.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/HomeScreen.kt (74%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/ImplementationPendingScreen.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/LandingScreen.kt (96%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/LoadingScreen.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/NostrEventDetailScreen.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/SearchResultScreen.kt (83%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/SearchScreen.kt (85%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/SignInScreen.kt (87%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/SocialPreconditionScreen.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/SovereignWalletStartupScreen.kt (82%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnannouncedProfileScreen.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnindexedProfileScreen.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnqueuedProfileScreen.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnsignedProfileScreen.kt (89%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/UnsyncedProfileScreen.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/WriteNewNoteScreen.kt (87%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt => at/torch/compose/ui/composable/navigation/TorchNavHost.kt} (52%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt (59%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/BlankRoute.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/CreateProfileRoute.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/FeedRoute.kt (60%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt (66%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LandingRoute.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/LoadingRoute.kt (59%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt (71%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/Route.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/SearchResultRoute.kt (65%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/SearchRoute.kt (61%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SignInRoute.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt (62%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt (66%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt (76%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/LoadingDataIndicator.kt (93%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/buttons/Clickable.kt (100%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/coil/forwardingPainter.kt (96%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/ArticleCard.kt (88%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/Constants.kt (91%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/ContentParser.kt (68%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/ContentSegment.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/FullScreenImageViewer.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/Helpers.kt (83%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/ImageWithContextMenu.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/InvoicePayState.kt (52%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/LightningInvoiceCard.kt (99%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/LinkPreview.kt (93%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/LiveStreamCard.kt (86%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/LiveStreamCardContent.kt (89%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/LoadingAsyncImage.kt (97%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/MediaMeta.kt (69%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/NoteActions.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/OgData.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/QuotedAddressableNote.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/QuotedNote.kt (86%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/RichContent.kt (92%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt (94%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/detail/MetadataEventDetail.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt (88%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/dialogs/BottomSheetDialog.kt (100%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/feed/EventListView.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt (76%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/profile/ProfileAvatar.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/profile/ProfileColor.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/wallet/WalletAvatar.kt (98%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/composable/widgets/wallet/WalletsSelector.kt (96%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/theme/Color.kt (99%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/theme/Theme.kt (99%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/theme/Type.kt (100%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt (89%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/ChatRoomDetailViewModel.kt (72%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/ChatRoomListViewModel.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/CreateProfileViewModel.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/FeedListViewModel.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/FollowersListViewModel.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/FollowingListViewModel.kt (80%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/HomeViewModel.kt (78%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/InReplyToViewModel.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/MetadataEventDetailViewModel.kt (82%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/NavigationViewModel.kt (77%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/NostrEventDetailViewModel.kt (69%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/NotaryViewModel.kt (88%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SearchResultViewModel.kt (73%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SearchViewModel.kt (67%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SignInToProfileViewModel.kt (75%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SovereignWalletStartupViewModel.kt (83%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SovereignWalletViewModel.kt (93%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/SynchronizationViewModel.kt (88%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt (82%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/WriteNewNoteViewModel.kt (72%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt (56%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/ChatRoomDetailUIState.kt (53%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/ChatRoomListUIState.kt (51%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/CreateProfileUIState.kt (72%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FeedListUIState.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/FollowersListUIState.kt (56%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/FollowingListUIState.kt (56%) create mode 100755 composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/HomeScreenUIState.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/MetadataEventDetailUIState.kt (52%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/NavigationUIState.kt (55%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/NostrEventDetailUIState.kt (59%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/SearchResultListUIState.kt (52%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/SearchUIState.kt (53%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/SignInToProfileUIState.kt (90%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/SovereignWalletUIState.kt (78%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/WriteNewNoteUIState.kt rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/form/CreateProfileFormState.kt (70%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/form/SignInToProfileFormState.kt (60%) rename composeApp/src/commonMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/state/form/TextField.kt (85%) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/WriteNewNoteFormState.kt rename composeApp/src/commonTest/kotlin/{ac => at}/auxiliary/compose/ComposeAppCommonTest.kt (83%) delete mode 100644 composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.ios.kt rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/AppVersion.ios.kt (92%) rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/MainViewController.kt (59%) rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/Platform.ios.kt (63%) create mode 100644 composeApp/src/iosMain/kotlin/at/torch/compose/PlatformContext.ios.kt rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/database/builder/PlatformDatabaseBuilder.ios.kt (72%) rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/extensions/Phoenix.ios.kt (96%) rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/theme/Theme.ios.kt (88%) rename composeApp/src/iosMain/kotlin/{ac/cord/auxiliary => at/torch}/compose/ui/view/model/NavigationViewModel.ios.kt (98%) diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 3946a0f2..061ec511 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -119,14 +119,14 @@ kotlin { } android { - namespace = "ac.cord.auxiliary.android" + namespace = "at.torch.android" compileSdk = libs.versions.android.compileSdk.get().toInt() buildFeatures { buildConfig = true } defaultConfig { - applicationId = "ac.cord.auxiliary.android" + applicationId = "at.torch.android" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() versionCode = 1 @@ -187,11 +187,11 @@ sqldelight { compose.desktop { application { - mainClass = "ac.cord.auxiliary.desktop.MainKt" + mainClass = "at.torch.desktop.MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) - packageName = "ac.cord.auxiliary.desktop" + packageName = "at.torch.desktop" packageVersion = "1.0.0" } } diff --git a/composeApp/src/androidMain/AndroidManifest.xml b/composeApp/src/androidMain/AndroidManifest.xml index fbe5a1c1..f9f8de1e 100644 --- a/composeApp/src/androidMain/AndroidManifest.xml +++ b/composeApp/src/androidMain/AndroidManifest.xml @@ -7,7 +7,7 @@ + android:name="at.torch.android.MainActivity"> diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/MainActivity.kt b/composeApp/src/androidMain/kotlin/at/torch/android/MainActivity.kt similarity index 76% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/MainActivity.kt rename to composeApp/src/androidMain/kotlin/at/torch/android/MainActivity.kt index 4f40b511..dea4ad70 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/MainActivity.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/android/MainActivity.kt @@ -1,8 +1,8 @@ -package ac.cord.auxiliary.android +package at.torch.android -import ac.cord.auxiliary.compose.AuxApp -import ac.cord.auxiliary.compose.AuxGlobal -import ac.cord.auxiliary.compose.PlatformContext +import at.torch.auxiliary.compose.AuxApp +import at.torch.auxiliary.compose.AuxGlobal +import at.torch.compose.PlatformContext import android.content.Intent import android.nfc.NfcAdapter import android.os.Bundle @@ -48,8 +48,9 @@ class MainActivity : ComponentActivity() { } fun stopNfcReader() { - if (NfcStateRepository.isReading()) { - NfcStateRepository.updateState(NfcState.Inactive) + if (_root_ide_package_.com.machankura.compose.ui.composable.widgets.nfc.NfcStateRepository.isReading()) { + _root_ide_package_.com.machankura.compose.ui.composable.widgets.nfc.NfcStateRepository.updateState( + _root_ide_package_.com.machankura.compose.ui.composable.widgets.nfc.NfcState.Inactive) } nfcAdapter?.disableReaderMode(this@MainActivity) } diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/InomboloApplication.kt b/composeApp/src/androidMain/kotlin/at/torch/android/TorchApplication.kt similarity index 88% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/InomboloApplication.kt rename to composeApp/src/androidMain/kotlin/at/torch/android/TorchApplication.kt index be04b881..fcece408 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/android/InomboloApplication.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/android/TorchApplication.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.android +package at.torch.android import android.app.Application import android.content.Context @@ -7,14 +7,13 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.preferencesDataStore import fr.acinq.phoenix.PhoenixGlobal import fr.acinq.phoenix.android.BusinessManager -import fr.acinq.phoenix.utils.Logging import fr.acinq.phoenix.utils.PlatformContext import fr.acinq.phoenix.utils.preferences.GlobalPrefs /** This datastore persists preferences across node ids. */ val Context.globalPrefs: DataStore by preferencesDataStore(name = "globalprefs") -class InomboloApplication: Application() { +class TorchApplication: Application() { lateinit var globalPrefs: GlobalPrefs lateinit var phoenixGlobal: PhoenixGlobal diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/AppVersion.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/AppVersion.android.kt similarity index 70% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/AppVersion.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/AppVersion.android.kt index 93198ec5..63725308 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/AppVersion.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/AppVersion.android.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose +package at.torch.compose -import ac.cord.auxiliary.android.BuildConfig +import at.torch.auxiliary.android.BuildConfig actual object AppVersion { actual val versionName: String diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/Platform.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/Platform.android.kt similarity index 53% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/Platform.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/Platform.android.kt index 9f83472f..98d663e7 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/Platform.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/Platform.android.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose +package at.torch.compose import android.os.Build @@ -6,4 +6,4 @@ class AndroidPlatform : Platform { override val name: String = "Android ${Build.VERSION.SDK_INT}" } -actual fun getPlatform(): Platform = AndroidPlatform() \ No newline at end of file +actual fun getPlatform(): Platform = _root_ide_package_.at.torch.compose.AndroidPlatform() \ No newline at end of file diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/PlatformContext.android.kt similarity index 73% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/PlatformContext.android.kt index ae75a3fa..9147bf90 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/PlatformContext.android.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose +package at.torch.compose import android.content.Context diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.android.kt similarity index 65% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.android.kt index 5ffc7fcd..e9b89bff 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.android.kt @@ -1,22 +1,22 @@ -package ac.cord.auxiliary.compose.database.builder +package at.torch.compose.database.builder -import ac.cord.auxiliary.compose.PlatformContext -import ac.cord.auxiliary.compose.database.AuxDatabase +import at.torch.compose.PlatformContext +import at.torch.compose.database.TorchDatabase import androidx.room3.Room import androidx.room3.RoomDatabase actual object PlatformDatabaseBuilder { - actual fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder { + actual fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder { val appContext = platformContext.applicationContext val dbFile = appContext.getDatabasePath("aux.db") - return Room.databaseBuilder( + return Room.databaseBuilder( context = appContext, name = dbFile.absolutePath ) } - actual fun getInMemoryDatabaseBuilder(platform: PlatformContext): RoomDatabase.Builder { + actual fun getInMemoryDatabaseBuilder(platform: PlatformContext): RoomDatabase.Builder { return Room.inMemoryDatabaseBuilder( context = platform.applicationContext ) diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/extensions/Phoenix.android.kt similarity index 88% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/extensions/Phoenix.android.kt index 3f5e2d7f..fdb48c25 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/extensions/Phoenix.android.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.extensions +package at.torch.compose.extensions -import ac.cord.auxiliary.android.InomboloApplication +import at.torch.android.TorchApplication import fr.acinq.phoenix.PhoenixGlobal import fr.acinq.phoenix.android.BusinessManager import fr.acinq.phoenix.android.services.ChannelsWatcher @@ -23,11 +23,11 @@ actual fun schedulePlatformLogic(phoenixGlobal: PhoenixGlobal) { ContactsPhotoCleaner.schedule(phoenixGlobal.ctx.applicationContext) } actual fun getShowIntroFlow(phoenixGlobal: PhoenixGlobal): Flow { - val machankuraApplication = phoenixGlobal.ctx.applicationContext as InomboloApplication + val machankuraApplication = phoenixGlobal.ctx.applicationContext as TorchApplication return machankuraApplication.globalPrefs.getShowIntro } actual fun getGlobalPrefs(phoenixGlobal: PhoenixGlobal): GlobalPrefs { - val machankuraApplication = phoenixGlobal.ctx.applicationContext as InomboloApplication + val machankuraApplication = phoenixGlobal.ctx.applicationContext as TorchApplication return machankuraApplication.globalPrefs } \ No newline at end of file diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/HceMonitor.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/HceMonitor.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/HceMonitor.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/HceMonitor.kt diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/NfcReaderMonitor.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/NfcReaderMonitor.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/NfcReaderMonitor.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/NfcReaderMonitor.kt diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/NfcState.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/NfcState.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/nfc/NfcState.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/ui/composable/widgets/nfc/NfcState.kt diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/theme/Theme.android.kt similarity index 94% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/ui/theme/Theme.android.kt index 0f6e1b44..c6e5c5f9 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/theme/Theme.android.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.theme +package at.torch.compose.ui.theme import android.os.Build import androidx.compose.material3.ColorScheme diff --git a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.android.kt b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.android.kt similarity index 95% rename from composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.android.kt rename to composeApp/src/androidMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.android.kt index 91d43e1b..76577c22 100644 --- a/composeApp/src/androidMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.android.kt +++ b/composeApp/src/androidMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.android.kt @@ -1,7 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.android.InomboloApplication -import ac.cord.auxiliary.compose.AppVersion +import at.torch.android.TorchApplication +import at.torch.auxiliary.compose.AppVersion import co.touchlab.kermit.Logger import fr.acinq.bitcoin.MnemonicCode import fr.acinq.lightning.crypto.LocalKeyManager @@ -35,12 +35,12 @@ actual fun loadAndDecryptSeed(phoenixGlobal: PhoenixGlobal): DecryptSeedResult { } actual fun getAvailableWalletsMeta(phoenixGlobal: PhoenixGlobal): Flow> { - val machankuraApplication = phoenixGlobal.ctx.applicationContext as InomboloApplication + val machankuraApplication = phoenixGlobal.ctx.applicationContext as TorchApplication return machankuraApplication.globalPrefs.getAvailableWalletsMeta } actual suspend fun saveAvailableWalletMeta(phoenixGlobal: PhoenixGlobal, metadata: UserWalletMetadata) { - val machankuraApplication = phoenixGlobal.ctx.applicationContext as InomboloApplication + val machankuraApplication = phoenixGlobal.ctx.applicationContext as TorchApplication machankuraApplication.globalPrefs.saveAvailableWalletMeta(metadata) } @@ -51,7 +51,7 @@ actual suspend fun saveAvailableWalletMeta( avatar: String, isHidden: Boolean ) { - val machankuraApplication = phoenixGlobal.ctx.applicationContext as InomboloApplication + val machankuraApplication = phoenixGlobal.ctx.applicationContext as TorchApplication machankuraApplication.globalPrefs.saveAvailableWalletMeta( walletId = walletId, name = name, diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/BusinessManager.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/BusinessManager.kt index 8b479274..2c84b478 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/BusinessManager.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/BusinessManager.kt @@ -16,9 +16,9 @@ package fr.acinq.phoenix.android -import ac.cord.auxiliary.android.InomboloApplication -import ac.cord.auxiliary.compose.AppVersion -import ac.cord.auxiliary.compose.ui.composable.widgets.wallet.WalletAvatars +import at.torch.android.TorchApplication +import at.torch.auxiliary.compose.AppVersion +import at.torch.auxiliary.compose.ui.composable.widgets.wallet.WalletAvatars import android.content.Context import android.text.format.DateUtils import fr.acinq.lightning.LiquidityEvents @@ -34,10 +34,8 @@ import fr.acinq.phoenix.data.StartupParams import fr.acinq.phoenix.data.WalletId import fr.acinq.phoenix.data.inFlightPaymentsCount import fr.acinq.phoenix.managers.AppConnectionsDaemon -import fr.acinq.phoenix.managers.DataStoreManager import fr.acinq.phoenix.managers.NodeParamsManager import fr.acinq.phoenix.managers.PeerManager -import fr.acinq.phoenix.managers.WalletManager import fr.acinq.phoenix.managers.global.CurrencyManager import fr.acinq.phoenix.utils.MnemonicLanguage import fr.acinq.phoenix.utils.SystemNotificationHelper @@ -47,7 +45,6 @@ import fr.acinq.phoenix.utils.preferences.UserWalletMetadata import fr.acinq.phoenix.utils.preferences.getByWalletIdOrDefault import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -70,7 +67,7 @@ object BusinessManager { // No memory leaks because this can only contain the application context. private lateinit var appContext: Context - private val application by lazy { appContext as InomboloApplication } + private val application by lazy { appContext as TorchApplication } /** A map of (walletId -> active businesses) */ private val _businessFlow = MutableStateFlow>(emptyMap()) diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ChannelsWatcher.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ChannelsWatcher.kt index 172789a7..bde8d860 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ChannelsWatcher.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ChannelsWatcher.kt @@ -16,7 +16,7 @@ package fr.acinq.phoenix.android.services -import ac.cord.auxiliary.android.BuildConfig +import at.torch.auxiliary.android.BuildConfig import android.content.Context import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ContactsPhotoCleaner.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ContactsPhotoCleaner.kt index 926bb86f..520b0dcc 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ContactsPhotoCleaner.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/ContactsPhotoCleaner.kt @@ -16,7 +16,7 @@ package fr.acinq.phoenix.android.services -import ac.cord.auxiliary.android.BuildConfig +import at.torch.auxiliary.android.BuildConfig import android.content.Context import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/DailyConnect.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/DailyConnect.kt index fea91381..71e9f1c8 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/DailyConnect.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/DailyConnect.kt @@ -16,7 +16,7 @@ package fr.acinq.phoenix.android.services -import ac.cord.auxiliary.android.BuildConfig +import at.torch.auxiliary.android.BuildConfig import android.content.Context import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/InflightPaymentsWatcher.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/InflightPaymentsWatcher.kt index 2f142c1b..92bb7d05 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/InflightPaymentsWatcher.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/InflightPaymentsWatcher.kt @@ -16,8 +16,8 @@ package fr.acinq.phoenix.android.services -import ac.cord.auxiliary.android.BuildConfig -import ac.cord.auxiliary.android.InomboloApplication +import at.torch.auxiliary.android.BuildConfig +import at.torch.android.TorchApplication import android.content.Context import android.os.Build import androidx.work.CoroutineWorker @@ -95,7 +95,7 @@ class InflightPaymentsWatcher(context: Context, workerParams: WorkerParameters) } val watchResult = userWallets.map { (walletId, wallet) -> - val walletMetadata = (applicationContext as InomboloApplication).globalPrefs.getAvailableWalletsMeta.first().getByWalletIdOrDefault(walletId) + val walletMetadata = (applicationContext as TorchApplication).globalPrefs.getAvailableWalletsMeta.first().getByWalletIdOrDefault(walletId) watchWallet(walletId, walletMetadata, wallet.words) } diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/PaymentsForegroundService.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/PaymentsForegroundService.kt index 75bab12b..b54c808f 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/PaymentsForegroundService.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/android/services/PaymentsForegroundService.kt @@ -1,16 +1,12 @@ package fr.acinq.phoenix.android.services -import ac.cord.auxiliary.android.BuildConfig -import ac.cord.auxiliary.android.InomboloApplication -import android.app.Notification +import at.torch.auxiliary.android.BuildConfig +import at.torch.android.TorchApplication import android.app.Service import android.content.Intent -import android.content.pm.ServiceInfo -import android.os.Build import android.os.Handler import android.os.Looper import androidx.core.app.NotificationManagerCompat -import androidx.core.app.ServiceCompat import fr.acinq.lightning.utils.Connection import fr.acinq.phoenix.PhoenixBusiness import fr.acinq.phoenix.PhoenixGlobal @@ -104,7 +100,7 @@ class PaymentsForegroundService : Service() { is DecryptSeedResult.Failure -> { log.info("unable to read seed, ignoring background message (reason=$reason)") serviceScope.launch { - val walletMetadataMap = (application as InomboloApplication).globalPrefs.getAvailableWalletsMeta.first() + val walletMetadataMap = (application as TorchApplication).globalPrefs.getAvailableWalletsMeta.first() val metadata = walletMetadataMap.getByWalletIdOrDefault(walletId) when (reason) { "IncomingPayment" -> SystemNotificationHelper.notifyPaymentMissedAppUnavailable(applicationContext, metadata) diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/ContactsPhotoHelper.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/ContactsPhotoHelper.kt index bb50b2f1..ae30b901 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/ContactsPhotoHelper.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/ContactsPhotoHelper.kt @@ -1,6 +1,6 @@ package fr.acinq.phoenix.utils -import ac.cord.auxiliary.android.BuildConfig +import at.torch.auxiliary.android.BuildConfig import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/SystemNotificationHelper.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/SystemNotificationHelper.kt index 8df92a9b..ca44b16d 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/SystemNotificationHelper.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/SystemNotificationHelper.kt @@ -16,12 +16,11 @@ package fr.acinq.phoenix.utils -import ac.cord.auxiliary.android.BuildConfig -import ac.cord.auxiliary.android.MainActivity -import ac.cord.auxiliary.android.R +import at.torch.auxiliary.android.BuildConfig +import at.torch.android.MainActivity +import at.torch.auxiliary.android.R import android.Manifest import android.app.Notification -import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context diff --git a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/extensions/AndroidContextExtensions.kt b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/extensions/AndroidContextExtensions.kt index af1a4c11..056657f5 100644 --- a/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/extensions/AndroidContextExtensions.kt +++ b/composeApp/src/androidMain/kotlin/fr/acinq/phoenix/utils/extensions/AndroidContextExtensions.kt @@ -16,7 +16,7 @@ package fr.acinq.phoenix.utils.extensions -import ac.cord.auxiliary.android.MainActivity +import at.torch.android.MainActivity import android.content.Context import android.content.ContextWrapper diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxGlobal.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxGlobal.kt deleted file mode 100644 index bf5e7b61..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxGlobal.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ac.cord.auxiliary.compose - -class AuxGlobal( - val platformContext: PlatformContext -) { - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/Platform.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/Platform.kt deleted file mode 100644 index 0e3d3bb2..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/Platform.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ac.cord.auxiliary.compose - -interface Platform { - val name: String -} - -expect fun getPlatform(): Platform \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.kt deleted file mode 100644 index 0354337a..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ac.cord.auxiliary.compose - -expect class PlatformContext \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabase.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabase.kt deleted file mode 100644 index 1bb40114..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabase.kt +++ /dev/null @@ -1,176 +0,0 @@ -package ac.cord.auxiliary.compose.database - -import ac.cord.auxiliary.compose.database.converters.AuxConverters -import ac.cord.auxiliary.compose.database.dao.BroadcastNostrEventReceiptDao -import ac.cord.auxiliary.compose.database.dao.BroadcastNostrEventRequestDao -import ac.cord.auxiliary.compose.database.dao.ChatMessageDao -import ac.cord.auxiliary.compose.database.dao.ChatMessageBroadcastNostrEventRequestRelationDao -import ac.cord.auxiliary.compose.database.dao.ChatMessageBroadcastNostrEventReceiptRelationDao -import ac.cord.auxiliary.compose.database.dao.ChatMessageNostrEventRelationDao -import ac.cord.auxiliary.compose.database.dao.ChatRoomDao -import ac.cord.auxiliary.compose.database.dao.ConnectionDao -import ac.cord.auxiliary.compose.database.dao.GiftWrapMessageDao -import ac.cord.auxiliary.compose.database.dao.GiftWrapSealDao -import ac.cord.auxiliary.compose.database.dao.GiftWrapPayloadDao -import ac.cord.auxiliary.compose.database.dao.InReplyToRelationDao -import ac.cord.auxiliary.compose.database.dao.MentionDao -import ac.cord.auxiliary.compose.database.dao.NegentropySynchronizeRequestDao -import ac.cord.auxiliary.compose.database.dao.NegentropySynchronizeResultDao -import ac.cord.auxiliary.compose.database.dao.NostrDao -import ac.cord.auxiliary.compose.database.dao.NostrEventDao -import ac.cord.auxiliary.compose.database.dao.NostrEventRelayDao -import ac.cord.auxiliary.compose.database.dao.NostrNip17Dao -import ac.cord.auxiliary.compose.database.dao.ParticipantDao -import ac.cord.auxiliary.compose.database.dao.PostDao -import ac.cord.auxiliary.compose.database.dao.ProfileDao -import ac.cord.auxiliary.compose.database.dao.QuotedRelationDao -import ac.cord.auxiliary.compose.database.dao.ReactionDao -import ac.cord.auxiliary.compose.database.dao.RecentSearchDao -import ac.cord.auxiliary.compose.database.dao.RelayDao -import ac.cord.auxiliary.compose.database.dao.RepostedRelationDao -import ac.cord.auxiliary.compose.database.dao.SynchronizeNostrEventRequestDao -import ac.cord.auxiliary.compose.database.dao.SynchronizeNostrEventResultDao -import ac.cord.auxiliary.compose.database.dao.UnsignedNostrEventDao -import ac.cord.auxiliary.compose.database.dao.ZapDao -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.ChatMessage -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation -import ac.cord.auxiliary.compose.database.model.ChatMessageNostrEventRelation -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.GiftWrapMessage -import ac.cord.auxiliary.compose.database.model.GiftWrapSeal -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload -import ac.cord.auxiliary.compose.database.model.InReplyToRelation -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeResult -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.NostrEventRelay -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.database.model.Post -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.Reaction -import ac.cord.auxiliary.compose.database.model.RecentSearch -import ac.cord.auxiliary.compose.database.model.Relay -import ac.cord.auxiliary.compose.database.model.RepostedRelation -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventResult -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.Zap -import androidx.room3.Database -import androidx.room3.RoomDatabase -import androidx.room3.TypeConverters -import androidx.room3.immediateTransaction -import androidx.room3.useWriterConnection -import kotlin.time.Instant - -val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L) - -@Database( - entities = [ - BroadcastNostrEventReceipt::class, - BroadcastNostrEventRequest::class, - Connection::class, - ChatMessage::class, - ChatMessageBroadcastNostrEventRequestRelation::class, - ChatMessageBroadcastNostrEventReceiptRelation::class, - ChatMessageNostrEventRelation::class, - ChatRoom::class, - InReplyToRelation::class, - GiftWrapMessage::class, - GiftWrapSeal::class, - GiftWrapPayload::class, - Mention::class, - NegentropySynchronizeRequest::class, - NegentropySynchronizeResult::class, - NostrEvent::class, - NostrEventRelay::class, - Participant::class, - Post::class, - Profile::class, - QuotedRelation::class, - Reaction::class, - RecentSearch::class, - Relay::class, - RepostedRelation::class, - SynchronizeNostrEventRequest::class, - SynchronizeNostrEventResult::class, - UnsignedNostrEvent::class, - Zap::class - ], - version = 1 -) -@TypeConverters(AuxConverters::class) -abstract class AuxDatabase: RoomDatabase() { - abstract fun broadcastNostrEventReceiptDao(): BroadcastNostrEventReceiptDao - abstract fun broadcastNostrEventRequestDao(): BroadcastNostrEventRequestDao - - abstract fun chatMessageDao(): ChatMessageDao - - abstract fun chatMessageBroadcastNostrEventRequestRelationDao(): ChatMessageBroadcastNostrEventRequestRelationDao - - abstract fun chatMessageBroadcastNostrEventReceiptRelationDao(): ChatMessageBroadcastNostrEventReceiptRelationDao - - abstract fun chatMessageNostrEventRelationDao(): ChatMessageNostrEventRelationDao - - abstract fun chatRoomDao(): ChatRoomDao - - abstract fun connectionDao(): ConnectionDao - - abstract fun giftWrapMessageDao(): GiftWrapMessageDao - - abstract fun giftWrapSealDao(): GiftWrapSealDao - - abstract fun giftWrapPayloadDao(): GiftWrapPayloadDao - - abstract fun inReplyToRelationDao(): InReplyToRelationDao - - abstract fun mentionDao(): MentionDao - - abstract fun negentropySynchronizeRequestDao(): NegentropySynchronizeRequestDao - - abstract fun negentropySynchronizeResultDao(): NegentropySynchronizeResultDao - - abstract fun nostrDao(): NostrDao - - abstract fun nostrEventDao(): NostrEventDao - - abstract fun nostrEventRelayDao(): NostrEventRelayDao - - abstract fun nostrNip17Dao(): NostrNip17Dao - - abstract fun participantDao(): ParticipantDao - - abstract fun postDao(): PostDao - - abstract fun profileDao(): ProfileDao - - abstract fun quotedRelationDao(): QuotedRelationDao - - abstract fun reactionDao(): ReactionDao - - abstract fun recentSearchDao(): RecentSearchDao - - abstract fun relayDao(): RelayDao - - abstract fun repostedRelationDao(): RepostedRelationDao - - abstract fun synchronizeNostrEventRequestDao(): SynchronizeNostrEventRequestDao - - abstract fun synchronizeNostrEventResultDao(): SynchronizeNostrEventResultDao - - abstract fun unsignedNostrEventDao(): UnsignedNostrEventDao - abstract fun zapDao(): ZapDao - - suspend fun wipeData() { - useWriterConnection { transactor -> - transactor.immediateTransaction { - // TODO: Actually delete the data... - } - } - } -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabaseConstructor.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabaseConstructor.kt deleted file mode 100644 index 13fcaf41..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/AuxDatabaseConstructor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package ac.cord.auxiliary.compose.database - -import androidx.room3.RoomDatabaseConstructor - -@Suppress("KotlinNoActualForExpect", "NO_ACTUAL_FOR_EXPECT") -expect object AuxDatabaseConstructor: RoomDatabaseConstructor { - - override fun initialize(): AuxDatabase -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.kt deleted file mode 100644 index 5e831a8b..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.kt +++ /dev/null @@ -1,23 +0,0 @@ -package ac.cord.auxiliary.compose.database.builder - -import ac.cord.auxiliary.compose.PlatformContext -import ac.cord.auxiliary.compose.database.AuxDatabase -import androidx.room3.RoomDatabase -import androidx.sqlite.driver.bundled.BundledSQLiteDriver -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.IO - -expect object PlatformDatabaseBuilder { - fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder - - fun getInMemoryDatabaseBuilder(platform: PlatformContext): RoomDatabase.Builder -} - -fun getRoomDatabase( - builder: RoomDatabase.Builder -): AuxDatabase { - return builder - .setDriver(BundledSQLiteDriver()) - .setQueryCoroutineContext(Dispatchers.IO) - .build() -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventReceiptDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventReceiptDao.kt deleted file mode 100644 index 372827f5..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventReceiptDao.kt +++ /dev/null @@ -1,22 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface BroadcastNostrEventReceiptDao { - @Query("SELECT * FROM BroadcastNostrEventReceipt") - fun getAllBroadcastNostrEventReceipts(): List - - @Query("SELECT * FROM BroadcastNostrEventReceipt WHERE id = :id") - fun getBroadcastNostrEventReceiptById(id: Long): Flow - - @Query("SELECT * FROM BroadcastNostrEventReceipt WHERE nostrEventId = :nostrEventId") - fun getBroadcastNostrEventReceiptByNostrEventId(nostrEventId: String): Flow - - @Upsert - suspend fun upsert(broadcastNostrEventReceipt: BroadcastNostrEventReceipt): Long -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt deleted file mode 100644 index 29f4e409..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation -import ac.cord.auxiliary.compose.database.model.NostrEvent -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Transaction -import androidx.room3.Upsert -import com.vitorpamplona.quartz.nip01Core.core.HexKey -import com.vitorpamplona.quartz.nip01Core.core.Kind -import kotlin.time.Instant - -@Dao -interface ChatMessageBroadcastNostrEventRequestRelationDao { - @Query("SELECT * FROM ChatMessageBroadcastNostrEventRequestRelation WHERE broadcastNostrEventRequestId = :broadcastNostrEventRequestId") - suspend fun getChatMessageBroadcastNostrEventRequestRelationByBroadcastRequest(broadcastNostrEventRequestId: Long): ChatMessageBroadcastNostrEventRequestRelation? - - @Upsert - suspend fun upsert(chatMessageBroadcastNostrEventRequestRelation: ChatMessageBroadcastNostrEventRequestRelation) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageNostrEventRelationDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageNostrEventRelationDao.kt deleted file mode 100644 index 2cc94e59..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageNostrEventRelationDao.kt +++ /dev/null @@ -1,12 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.ChatMessageNostrEventRelation -import androidx.room3.Dao -import androidx.room3.Upsert - -@Dao -interface ChatMessageNostrEventRelationDao { - - @Upsert - suspend fun upsert(chatMessageNostrEventRelation: ChatMessageNostrEventRelation) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapMessageDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapMessageDao.kt deleted file mode 100644 index 03da6ac1..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapMessageDao.kt +++ /dev/null @@ -1,18 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.GiftWrapMessage -import ac.cord.auxiliary.compose.database.model.Relay -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface GiftWrapMessageDao { - @Query("SELECT * FROM GiftWrapMessage") - fun getAllGiftWrapMessages(): List - - @Upsert - suspend fun upsert(giftWrapMessage: GiftWrapMessage) - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapSealDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapSealDao.kt deleted file mode 100644 index 7041176a..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapSealDao.kt +++ /dev/null @@ -1,18 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.GiftWrapSeal -import ac.cord.auxiliary.compose.database.model.Relay -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface GiftWrapSealDao { - @Query("SELECT * FROM GiftWrapSeal") - fun getAllGiftWrapSeals(): List - - @Upsert - suspend fun upsert(giftWrapSeal: GiftWrapSeal) - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/MentionDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/MentionDao.kt deleted file mode 100644 index 6f9048b3..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/MentionDao.kt +++ /dev/null @@ -1,22 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.Post -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalPost -import androidx.room3.Dao -import androidx.room3.Insert -import androidx.room3.OnConflictStrategy.Companion.IGNORE -import androidx.room3.Query -import androidx.room3.Upsert - -@Dao -interface MentionDao { - - @Insert( - onConflict = IGNORE - ) - suspend fun insert(mention: Mention) - - @Upsert - suspend fun upsert(mention: Mention) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeResultDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeResultDao.kt deleted file mode 100644 index c7fa0980..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeResultDao.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeResult -import androidx.room3.Dao -import androidx.room3.Insert -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow -import kotlin.time.Clock -import kotlin.time.Instant - -@Dao -interface NegentropySynchronizeResultDao { - @Upsert - fun upsert(negentropySynchronizeResult: NegentropySynchronizeResult) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventRelayDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventRelayDao.kt deleted file mode 100644 index 5667633c..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventRelayDao.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.NostrEventRelay -import ac.cord.auxiliary.compose.database.model.Relay -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface NostrEventRelayDao { - - @Upsert - suspend fun upsert(nostrEventRelay: NostrEventRelay) - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ParticipantDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ParticipantDao.kt deleted file mode 100644 index 983034f5..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ParticipantDao.kt +++ /dev/null @@ -1,24 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.database.model.Relay -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import fr.acinq.bitcoin.PublicKey -import kotlinx.coroutines.flow.Flow - -@Dao -interface ParticipantDao { - @Query("SELECT * FROM Participant WHERE participantPublicKey = :participantPublicKey") - fun findParticipantByPublicKey(participantPublicKey: String): Participant? - - @Query("SELECT * FROM Participant WHERE chatRoomId = :chatRoomId") - fun findParticipantsByChatRoomId(chatRoomId: String): List - - @Upsert - suspend fun upsert(participants: List) - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/PostDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/PostDao.kt deleted file mode 100644 index c1b40cba..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/PostDao.kt +++ /dev/null @@ -1,23 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.Post -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalPost -import androidx.room3.Dao -import androidx.room3.Insert -import androidx.room3.Query -import androidx.room3.Upsert - -@Dao -interface PostDao { - @Query("SELECT * FROM Post") - fun getAllPosts(): List - - @Query("SELECT * FROM Post WHERE id = :id") - fun getPostById(id: String): Post? - - @Insert - suspend fun insert(post: Post) - - @Upsert - suspend fun upsert(post: Post) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ReactionDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ReactionDao.kt deleted file mode 100644 index 166fc601..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ReactionDao.kt +++ /dev/null @@ -1,19 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.Reaction -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface ReactionDao { - @Query("SELECT * FROM Reaction") - fun getAllReactions(): List - - @Query("SELECT * FROM Reaction WHERE id = :id") - fun getReactionById(id: String): Flow - - @Upsert - suspend fun upsert(reaction: Reaction) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RecentSearchDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RecentSearchDao.kt deleted file mode 100644 index 616304c2..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RecentSearchDao.kt +++ /dev/null @@ -1,23 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.RecentSearch -import androidx.room3.Dao -import androidx.room3.Delete -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface RecentSearchDao { - @Query("SELECT * FROM RecentSearch WHERE `query` = :query") - fun observeRecentSearchByQuery(query: String): Flow - - @Query("SELECT * FROM RecentSearch ORDER BY createdAt DESC LIMIT :limit ") - fun getAllRecentSearches(limit: Int = 21): List - - @Delete - fun deleteRecentSearch(recentSearch: RecentSearch) - - @Upsert - suspend fun upsert(recentSearch: RecentSearch) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RelayDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RelayDao.kt deleted file mode 100644 index bf686180..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RelayDao.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.Relay -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface RelayDao { - @Query("SELECT * FROM Relay") - fun getAllPosts(): List - - @Query("SELECT * FROM Relay WHERE publicKey = :publicKey") - fun observePublicKeyRelays(publicKey: String): Flow> - - @Upsert - suspend fun upsert(relay: Relay) - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RepostedRelationDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RepostedRelationDao.kt deleted file mode 100644 index 3a3d22d4..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/RepostedRelationDao.kt +++ /dev/null @@ -1,21 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.RepostedRelation -import androidx.room3.Dao -import androidx.room3.Query -import androidx.room3.Upsert - -@Dao -interface RepostedRelationDao { - @Query("SELECT * FROM RepostedRelation") - fun getAllReposts(): List - - @Query("SELECT * FROM RepostedRelation WHERE repostingNostrEventId = :repostingNostrEventId") - fun getRepostByRepostingId(repostingNostrEventId: String): RepostedRelation? - - @Query("SELECT * FROM RepostedRelation WHERE repostedNostrEventId = :repostedNostrEventId") - fun getRepostByRepostedId(repostedNostrEventId: String): RepostedRelation? - - @Upsert - suspend fun upsert(repostedRelation: RepostedRelation) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventResultDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventResultDao.kt deleted file mode 100644 index 102a15ee..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventResultDao.kt +++ /dev/null @@ -1,11 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventResult -import androidx.room3.Dao -import androidx.room3.Upsert - -@Dao -interface SynchronizeNostrEventResultDao { - @Upsert - fun upsert(synchronizeNostrEventResult: SynchronizeNostrEventResult) -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/UnsignedNostrEventDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/UnsignedNostrEventDao.kt deleted file mode 100644 index 426e9f5c..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/UnsignedNostrEventDao.kt +++ /dev/null @@ -1,35 +0,0 @@ -package ac.cord.auxiliary.compose.database.dao - -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalAccount -import androidx.room3.Dao -import androidx.room3.Insert -import androidx.room3.Query -import androidx.room3.Transaction -import androidx.room3.Upsert -import kotlinx.coroutines.flow.Flow - -@Dao -interface UnsignedNostrEventDao { - @Query("SELECT * FROM UnsignedNostrEvent") - fun getAUnsignedNostrEvents(): List - - @Query("SELECT * FROM UnsignedNostrEvent") // TODO: where nostrEvent.unsignedNostrEventId is 0 - fun getAllUnprocessedUnsignedNostrEvents(): List - - @Query("SELECT * FROM UnsignedNostrEvent WHERE id = :id") - fun getUnsignedNostrEventById(id: Long): Flow - - @Upsert - suspend fun upsert(unsignedNostrEvent: UnsignedNostrEvent): Long - - @Insert - suspend fun insert(unsignedNostrEvents: List) - - @Transaction - @Query("SELECT * FROM UnsignedNostrEvent WHERE kind = 0 AND pubKey = :publicKey") - fun observeProfile(publicKey: String): Flow - - @Query("SELECT * FROM UnsignedNostrEvent WHERE pubKey = :publicKey AND signedAt IS NULL") - fun observeUnsignedNostrEvents(publicKey: String): Flow -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalAccount.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalAccount.kt deleted file mode 100644 index 2ffa3504..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalAccount.kt +++ /dev/null @@ -1,45 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalAccount( - @Embedded val unsignedNostrEvent: UnsignedNostrEvent?, - - @Relation( - parentColumns = ["id"], - entityColumns = ["unsignedNostrEventId"] - ) - val nostrEvent: NostrEvent?, - - @Relation( - parentColumns = ["pubKey"], - entityColumns = ["publicKey"] - ) - val profile: Profile?, - - @Relation( - parentColumns = ["id"], - entityColumns = ["unsignedNostrEventId"] - ) - val broadcastNostrEventRequest: BroadcastNostrEventRequest?, - - @Relation( - parentColumns = ["id"], - entityColumns = ["unsignedNostrEventId"] - ) - val broadcastNostrEventReceipt: BroadcastNostrEventReceipt?, - - @Relation( - parentColumns = ["id"], - entityColumns = ["unsignedNostrEventId"] - ) - val synchronizeNostrEventRequests: List, - -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt deleted file mode 100644 index f09f42fb..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalBroadcastNostrEventRequest( - @Embedded val broadcastNostrEventRequest: BroadcastNostrEventRequest, - - @Relation( - parentColumns = ["nostrEventId"], - entityColumns = ["id"] - ) - val nostrEvent: NostrEvent, -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatMessage.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatMessage.kt deleted file mode 100644 index 34b86000..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatMessage.kt +++ /dev/null @@ -1,40 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.ChatMessage -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation -import ac.cord.auxiliary.compose.database.model.ChatMessageNostrEventRelation -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload -import ac.cord.auxiliary.compose.database.model.Profile -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalChatMessage( - @Embedded val chatMessage: ChatMessage, - - @Relation( - parentColumns = ["senderPublicKey"], - entityColumns = ["publicKey"] - ) - val profile: Profile?, - - @Relation( - parentColumns = ["id"], - entityColumns = ["chatMessageId"] - ) - val chatMessageBroadcastNostrEventReceiptRelation: ChatMessageBroadcastNostrEventReceiptRelation? = null, - - - @Relation( - parentColumns = ["id"], - entityColumns = ["chatMessageId"] - ) - val chatMessageBroadcastNostrEventRequestRelation: ChatMessageBroadcastNostrEventRequestRelation? = null, - - - @Relation( - parentColumns = ["id"], - entityColumns = ["chatMessageId"] - ) - val chatMessageNostrEventRelation: ChatMessageNostrEventRelation? = null, -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalMention.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalMention.kt deleted file mode 100644 index 8cd6ad97..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalMention.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.Profile -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalMention( - @Embedded val mention: Mention, - - @Relation( - parentColumns = ["mentionedPublicKey"], - entityColumns = ["publicKey"] - ) - val profile: Profile?, -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalParticipant.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalParticipant.kt deleted file mode 100644 index ed4b00d3..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalParticipant.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.database.model.Profile -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalParticipant( - @Embedded val participant: Participant, - - @Relation( - parentColumns = ["participantPublicKey"], - entityColumns = ["publicKey"] - ) - val profile: Profile?, -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfile.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfile.kt deleted file mode 100644 index b88233bc..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfile.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate - -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import androidx.room3.Embedded -import androidx.room3.Relation - -data class LocalProfile( - @Embedded val nostrEvent: NostrEvent, - - @Relation( - parentColumns = ["pubKey"], - entityColumns = ["publicKey"] - ) - val profile: Profile, -) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/HexArray.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/HexArray.kt deleted file mode 100644 index c4712359..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/HexArray.kt +++ /dev/null @@ -1,4 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.typealiases - -typealias HexArray = Array - diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/KindArray.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/KindArray.kt deleted file mode 100644 index 015e68f3..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/KindArray.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.typealiases - -typealias KindArray = Array \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/SynchronizationFilterArray.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/SynchronizationFilterArray.kt deleted file mode 100644 index cb062042..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/typealiases/SynchronizationFilterArray.kt +++ /dev/null @@ -1,5 +0,0 @@ -package ac.cord.auxiliary.compose.database.model.typealiases - -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter - -typealias SynchronizationFilterArray = Array \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabasePostRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabasePostRepository.kt deleted file mode 100644 index cc68d586..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabasePostRepository.kt +++ /dev/null @@ -1,10 +0,0 @@ -package ac.cord.auxiliary.compose.database.repository - -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.repository.PostRepository - -class DatabasePostRepository( - private val database: AuxDatabase -): PostRepository { - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseSearchRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseSearchRepository.kt deleted file mode 100644 index cf1de96c..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseSearchRepository.kt +++ /dev/null @@ -1,16 +0,0 @@ -package ac.cord.auxiliary.compose.database.repository - -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.repository.SearchRepository - -class DatabaseSearchRepository( - private val database: AuxDatabase -): SearchRepository { - - override suspend fun submitSearch(synchronizeNostrEventRequests: List) { - database.synchronizeNostrEventRequestDao().insert( - synchronizeNostrEventRequests = synchronizeNostrEventRequests - ) - } -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/InvalidNostrPrivateKeyException.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/InvalidNostrPrivateKeyException.kt deleted file mode 100644 index cbd112cd..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/InvalidNostrPrivateKeyException.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ac.cord.auxiliary.compose.exceptions - -class InvalidNostrPrivateKeyException: RuntimeException() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/managers/AuxDatabaseManager.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/managers/AuxDatabaseManager.kt deleted file mode 100644 index a70d8747..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/managers/AuxDatabaseManager.kt +++ /dev/null @@ -1,30 +0,0 @@ -package ac.cord.auxiliary.compose.managers - -import ac.cord.auxiliary.compose.AuxGlobal -import ac.cord.auxiliary.compose.database.builder.PlatformDatabaseBuilder -import ac.cord.auxiliary.compose.database.builder.getRoomDatabase - -class AuxDatabaseManager( - auxGlobal: AuxGlobal -) { - val auxDatabase by lazy { - getRoomDatabase( - PlatformDatabaseBuilder.getDatabaseBuilder( - auxGlobal.platformContext - ) - ) - } - - /** - * Dynamic data like user feeds and the likes will be in a in-memory db. - * - * We may also decide to just use the normal DB and manage what's saved better... - */ - val inMemoryAuxDatabase by lazy { - getRoomDatabase( - PlatformDatabaseBuilder.getInMemoryDatabaseBuilder( - auxGlobal.platformContext - ) - ) - } -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/CachingImportRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/CachingImportRepository.kt deleted file mode 100644 index 1e7bd9b7..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/CachingImportRepository.kt +++ /dev/null @@ -1,43 +0,0 @@ -package ac.cord.auxiliary.compose.repository - -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.network.relays.broadcast.BroadcastEventResponse - -/** - * As seen in Primal - * - * https://github.com/PrimalHQ/primal-android-app/blob/a7e32e2203555d27e60a749238175cd1ee0fa2af/domain/primal/src/commonMain/kotlin/net/primal/domain/global/CachingImportRepository.kt - * - */ -interface CachingImportRepository { - suspend fun cacheNostrEvents(vararg events: NostrEvent) - suspend fun cacheNostrEvents(events: List) - - suspend fun importEvents(events: List): Boolean - suspend fun broadcastEvents(events: List, relays: List): Result> - - companion object { - val NO_OP_CACHING_IMPORT_REPOSITORY = object : CachingImportRepository { - override suspend fun cacheNostrEvents(vararg events: NostrEvent) { - } - - override suspend fun cacheNostrEvents(events: List) { - - } - - override suspend fun importEvents(events: List): Boolean { - return true - } - - override suspend fun broadcastEvents( - events: List, - relays: List - ): Result> { - return Result.success( - emptyList() - ) - } - - } - } -} diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/PostRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/PostRepository.kt deleted file mode 100644 index e95a7d74..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/PostRepository.kt +++ /dev/null @@ -1,4 +0,0 @@ -package ac.cord.auxiliary.compose.repository - -interface PostRepository { -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/BlankRoute.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/BlankRoute.kt deleted file mode 100755 index 33601a67..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/BlankRoute.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes - -import kotlinx.serialization.Serializable - -@Serializable -object BlankRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LandingRoute.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LandingRoute.kt deleted file mode 100755 index cd6dd904..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LandingRoute.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes - -import kotlinx.serialization.Serializable - -@Serializable -object LandingRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/Route.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/Route.kt deleted file mode 100755 index aa4f2ee1..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/Route.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes - -abstract class Route \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SignInRoute.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SignInRoute.kt deleted file mode 100755 index 7d29cefb..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SignInRoute.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes - -import kotlinx.serialization.Serializable - -@Serializable -object SignInRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt deleted file mode 100644 index 85a7acf7..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes - -import kotlinx.serialization.Serializable - -@Serializable -data object SovereignWalletStartupRoute \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FeedListUIState.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FeedListUIState.kt deleted file mode 100755 index bb918e43..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FeedListUIState.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent - -sealed interface FeedListUIState { - data class Loaded( - val localNostrEvents: List - ): FeedListUIState - - data object Error: FeedListUIState - data object Loading: FeedListUIState -} - diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/HomeScreenUIState.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/HomeScreenUIState.kt deleted file mode 100755 index f235d1c4..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/HomeScreenUIState.kt +++ /dev/null @@ -1,15 +0,0 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing - - -sealed interface HomeScreenUIState { - data class Loaded( - val profileWithFollowing: LocalProfileWithFollowing - ): HomeScreenUIState - - data object Error: HomeScreenUIState - data object Loading: HomeScreenUIState -} - diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/WriteNewNoteUIState.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/WriteNewNoteUIState.kt deleted file mode 100644 index 33d848cc..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/WriteNewNoteUIState.kt +++ /dev/null @@ -1,27 +0,0 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import com.vitorpamplona.quartz.nip01Core.core.HexKey - -abstract class WriteNewNoteUIState { - data object Loading: WriteNewNoteUIState() - - data object Error: WriteNewNoteUIState() - - data class InputPrompt( - val localProfile: LocalProfileWithFollowing, - val inReplyToNostrEvent: LocalNostrEvent? = null, - val quotedNostrEvent: LocalNostrEvent? = null, - val replayToId: HexKey? = null, - ): WriteNewNoteUIState() - - data class ConfirmNote( - val localProfile: LocalProfileWithFollowing, - val inReplyToNostrEvent: LocalNostrEvent? = null, - val quotedNostrEvent: LocalNostrEvent? = null, - val text: String, - ) : WriteNewNoteUIState() - -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/WriteNewNoteFormState.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/WriteNewNoteFormState.kt deleted file mode 100644 index 33c5b808..00000000 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/WriteNewNoteFormState.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ac.cord.auxiliary.compose.ui.view.state.form - -import androidx.compose.foundation.text.input.TextFieldState - -data class WriteNewNoteFormState( - val textField: TextField = TextField(), -) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AppVersion.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/AppVersion.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AppVersion.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/AppVersion.kt index a29b6768..b5d88092 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AppVersion.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/AppVersion.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose +package at.torch.compose expect object AppVersion { val versionName: String diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/Platform.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/Platform.kt new file mode 100644 index 00000000..5e24df7b --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/Platform.kt @@ -0,0 +1,7 @@ +package at.torch.compose + +interface Platform { + val name: String +} + +expect fun getPlatform(): Platform \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/PlatformContext.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/PlatformContext.kt new file mode 100644 index 00000000..6e1e2fed --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/PlatformContext.kt @@ -0,0 +1,3 @@ +package at.torch.compose + +expect class PlatformContext \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxApp.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/TorchApp.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxApp.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/TorchApp.kt index 83d1c416..97619d81 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/AuxApp.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/TorchApp.kt @@ -1,7 +1,7 @@ -package ac.cord.auxiliary.compose +package at.torch.compose -import ac.cord.auxiliary.compose.ui.composable.navigation.AuxNavHost -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.navigation.TorchNavHost +import at.torch.compose.ui.theme.TorchTheme import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface import androidx.compose.runtime.* @@ -10,17 +10,17 @@ import androidx.navigation.NavHostController import fr.acinq.phoenix.PhoenixGlobal @Composable -fun AuxApp( +fun TorchApp( navController: NavHostController, - auxGlobal: AuxGlobal, + torchGlobal: TorchGlobal, phoenixGlobal: PhoenixGlobal ) { - AuxTheme { + TorchTheme { Surface( modifier = Modifier.fillMaxSize() ) { - AuxNavHost( - auxGlobal = auxGlobal, + TorchNavHost( + torchGlobal = torchGlobal, phoenixGlobal = phoenixGlobal, navController = navController ) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/TorchGlobal.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/TorchGlobal.kt new file mode 100644 index 00000000..c0872b1e --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/TorchGlobal.kt @@ -0,0 +1,7 @@ +package at.torch.compose + +class TorchGlobal( + val platformContext: PlatformContext +) { + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/cryptography/Extensions.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/cryptography/Extensions.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/cryptography/Extensions.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/cryptography/Extensions.kt index bd3d64ca..5357c92a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/cryptography/Extensions.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/cryptography/Extensions.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.cryptography +package at.torch.compose.cryptography -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent +import at.torch.compose.database.model.NostrEvent import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerSync @@ -9,12 +8,12 @@ import com.vitorpamplona.quartz.nip19Bech32.bech32.Bech32 import com.vitorpamplona.quartz.nip51Lists.encryption.PrivateTagsInContent import kotlin.time.Instant -fun UnsignedNostrEvent.signOrThrow(nsec: String): NostrEvent { +fun at.torch.compose.database.model.UnsignedNostrEvent.signOrThrow(nsec: String): at.torch.compose.database.model.NostrEvent { val hexPrivateKey = Bech32.decodeBytes(nsec).second return this.signOrThrow(hexPrivateKey) } -fun UnsignedNostrEvent.signOrThrow(hexPrivateKey: ByteArray): NostrEvent { +fun at.torch.compose.database.model.UnsignedNostrEvent.signOrThrow(hexPrivateKey: ByteArray): at.torch.compose.database.model.NostrEvent { val tempSigner = NostrSignerSync( KeyPair( privKey = hexPrivateKey @@ -27,7 +26,7 @@ fun UnsignedNostrEvent.signOrThrow(hexPrivateKey: ByteArray): NostrEvent { tags = this.tags, content = this.privateTags?.let { PrivateTagsInContent.encryptNip44(it, tempSigner) } ?: this.content ) - return NostrEvent( + return _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = event.id, pubKey = event.pubKey, kind = event.kind, diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt new file mode 100644 index 00000000..23f5de25 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt @@ -0,0 +1,115 @@ +package at.torch.compose.database + +import androidx.room3.Database +import androidx.room3.RoomDatabase +import androidx.room3.TypeConverters +import androidx.room3.immediateTransaction +import androidx.room3.useWriterConnection +import kotlin.time.Instant + +val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L) + +@Database( + entities = [ + _root_ide_package_.at.torch.compose.database.model.BroadcastNostrEventReceipt::class, + _root_ide_package_.at.torch.compose.database.model.BroadcastNostrEventRequest::class, + _root_ide_package_.at.torch.compose.database.model.Connection::class, + _root_ide_package_.at.torch.compose.database.model.ChatMessage::class, + _root_ide_package_.at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation::class, + _root_ide_package_.at.torch.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation::class, + _root_ide_package_.at.torch.compose.database.model.ChatMessageNostrEventRelation::class, + _root_ide_package_.at.torch.compose.database.model.ChatRoom::class, + _root_ide_package_.at.torch.compose.database.model.InReplyToRelation::class, + _root_ide_package_.at.torch.compose.database.model.GiftWrapMessage::class, + _root_ide_package_.at.torch.compose.database.model.GiftWrapSeal::class, + _root_ide_package_.at.torch.compose.database.model.GiftWrapPayload::class, + _root_ide_package_.at.torch.compose.database.model.Mention::class, + _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest::class, + _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeResult::class, + _root_ide_package_.at.torch.compose.database.model.NostrEvent::class, + _root_ide_package_.at.torch.compose.database.model.NostrEventRelay::class, + _root_ide_package_.at.torch.compose.database.model.Participant::class, + _root_ide_package_.at.torch.compose.database.model.Post::class, + _root_ide_package_.at.torch.compose.database.model.Profile::class, + _root_ide_package_.at.torch.compose.database.model.QuotedRelation::class, + _root_ide_package_.at.torch.compose.database.model.Reaction::class, + _root_ide_package_.at.torch.compose.database.model.RecentSearch::class, + _root_ide_package_.at.torch.compose.database.model.Relay::class, + _root_ide_package_.at.torch.compose.database.model.RepostedRelation::class, + _root_ide_package_.at.torch.compose.database.model.SynchronizeNostrEventRequest::class, + _root_ide_package_.at.torch.compose.database.model.SynchronizeNostrEventResult::class, + _root_ide_package_.at.torch.compose.database.model.UnsignedNostrEvent::class, + _root_ide_package_.at.torch.compose.database.model.Zap::class + ], + version = 1 +) +@TypeConverters(_root_ide_package_.at.torch.compose.database.converters.AuxConverters::class) +abstract class TorchDatabase: RoomDatabase() { + abstract fun broadcastNostrEventReceiptDao(): at.torch.compose.database.dao.BroadcastNostrEventReceiptDao + abstract fun broadcastNostrEventRequestDao(): at.torch.compose.database.dao.BroadcastNostrEventRequestDao + + abstract fun chatMessageDao(): at.torch.compose.database.dao.ChatMessageDao + + abstract fun chatMessageBroadcastNostrEventRequestRelationDao(): at.torch.compose.database.dao.ChatMessageBroadcastNostrEventRequestRelationDao + + abstract fun chatMessageBroadcastNostrEventReceiptRelationDao(): at.torch.compose.database.dao.ChatMessageBroadcastNostrEventReceiptRelationDao + + abstract fun chatMessageNostrEventRelationDao(): at.torch.compose.database.dao.ChatMessageNostrEventRelationDao + + abstract fun chatRoomDao(): at.torch.compose.database.dao.ChatRoomDao + + abstract fun connectionDao(): at.torch.compose.database.dao.ConnectionDao + + abstract fun giftWrapMessageDao(): at.torch.compose.database.dao.GiftWrapMessageDao + + abstract fun giftWrapSealDao(): at.torch.compose.database.dao.GiftWrapSealDao + + abstract fun giftWrapPayloadDao(): at.torch.compose.database.dao.GiftWrapPayloadDao + + abstract fun inReplyToRelationDao(): at.torch.compose.database.dao.InReplyToRelationDao + + abstract fun mentionDao(): at.torch.compose.database.dao.MentionDao + + abstract fun negentropySynchronizeRequestDao(): at.torch.compose.database.dao.NegentropySynchronizeRequestDao + + abstract fun negentropySynchronizeResultDao(): at.torch.compose.database.dao.NegentropySynchronizeResultDao + + abstract fun nostrDao(): at.torch.compose.database.dao.NostrDao + + abstract fun nostrEventDao(): at.torch.compose.database.dao.NostrEventDao + + abstract fun nostrEventRelayDao(): at.torch.compose.database.dao.NostrEventRelayDao + + abstract fun nostrNip17Dao(): at.torch.compose.database.dao.NostrNip17Dao + + abstract fun participantDao(): at.torch.compose.database.dao.ParticipantDao + + abstract fun postDao(): at.torch.compose.database.dao.PostDao + + abstract fun profileDao(): at.torch.compose.database.dao.ProfileDao + + abstract fun quotedRelationDao(): at.torch.compose.database.dao.QuotedRelationDao + + abstract fun reactionDao(): at.torch.compose.database.dao.ReactionDao + + abstract fun recentSearchDao(): at.torch.compose.database.dao.RecentSearchDao + + abstract fun relayDao(): at.torch.compose.database.dao.RelayDao + + abstract fun repostedRelationDao(): at.torch.compose.database.dao.RepostedRelationDao + + abstract fun synchronizeNostrEventRequestDao(): at.torch.compose.database.dao.SynchronizeNostrEventRequestDao + + abstract fun synchronizeNostrEventResultDao(): at.torch.compose.database.dao.SynchronizeNostrEventResultDao + + abstract fun unsignedNostrEventDao(): at.torch.compose.database.dao.UnsignedNostrEventDao + abstract fun zapDao(): at.torch.compose.database.dao.ZapDao + + suspend fun wipeData() { + useWriterConnection { transactor -> + transactor.immediateTransaction { + // TODO: Actually delete the data... + } + } + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabaseConstructor.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabaseConstructor.kt new file mode 100644 index 00000000..5649274f --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabaseConstructor.kt @@ -0,0 +1,9 @@ +package at.torch.compose.database + +import androidx.room3.RoomDatabaseConstructor + +@Suppress("KotlinNoActualForExpect", "NO_ACTUAL_FOR_EXPECT") +expect object TorchDatabaseConstructor: RoomDatabaseConstructor { + + override fun initialize(): TorchDatabase +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.kt new file mode 100644 index 00000000..40450e3e --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.kt @@ -0,0 +1,21 @@ +package at.torch.compose.database.builder + +import androidx.room3.RoomDatabase +import androidx.sqlite.driver.bundled.BundledSQLiteDriver +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO + +expect object PlatformDatabaseBuilder { + fun getDatabaseBuilder(platformContext: at.torch.compose.PlatformContext): RoomDatabase.Builder + + fun getInMemoryDatabaseBuilder(platform: at.torch.compose.PlatformContext): RoomDatabase.Builder +} + +fun getRoomDatabase( + builder: RoomDatabase.Builder +): at.torch.compose.database.TorchDatabase { + return builder + .setDriver(BundledSQLiteDriver()) + .setQueryCoroutineContext(Dispatchers.IO) + .build() +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/converters/AuxConverters.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/converters/AuxConverters.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/converters/AuxConverters.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/converters/AuxConverters.kt index 24e68e3d..03ef1f5d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/converters/AuxConverters.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/converters/AuxConverters.kt @@ -1,12 +1,7 @@ -package ac.cord.auxiliary.compose.database.converters +package at.torch.compose.database.converters -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.typealiases.HexArray -import ac.cord.auxiliary.compose.database.model.typealiases.KindArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter import androidx.room3.TypeConverter import co.touchlab.kermit.Logger -import com.vitorpamplona.quartz.nip01Core.core.TagArray import kotlinx.serialization.json.Json import kotlin.time.Instant @@ -77,7 +72,7 @@ class AuxConverters { } @TypeConverter - fun fromFilterArray(value: Array?): String? = try { + fun fromFilterArray(value: Array?): String? = try { return value?.let { Json.encodeToString(value) } @@ -87,9 +82,9 @@ class AuxConverters { } @TypeConverter - fun toFilterArray(value: String?): Array? = try { + fun toFilterArray(value: String?): Array? = try { return value?.let { - Json.decodeFromString>(it) + Json.decodeFromString>(it) } } catch (e: Throwable) { logger.e("Failed to convert to FilterArray $value", e) @@ -97,7 +92,7 @@ class AuxConverters { } @TypeConverter - fun fromSynchronizationFilter(value: SynchronizationFilter?): String? = try { + fun fromSynchronizationFilter(value: at.torch.compose.database.model.types.SynchronizationFilter?): String? = try { return value?.let { Json.encodeToString(value) } @@ -107,9 +102,9 @@ class AuxConverters { } @TypeConverter - fun toSynchronizationFilter(value: String?): SynchronizationFilter? = try { + fun toSynchronizationFilter(value: String?): at.torch.compose.database.model.types.SynchronizationFilter? = try { return value?.let { - Json.decodeFromString(it) + Json.decodeFromString(it) } } catch (e: Throwable) { logger.e("Failed to convert to SynchronizationFilter $value", e) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventReceiptDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventReceiptDao.kt new file mode 100644 index 00000000..b3f20428 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventReceiptDao.kt @@ -0,0 +1,21 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow + +@Dao +interface BroadcastNostrEventReceiptDao { + @Query("SELECT * FROM BroadcastNostrEventReceipt") + fun getAllBroadcastNostrEventReceipts(): List + + @Query("SELECT * FROM BroadcastNostrEventReceipt WHERE id = :id") + fun getBroadcastNostrEventReceiptById(id: Long): Flow + + @Query("SELECT * FROM BroadcastNostrEventReceipt WHERE nostrEventId = :nostrEventId") + fun getBroadcastNostrEventReceiptByNostrEventId(nostrEventId: String): Flow + + @Upsert + suspend fun upsert(broadcastNostrEventReceipt: at.torch.compose.database.model.BroadcastNostrEventReceipt): Long +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventRequestDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventRequestDao.kt similarity index 51% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventRequestDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventRequestDao.kt index 17dc0b4f..e46e97c2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/BroadcastNostrEventRequestDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/BroadcastNostrEventRequestDao.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalBroadcastNostrEventRequest import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.Query @@ -13,17 +11,17 @@ import kotlin.time.Instant @Dao interface BroadcastNostrEventRequestDao { @Query("SELECT * FROM BroadcastNostrEventRequest") - fun getAllBroadcastNostrEventRequests(): List + fun getAllBroadcastNostrEventRequests(): List @Query("SELECT * FROM BroadcastNostrEventRequest WHERE status = :status AND createdAt > :createdAt") - fun observeBroadcastNostrEventRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow> + fun observeBroadcastNostrEventRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow> @Query("SELECT * FROM BroadcastNostrEventRequest WHERE nostrEventId = :nostrEventId") - fun observeBroadcastNostrEventRequestByNostrEventId(nostrEventId: String): Flow + fun observeBroadcastNostrEventRequestByNostrEventId(nostrEventId: String): Flow @Upsert - suspend fun upsert(broadcastNostrEventRequest: BroadcastNostrEventRequest) + suspend fun upsert(broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest) @Insert - suspend fun insert(broadcastNostrEventRequests: List): LongArray + suspend fun insert(broadcastNostrEventRequests: List): LongArray } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt similarity index 50% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt index d931dd11..dd63f5ba 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventReceiptRelationDao.kt @@ -1,11 +1,10 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation import androidx.room3.Dao import androidx.room3.Upsert @Dao interface ChatMessageBroadcastNostrEventReceiptRelationDao { @Upsert - suspend fun upsert(chatMessageBroadcastNostrEventReceiptRelation: ChatMessageBroadcastNostrEventReceiptRelation) + suspend fun upsert(chatMessageBroadcastNostrEventReceiptRelation: at.torch.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt new file mode 100644 index 00000000..79061e4a --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageBroadcastNostrEventRequestRelationDao.kt @@ -0,0 +1,14 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface ChatMessageBroadcastNostrEventRequestRelationDao { + @Query("SELECT * FROM ChatMessageBroadcastNostrEventRequestRelation WHERE broadcastNostrEventRequestId = :broadcastNostrEventRequestId") + suspend fun getChatMessageBroadcastNostrEventRequestRelationByBroadcastRequest(broadcastNostrEventRequestId: Long): at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation? + + @Upsert + suspend fun upsert(chatMessageBroadcastNostrEventRequestRelation: at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageDao.kt similarity index 61% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageDao.kt index 2404e2e7..1df890ac 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatMessageDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageDao.kt @@ -1,8 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.ChatMessage -import ac.cord.auxiliary.compose.database.model.Relay -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatMessage import androidx.room3.Dao import androidx.room3.Query import androidx.room3.Transaction @@ -13,15 +10,15 @@ import kotlinx.coroutines.flow.Flow interface ChatMessageDao { @Transaction @Query("SELECT * FROM ChatMessage WHERE chatRoomId = :chatRoomId ORDER BY createdAt DESC") - fun observeChatMessagesByChatRoomId(chatRoomId: String): Flow> + fun observeChatMessagesByChatRoomId(chatRoomId: String): Flow> @Transaction @Query("SELECT * FROM ChatMessage WHERE chatRoomId = :chatRoomId ORDER BY createdAt DESC") - fun getChatMessagesByChatRoomId(chatRoomId: String): List + fun getChatMessagesByChatRoomId(chatRoomId: String): List @Query("SELECT * FROM ChatMessage WHERE giftWrapPayloadId = :giftWrapPayloadId ORDER BY createdAt DESC") - fun getChatMessagesByGiftWrapPayloadId(giftWrapPayloadId: Long): ChatMessage? + fun getChatMessagesByGiftWrapPayloadId(giftWrapPayloadId: Long): at.torch.compose.database.model.ChatMessage? @Upsert - suspend fun upsert(chatMessage: ChatMessage): Long + suspend fun upsert(chatMessage: at.torch.compose.database.model.ChatMessage): Long } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageNostrEventRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageNostrEventRelationDao.kt new file mode 100644 index 00000000..7ec91295 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatMessageNostrEventRelationDao.kt @@ -0,0 +1,11 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Upsert + +@Dao +interface ChatMessageNostrEventRelationDao { + + @Upsert + suspend fun upsert(chatMessageNostrEventRelation: at.torch.compose.database.model.ChatMessageNostrEventRelation) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatRoomDao.kt similarity index 62% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatRoomDao.kt index 6f9b8cf3..a6f627de 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ChatRoomDao.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom import androidx.room3.Dao import androidx.room3.Query import androidx.room3.Transaction @@ -12,17 +10,17 @@ import kotlinx.coroutines.flow.Flow interface ChatRoomDao { @Transaction @Query("SELECT * FROM ChatRoom WHERE id = :id") - fun findChatRoomById(id: String): LocalChatRoom? + fun findChatRoomById(id: String): at.torch.compose.database.model.intermdiate.LocalChatRoom? @Transaction @Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey") - fun getChatRoomListByUserPublicKey(userPublicKey: String): List + fun getChatRoomListByUserPublicKey(userPublicKey: String): List @Transaction @Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey") - fun observeChatRoomListByUserPublicKey(userPublicKey: String): Flow> + fun observeChatRoomListByUserPublicKey(userPublicKey: String): Flow> @Upsert - suspend fun upsert(chatRoom: ChatRoom) + suspend fun upsert(chatRoom: at.torch.compose.database.model.ChatRoom) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ConnectionDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ConnectionDao.kt similarity index 58% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ConnectionDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ConnectionDao.kt index 3f1d049b..38be97e1 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ConnectionDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ConnectionDao.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.Connection import androidx.room3.Dao import androidx.room3.Delete import androidx.room3.Insert @@ -12,19 +11,19 @@ import kotlinx.coroutines.flow.Flow @Dao interface ConnectionDao { @Query("SELECT * FROM Connection LIMIT :limit") - fun getAllConnections(limit: Int = 21): List + fun getAllConnections(limit: Int = 21): List @Query("SELECT * FROM Connection WHERE (sourcePublicKey = :alicePublicKey AND destinationPublicKey = :bobPublicKey) OR (sourcePublicKey = :bobPublicKey AND destinationPublicKey = :alicePublicKey)") - fun observeRelation(alicePublicKey: HexKey, bobPublicKey: HexKey): Flow> + fun observeRelation(alicePublicKey: HexKey, bobPublicKey: HexKey): Flow> @Insert - suspend fun insertPlaceholderProfile(connection: Connection) + suspend fun insertPlaceholderProfile(connection: at.torch.compose.database.model.Connection) @Upsert - suspend fun upsert(connection: Connection) + suspend fun upsert(connection: at.torch.compose.database.model.Connection) @Delete - suspend fun delete(connection: Connection) + suspend fun delete(connection: at.torch.compose.database.model.Connection) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapMessageDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapMessageDao.kt new file mode 100644 index 00000000..b9055781 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapMessageDao.kt @@ -0,0 +1,15 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface GiftWrapMessageDao { + @Query("SELECT * FROM GiftWrapMessage") + fun getAllGiftWrapMessages(): List + + @Upsert + suspend fun upsert(giftWrapMessage: at.torch.compose.database.model.GiftWrapMessage) + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapPayloadDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapPayloadDao.kt similarity index 58% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapPayloadDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapPayloadDao.kt index fa041bdf..2723d5e0 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/GiftWrapPayloadDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapPayloadDao.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload import androidx.room3.Dao import androidx.room3.Query import androidx.room3.Upsert @@ -9,11 +8,11 @@ import kotlinx.coroutines.flow.Flow @Dao interface GiftWrapPayloadDao { @Query("SELECT * FROM GiftWrapPayload") - fun getAllGiftWrapUnsigned(): List + fun getAllGiftWrapUnsigned(): List @Query("SELECT * FROM GiftWrapPayload WHERE publicKey = :publicKey AND giftWrapSealId IS NULL") - fun observeUnsealedGiftWrapPayloads(publicKey: String): Flow + fun observeUnsealedGiftWrapPayloads(publicKey: String): Flow @Upsert - suspend fun upsert(giftWrapPayload: GiftWrapPayload): Long + suspend fun upsert(giftWrapPayload: at.torch.compose.database.model.GiftWrapPayload): Long } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapSealDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapSealDao.kt new file mode 100644 index 00000000..42e23c0d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/GiftWrapSealDao.kt @@ -0,0 +1,15 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface GiftWrapSealDao { + @Query("SELECT * FROM GiftWrapSeal") + fun getAllGiftWrapSeals(): List + + @Upsert + suspend fun upsert(giftWrapSeal: at.torch.compose.database.model.GiftWrapSeal) + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/InReplyToRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/InReplyToRelationDao.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/InReplyToRelationDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/InReplyToRelationDao.kt index e2dae7a0..4a7829f6 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/InReplyToRelationDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/InReplyToRelationDao.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.InReplyToRelation import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.Query @@ -9,14 +8,14 @@ import androidx.room3.Upsert @Dao interface InReplyToRelationDao { @Query("SELECT * FROM InReplyToRelation WHERE replyingNostrEventId = :replyingNostrEventId") - fun getRepostByReplyingNostrEventId(replyingNostrEventId: String): InReplyToRelation? + fun getRepostByReplyingNostrEventId(replyingNostrEventId: String): at.torch.compose.database.model.InReplyToRelation? @Query("SELECT * FROM InReplyToRelation WHERE inReplyToNostrEventId = :inReplyToNostrEventId") - fun getRepostByInReplyToNostrEventId(inReplyToNostrEventId: String): InReplyToRelation? + fun getRepostByInReplyToNostrEventId(inReplyToNostrEventId: String): at.torch.compose.database.model.InReplyToRelation? @Insert - suspend fun insert(inReplyToRelation: InReplyToRelation) + suspend fun insert(inReplyToRelation: at.torch.compose.database.model.InReplyToRelation) @Upsert - suspend fun upsert(inReplyToRelation: InReplyToRelation) + suspend fun upsert(inReplyToRelation: at.torch.compose.database.model.InReplyToRelation) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MentionDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MentionDao.kt new file mode 100644 index 00000000..99f32cd6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MentionDao.kt @@ -0,0 +1,18 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Insert +import androidx.room3.OnConflictStrategy.Companion.IGNORE +import androidx.room3.Upsert + +@Dao +interface MentionDao { + + @Insert( + onConflict = IGNORE + ) + suspend fun insert(mention: at.torch.compose.database.model.Mention) + + @Upsert + suspend fun upsert(mention: at.torch.compose.database.model.Mention) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeRequestDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeRequestDao.kt similarity index 65% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeRequestDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeRequestDao.kt index 6b976f1b..4c139cca 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NegentropySynchronizeRequestDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeRequestDao.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.OnConflictStrategy.Companion.IGNORE @@ -14,16 +12,16 @@ import kotlin.time.Instant @Dao interface NegentropySynchronizeRequestDao { @Query("SELECT * FROM NegentropySynchronizeRequest WHERE status = :status AND createdAt > :createdAt") - fun observeNegentropySynchronizeRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow + fun observeNegentropySynchronizeRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow @Query("SELECT COUNT(*) FROM NegentropySynchronizeRequest WHERE purpose = :purpose AND status IN (:status) AND createdAt > :createdAt") fun observeNegentropySynchronizeRequestByPurposeAndStatusCount(purpose: String, status: List, createdAt: Instant = Clock.System.now()): Flow @Upsert - fun upsert(negentropySynchronizeRequest: NegentropySynchronizeRequest) + fun upsert(negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest) @Insert( onConflict = IGNORE ) - fun insert(negentropySynchronizeRequests: List) + fun insert(negentropySynchronizeRequests: List) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeResultDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeResultDao.kt new file mode 100644 index 00000000..8c23a3a0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NegentropySynchronizeResultDao.kt @@ -0,0 +1,10 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Upsert + +@Dao +interface NegentropySynchronizeResultDao { + @Upsert + fun upsert(negentropySynchronizeResult: at.torch.compose.database.model.NegentropySynchronizeResult) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt similarity index 86% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt index d7486def..8f766dfb 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt @@ -1,26 +1,24 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.ChatMessage -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.NostrEventRelay -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.database.model.Post -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.exceptions.GiftWrapImpersonationException -import ac.cord.auxiliary.compose.exceptions.GiftWrapSealDecryptionException -import ac.cord.auxiliary.compose.exceptions.GiftWrapUnsealException -import ac.cord.auxiliary.compose.extensions.toHex +import at.torch.compose.database.GENESIS_AT +import at.torch.compose.database.model.BroadcastNostrEventReceipt +import at.torch.compose.database.model.BroadcastNostrEventRequest +import at.torch.compose.database.model.ChatMessage +import at.torch.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation +import at.torch.compose.database.model.ChatRoom +import at.torch.compose.database.model.Connection +import at.torch.compose.database.model.Mention +import at.torch.compose.database.model.NegentropySynchronizeRequest +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.NostrEventRelay +import at.torch.compose.database.model.Participant +import at.torch.compose.database.model.Post +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.types.SynchronizationFilter +import at.torch.compose.exceptions.GiftWrapImpersonationException +import at.torch.compose.exceptions.GiftWrapSealDecryptionException +import at.torch.compose.exceptions.GiftWrapUnsealException +import at.torch.compose.extensions.toHex import androidx.room3.Dao import androidx.room3.Transaction import co.touchlab.kermit.Logger @@ -32,14 +30,12 @@ import com.vitorpamplona.quartz.nip01Core.tags.people.taggedUsers import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent -import fr.acinq.phoenix.managers.WalletManager -import fr.acinq.phoenix.managers.nostrPrivateKey import kotlin.time.Clock import kotlin.time.Instant @Dao abstract class NostrDao( - private val database: AuxDatabase, + private val database: at.torch.compose.database.TorchDatabase, ) { val logger = Logger.withTag("NostrDao") @@ -56,8 +52,8 @@ abstract class NostrDao( @Transaction open suspend fun publishNostrEvent( - unsignedNostrEvent: UnsignedNostrEvent, - nostrEvent: NostrEvent, + unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURLs: List, activeKeyPair: KeyPair ) { @@ -81,7 +77,7 @@ abstract class NostrDao( relayURLs.forEach { relayURL -> database.broadcastNostrEventRequestDao().upsert( - BroadcastNostrEventRequest( + _root_ide_package_.ac.cord.compose.database.model.BroadcastNostrEventRequest( nostrEventId = nostrEvent.id, unsignedNostrEventId = nostrEvent.unsignedNostrEventId, relayURL = relayURL @@ -92,7 +88,7 @@ abstract class NostrDao( @Transaction open suspend fun storeNostrEvent( - nostrEvent: NostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURL: String, synchronizationRelayURLs: List, level: Int, @@ -113,7 +109,7 @@ abstract class NostrDao( } else { // Nothing else needs to be done val profile = database.profileDao().getProfileByPublicKey(nostrEvent.pubKey) - if (profile?.createdAt == GENESIS_AT && nostrEvent.kind == MetadataEvent.KIND) { + if (profile?.createdAt == _root_ide_package_.ac.cord.compose.database.GENESIS_AT && nostrEvent.kind == MetadataEvent.KIND) { logger.i("This is a placeholder profile might need to get synced...: ${profile.publicKey}") // Setup the sync here... } else { @@ -122,7 +118,7 @@ abstract class NostrDao( } database.nostrEventRelayDao().upsert( - NostrEventRelay( + _root_ide_package_.ac.cord.compose.database.model.NostrEventRelay( relayURL = relayURL, nostrEventId = nostrEvent.id ) @@ -140,7 +136,7 @@ abstract class NostrDao( } private suspend fun indexNostrEvent( - nostrEvent: NostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURL: String, synchronizationRelayURLs: List, level: Int, @@ -154,10 +150,10 @@ abstract class NostrDao( val profile = database.profileDao().getProfileByPublicKey(nostrEvent.pubKey) if (profile == null) { - val placeHolderProfile = Profile( + val placeHolderProfile = _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = nostrEvent.pubKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) database.profileDao().insertPlaceholderProfile(placeHolderProfile) @@ -165,7 +161,7 @@ abstract class NostrDao( profilePublicKeysToSync[relayURL] = mutableSetOf() } profilePublicKeysToSync[relayURL]?.add(nostrEvent.pubKey) - } else if (profile.createdAt == GENESIS_AT && level == 0) { + } else if (profile.createdAt == _root_ide_package_.ac.cord.compose.database.GENESIS_AT && level == 0) { logger.i("This is a placeholder profile... that might need to get synced...: $profile") if (profilePublicKeysToSync[relayURL] == null) { profilePublicKeysToSync[relayURL] = mutableSetOf() @@ -190,7 +186,7 @@ abstract class NostrDao( database.nostrEventDao().insert( if (containedPost != null) { - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = containedPost.id, content = containedPost.content, createdAt = Instant.fromEpochSeconds(containedPost.createdAt), @@ -200,10 +196,10 @@ abstract class NostrDao( tags = containedPost.tags ) } else { - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = repostedRelation.repostedNostrEventId, content = "Pending Sync", - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, pubKey = nostrEvent.pubKey, sig = "", kind = nostrEvent.kind, @@ -221,10 +217,10 @@ abstract class NostrDao( if (repostedProfilePublicKey != null && repostedProfile == null) { database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = repostedProfilePublicKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) @@ -242,10 +238,10 @@ abstract class NostrDao( val taggedNostrEvent = database.nostrEventDao().getNostrEventById(taggedEvent.eventId) if (taggedNostrEvent == null) { database.nostrEventDao().insert( - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = taggedEvent.eventId, content = "Pending Sync... ", - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, pubKey = nostrEvent.pubKey, sig = "", kind = nostrEvent.kind, @@ -278,17 +274,17 @@ abstract class NostrDao( if (taggedProfile == null) { // Save a placeholder database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = taggedUser.pubKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) } database.mentionDao().insert( - Mention( + _root_ide_package_.ac.cord.compose.database.model.Mention( mentionedPublicKey = taggedUser.pubKey, mentioningNostrEventId = nostrEvent.id, relayUrl = taggedUser.relayHint?.url @@ -320,10 +316,10 @@ abstract class NostrDao( if (giftWrapReceiverProfile == null) { // Save a placeholder database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = giftWrapMessage.receiverPublicKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) @@ -548,7 +544,7 @@ abstract class NostrDao( activeKeyPair ).let { giftWrapSeal -> if (giftWrapSeal == null) { - throw GiftWrapUnsealException("Failed to unseal ${nostrEvent.id} from the giftWrap") + throw _root_ide_package_.ac.cord.compose.exceptions.GiftWrapUnsealException("Failed to unseal ${nostrEvent.id} from the giftWrap") } else { database.giftWrapSealDao().upsert( giftWrapSeal @@ -558,12 +554,15 @@ abstract class NostrDao( activeKeyPair.privKey!! ).let { decryptedGiftWrapPayload -> if (decryptedGiftWrapPayload == null) { - throw GiftWrapSealDecryptionException("Failed to decrypt sealed ${giftWrapSeal.id} payload") + throw _root_ide_package_.ac.cord.compose.exceptions.GiftWrapSealDecryptionException( + "Failed to decrypt sealed ${giftWrapSeal.id} payload" + ) } else { if (giftWrapSeal.publicKey.lowercase() != decryptedGiftWrapPayload.publicKey.lowercase()) { - val giftWrapImpersonation = GiftWrapImpersonationException( - "Seal pubkey (${giftWrapSeal.publicKey}) and payload pubkey (${decryptedGiftWrapPayload.publicKey}) needs to be the same for the giftWrap ${nostrEvent.id}" - ) + val giftWrapImpersonation = + _root_ide_package_.ac.cord.compose.exceptions.GiftWrapImpersonationException( + "Seal pubkey (${giftWrapSeal.publicKey}) and payload pubkey (${decryptedGiftWrapPayload.publicKey}) needs to be the same for the giftWrap ${nostrEvent.id}" + ) logger.e("Impersonation", giftWrapImpersonation) throw giftWrapImpersonation // Once this is thrown the database transaction fails and nothing gets saved to the DB... } @@ -592,7 +591,7 @@ abstract class NostrDao( if (localChatRoom == null) { val userPublicKey = activeKeyPair.pubKey.toHex() database.chatRoomDao().upsert( - ChatRoom( + _root_ide_package_.ac.cord.compose.database.model.ChatRoom( id = chatRoomId, userPublicKey = userPublicKey, subject = decryptedGiftWrapPayload.parseSubject(), @@ -605,7 +604,7 @@ abstract class NostrDao( val participants = giftWrapPayload.participantPTags( NormalizedRelayUrl(relayURL) // TODO: Get relayURL for publicKey profile... ).map { - Participant( + _root_ide_package_.ac.cord.compose.database.model.Participant( participantPublicKey = it.pubKey, chatRoomId = chatRoomId, relayHint = it.relayHint?.url @@ -621,10 +620,10 @@ abstract class NostrDao( if (giftWrapParticipantProfile == null) { // Save a placeholder database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = participant.participantPublicKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) @@ -669,7 +668,7 @@ abstract class NostrDao( authors = arrayOf( publicKey ), - since = GENESIS_AT, + since = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = 5 ).firstOrNull()?.let { nostrEvent -> if (nostrEvent.kind != ChatMessageRelayListEvent.KIND) { @@ -690,7 +689,7 @@ abstract class NostrDao( if (chatMessageRelayListEvent != null) { // Sync messages from this relay that were sent by us val synchronizationFilter = - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( GiftWrapEvent.KIND, ), @@ -709,8 +708,8 @@ abstract class NostrDao( .insert( chatMessageRelayListEvent.relays() .map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -750,7 +749,7 @@ abstract class NostrDao( } val chatMessageId = database.chatMessageDao().upsert( - ChatMessage( + _root_ide_package_.ac.cord.compose.database.model.ChatMessage( giftWrapPayloadId = giftWrapPayload.id, senderPublicKey = giftWrapPayload.publicKey, isUserMessage = activeKeyPair.pubKey.toHex() == giftWrapPayload.publicKey, @@ -762,7 +761,7 @@ abstract class NostrDao( val broadcastNostrEventReceiptId = database.broadcastNostrEventReceiptDao().upsert( - BroadcastNostrEventReceipt( + _root_ide_package_.ac.cord.compose.database.model.BroadcastNostrEventReceipt( nostrEventId = nostrEvent.id, isAccepted = true, isSync = true, @@ -772,7 +771,7 @@ abstract class NostrDao( database.chatMessageBroadcastNostrEventReceiptRelationDao() .upsert( - ChatMessageBroadcastNostrEventReceiptRelation( + _root_ide_package_.ac.cord.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation( broadcastNostrEventReceiptId = broadcastNostrEventReceiptId, chatMessageId = chatMessageId ) @@ -795,9 +794,9 @@ abstract class NostrDao( // Persist PlaceHolder and sync // TODO: Get replyingToAuthorPublicKey database.postDao().insert( - Post( + _root_ide_package_.ac.cord.compose.database.model.Post( id = post.replyToId, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync handled by tagged events... content = post.replyToId, profilePublicKey = nostrEvent.pubKey // Will get overwriting by sync handled by tagged events... @@ -815,9 +814,9 @@ abstract class NostrDao( if (replyingToPost == null) { // Persist PlaceHolder and sync database.postDao().insert( - Post( + _root_ide_package_.ac.cord.compose.database.model.Post( id = reaction.replyToId, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync handled by tagged events... content = reaction.replyToId, profilePublicKey = nostrEvent.pubKey // Will get overwriting by sync handled by tagged events... @@ -837,10 +836,10 @@ abstract class NostrDao( eventIdsToSync[relayURL]?.add(quotedRelation.quotedNostrEventId) database.nostrEventDao().insert( - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = quotedRelation.quotedNostrEventId, content = "Pending Sync", - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, pubKey = nostrEvent.pubKey, sig = "", kind = nostrEvent.kind, @@ -857,10 +856,10 @@ abstract class NostrDao( if (quotedProfilePublicKey != null && quotedProfile == null) { database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = quotedProfilePublicKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) @@ -885,10 +884,10 @@ abstract class NostrDao( eventIdsToSync[relayURL]?.add(inReplyToRelation.inReplyToNostrEventId) database.nostrEventDao().insert( - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = inReplyToRelation.inReplyToNostrEventId, content = "Pending Sync", - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, pubKey = nostrEvent.pubKey, sig = "", kind = nostrEvent.kind, @@ -919,10 +918,10 @@ abstract class NostrDao( if (inReplyToRootProfilePublicKey != null && inReplyToProfile == null) { database.profileDao().insertPlaceholderProfile( - Profile( + _root_ide_package_.ac.cord.compose.database.model.Profile( displayName = "LOADING...", publicKey = inReplyToRootProfilePublicKey, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, ) ) @@ -943,9 +942,9 @@ abstract class NostrDao( if (zappedPost == null) { // Persist PlaceHolder and sync database.postDao().insert( - Post( + _root_ide_package_.ac.cord.compose.database.model.Post( id = zap.postId, - createdAt = GENESIS_AT, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, nostrEventId = nostrEvent.id, // Will get overwriting by sync, content = zap.postId, profilePublicKey = nostrEvent.pubKey // Will get overwriting by sync, @@ -979,18 +978,19 @@ abstract class NostrDao( val profile = database.profileDao().getProfileByPublicKey(followedHexKEys) if (profile == null) { - val placeHolderProfile = Profile( - displayName = "LOADING...", - publicKey = followedHexKEys, - createdAt = GENESIS_AT, - nostrEventId = nostrEvent.id, // Will get overwriting by sync, - ) + val placeHolderProfile = + _root_ide_package_.ac.cord.compose.database.model.Profile( + displayName = "LOADING...", + publicKey = followedHexKEys, + createdAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, + nostrEventId = nostrEvent.id, // Will get overwriting by sync, + ) database.profileDao().insertPlaceholderProfile(placeHolderProfile) if (profilePublicKeysToSync[relayURL] == null) { profilePublicKeysToSync[relayURL] = mutableSetOf() } profilePublicKeysToSync[relayURL]?.add(followedHexKEys) - } else if (profile.createdAt == GENESIS_AT && level == 0) { + } else if (profile.createdAt == _root_ide_package_.ac.cord.compose.database.GENESIS_AT && level == 0) { logger.i("${level} This is a placeholder profile... that might need to get synced...: $profile") if (profilePublicKeysToSync[relayURL] == null) { @@ -1001,7 +1001,7 @@ abstract class NostrDao( // Save profile connections... database.connectionDao().upsert( - Connection( + _root_ide_package_.ac.cord.compose.database.model.Connection( sourcePublicKey = nostrEvent.pubKey, destinationPublicKey = followedHexKEys, nostrEventId = nostrEvent.id @@ -1012,15 +1012,16 @@ abstract class NostrDao( } if (level == 0) { - val negentropySynchronizeRequests = mutableListOf() + val negentropySynchronizeRequests = mutableListOf() profilePublicKeysToSync.forEach { relayUrlProfilePublicKey -> - val synchronizationFilter = SynchronizationFilter( - authors = relayUrlProfilePublicKey.value.toTypedArray(), - kinds = profileEventKinds - ) + val synchronizationFilter = + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( + authors = relayUrlProfilePublicKey.value.toTypedArray(), + kinds = profileEventKinds + ) negentropySynchronizeRequests.add( - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayUrlProfilePublicKey.key, synchronizationFilter ), @@ -1034,13 +1035,14 @@ abstract class NostrDao( eventIdsToSync.forEach { relayUrlEventIds -> // TODO: Hash relayUrl + synchronicationFilter + ephocMinutes - val synchronizationFilter = SynchronizationFilter( - ids = relayUrlEventIds.value.toTypedArray(), - ) + val synchronizationFilter = + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( + ids = relayUrlEventIds.value.toTypedArray(), + ) Clock.System.now().toEpochMilliseconds() negentropySynchronizeRequests.add( - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayUrlEventIds.key, synchronizationFilter ), diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventDao.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventDao.kt index 745c0a04..c0311bc4 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrEventDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventDao.kt @@ -1,8 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.OnConflictStrategy.Companion.IGNORE @@ -13,7 +10,6 @@ import androidx.room3.Transaction import androidx.room3.Upsert import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind -import fr.acinq.bitcoin.PublicKey import kotlinx.coroutines.flow.Flow import kotlin.time.Instant @@ -21,35 +17,35 @@ import kotlin.time.Instant interface NostrEventDao { @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) ORDER BY createdAt DESC") - fun observeNostrEvents(kinds: Array): Flow> + fun observeNostrEvents(kinds: Array): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE content LIKE '%' || :search || '%' AND kind in (:kinds) ORDER BY createdAt DESC") fun observeFilteredNostrEvents( kinds: Array, search: String - ): Flow> + ): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND id in (:ids) ORDER BY createdAt DESC") fun observeFilteredNostrEvents( kinds: Array, ids: Array, - ): Flow> + ): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND pubKey in (:authors) ORDER BY createdAt DESC LIMIT 50") fun observeAuthoredNostrEvents( kinds: Array, authors: Array, - ): Flow> + ): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :publicKey || '%' AND kind in (:kinds) ORDER BY createdAt DESC") fun observePublicKeyMentionedNostrEvents( kinds: Array, publicKey: HexKey - ): Flow> + ): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :eventId || '%reply%' AND kind in (:kinds) AND createdAt > :since ORDER BY createdAt DESC") @@ -57,13 +53,13 @@ interface NostrEventDao { kinds: Array, eventId: HexKey, since: Instant - ): Flow> + ): Flow> @Transaction @RawQuery fun observePublicKeyFollowingNostrEvents( query: RoomRawQuery - ): Flow> + ): Flow> @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -71,7 +67,7 @@ interface NostrEventDao { kinds: Array, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE content LIKE '%' || :search || '%' AND kind in (:kinds) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -80,7 +76,7 @@ interface NostrEventDao { search: String, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND id in (:ids) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -89,7 +85,7 @@ interface NostrEventDao { ids: Array, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE id in (:ids) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -97,7 +93,7 @@ interface NostrEventDao { ids: Array, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND pubKey in (:authors) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -106,7 +102,7 @@ interface NostrEventDao { authors: Array, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :publicKey || '%' AND kind in (:kinds) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -115,7 +111,7 @@ interface NostrEventDao { publicKey: HexKey, since: Instant, limit: Int - ): List + ): List @Transaction @Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :eventId || '%reply%' AND kind in (:kinds) AND createdAt > :since ORDER BY createdAt ASC LIMIT :limit") @@ -124,26 +120,26 @@ interface NostrEventDao { eventId: HexKey, since: Instant, limit: Int - ): List + ): List @Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) ORDER BY savedAt DESC") - fun getAllNostrEvents(kinds: Array): List + fun getAllNostrEvents(kinds: Array): List @Transaction @Query("SELECT * FROM NostrEvent WHERE id = :id") - fun observeNostrEventById(id: String): Flow + fun observeNostrEventById(id: String): Flow @Query("SELECT * FROM NostrEvent WHERE id = :id") - fun getNostrEventById(id: String): NostrEvent? + fun getNostrEventById(id: String): at.torch.compose.database.model.NostrEvent? @Query("SELECT * FROM NostrEvent WHERE pubKey = :publicKey AND kind = :kind ORDER BY createdAt DESC") - fun getNostrEventByPublicKeyAndKind(publicKey: HexKey, kind: Kind): NostrEvent? + fun getNostrEventByPublicKeyAndKind(publicKey: HexKey, kind: Kind): at.torch.compose.database.model.NostrEvent? @Upsert - suspend fun upsert(nostrEvent: NostrEvent) + suspend fun upsert(nostrEvent: at.torch.compose.database.model.NostrEvent) @Insert( onConflict = IGNORE ) - suspend fun insert(nostrEvent: NostrEvent) + suspend fun insert(nostrEvent: at.torch.compose.database.model.NostrEvent) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventRelayDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventRelayDao.kt new file mode 100644 index 00000000..0ed8225f --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrEventRelayDao.kt @@ -0,0 +1,12 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Upsert + +@Dao +interface NostrEventRelayDao { + + @Upsert + suspend fun upsert(nostrEventRelay: at.torch.compose.database.model.NostrEventRelay) + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrNip17Dao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrNip17Dao.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrNip17Dao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrNip17Dao.kt index 4229c279..55087076 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrNip17Dao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrNip17Dao.kt @@ -1,38 +1,34 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation -import ac.cord.auxiliary.compose.database.model.ChatMessageNostrEventRelation -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.GiftWrapMessage -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload -import ac.cord.auxiliary.compose.database.model.GiftWrapSeal -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom +import at.torch.compose.database.GENESIS_AT +import at.torch.compose.database.model.BroadcastNostrEventRequest +import at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation +import at.torch.compose.database.model.ChatMessageNostrEventRelation +import at.torch.compose.database.model.ChatRoom +import at.torch.compose.database.model.GiftWrapMessage +import at.torch.compose.database.model.GiftWrapSeal +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Participant +import at.torch.compose.database.model.intermdiate.LocalChatRoom import androidx.room3.Dao import androidx.room3.Transaction import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip01Core.tags.people.PTag import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent -import kotlin.math.log import kotlin.time.Instant @Dao abstract class NostrNip17Dao( - private val database: AuxDatabase + private val database: at.torch.compose.database.TorchDatabase ) { val logger = Logger.withTag(TAG) @Transaction - open suspend fun getOrCreateChatRoom(activeUserPublicKey: HexKey, publicKey: String, relayHint: String?, defaultSubject: String? = null): LocalChatRoom? { + open suspend fun getOrCreateChatRoom(activeUserPublicKey: HexKey, publicKey: String, relayHint: String?, defaultSubject: String? = null): at.torch.compose.database.model.intermdiate.LocalChatRoom? { logger.d("getOrCreateChatRoom: $publicKey") @@ -41,7 +37,7 @@ abstract class NostrNip17Dao( publicKey ) - val chatRoomId = ChatRoom.deriveChatRoomId(hexKeys) + val chatRoomId = _root_ide_package_.at.torch.compose.database.model.ChatRoom.Companion.deriveChatRoomId(hexKeys) logger.d("chatRoomId: $chatRoomId") val localChatRoom = database.chatRoomDao().findChatRoomById(chatRoomId) @@ -52,7 +48,7 @@ abstract class NostrNip17Dao( if (profiles.isNotEmpty()) { // Create new chatRoom - val chatRoom = ChatRoom( + val chatRoom = _root_ide_package_.ac.cord.compose.database.model.ChatRoom( id = chatRoomId, userPublicKey = activeUserPublicKey, subject = defaultSubject, @@ -61,7 +57,7 @@ abstract class NostrNip17Dao( database.participantDao().upsert( profiles.map { - Participant( + _root_ide_package_.ac.cord.compose.database.model.Participant( participantPublicKey = it.publicKey, chatRoomId = chatRoomId, relayHint = relayHint @@ -69,7 +65,7 @@ abstract class NostrNip17Dao( } ) - return LocalChatRoom( + return _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalChatRoom( chatRoom = chatRoom ) } @@ -80,12 +76,12 @@ abstract class NostrNip17Dao( @Transaction open suspend fun persistAndBroadcastGiftWrap( - giftWrapPayload: Pair, + giftWrapPayload: Pair, sealedRumorEvent: SealedRumorEvent, giftWrapEvent: GiftWrapEvent, receiverPublicKey: PTag ) { - val nostrEvent = NostrEvent( + val nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = giftWrapEvent.id, content = giftWrapEvent.content, createdAt = Instant.fromEpochSeconds(giftWrapEvent.createdAt), @@ -103,7 +99,7 @@ abstract class NostrNip17Dao( chatMessage?.let { database.chatMessageNostrEventRelationDao().upsert( - ChatMessageNostrEventRelation( + _root_ide_package_.ac.cord.compose.database.model.ChatMessageNostrEventRelation( chatMessageId = it.id, nostrEventId = nostrEvent.id ) @@ -116,7 +112,7 @@ abstract class NostrNip17Dao( authors = arrayOf( receiverPublicKey.pubKey ), - since = GENESIS_AT, + since = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = 5 ) logger.d("Found messageRelayLists: $chatMessageRelayListEvents") @@ -138,7 +134,7 @@ abstract class NostrNip17Dao( logger.d("Submit BroadcastNostrEventRequest to $relayUrl") val broadcastNostrEventRequestIds = database.broadcastNostrEventRequestDao().insert( listOf( - BroadcastNostrEventRequest( + _root_ide_package_.ac.cord.compose.database.model.BroadcastNostrEventRequest( nostrEventId = nostrEvent.id, relayURL = relayUrl.url ) @@ -148,7 +144,7 @@ abstract class NostrNip17Dao( chatMessage?.let { broadcastNostrEventRequestIds.forEach { database.chatMessageBroadcastNostrEventRequestRelationDao().upsert( - ChatMessageBroadcastNostrEventRequestRelation( + _root_ide_package_.ac.cord.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation( chatMessageId = chatMessage.id, broadcastNostrEventRequestId = it ) @@ -163,7 +159,7 @@ abstract class NostrNip17Dao( database.giftWrapMessageDao().upsert( - GiftWrapMessage( + _root_ide_package_.ac.cord.compose.database.model.GiftWrapMessage( id = giftWrapEvent.id, nostrEventId = nostrEvent.id, content = giftWrapEvent.content, @@ -177,7 +173,7 @@ abstract class NostrNip17Dao( ) database.giftWrapSealDao().upsert( - GiftWrapSeal( + _root_ide_package_.ac.cord.compose.database.model.GiftWrapSeal( id = sealedRumorEvent.id, publicKey = sealedRumorEvent.pubKey, content = sealedRumorEvent.content, diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ParticipantDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ParticipantDao.kt new file mode 100644 index 00000000..cc6e8b0d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ParticipantDao.kt @@ -0,0 +1,18 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface ParticipantDao { + @Query("SELECT * FROM Participant WHERE participantPublicKey = :participantPublicKey") + fun findParticipantByPublicKey(participantPublicKey: String): at.torch.compose.database.model.Participant? + + @Query("SELECT * FROM Participant WHERE chatRoomId = :chatRoomId") + fun findParticipantsByChatRoomId(chatRoomId: String): List + + @Upsert + suspend fun upsert(participants: List) + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/PostDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/PostDao.kt new file mode 100644 index 00000000..82c3de48 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/PostDao.kt @@ -0,0 +1,21 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Insert +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface PostDao { + @Query("SELECT * FROM Post") + fun getAllPosts(): List + + @Query("SELECT * FROM Post WHERE id = :id") + fun getPostById(id: String): at.torch.compose.database.model.Post? + + @Insert + suspend fun insert(post: at.torch.compose.database.model.Post) + + @Upsert + suspend fun upsert(post: at.torch.compose.database.model.Post) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ProfileDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ProfileDao.kt similarity index 51% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ProfileDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ProfileDao.kt index a4b96bc3..af42de2f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ProfileDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ProfileDao.kt @@ -1,13 +1,8 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowers -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing +import at.torch.compose.database.GENESIS_AT import androidx.room3.Dao import androidx.room3.Insert -import androidx.room3.OnConflictStrategy.Companion.IGNORE import androidx.room3.Query import androidx.room3.Upsert import kotlinx.coroutines.flow.Flow @@ -16,27 +11,27 @@ import kotlin.time.Instant @Dao interface ProfileDao { @Query("SELECT * FROM Profile WHERE createdAt > :createdAt LIMIT :limit") - fun getAllProfiles(limit: Int = 21, createdAt: Instant = GENESIS_AT): List + fun getAllProfiles(limit: Int = 21, createdAt: Instant = _root_ide_package_.ac.cord.compose.database.GENESIS_AT): List @Query("SELECT * FROM NostrEvent WHERE kind = 0 AND content LIKE '%' || :searchTerm || '%' LIMIT :limit") - fun filterProfiles(searchTerm: String, limit: Int = 21): List + fun filterProfiles(searchTerm: String, limit: Int = 21): List @Query("SELECT * FROM Profile WHERE publicKey = :publicKey") - fun getProfileByPublicKey(publicKey: String): Profile? + fun getProfileByPublicKey(publicKey: String): at.torch.compose.database.model.Profile? @Query("SELECT * FROM Profile WHERE publicKey IN (:publicKeys)") - fun getProfileByPublicKeys(publicKeys: List): List + fun getProfileByPublicKeys(publicKeys: List): List @Query("SELECT * FROM NostrEvent WHERE kind = 0 AND pubKey = :publicKey") - fun observeProfileWithFollowersByPublicKey(publicKey: String): Flow + fun observeProfileWithFollowersByPublicKey(publicKey: String): Flow @Query("SELECT * FROM NostrEvent WHERE kind = 0 AND pubKey = :publicKey") - fun observeProfileWithFollowingByPublicKey(publicKey: String): Flow + fun observeProfileWithFollowingByPublicKey(publicKey: String): Flow @Insert - suspend fun insertPlaceholderProfile(profile: Profile) + suspend fun insertPlaceholderProfile(profile: at.torch.compose.database.model.Profile) @Upsert - suspend fun upsert(profile: Profile) + suspend fun upsert(profile: at.torch.compose.database.model.Profile) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/QuotedRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/QuotedRelationDao.kt similarity index 60% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/QuotedRelationDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/QuotedRelationDao.kt index 2872e1d9..635c0e64 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/QuotedRelationDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/QuotedRelationDao.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.QuotedRelation import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.Query @@ -9,14 +8,14 @@ import androidx.room3.Upsert @Dao interface QuotedRelationDao { @Query("SELECT * FROM QuotedRelation WHERE quotingNostrEventId = :quotingNostrEventId") - fun getRepostByQuotingNostrEventId(quotingNostrEventId: String): QuotedRelation? + fun getRepostByQuotingNostrEventId(quotingNostrEventId: String): at.torch.compose.database.model.QuotedRelation? @Query("SELECT * FROM QuotedRelation WHERE quotedNostrEventId = :quotedNostrEventId") - fun getRepostByQuotedNostrEventId(quotedNostrEventId: String): QuotedRelation? + fun getRepostByQuotedNostrEventId(quotedNostrEventId: String): at.torch.compose.database.model.QuotedRelation? @Insert - suspend fun insert(quotedRelation: QuotedRelation) + suspend fun insert(quotedRelation: at.torch.compose.database.model.QuotedRelation) @Upsert - suspend fun upsert(quotedRelation: QuotedRelation) + suspend fun upsert(quotedRelation: at.torch.compose.database.model.QuotedRelation) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ReactionDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ReactionDao.kt new file mode 100644 index 00000000..55fd85d2 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ReactionDao.kt @@ -0,0 +1,18 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow + +@Dao +interface ReactionDao { + @Query("SELECT * FROM Reaction") + fun getAllReactions(): List + + @Query("SELECT * FROM Reaction WHERE id = :id") + fun getReactionById(id: String): Flow + + @Upsert + suspend fun upsert(reaction: at.torch.compose.database.model.Reaction) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RecentSearchDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RecentSearchDao.kt new file mode 100644 index 00000000..5ee4b19e --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RecentSearchDao.kt @@ -0,0 +1,22 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Delete +import androidx.room3.Query +import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow + +@Dao +interface RecentSearchDao { + @Query("SELECT * FROM RecentSearch WHERE `query` = :query") + fun observeRecentSearchByQuery(query: String): Flow + + @Query("SELECT * FROM RecentSearch ORDER BY createdAt DESC LIMIT :limit ") + fun getAllRecentSearches(limit: Int = 21): List + + @Delete + fun deleteRecentSearch(recentSearch: at.torch.compose.database.model.RecentSearch) + + @Upsert + suspend fun upsert(recentSearch: at.torch.compose.database.model.RecentSearch) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RelayDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RelayDao.kt new file mode 100644 index 00000000..25614a67 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RelayDao.kt @@ -0,0 +1,19 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow + +@Dao +interface RelayDao { + @Query("SELECT * FROM Relay") + fun getAllPosts(): List + + @Query("SELECT * FROM Relay WHERE publicKey = :publicKey") + fun observePublicKeyRelays(publicKey: String): Flow> + + @Upsert + suspend fun upsert(relay: at.torch.compose.database.model.Relay) + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RepostedRelationDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RepostedRelationDao.kt new file mode 100644 index 00000000..4210552d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/RepostedRelationDao.kt @@ -0,0 +1,20 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert + +@Dao +interface RepostedRelationDao { + @Query("SELECT * FROM RepostedRelation") + fun getAllReposts(): List + + @Query("SELECT * FROM RepostedRelation WHERE repostingNostrEventId = :repostingNostrEventId") + fun getRepostByRepostingId(repostingNostrEventId: String): at.torch.compose.database.model.RepostedRelation? + + @Query("SELECT * FROM RepostedRelation WHERE repostedNostrEventId = :repostedNostrEventId") + fun getRepostByRepostedId(repostedNostrEventId: String): at.torch.compose.database.model.RepostedRelation? + + @Upsert + suspend fun upsert(repostedRelation: at.torch.compose.database.model.RepostedRelation) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventRequestDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventRequestDao.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventRequestDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventRequestDao.kt index dc3f0e0b..80781a14 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/SynchronizeNostrEventRequestDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventRequestDao.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest import androidx.room3.Dao import androidx.room3.Insert import androidx.room3.Query @@ -12,14 +11,14 @@ import kotlin.time.Instant @Dao interface SynchronizeNostrEventRequestDao { @Query("SELECT * FROM SynchronizeNostrEventRequest WHERE status = :status AND createdAt > :createdAt") - fun observeSynchronizeNostrEventRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow + fun observeSynchronizeNostrEventRequestsByStatus(status: String, createdAt: Instant = Clock.System.now()): Flow @Query("SELECT COUNT(*) FROM SynchronizeNostrEventRequest WHERE purpose = :purpose AND status IN (:status) AND createdAt > :createdAt") fun observeSynchronizeNostrEventRequestByPurposeAndStatusCount(purpose: String, status: List, createdAt: Instant = Clock.System.now()): Flow @Upsert - fun upsert(synchronizeNostrEventRequest: SynchronizeNostrEventRequest) + fun upsert(synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest) @Insert - fun insert(synchronizeNostrEventRequests: List) + fun insert(synchronizeNostrEventRequests: List) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventResultDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventResultDao.kt new file mode 100644 index 00000000..5c1a7d30 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/SynchronizeNostrEventResultDao.kt @@ -0,0 +1,10 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Upsert + +@Dao +interface SynchronizeNostrEventResultDao { + @Upsert + fun upsert(synchronizeNostrEventResult: at.torch.compose.database.model.SynchronizeNostrEventResult) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/UnsignedNostrEventDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/UnsignedNostrEventDao.kt new file mode 100644 index 00000000..06916753 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/UnsignedNostrEventDao.kt @@ -0,0 +1,33 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Insert +import androidx.room3.Query +import androidx.room3.Transaction +import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow + +@Dao +interface UnsignedNostrEventDao { + @Query("SELECT * FROM UnsignedNostrEvent") + fun getAUnsignedNostrEvents(): List + + @Query("SELECT * FROM UnsignedNostrEvent") // TODO: where nostrEvent.unsignedNostrEventId is 0 + fun getAllUnprocessedUnsignedNostrEvents(): List + + @Query("SELECT * FROM UnsignedNostrEvent WHERE id = :id") + fun getUnsignedNostrEventById(id: Long): Flow + + @Upsert + suspend fun upsert(unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent): Long + + @Insert + suspend fun insert(unsignedNostrEvents: List) + + @Transaction + @Query("SELECT * FROM UnsignedNostrEvent WHERE kind = 0 AND pubKey = :publicKey") + fun observeProfile(publicKey: String): Flow + + @Query("SELECT * FROM UnsignedNostrEvent WHERE pubKey = :publicKey AND signedAt IS NULL") + fun observeUnsignedNostrEvents(publicKey: String): Flow +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ZapDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ZapDao.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ZapDao.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ZapDao.kt index b10f288c..3a8e42f2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ZapDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/ZapDao.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.database.dao +package at.torch.compose.database.dao -import ac.cord.auxiliary.compose.database.model.Zap +import at.torch.compose.database.model.Zap import androidx.room3.Dao import androidx.room3.Query import androidx.room3.Upsert diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventReceipt.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventReceipt.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventReceipt.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventReceipt.kt index 0184e2dc..311072e8 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventReceipt.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventReceipt.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index @@ -37,4 +35,5 @@ data class BroadcastNostrEventReceipt( val isSync: Boolean = false, val relayURL: String, val messages: String? = null -): NostrEventEntity, UnsignedNostrEventEntity \ No newline at end of file +): at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.UnsignedNostrEventEntity \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventRequest.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventRequest.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventRequest.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventRequest.kt index 32a1be64..f5524819 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/BroadcastNostrEventRequest.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/BroadcastNostrEventRequest.kt @@ -1,9 +1,8 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity -import ac.cord.auxiliary.compose.network.serialization.encodeToJsonString +import at.torch.compose.database.model.traits.NostrEventEntity +import at.torch.compose.database.model.traits.TimestampedEntity +import at.torch.compose.database.model.traits.UnsignedNostrEventEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessage.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessage.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessage.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessage.kt index 695b0b2d..49c17ebe 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessage.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessage.kt @@ -1,13 +1,12 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity +import at.torch.compose.database.model.traits.LocalStoreEntity +import at.torch.compose.database.model.traits.SoftDeletableEntity +import at.torch.compose.database.model.traits.TimestampedEntity +import at.torch.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey -import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt index 03d6bc9d..3b31a2cb 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventReceiptRelation.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey @@ -34,4 +32,5 @@ data class ChatMessageBroadcastNostrEventReceiptRelation( override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = Clock.System.now(), override val savedAt: Instant = Clock.System.now() -): TimestampedEntity, LocalStoreEntity +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt index 2bb51dc9..c40c1bee 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageBroadcastNostrEventRequestRelation.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey @@ -34,4 +32,5 @@ data class ChatMessageBroadcastNostrEventRequestRelation( override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = Clock.System.now(), override val savedAt: Instant = Clock.System.now() -): TimestampedEntity, LocalStoreEntity +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageNostrEventRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageNostrEventRelation.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageNostrEventRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageNostrEventRelation.kt index daa95087..96fa4745 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatMessageNostrEventRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatMessageNostrEventRelation.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey @@ -38,4 +33,5 @@ data class ChatMessageNostrEventRelation( override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = Clock.System.now(), override val savedAt: Instant = Clock.System.now(), -): TimestampedEntity, LocalStoreEntity +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatRoom.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt similarity index 89% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatRoom.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt index 73b8e6f7..6e673176 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/ChatRoom.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt @@ -1,9 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Ignore @@ -77,7 +73,10 @@ data class ChatRoom( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, - ): TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { + ): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { companion object { const val TAG = "ChatRoom" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Connection.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Connection.kt similarity index 68% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Connection.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Connection.kt index 49641502..f48dbace 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Connection.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Connection.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import com.vitorpamplona.quartz.nip01Core.core.HexKey @@ -39,4 +34,8 @@ data class Connection( override val savedAt: Instant = Clock.System.now(), override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): NostrEventEntity, TimestampedEntity, LocalStoreEntity, BroadcastableEntity, SoftDeletableEntity +): at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapMessage.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapMessage.kt similarity index 84% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapMessage.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapMessage.kt index 9f8a5908..e5bfba0b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapMessage.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapMessage.kt @@ -1,11 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity -import ac.cord.auxiliary.compose.network.serialization.encodeToJsonString import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Ignore @@ -13,8 +7,6 @@ import androidx.room3.PrimaryKey import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind -import com.vitorpamplona.quartz.nip01Core.core.TagArray -import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.core.hexToByteArray import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair @@ -22,10 +14,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerInternal import com.vitorpamplona.quartz.nip01Core.tags.people.PTag import com.vitorpamplona.quartz.nip44Encryption.Nip44 -import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent -import fr.acinq.bitcoin.PrivateKey -import kotlin.math.log import kotlin.time.Clock import kotlin.time.Instant @@ -85,7 +74,11 @@ data class GiftWrapMessage( override val savedAt: Instant = Clock.System.now(), override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, // Who this message should be seen by (used to derive conversationId) -): NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { @Ignore private val logger = Logger.withTag("GiftWrapMessage") diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapPayload.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapPayload.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapPayload.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapPayload.kt index f7c10c39..30114d3a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapPayload.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapPayload.kt @@ -1,15 +1,10 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Ignore import androidx.room3.PrimaryKey import co.touchlab.kermit.Logger -import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import com.vitorpamplona.quartz.nip01Core.tags.people.PTag @@ -78,7 +73,10 @@ data class GiftWrapPayload( // TODO: Rename this to GiftWrapPayload... override val savedAt: Instant = Clock.System.now(), override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, // Who this message should be seen by (used to derive conversationId) -): TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { @Ignore private val logger = Logger.withTag(TAG) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapSeal.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapSeal.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapSeal.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapSeal.kt index c552b093..8b6e3d2b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/GiftWrapSeal.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/GiftWrapSeal.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity -import ac.cord.auxiliary.compose.network.serialization.encodeToJsonString import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Ignore @@ -67,7 +62,10 @@ data class GiftWrapSeal( override val savedAt: Instant = Clock.System.now(), override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, // Who this message should be seen by (used to derive conversationId) -): TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { @Ignore private val logger = Logger.withTag("GiftWrapMessage") diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/InReplyToRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/InReplyToRelation.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/InReplyToRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/InReplyToRelation.kt index c09ba056..85eb381d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/InReplyToRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/InReplyToRelation.kt @@ -1,14 +1,7 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey -import androidx.room3.Index -import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant @@ -63,6 +56,9 @@ data class InReplyToRelation( override val savedAt: Instant = Clock.System.now(), override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Mention.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Mention.kt similarity index 69% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Mention.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Mention.kt index b7d7050c..ee9e09a3 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Mention.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Mention.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey @@ -42,4 +37,7 @@ data class Mention( override val savedAt: Instant = Clock.System.now(), override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, BroadcastableEntity, SoftDeletableEntity +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeRequest.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeRequest.kt similarity index 81% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeRequest.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeRequest.kt index 4e4f4f22..b21b4ffd 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeRequest.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeRequest.kt @@ -1,9 +1,6 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.network.serialization.encodeToJsonString +import at.torch.compose.network.serialization.encodeToJsonString import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index @@ -43,12 +40,13 @@ data class NegentropySynchronizeRequest( val level: Int, - val synchronizationFilter: SynchronizationFilter, + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, override val nostrEventId: HexKey? = null, override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = createdAt, -): OptionalNostrEventEntity, TimestampedEntity { +): at.torch.compose.database.model.traits.OptionalNostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity { fun toSynchronizeNostrEventRequest(): SynchronizeNostrEventRequest { val since = synchronizationFilter.since // TODO: Update since -> until based on what we have in the local db... @@ -71,7 +69,7 @@ data class NegentropySynchronizeRequest( companion object { fun computeId( relayURL: String, - synchronizationFilter: SynchronizationFilter, + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, ): String { return sha256( data = relayURL.toByteArray() diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeResult.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeResult.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeResult.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeResult.kt index 9477d539..fc511a2d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NegentropySynchronizeResult.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NegentropySynchronizeResult.kt @@ -1,12 +1,8 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey -import androidx.room3.Index import androidx.room3.PrimaryKey -import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant import kotlin.uuid.ExperimentalUuidApi @@ -33,4 +29,4 @@ data class NegentropySynchronizeResult( override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = createdAt, -): TimestampedEntity \ No newline at end of file +): at.torch.compose.database.model.traits.TimestampedEntity \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt similarity index 95% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt index de585952..a430ca7a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt @@ -1,12 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentParser -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentSegment import androidx.room3.Entity import androidx.room3.Ignore import androidx.room3.Index @@ -80,7 +73,11 @@ data class NostrEvent( override val savedAt: Instant = Clock.System.now(), override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): UnsignedNostrEventEntity, TimestampedEntity, LocalStoreEntity, BroadcastableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.UnsignedNostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { @Ignore private val logger = Logger.withTag("NostrEvent") @@ -337,8 +334,8 @@ data class NostrEvent( } } - val quotedNotes = ContentParser.parse(content.trimEnd('\n', '\r'), emptyMap(), emptyMap(), trimBlankLines = true) - .filterIsInstance() + val quotedNotes = _root_ide_package_.at.torch.compose.ui.composable.widgets.content.ContentParser.parse(content.trimEnd('\n', '\r'), emptyMap(), emptyMap(), trimBlankLines = true) + .filterIsInstance() .firstOrNull() return quotedNotes?.let { quotedNote -> diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEventRelay.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEventRelay.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEventRelay.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEventRelay.kt index 9b290e5c..4a3625aa 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/NostrEventRelay.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEventRelay.kt @@ -1,20 +1,14 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter +import at.torch.compose.database.model.traits.NostrEventEntity +import at.torch.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index -import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant import kotlin.uuid.ExperimentalUuidApi -import kotlin.uuid.Uuid @OptIn(ExperimentalUuidApi::class) @Entity( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Participant.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Participant.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Participant.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Participant.kt index 2ff6787a..38ac6ad2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Participant.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Participant.kt @@ -1,9 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.PrimaryKey @@ -51,4 +47,7 @@ data class Participant( override val savedAt: Instant = Clock.System.now(), override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, BroadcastableEntity, SoftDeletableEntity +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Post.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Post.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Post.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Post.kt index de40d19c..9d66b3e4 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Post.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Post.kt @@ -1,13 +1,13 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.ProfilePublicKeyEntity -import ac.cord.auxiliary.compose.database.model.traits.ReplyingToEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity +import at.torch.compose.database.model.traits.BroadcastableEntity +import at.torch.compose.database.model.traits.LocalStoreEntity +import at.torch.compose.database.model.traits.NostrEventEntity +import at.torch.compose.database.model.traits.ProfilePublicKeyEntity +import at.torch.compose.database.model.traits.ReplyingToEntity +import at.torch.compose.database.model.traits.SoftDeletableEntity +import at.torch.compose.database.model.traits.TimestampedEntity +import at.torch.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Profile.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Profile.kt similarity index 81% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Profile.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Profile.kt index 6d1b8358..5183f46c 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Profile.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Profile.kt @@ -1,18 +1,7 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import androidx.compose.foundation.clickable +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -25,7 +14,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.focusModifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.room3.Entity @@ -76,7 +64,12 @@ data class Profile( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { fun humanReadableNameOrPubkey(): String { return if (!displayName.isNullOrBlank()) { displayName @@ -104,7 +97,7 @@ data class Profile( } suspend fun profilePublicRelays( - nostrRepository: NostrRepository + nostrRepository: at.torch.compose.repository.NostrRepository ): List? { val relays = nostrRepository.getNostrEvent( publicKey, @@ -132,7 +125,7 @@ data class Profile( @Composable fun RenderAsListItem( activeUserPublicKey: String, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Card( modifier = Modifier.fillMaxWidth().padding( @@ -141,7 +134,7 @@ data class Profile( ), onClick = { onNavigateToEvent.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, nostrEventId ) @@ -159,7 +152,7 @@ data class Profile( Column( modifier = Modifier.padding(4.dp) ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( publicKey = publicKey, profile = this@Profile ) @@ -181,7 +174,7 @@ data class Profile( Text( text = staticIdentifier, style = MaterialTheme.typography.labelMedium, - color = ProfileColor.fromPublicKey(publicKey) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(publicKey) ) } @@ -203,7 +196,7 @@ fun ProfileRenderAsListItemPreview( about = "I am the stone that the builder refused.", nostrEventId = "nostrEventId" ) - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/QuotedRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/QuotedRelation.kt similarity index 71% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/QuotedRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/QuotedRelation.kt index 858c116d..ac9234c2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/QuotedRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/QuotedRelation.kt @@ -1,14 +1,7 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey -import androidx.room3.Index -import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant @@ -52,6 +45,10 @@ data class QuotedRelation( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Reaction.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Reaction.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Reaction.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Reaction.kt index 5a21d75d..c02bc11b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Reaction.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Reaction.kt @@ -1,13 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.ProfilePublicKeyEntity -import ac.cord.auxiliary.compose.database.model.traits.ReplyingToEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index @@ -60,4 +52,11 @@ data class Reaction( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): NostrEventEntity, ReplyingToEntity, ProfilePublicKeyEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity +): at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.ReplyingToEntity, + at.torch.compose.database.model.traits.ProfilePublicKeyEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RecentSearch.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RecentSearch.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RecentSearch.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RecentSearch.kt index 95cb0309..bb2742bb 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RecentSearch.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RecentSearch.kt @@ -1,8 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter import androidx.room3.Entity import androidx.room3.PrimaryKey import kotlin.time.Clock @@ -13,11 +10,11 @@ data class RecentSearch( @PrimaryKey val query: String, - val synchronizationFilters: Array? = null, + val synchronizationFilters: Array? = null, override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = createdAt, -): TimestampedEntity { +): at.torch.compose.database.model.traits.TimestampedEntity { override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || this::class != other::class) return false diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Relay.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Relay.kt similarity index 82% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Relay.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Relay.kt index a5b17671..965a8f67 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Relay.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Relay.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model import androidx.room3.Entity diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RepostedRelation.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RepostedRelation.kt similarity index 71% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RepostedRelation.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RepostedRelation.kt index c74e2640..b8adfe0f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/RepostedRelation.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/RepostedRelation.kt @@ -1,14 +1,7 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey -import androidx.room3.Index -import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.time.Clock import kotlin.time.Instant @@ -51,6 +44,10 @@ data class RepostedRelation( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventRequest.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventRequest.kt similarity index 81% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventRequest.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventRequest.kt index e66cbbff..5eb4e872 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventRequest.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventRequest.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index @@ -46,13 +41,15 @@ data class SynchronizeNostrEventRequest( val level: Int, - val synchronizationFilters: Array, + val synchronizationFilters: Array, override val nostrEventId: HexKey? = null, override val unsignedNostrEventId: Long? = null, override val createdAt: Instant = Clock.System.now(), override val updatedAt: Instant = createdAt, -): OptionalNostrEventEntity, UnsignedNostrEventEntity, TimestampedEntity { +): at.torch.compose.database.model.traits.OptionalNostrEventEntity, + at.torch.compose.database.model.traits.UnsignedNostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity { override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || this::class != other::class) return false diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventResult.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventResult.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventResult.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventResult.kt index 0678eb23..e47cd289 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/SynchronizeNostrEventResult.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/SynchronizeNostrEventResult.kt @@ -1,7 +1,7 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity +import at.torch.compose.database.model.traits.OptionalNostrEventEntity +import at.torch.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/UnsignedNostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/UnsignedNostrEvent.kt similarity index 81% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/UnsignedNostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/UnsignedNostrEvent.kt index 70900bbc..a30c182a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/UnsignedNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/UnsignedNostrEvent.kt @@ -1,15 +1,10 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity import androidx.room3.Entity import androidx.room3.Index import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind -import com.vitorpamplona.quartz.nip01Core.core.TagArray import kotlin.String import kotlin.time.Clock import kotlin.time.Instant @@ -37,7 +32,10 @@ data class UnsignedNostrEvent( override val savedAt: Instant = Clock.System.now(), override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -): TimestampedEntity, LocalStoreEntity, BroadcastableEntity, SoftDeletableEntity { +): at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity { override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Zap.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Zap.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Zap.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Zap.kt index 14bbc0f9..5a86232b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/Zap.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/Zap.kt @@ -1,11 +1,5 @@ -package ac.cord.auxiliary.compose.database.model +package at.torch.compose.database.model -import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity -import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity -import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity -import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity -import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity -import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Index @@ -67,4 +61,9 @@ data class Zap( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, override val broadcastedAt: Instant? = null, -) : NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity +) : at.torch.compose.database.model.traits.NostrEventEntity, + at.torch.compose.database.model.traits.TimestampedEntity, + at.torch.compose.database.model.traits.LocalStoreEntity, + at.torch.compose.database.model.traits.UserViewableEntity, + at.torch.compose.database.model.traits.BroadcastableEntity, + at.torch.compose.database.model.traits.SoftDeletableEntity diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalAccount.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalAccount.kt new file mode 100644 index 00000000..915f9cad --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalAccount.kt @@ -0,0 +1,39 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalAccount( + @Embedded val unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent?, + + @Relation( + parentColumns = ["id"], + entityColumns = ["unsignedNostrEventId"] + ) + val nostrEvent: at.torch.compose.database.model.NostrEvent?, + + @Relation( + parentColumns = ["pubKey"], + entityColumns = ["publicKey"] + ) + val profile: at.torch.compose.database.model.Profile?, + + @Relation( + parentColumns = ["id"], + entityColumns = ["unsignedNostrEventId"] + ) + val broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest?, + + @Relation( + parentColumns = ["id"], + entityColumns = ["unsignedNostrEventId"] + ) + val broadcastNostrEventReceipt: at.torch.compose.database.model.BroadcastNostrEventReceipt?, + + @Relation( + parentColumns = ["id"], + entityColumns = ["unsignedNostrEventId"] + ) + val synchronizeNostrEventRequests: List, + + ) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt new file mode 100644 index 00000000..5a662ae2 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalBroadcastNostrEventRequest.kt @@ -0,0 +1,14 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalBroadcastNostrEventRequest( + @Embedded val broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest, + + @Relation( + parentColumns = ["nostrEventId"], + entityColumns = ["id"] + ) + val nostrEvent: at.torch.compose.database.model.NostrEvent, +) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatMessage.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatMessage.kt new file mode 100644 index 00000000..f98960c8 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatMessage.kt @@ -0,0 +1,34 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalChatMessage( + @Embedded val chatMessage: at.torch.compose.database.model.ChatMessage, + + @Relation( + parentColumns = ["senderPublicKey"], + entityColumns = ["publicKey"] + ) + val profile: at.torch.compose.database.model.Profile?, + + @Relation( + parentColumns = ["id"], + entityColumns = ["chatMessageId"] + ) + val chatMessageBroadcastNostrEventReceiptRelation: at.torch.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation? = null, + + + @Relation( + parentColumns = ["id"], + entityColumns = ["chatMessageId"] + ) + val chatMessageBroadcastNostrEventRequestRelation: at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation? = null, + + + @Relation( + parentColumns = ["id"], + entityColumns = ["chatMessageId"] + ) + val chatMessageNostrEventRelation: at.torch.compose.database.model.ChatMessageNostrEventRelation? = null, +) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatRoom.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatRoom.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatRoom.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatRoom.kt index 2c2856a6..a0d10e26 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalChatRoom.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalChatRoom.kt @@ -1,8 +1,5 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.Participant -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.text.SpanStyle @@ -12,10 +9,10 @@ import androidx.room3.Embedded import androidx.room3.Relation data class LocalChatRoom( - @Embedded val chatRoom: ChatRoom, + @Embedded val chatRoom: at.torch.compose.database.model.ChatRoom, @Relation( - entity = Participant::class, + entity = _root_ide_package_.at.torch.compose.database.model.Participant::class, parentColumns = ["id"], entityColumns = ["chatRoomId"], ) @@ -26,7 +23,7 @@ data class LocalChatRoom( if (chatRoom.subject != null) { Text( text = chatRoom.subject, - color = ProfileColor.fromPublicKey(chatRoom.id) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(chatRoom.id) ) } else { if (localParticipants.size == 1) { @@ -36,7 +33,7 @@ data class LocalChatRoom( } else { // Remove the active user publicKey from participants... val participantNames = localParticipants.filter { it.participant.participantPublicKey != chatRoom.userPublicKey }.map { buildAnnotatedString { - withStyle(style = SpanStyle(color = ProfileColor.fromPublicKey(it.participant.participantPublicKey))) { + withStyle(style = SpanStyle(color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(it.participant.participantPublicKey))) { append(it.profile?.humanReadableNameOrPubkey() ?: "unknown participant") } } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt index b0c655d8..7f5efd80 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalInReplyToNostrEvent.kt @@ -1,12 +1,7 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.InReplyToRelation -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -24,22 +19,22 @@ import androidx.room3.Embedded import androidx.room3.Relation data class LocalInReplyToNostrEvent( - @Embedded val inReplyToRelation: InReplyToRelation, + @Embedded val inReplyToRelation: at.torch.compose.database.model.InReplyToRelation, @Relation( parentColumns = ["inReplyToNostrEventId"], entityColumns = ["id"] ) - val nostrEvent: NostrEvent, + val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["inReplyToProfilePublicKey"], entityColumns = ["publicKey"] ) - val profile: Profile?, + val profile: at.torch.compose.database.model.Profile?, @Relation( - entity = Mention::class, + entity = _root_ide_package_.at.torch.compose.database.model.Mention::class, parentColumns = ["inReplyToNostrEventId"], entityColumns = ["mentioningNostrEventId"], ) @@ -55,7 +50,7 @@ data class LocalInReplyToNostrEvent( ) { val profile = profile - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = profile, publicKey = nostrEvent.pubKey ) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalMention.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalMention.kt new file mode 100644 index 00000000..f3d8ffca --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalMention.kt @@ -0,0 +1,14 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalMention( + @Embedded val mention: at.torch.compose.database.model.Mention, + + @Relation( + parentColumns = ["mentionedPublicKey"], + entityColumns = ["publicKey"] + ) + val profile: at.torch.compose.database.model.Profile?, +) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalNostrEvent.kt similarity index 74% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalNostrEvent.kt index 2aee0ddc..e1169bb3 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalNostrEvent.kt @@ -1,14 +1,8 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.InReplyToRelation -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.RepostedRelation -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.ui.composable.widgets.content.RichContent +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -19,47 +13,43 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.room3.Embedded -import androidx.room3.Ignore -import androidx.room3.Junction import androidx.room3.Relation import com.vitorpamplona.quartz.nip01Core.core.HexKey data class LocalNostrEvent( - @Embedded val nostrEvent: NostrEvent, + @Embedded val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["pubKey"], entityColumns = ["publicKey"] ) - val profile: Profile?, + val profile: at.torch.compose.database.model.Profile?, @Relation( - entity = RepostedRelation::class, + entity = _root_ide_package_.at.torch.compose.database.model.RepostedRelation::class, parentColumns = ["id"], entityColumns = ["repostingNostrEventId"] ) val localRepostedNostrEvent: LocalRepostedNostrEvent? = null, @Relation( - entity = QuotedRelation::class, + entity = _root_ide_package_.at.torch.compose.database.model.QuotedRelation::class, parentColumns = ["id"], entityColumns = ["quotingNostrEventId"] ) val localQuotedNostrEvent: LocalQuotedNostrEvent? = null, @Relation( - entity = InReplyToRelation::class, + entity = _root_ide_package_.at.torch.compose.database.model.InReplyToRelation::class, parentColumns = ["id"], entityColumns = ["replyingNostrEventId"] ) val localInReplyToNostrEvent: LocalInReplyToNostrEvent? = null, @Relation( - entity = Mention::class, + entity = _root_ide_package_.at.torch.compose.database.model.Mention::class, parentColumns = ["id"], entityColumns = ["mentioningNostrEventId"], ) @@ -77,7 +67,7 @@ data class LocalNostrEvent( ) { val profile = profile - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = profile, publicKey = nostrEvent.pubKey ) @@ -98,7 +88,7 @@ data class LocalNostrEvent( } } } - RichContent( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.content.RichContent( modifier = Modifier.fillMaxWidth().padding( horizontal = 20.dp ), diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalParticipant.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalParticipant.kt new file mode 100644 index 00000000..459bb695 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalParticipant.kt @@ -0,0 +1,14 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalParticipant( + @Embedded val participant: at.torch.compose.database.model.Participant, + + @Relation( + parentColumns = ["participantPublicKey"], + entityColumns = ["publicKey"] + ) + val profile: at.torch.compose.database.model.Profile?, +) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalPost.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalPost.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalPost.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalPost.kt index d4e5887b..c0deda77 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalPost.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalPost.kt @@ -1,7 +1,7 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.Post -import ac.cord.auxiliary.compose.database.model.Profile +import at.torch.compose.database.model.Post +import at.torch.compose.database.model.Profile import androidx.room3.Embedded import androidx.room3.Relation diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfile.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfile.kt new file mode 100644 index 00000000..f7a2e157 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfile.kt @@ -0,0 +1,14 @@ +package at.torch.compose.database.model.intermdiate + +import androidx.room3.Embedded +import androidx.room3.Relation + +data class LocalProfile( + @Embedded val nostrEvent: at.torch.compose.database.model.NostrEvent, + + @Relation( + parentColumns = ["pubKey"], + entityColumns = ["publicKey"] + ) + val profile: at.torch.compose.database.model.Profile, +) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowers.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowers.kt similarity index 55% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowers.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowers.kt index 8ab10207..f906b04b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowers.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowers.kt @@ -1,29 +1,26 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile import androidx.room3.Embedded import androidx.room3.Junction import androidx.room3.Relation data class LocalProfileWithFollowers( - @Embedded val nostrEvent: NostrEvent, + @Embedded val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["pubKey"], entityColumns = ["publicKey"] ) - val profile: Profile, + val profile: at.torch.compose.database.model.Profile, @Relation( parentColumns = ["pubKey"], entityColumns = ["publicKey"], associateBy = Junction( - value = Connection::class, + value = _root_ide_package_.at.torch.compose.database.model.Connection::class, parentColumns = ["destinationPublicKey"], entityColumns = ["sourcePublicKey"] ) ) - val followers: List + val followers: List ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowing.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowing.kt similarity index 55% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowing.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowing.kt index 58e94321..355b048c 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalProfileWithFollowing.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalProfileWithFollowing.kt @@ -1,29 +1,26 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile import androidx.room3.Embedded import androidx.room3.Junction import androidx.room3.Relation data class LocalProfileWithFollowing( - @Embedded val nostrEvent: NostrEvent, + @Embedded val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["pubKey"], entityColumns = ["publicKey"] ) - val profile: Profile, + val profile: at.torch.compose.database.model.Profile, @Relation( parentColumns = ["pubKey"], entityColumns = ["publicKey"], associateBy = Junction( - value = Connection::class, + value = _root_ide_package_.at.torch.compose.database.model.Connection::class, parentColumns = ["sourcePublicKey"], entityColumns = ["destinationPublicKey"] ) ) - val following: List + val following: List ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt index 4027a60f..6c915867 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalQuotedNostrEvent.kt @@ -1,14 +1,11 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.QuotedRelation +import at.torch.compose.ui.composable.widgets.content.RichContent +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -27,22 +24,22 @@ import androidx.room3.Relation import com.vitorpamplona.quartz.nip01Core.core.HexKey data class LocalQuotedNostrEvent( - @Embedded val quotedRelation: QuotedRelation, + @Embedded val quotedRelation: at.torch.compose.database.model.QuotedRelation, @Relation( parentColumns = ["quotedNostrEventId"], entityColumns = ["id"] ) - val nostrEvent: NostrEvent, + val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["quotedProfilePublicKey"], entityColumns = ["publicKey"] ) - val profile: Profile?, + val profile: at.torch.compose.database.model.Profile?, @Relation( - entity = Mention::class, + entity = _root_ide_package_.at.torch.compose.database.model.Mention::class, parentColumns = ["quotedNostrEventId"], entityColumns = ["mentioningNostrEventId"], ) @@ -64,7 +61,7 @@ data class LocalQuotedNostrEvent( horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start), verticalAlignment = Alignment.CenterVertically ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( publicKey = nostrEvent.pubKey, profile = profile ) @@ -81,7 +78,7 @@ data class LocalQuotedNostrEvent( Text( text = staticIdentifier, style = MaterialTheme.typography.bodySmall, - color = ProfileColor.fromProfile(profile) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromProfile(profile) ) } } @@ -91,7 +88,7 @@ data class LocalQuotedNostrEvent( horizontal = 10.dp ) ) { - RichContent( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.content.RichContent( nostrEvent = nostrEvent, localQuotedNostrEvent = null, mentionedProfiles = mentionedProfiles, @@ -115,12 +112,12 @@ data class LocalQuotedNostrEvent( @Preview @Composable private fun LocalQuotedNostrEventPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { LocalQuotedNostrEvent( - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6", content = "God is not in the habit of coming down from heaven to solve people’s problems on earth.", pubKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", @@ -128,12 +125,12 @@ private fun LocalQuotedNostrEventPreview() { sig = "hexsig", tags = emptyArray() ), - quotedRelation = QuotedRelation( + quotedRelation = _root_ide_package_.ac.cord.compose.database.model.QuotedRelation( quotingNostrEventId = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520", quotedProfilePublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", quotedNostrEventId = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6" ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Steve Biko" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt index f0a2c432..c6e676ed 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/intermdiate/LocalRepostedNostrEvent.kt @@ -1,12 +1,7 @@ -package ac.cord.auxiliary.compose.database.model.intermdiate +package at.torch.compose.database.model.intermdiate -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.RepostedRelation -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -24,22 +19,22 @@ import androidx.room3.Embedded import androidx.room3.Relation data class LocalRepostedNostrEvent( - @Embedded val repostedRelation: RepostedRelation, + @Embedded val repostedRelation: at.torch.compose.database.model.RepostedRelation, @Relation( parentColumns = ["repostedNostrEventId"], entityColumns = ["id"] ) - val nostrEvent: NostrEvent, + val nostrEvent: at.torch.compose.database.model.NostrEvent, @Relation( parentColumns = ["repostedProfilePublicKey"], entityColumns = ["publicKey"] ) - val profile: Profile?, + val profile: at.torch.compose.database.model.Profile?, @Relation( - entity = Mention::class, + entity = _root_ide_package_.at.torch.compose.database.model.Mention::class, parentColumns = ["repostedNostrEventId"], entityColumns = ["mentioningNostrEventId"], ) @@ -55,7 +50,7 @@ data class LocalRepostedNostrEvent( ) { val profile = profile - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = profile, publicKey = nostrEvent.pubKey ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/BroadcastableEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/BroadcastableEntity.kt similarity index 62% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/BroadcastableEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/BroadcastableEntity.kt index b9a0908e..351bd01f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/BroadcastableEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/BroadcastableEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/LocalStoreEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/LocalStoreEntity.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/LocalStoreEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/LocalStoreEntity.kt index 84bbd235..ac4a7ba1 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/LocalStoreEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/LocalStoreEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/NostrEventEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/NostrEventEntity.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/NostrEventEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/NostrEventEntity.kt index a3b80dda..dafa9978 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/NostrEventEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/NostrEventEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import com.vitorpamplona.quartz.nip01Core.core.HexKey diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/OptionalNostrEventEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/OptionalNostrEventEntity.kt similarity index 68% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/OptionalNostrEventEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/OptionalNostrEventEntity.kt index e386dec2..d5fb402a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/OptionalNostrEventEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/OptionalNostrEventEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import com.vitorpamplona.quartz.nip01Core.core.HexKey diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ProfilePublicKeyEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ProfilePublicKeyEntity.kt similarity index 68% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ProfilePublicKeyEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ProfilePublicKeyEntity.kt index 98dc4d06..d9c3c9ca 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ProfilePublicKeyEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ProfilePublicKeyEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import com.vitorpamplona.quartz.nip01Core.core.HexKey diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ReplyingToEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ReplyingToEntity.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ReplyingToEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ReplyingToEntity.kt index d7a91e68..31ac888e 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/ReplyingToEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/ReplyingToEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import com.vitorpamplona.quartz.nip01Core.core.HexKey diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/SoftDeletableEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/SoftDeletableEntity.kt similarity index 60% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/SoftDeletableEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/SoftDeletableEntity.kt index ad70a10a..41747908 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/SoftDeletableEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/SoftDeletableEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/TimestampedEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/TimestampedEntity.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/TimestampedEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/TimestampedEntity.kt index 643deebb..54596edc 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/TimestampedEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/TimestampedEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UnsignedNostrEventEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UnsignedNostrEventEntity.kt similarity index 56% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UnsignedNostrEventEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UnsignedNostrEventEntity.kt index b791c106..8e900c56 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UnsignedNostrEventEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UnsignedNostrEventEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits interface UnsignedNostrEventEntity { val unsignedNostrEventId: Long? diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UserViewableEntity.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UserViewableEntity.kt similarity index 60% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UserViewableEntity.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UserViewableEntity.kt index 956ab671..9397b2a6 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/traits/UserViewableEntity.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/traits/UserViewableEntity.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.traits +package at.torch.compose.database.model.traits import kotlin.time.Instant diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/HexArray.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/HexArray.kt new file mode 100644 index 00000000..16dc2494 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/HexArray.kt @@ -0,0 +1,4 @@ +package at.torch.compose.database.model.typealiases + +typealias HexArray = Array + diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/KindArray.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/KindArray.kt new file mode 100644 index 00000000..e8c26996 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/KindArray.kt @@ -0,0 +1,3 @@ +package at.torch.compose.database.model.typealiases + +typealias KindArray = Array \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/SynchronizationFilterArray.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/SynchronizationFilterArray.kt new file mode 100644 index 00000000..de7d4349 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/typealiases/SynchronizationFilterArray.kt @@ -0,0 +1,3 @@ +package at.torch.compose.database.model.typealiases + +typealias SynchronizationFilterArray = Array \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/types/SynchronizationFilter.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/types/SynchronizationFilter.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/types/SynchronizationFilter.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/model/types/SynchronizationFilter.kt index e4b163c5..d16e28db 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/types/SynchronizationFilter.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/types/SynchronizationFilter.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.database.model.types +package at.torch.compose.database.model.types import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseChatRepository.kt similarity index 84% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseChatRepository.kt index d425649d..bdd34696 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseChatRepository.kt @@ -1,13 +1,8 @@ -package ac.cord.auxiliary.compose.database.repository +package at.torch.compose.database.repository -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.ChatMessage -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatMessage -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom -import ac.cord.auxiliary.compose.repository.ChatRepository +import at.torch.compose.database.GENESIS_AT +import at.torch.compose.database.model.ChatMessage +import at.torch.compose.database.model.GiftWrapPayload import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey @@ -24,27 +19,27 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow class DatabaseChatRepository( - private val database: AuxDatabase, + private val database: at.torch.compose.database.TorchDatabase, private val scope: CoroutineScope -): ChatRepository { +): at.torch.compose.repository.ChatRepository { val logger = Logger.withTag(TAG) - override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { + override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { return database.chatRoomDao().observeChatRoomListByUserPublicKey(publicKey) } - override suspend fun getChatRoomListByPublicKey(publicKey: String): List { + override suspend fun getChatRoomListByPublicKey(publicKey: String): List { return database.chatRoomDao().getChatRoomListByUserPublicKey(publicKey) } - override suspend fun getChatRoomByIdentifier(id: String): LocalChatRoom? { + override suspend fun getChatRoomByIdentifier(id: String): at.torch.compose.database.model.intermdiate.LocalChatRoom? { return database.chatRoomDao().findChatRoomById(id) } - override suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List { + override suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List { return database.chatMessageDao().getChatMessagesByChatRoomId(chatRoomId) } - override suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> { + override suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> { return database.chatMessageDao().observeChatMessagesByChatRoomId(chatRoomId) } @@ -54,7 +49,7 @@ class DatabaseChatRepository( publicKey: String, relayHint: String?, defaultSubject: String? - ): LocalChatRoom? = try { + ): at.torch.compose.database.model.intermdiate.LocalChatRoom? = try { return database.nostrNip17Dao().getOrCreateChatRoom( activeUserPublicKey = activeUserPublicKey, publicKey = publicKey, @@ -75,7 +70,7 @@ class DatabaseChatRepository( authors = arrayOf( publicKey ), - since = GENESIS_AT, + since = _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = 5 ).firstOrNull()?.let { nostrEvent -> if (nostrEvent.kind != ChatMessageRelayListEvent.KIND) { @@ -96,7 +91,7 @@ class DatabaseChatRepository( override suspend fun sendChatMessage( text: String, - localChatRoom: LocalChatRoom, + localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom, messageType: Kind ) { logger.i("sendChatMessage($text): $localChatRoom") @@ -111,7 +106,7 @@ class DatabaseChatRepository( } val giftWrapPayloadId = database.giftWrapPayloadDao().upsert( - GiftWrapPayload( + _root_ide_package_.ac.cord.compose.database.model.GiftWrapPayload( kind = messageType, tags = receiverTags.toTypedArray(), content = text, @@ -120,7 +115,7 @@ class DatabaseChatRepository( ) ) database.chatMessageDao().upsert( - ChatMessage( + _root_ide_package_.ac.cord.compose.database.model.ChatMessage( content = text, chatRoomId = localChatRoom.chatRoom.id, senderPublicKey = localChatRoom.chatRoom.userPublicKey, @@ -133,17 +128,17 @@ class DatabaseChatRepository( override fun updateChatRoomSubject( publicKey: String, subject: String - ): ChatRoom? { + ): at.torch.compose.database.model.ChatRoom? { // TODO: Update chatRoom with subject... return null } - override suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow { + override suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow { return database.giftWrapPayloadDao().observeUnsealedGiftWrapPayloads(publicKey) } override suspend fun sealGiftWrapPayload( - giftWrapPayload: GiftWrapPayload, + giftWrapPayload: at.torch.compose.database.model.GiftWrapPayload, nostrSignerSync: NostrSignerSync ) { database.participantDao().findParticipantsByChatRoomId(giftWrapPayload.chatRoomId).forEachIndexed { index, participant -> diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseNostrRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseNostrRepository.kt similarity index 79% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseNostrRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseNostrRepository.kt index c295a284..1e3c0007 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseNostrRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseNostrRepository.kt @@ -1,29 +1,10 @@ -package ac.cord.auxiliary.compose.database.repository +package at.torch.compose.database.repository -import ac.cord.auxiliary.compose.database.AuxDatabase -import ac.cord.auxiliary.compose.database.GENESIS_AT -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.RecentSearch -import ac.cord.auxiliary.compose.database.model.Relay -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalBroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalAccount -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowers -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.RelayRepository +import at.torch.compose.database.GENESIS_AT +import at.torch.compose.database.model.BroadcastNostrEventReceipt +import at.torch.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation +import at.torch.compose.database.model.RecentSearch +import at.torch.compose.database.model.UnsignedNostrEvent import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind @@ -68,9 +49,9 @@ import kotlin.time.Clock import kotlin.time.Instant class DatabaseNostrRepository( - private val database: AuxDatabase, + private val database: at.torch.compose.database.TorchDatabase, private val scope: CoroutineScope -): NostrRepository, RelayRepository { +): at.torch.compose.repository.NostrRepository, at.torch.compose.repository.RelayRepository { companion object { const val TAG = "DatabaseNostrRepository" @@ -79,37 +60,37 @@ class DatabaseNostrRepository( val logger = Logger.withTag(TAG) - override suspend fun observeProfile(publicKey: HexKey): Flow { + override suspend fun observeProfile(publicKey: HexKey): Flow { return database.unsignedNostrEventDao().observeProfile(publicKey) } override suspend fun observeRelation( publicKey: HexKey, activePublicKey: HexKey - ): Flow> { + ): Flow> { return database.connectionDao().observeRelation( alicePublicKey = publicKey, bobPublicKey = activePublicKey ) } - override suspend fun deleteConnection(connection: Connection) { + override suspend fun deleteConnection(connection: at.torch.compose.database.model.Connection) { database.connectionDao().delete(connection) } - override suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow { + override suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow { return database.unsignedNostrEventDao().observeUnsignedNostrEvents(publicKey) } - override suspend fun observePendingBroadcastNostrEventRequests(): Flow> { + override suspend fun observePendingBroadcastNostrEventRequests(): Flow> { return database.broadcastNostrEventRequestDao().observeBroadcastNostrEventRequestsByStatus("pending") } - override suspend fun observePendingSynchronizeNostrEventRequests(): Flow { + override suspend fun observePendingSynchronizeNostrEventRequests(): Flow { return database.synchronizeNostrEventRequestDao().observeSynchronizeNostrEventRequestsByStatus("pending") } - override suspend fun observePendingNegentropySynchronizeRequests(): Flow { + override suspend fun observePendingNegentropySynchronizeRequests(): Flow { return database.negentropySynchronizeRequestDao().observeNegentropySynchronizeRequestsByStatus("pending") } @@ -124,7 +105,7 @@ class DatabaseNostrRepository( ) val unsignedNostrEvents = mutableListOf( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = profileEventTemplate.kind, createdAt = Instant.fromEpochSeconds(profileEventTemplate.createdAt), @@ -139,7 +120,7 @@ class DatabaseNostrRepository( followUsers.map { it.toTagArray() } unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = ContactListEvent.KIND, tags = contactListTagList.toTypedArray(), @@ -150,21 +131,22 @@ class DatabaseNostrRepository( ) unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = ChatMessageRelayListEvent.KIND, tags = ChatMessageRelayListEvent.createTagArray( - Relays.DefaultDMRelayList + _root_ide_package_.at.torch.compose.nostr.Relays.DefaultDMRelayList ), content = "" ) ) unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = AdvertisedRelayListEvent.KIND, - tags = Relays.DefaultNIP65List.map{ it.toTagArray() }.toTypedArray(), + tags = _root_ide_package_.at.torch.compose.nostr.Relays.DefaultNIP65List.map { it.toTagArray() } + .toTypedArray(), content = "" ) ) @@ -172,10 +154,14 @@ class DatabaseNostrRepository( unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = SearchRelayListEvent.KIND, - tags = Relays.DefaultSearchRelayList.map{ RelayTag.assemble(it) } + tags = _root_ide_package_.at.torch.compose.nostr.Relays.DefaultSearchRelayList.map { + RelayTag.assemble( + it + ) + } .plus( SearchRelayListEvent.ALT_TAG ).toTypedArray(), @@ -185,17 +171,21 @@ class DatabaseNostrRepository( ) unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = IndexerRelayListEvent.KIND, tags = arrayOf(AltTag.assemble(IndexerRelayListEvent.ALT)), - privateTags = Relays.DefaultIndexerRelayList.map { RelayTag.assemble(it) }.toTypedArray() , + privateTags = _root_ide_package_.at.torch.compose.nostr.Relays.DefaultIndexerRelayList.map { + RelayTag.assemble( + it + ) + }.toTypedArray(), content = "" ) ) unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = ChannelListEvent.KIND, tags = arrayOf( @@ -203,19 +193,24 @@ class DatabaseNostrRepository( ChannelListEvent.ALT ) ), - privateTags = Relays.DefaultChannels.map { it.toTagArray() }.toTypedArray(), + privateTags = _root_ide_package_.at.torch.compose.nostr.Relays.DefaultChannels.map { it.toTagArray() } + .toTypedArray(), content = "" ) ) unsignedNostrEvents.add( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = RelayFeedsListEvent.KIND, tags = arrayOf( AltTag.assemble(RelayFeedsListEvent.ALT) ), - privateTags = Relays.DefaultGlobalRelays.map { RelayTag.assemble(it)}.toTypedArray(), + privateTags = _root_ide_package_.at.torch.compose.nostr.Relays.DefaultGlobalRelays.map { + RelayTag.assemble( + it + ) + }.toTypedArray(), content = "" ) ) @@ -229,13 +224,13 @@ class DatabaseNostrRepository( val profileEventTemplate = MetadataEvent.createNew() saveUnsignedNostrEvent( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = profileEventTemplate.kind, createdAt = Instant.fromEpochSeconds(profileEventTemplate.createdAt), tags = profileEventTemplate.tags, content = profileEventTemplate.content, - signedAt = GENESIS_AT // This will keep us from trying to sign this event... but we should automatically sync the npub profile + signedAt = _root_ide_package_.ac.cord.compose.database.GENESIS_AT // This will keep us from trying to sign this event... but we should automatically sync the npub profile ) ) } @@ -243,8 +238,8 @@ class DatabaseNostrRepository( publicKey: HexKey, mentionedPublicKeys: List, textInput: String, - inReplyToNostrEvent: LocalNostrEvent?, - quotedNostrEvent: LocalNostrEvent?, + inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, + quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, onError: () -> Unit, onSuccess: () -> Unit ) { @@ -334,7 +329,7 @@ class DatabaseNostrRepository( val unsignedNostrEvent = saveUnsignedNostrEvent( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = publicKey, kind = textNote.kind, createdAt = Instant.fromEpochSeconds(textNote.createdAt), @@ -358,7 +353,7 @@ class DatabaseNostrRepository( } } - override suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: UnsignedNostrEvent): UnsignedNostrEvent? = try { + override suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent): at.torch.compose.database.model.UnsignedNostrEvent? = try { logger.d("Save unsigned: ${unsignedNostrEvent.kind}") // TODO: We can actually check the unsignedNostrEvent.pubKey for support... if it's writeable if (unsignedNostrEvent.kind == MetadataEvent.KIND){ @@ -373,7 +368,7 @@ class DatabaseNostrRepository( null } - override suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) { + override suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) { logger.d("saveUnsignedNostrEvents: $unsignedNostrEvents") delay(2_100) @@ -387,8 +382,8 @@ class DatabaseNostrRepository( } override suspend fun publishNostrEvent( - unsignedNostrEvent: UnsignedNostrEvent, - nostrEvent: NostrEvent, + unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURLs: List, activeKeyPair: KeyPair ) { @@ -401,7 +396,7 @@ class DatabaseNostrRepository( } override suspend fun broadcastProcessed( - broadcastNostrEventRequest: BroadcastNostrEventRequest, + broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest, status: String ) { database.broadcastNostrEventRequestDao().upsert( @@ -412,7 +407,7 @@ class DatabaseNostrRepository( if (status == "published") { val broadcastNostrEventReceiptId = database.broadcastNostrEventReceiptDao().upsert( - BroadcastNostrEventReceipt( + _root_ide_package_.ac.cord.compose.database.model.BroadcastNostrEventReceipt( nostrEventId = broadcastNostrEventRequest.nostrEventId, unsignedNostrEventId = broadcastNostrEventRequest.unsignedNostrEventId, isAccepted = true, @@ -425,7 +420,7 @@ class DatabaseNostrRepository( )?.let { chatMessageBroadcastNostrEventRequestRelation -> // This is actually a chatMessage related broadcast event... database.chatMessageBroadcastNostrEventReceiptRelationDao().upsert( - ChatMessageBroadcastNostrEventReceiptRelation( + _root_ide_package_.ac.cord.compose.database.model.ChatMessageBroadcastNostrEventReceiptRelation( chatMessageId = chatMessageBroadcastNostrEventRequestRelation.chatMessageId, broadcastNostrEventReceiptId = broadcastNostrEventReceiptId ) @@ -434,7 +429,7 @@ class DatabaseNostrRepository( } } - override suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: SynchronizeNostrEventRequest) { + override suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest) { database.synchronizeNostrEventRequestDao().upsert( synchronizeNostrEventRequest.copy( status = "sent", @@ -443,7 +438,7 @@ class DatabaseNostrRepository( ) } - override suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: NegentropySynchronizeRequest) { + override suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest) { database.negentropySynchronizeRequestDao().upsert( negentropySynchronizeRequest.copy( status = "sent", @@ -452,15 +447,15 @@ class DatabaseNostrRepository( ) } - override suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: BroadcastNostrEventReceipt) { + override suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: at.torch.compose.database.model.BroadcastNostrEventReceipt) { database.broadcastNostrEventReceiptDao().upsert( broadcastNostrEventReceipt ) } override suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - synchronizeNostrEventRequest: SynchronizeNostrEventRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair, ) { @@ -491,8 +486,8 @@ class DatabaseNostrRepository( } override suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - negentropySynchronizeRequest: NegentropySynchronizeRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair ) { @@ -521,14 +516,14 @@ class DatabaseNostrRepository( } override suspend fun queueSynchronizeNostrEvent( - synchronizeNostrEventRequests: List, + synchronizeNostrEventRequests: List, ) { database.synchronizeNostrEventRequestDao().insert( synchronizeNostrEventRequests ) } - override suspend fun queueNegentropySynchronizeRequest(negentropySynchronizeRequests: List) { + override suspend fun queueNegentropySynchronizeRequest(negentropySynchronizeRequests: List) { database.negentropySynchronizeRequestDao().insert( negentropySynchronizeRequests ) @@ -541,14 +536,14 @@ class DatabaseNostrRepository( ) } - override suspend fun getNostrEvent(publicKey: HexKey, kind: Kind): NostrEvent? { + override suspend fun getNostrEvent(publicKey: HexKey, kind: Kind): at.torch.compose.database.model.NostrEvent? { return database.nostrEventDao().getNostrEventByPublicKeyAndKind( publicKey = publicKey, kind = kind ) } - override suspend fun observeNostrFeed(): Flow> { + override suspend fun observeNostrFeed(): Flow> { return database.nostrEventDao().observeNostrEvents( kinds = arrayOf( TextNoteEvent.KIND, @@ -559,7 +554,7 @@ class DatabaseNostrRepository( ) } - override suspend fun observeNostrFeed(synchronizationFilter: SynchronizationFilter): Flow> { + override suspend fun observeNostrFeed(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter): Flow> { return when { synchronizationFilter.kinds != null && synchronizationFilter.search != null -> { logger.d("observeFilteredNostrEvents: $synchronizationFilter") @@ -609,9 +604,9 @@ class DatabaseNostrRepository( } override suspend fun getNostrFeedIds( - synchronizationFilters: Array, + synchronizationFilters: Array, applyLimits: Boolean - ): List { + ): List { if (synchronizationFilters.size == 1) { val synchronizationFilter = synchronizationFilters.first() @@ -621,7 +616,7 @@ class DatabaseNostrRepository( database.nostrEventDao().getFilteredNostrEvents( kinds = synchronizationFilter.kinds, search = synchronizationFilter.search, - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -634,7 +629,7 @@ class DatabaseNostrRepository( database.nostrEventDao().getFilteredNostrEvents( kinds = synchronizationFilter.kinds, ids = synchronizationFilter.ids, - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -646,7 +641,7 @@ class DatabaseNostrRepository( logger.d("getNostrEventsByIds($applyLimits): $synchronizationFilter") database.nostrEventDao().getNostrEventsByIds( ids = synchronizationFilter.ids, - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -659,7 +654,7 @@ class DatabaseNostrRepository( database.nostrEventDao().getAuthoredNostrEvents( kinds = synchronizationFilter.kinds, authors = synchronizationFilter.authors, - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -685,7 +680,7 @@ class DatabaseNostrRepository( database.nostrEventDao().getPublicKeyMentionedNostrEvents( kinds = synchronizationFilter.kinds, publicKey = synchronizationFilter.tags["p"]?.first()!!, - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -699,7 +694,7 @@ class DatabaseNostrRepository( kinds = arrayOf( TextNoteEvent.KIND, ), - since = synchronizationFilter.since ?: GENESIS_AT, + since = synchronizationFilter.since ?: _root_ide_package_.ac.cord.compose.database.GENESIS_AT, limit = if (applyLimits) { synchronizationFilter.limit ?: 50 } else { @@ -714,52 +709,52 @@ class DatabaseNostrRepository( } } - override suspend fun observeLocalNostrEventById(nostrEventId: String): Flow { + override suspend fun observeLocalNostrEventById(nostrEventId: String): Flow { return database.nostrEventDao().observeNostrEventById(nostrEventId) } - override suspend fun searchableProfiles(): List { + override suspend fun searchableProfiles(): List { return database.profileDao().getAllProfiles() } - override suspend fun filterProfiles(searchTerm: String): List { + override suspend fun filterProfiles(searchTerm: String): List { return database.profileDao().filterProfiles(searchTerm = searchTerm) } - override suspend fun observeProfileWithFollowers(publicKey: String): Flow { + override suspend fun observeProfileWithFollowers(publicKey: String): Flow { return database.profileDao().observeProfileWithFollowersByPublicKey(publicKey) } - override suspend fun observeProfileWithFollowing(publicKey: String): Flow { + override suspend fun observeProfileWithFollowing(publicKey: String): Flow { return database.profileDao().observeProfileWithFollowingByPublicKey(publicKey) } - override suspend fun getRecentSearches(): List { + override suspend fun getRecentSearches(): List { return database.recentSearchDao().getAllRecentSearches() } - override suspend fun removeRecentSearch(recentSearch: RecentSearch) { + override suspend fun removeRecentSearch(recentSearch: at.torch.compose.database.model.RecentSearch) { database.recentSearchDao().deleteRecentSearch(recentSearch) } override suspend fun saveSearchQuery( query: String, - synchronizationFilterArray: SynchronizationFilterArray? + synchronizationFilterArray: at.torch.compose.database.model.typealiases.SynchronizationFilterArray? ) { database.recentSearchDao().upsert( - RecentSearch( + _root_ide_package_.ac.cord.compose.database.model.RecentSearch( query = query, synchronizationFilters = synchronizationFilterArray ) ) } - override suspend fun observePublicKeyRelays(publicKey: String): Flow> { + override suspend fun observePublicKeyRelays(publicKey: String): Flow> { return database.relayDao().observePublicKeyRelays(publicKey) } - override suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) { + override suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) { database.broadcastNostrEventRequestDao().insert( broadcastNostrEventRequests ) diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabasePostRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabasePostRepository.kt new file mode 100644 index 00000000..556e504c --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabasePostRepository.kt @@ -0,0 +1,7 @@ +package at.torch.compose.database.repository + +class DatabasePostRepository( + private val database: at.torch.compose.database.TorchDatabase +): at.torch.compose.repository.PostRepository { + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseSearchRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseSearchRepository.kt new file mode 100644 index 00000000..f253569c --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/repository/DatabaseSearchRepository.kt @@ -0,0 +1,12 @@ +package at.torch.compose.database.repository + +class DatabaseSearchRepository( + private val database: at.torch.compose.database.TorchDatabase +): at.torch.compose.repository.SearchRepository { + + override suspend fun submitSearch(synchronizeNostrEventRequests: List) { + database.synchronizeNostrEventRequestDao().insert( + synchronizeNostrEventRequests = synchronizeNostrEventRequests + ) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapImpersonationException.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapImpersonationException.kt index 18f930b6..d0a84d0d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapImpersonationException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions open class GiftWrapImpersonationException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapSealDecryptionException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapSealDecryptionException.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapSealDecryptionException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapSealDecryptionException.kt index 815e4b6e..d255b77d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapSealDecryptionException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapSealDecryptionException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions open class GiftWrapSealDecryptionException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapUnsealException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapUnsealException.kt similarity index 71% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapUnsealException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapUnsealException.kt index 7a35c38c..555b1cd7 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapUnsealException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/GiftWrapUnsealException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions open class GiftWrapUnsealException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/InvalidNostrPrivateKeyException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/InvalidNostrPrivateKeyException.kt new file mode 100644 index 00000000..673f5eb0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/InvalidNostrPrivateKeyException.kt @@ -0,0 +1,3 @@ +package at.torch.compose.exceptions + +class InvalidNostrPrivateKeyException: RuntimeException() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NetworkException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NetworkException.kt similarity index 50% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NetworkException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NetworkException.kt index 17561c1c..ba9c387f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NetworkException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NetworkException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions class NetworkException( message: String? = null, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrNoticeException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrNoticeException.kt similarity index 50% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrNoticeException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrNoticeException.kt index 82b6562b..b17bfd1e 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrNoticeException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrNoticeException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions class NostrNoticeException( val reason: String?, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrPublishException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrPublishException.kt similarity index 51% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrPublishException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrPublishException.kt index dcb4c436..6a963bf8 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/NostrPublishException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/NostrPublishException.kt @@ -1,3 +1,3 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions class NostrPublishException(override val cause: Throwable?) : RuntimeException() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SignatureException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SignatureException.kt similarity index 70% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SignatureException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SignatureException.kt index 3dd164ba..99005360 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SignatureException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SignatureException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions open class SignatureException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningKeyNotFoundException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningKeyNotFoundException.kt similarity index 74% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningKeyNotFoundException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningKeyNotFoundException.kt index ed3d6825..368f3821 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningKeyNotFoundException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningKeyNotFoundException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions class SigningKeyNotFoundException(message: String? = null, cause: Throwable? = null) : SignatureException( message, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningRejectedException.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningRejectedException.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningRejectedException.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningRejectedException.kt index b694a5ff..3eaed748 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/SigningRejectedException.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/exceptions/SigningRejectedException.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.exceptions +package at.torch.compose.exceptions class SigningRejectedException(message: String? = null, cause: Throwable? = null) : SignatureException(message, cause) { } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Credentials.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Credentials.kt similarity index 91% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Credentials.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Credentials.kt index 2bbf2335..8bf26136 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Credentials.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Credentials.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.extensions +package at.torch.compose.extensions -import ac.cord.auxiliary.compose.exceptions.InvalidNostrPrivateKeyException +import at.torch.compose.exceptions.InvalidNostrPrivateKeyException import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip19Bech32.bech32.Bech32 import fr.acinq.bitcoin.PrivateKey @@ -66,6 +66,6 @@ fun String.extractKeyPairFromPrivateKeyOrThrow(): Pair { nsec to pubkey.toNpub() } catch (error: IllegalArgumentException) { Logger.withTag("String.extractKeyPairFromPrivateKeyOrThrow").w(error) { error.message ?: "" } - throw InvalidNostrPrivateKeyException() + throw _root_ide_package_.ac.cord.compose.exceptions.InvalidNostrPrivateKeyException() } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Instant.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Instant.kt similarity index 93% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Instant.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Instant.kt index 11ff8419..34c9220f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Instant.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Instant.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.extensions +package at.torch.compose.extensions import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Phoenix.kt similarity index 91% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Phoenix.kt index 705288c3..8fdfdfc0 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/extensions/Phoenix.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.extensions +package at.torch.compose.extensions import fr.acinq.phoenix.PhoenixGlobal import fr.acinq.phoenix.data.StartBusinessResult diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/managers/AuxDatabaseManager.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/managers/AuxDatabaseManager.kt new file mode 100644 index 00000000..5052d158 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/managers/AuxDatabaseManager.kt @@ -0,0 +1,28 @@ +package at.torch.compose.managers + +import at.torch.compose.database.builder.getRoomDatabase + +class AuxDatabaseManager( + torchGlobal: at.torch.compose.TorchGlobal +) { + val auxDatabase by lazy { + _root_ide_package_.ac.cord.compose.database.builder.getRoomDatabase( + _root_ide_package_.at.torch.compose.database.builder.PlatformDatabaseBuilder.getDatabaseBuilder( + torchGlobal.platformContext + ) + ) + } + + /** + * Dynamic data like user feeds and the likes will be in a in-memory db. + * + * We may also decide to just use the normal DB and manage what's saved better... + */ + val inMemoryAuxDatabase by lazy { + _root_ide_package_.ac.cord.compose.database.builder.getRoomDatabase( + _root_ide_package_.at.torch.compose.database.builder.PlatformDatabaseBuilder.getInMemoryDatabaseBuilder( + torchGlobal.platformContext + ) + ) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/UserAgent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/UserAgent.kt similarity index 79% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/UserAgent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/UserAgent.kt index 151e30fe..6d9b7b56 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/UserAgent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/UserAgent.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network +package at.torch.compose.network object UserAgent { const val APP_NAME = "Aux" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/dto/RelayDTO.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/dto/RelayDTO.kt similarity index 79% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/dto/RelayDTO.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/dto/RelayDTO.kt index 99cf1a9f..27f30d95 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/dto/RelayDTO.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/dto/RelayDTO.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.network.dto +package at.torch.compose.network.dto -import ac.cord.auxiliary.compose.database.model.Relay -import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import kotlinx.serialization.Serializable @Serializable @@ -31,7 +29,7 @@ data class RelayDTO( } } -fun Relay.mapToRelayDTO() = +fun at.torch.compose.database.model.Relay.mapToRelayDTO() = RelayDTO( url = this.url, read = this.read, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/FallbackRelays.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/FallbackRelays.kt similarity index 71% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/FallbackRelays.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/FallbackRelays.kt index 4dfb62e7..fa4312de 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/FallbackRelays.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/FallbackRelays.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.network.relays +package at.torch.compose.network.relays -import ac.cord.auxiliary.compose.network.dto.toRelayDTO +import at.torch.compose.network.dto.toRelayDTO val FALLBACK_RELAYS = listOf( "wss://relay.primal.net", diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/NostrPublishResult.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/NostrPublishResult.kt similarity index 54% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/NostrPublishResult.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/NostrPublishResult.kt index ca917685..bb4c6a56 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/NostrPublishResult.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/NostrPublishResult.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.network.relays +package at.torch.compose.network.relays -import ac.cord.auxiliary.compose.network.sockets.NostrIncomingMessage +import at.torch.compose.network.sockets.NostrIncomingMessage data class NostrPublishResult( val result: NostrIncomingMessage? = null, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelayPool.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelayPool.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelayPool.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelayPool.kt index 6a6b7fe3..7032c6be 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelayPool.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelayPool.kt @@ -1,9 +1,7 @@ -package ac.cord.auxiliary.compose.network.relays +package at.torch.compose.network.relays -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.exceptions.NetworkException -import ac.cord.auxiliary.compose.exceptions.NostrNoticeException -import ac.cord.auxiliary.compose.network.dto.RelayDTO +import at.torch.compose.exceptions.NetworkException +import at.torch.compose.exceptions.NostrNoticeException import androidx.annotation.VisibleForTesting import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope @@ -18,16 +16,9 @@ import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.timeout import kotlinx.coroutines.flow.transform import kotlinx.coroutines.launch -import ac.cord.auxiliary.compose.exceptions.NostrPublishException -import ac.cord.auxiliary.compose.network.dto.toRelayDTO -import ac.cord.auxiliary.compose.network.sockets.NostrIncomingMessage -import ac.cord.auxiliary.compose.network.sockets.NostrSocketClient -import ac.cord.auxiliary.compose.network.sockets.NostrSocketClientFactory -import ac.cord.auxiliary.compose.network.sockets.SocketConnectionClosedCallback -import ac.cord.auxiliary.compose.network.sockets.SocketConnectionOpenedCallback -import ac.cord.auxiliary.compose.network.sockets.filterByEventId -import ac.cord.auxiliary.compose.network.sockets.filterBySubscriptionId -import ac.cord.auxiliary.compose.repository.CachingImportRepository +import at.torch.compose.network.dto.toRelayDTO +import at.torch.compose.network.sockets.filterByEventId +import at.torch.compose.network.sockets.filterBySubscriptionId import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.OptimizedJsonMapper import com.vitorpamplona.quartz.nip01Core.relay.commands.toRelay.CloseCmd @@ -48,8 +39,8 @@ import kotlinx.coroutines.sync.withLock * https://github.com/PrimalHQ/primal-android-app/blob/8a912053131764c39711cd0dc5012645498c9a4f/app/src/main/kotlin/net/primal/android/networking/relays/RelayPool.kt */ class RelayPool( - private val nostrSocketClientFactory: NostrSocketClientFactory, - private val cachingImportRepository: CachingImportRepository, + private val nostrSocketClientFactory: at.torch.compose.network.sockets.NostrSocketClientFactory, + private val cachingImportRepository: at.torch.compose.repository.CachingImportRepository, ) { val logger = Logger.withTag("RelayPool") @@ -59,12 +50,12 @@ class RelayPool( private val scope = CoroutineScope(Dispatchers.IO) - val relays: MutableSet = mutableSetOf() + val relays: MutableSet = mutableSetOf() private val relayMutex = Mutex() @VisibleForTesting - var socketClients = setOf() + var socketClients = setOf() private val _relayPoolStatus = MutableStateFlow(mapOf()) val relayPoolStatus = _relayPoolStatus.asStateFlow() @@ -75,15 +66,15 @@ class RelayPool( } } - private val onSocketConnectionOpenedCallback: SocketConnectionOpenedCallback = { url -> + private val onSocketConnectionOpenedCallback: at.torch.compose.network.sockets.SocketConnectionOpenedCallback = { url -> updateRelayStatus(url = url, connected = true) } - private val onSocketConnectionClosedCallback: SocketConnectionClosedCallback = { url, _ -> + private val onSocketConnectionClosedCallback: at.torch.compose.network.sockets.SocketConnectionClosedCallback = { url, _ -> updateRelayStatus(url = url, connected = false) } - fun changeRelays(relays: List) { + fun changeRelays(relays: List) { val existingRelayUrls = socketClients.map { it.socketUrl } val newRelayUrls = relays.map { it.url } @@ -105,7 +96,7 @@ class RelayPool( this.relays.addAll(relays) } - fun removeRelays(relays: Set) { + fun removeRelays(relays: Set) { val relayUrls = relays.map { it.url } val toRemoveSocketClients = socketClients.filter { it.socketUrl in relayUrls } @@ -122,7 +113,7 @@ class RelayPool( this.relays.removeAll(relays) } - suspend fun addRelaysIfMissing(relays: Set) { + suspend fun addRelaysIfMissing(relays: Set) { relayMutex.withLock { val existingRelayUrls = socketClients.map { NormalizedRelayUrl(it.socketUrl).displayUrl() } val newRelayUrls = relays.map { it.url } @@ -159,7 +150,7 @@ class RelayPool( } } - private fun List.mapAsNostrSocketClient() = + private fun List.mapAsNostrSocketClient() = this.map { nostrSocketClientFactory.create( wssUrl = it.url, @@ -168,8 +159,8 @@ class RelayPool( ) } - @Throws(NostrPublishException::class) - suspend fun publishEvent(nostrEvent: NostrEvent, relays: Set = emptySet()): Flow { + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class) + suspend fun publishEvent(nostrEvent: at.torch.compose.database.model.NostrEvent, relays: Set = emptySet()): Flow { val relayUrls = relays.map { NormalizedRelayUrl(it.url).displayUrl() } return if (relayUrls.isEmpty()) { @@ -186,7 +177,7 @@ class RelayPool( } } - suspend fun query(reqCommand: ReqCmd, relayUrl: String): Flow { + suspend fun query(reqCommand: ReqCmd, relayUrl: String): Flow { addRelaysIfMissing( setOf( NormalizedRelayUrl(relayUrl).url.toRelayDTO() @@ -199,7 +190,7 @@ class RelayPool( val filterRequest = OptimizedJsonMapper.toJson(reqCommand) if (nostrSocketClient == null) { - throw NetworkException("$relayUrl is not connected") + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException("$relayUrl is not connected") } return coroutineScope { val eventFlow = nostrSocketClient.queryAsFlow(reqCommand.subId) @@ -210,7 +201,7 @@ class RelayPool( } } - suspend fun negentropySync(negOpenCmd: NegOpenCmd, relayUrl: String): Flow { + suspend fun negentropySync(negOpenCmd: NegOpenCmd, relayUrl: String): Flow { addRelaysIfMissing( setOf( NormalizedRelayUrl(relayUrl).url.toRelayDTO() @@ -223,7 +214,7 @@ class RelayPool( val negentropySyncRequest = OptimizedJsonMapper.toJson(negOpenCmd) if (nostrSocketClient == null) { - throw NetworkException("$relayUrl is not connected") + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException("$relayUrl is not connected") } return coroutineScope { val eventFlow = nostrSocketClient.queryAsFlow(negOpenCmd.subId) @@ -246,7 +237,7 @@ class RelayPool( val closeSubscription = OptimizedJsonMapper.toJson(closeCmd) if (nostrSocketClient == null) { - throw NetworkException("$relayUrl is not connected") + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException("$relayUrl is not connected") } coroutineScope { with(nostrSocketClient) { @@ -268,7 +259,7 @@ class RelayPool( val closeNegentropySubscription = OptimizedJsonMapper.toJson(negCloseCmd) if (nostrSocketClient == null) { - throw NetworkException("$relayUrl is not connected") + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException("$relayUrl is not connected") } coroutineScope { with(nostrSocketClient) { @@ -277,21 +268,21 @@ class RelayPool( } } - private fun Flow.transformWhileEventsAreIncoming() = + private fun Flow.transformWhileEventsAreIncoming() = transformWhile { emit(it) - it is NostrIncomingMessage.EventMessage || it is NostrIncomingMessage.EventsMessage + it is at.torch.compose.network.sockets.NostrIncomingMessage.EventMessage || it is at.torch.compose.network.sockets.NostrIncomingMessage.EventsMessage } @OptIn(FlowPreview::class) - private suspend fun NostrSocketClient.queryAsFlow(subscriptionId: String): Flow { + private suspend fun at.torch.compose.network.sockets.NostrSocketClient.queryAsFlow(subscriptionId: String): Flow { return this.incomingMessages .filterBySubscriptionId(id = subscriptionId) // .transformWhileEventsAreIncoming() } @OptIn(FlowPreview::class) - private suspend fun handlePublishEventToRelays(relayConnections: Set, nostrEvent: NostrEvent): Flow { + private suspend fun handlePublishEventToRelays(relayConnections: Set, nostrEvent: at.torch.compose.database.model.NostrEvent): Flow { val responseFlow = MutableSharedFlow() relayConnections.forEach { nostrSocketClient -> scope.launch { @@ -340,13 +331,15 @@ class RelayPool( } @FlowPreview - private suspend fun NostrSocketClient.collectPublishResponse(eventId: String): NostrIncomingMessage.OkMessage { + private suspend fun at.torch.compose.network.sockets.NostrSocketClient.collectPublishResponse(eventId: String): at.torch.compose.network.sockets.NostrIncomingMessage.OkMessage { return incomingMessages .filterByEventId(id = eventId) .transform { when (it) { - is NostrIncomingMessage.OkMessage -> emit(it) - is NostrIncomingMessage.NoticeMessage -> throw NostrNoticeException(reason = it.message) + is at.torch.compose.network.sockets.NostrIncomingMessage.OkMessage -> emit(it) + is at.torch.compose.network.sockets.NostrIncomingMessage.NoticeMessage -> throw _root_ide_package_.ac.cord.compose.exceptions.NostrNoticeException( + reason = it.message + ) else -> error("$it is not allowed") } } @@ -355,6 +348,6 @@ class RelayPool( } private fun NostrPublishResult.isSuccessful(): Boolean { - return result is NostrIncomingMessage.OkMessage && result.success + return result is at.torch.compose.network.sockets.NostrIncomingMessage.OkMessage && result.success } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelaysSocketManager.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelaysSocketManager.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelaysSocketManager.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelaysSocketManager.kt index df28b5eb..a996332f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/RelaysSocketManager.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/RelaysSocketManager.kt @@ -1,11 +1,5 @@ -package ac.cord.auxiliary.compose.network.relays +package at.torch.compose.network.relays -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.network.dto.RelayDTO -import ac.cord.auxiliary.compose.network.dto.mapToRelayDTO -import ac.cord.auxiliary.compose.network.sockets.NostrSocketClientFactory -import ac.cord.auxiliary.compose.repository.CachingImportRepository -import ac.cord.auxiliary.compose.repository.RelayRepository import co.touchlab.kermit.Logger import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope @@ -15,16 +9,13 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import ac.cord.auxiliary.compose.exceptions.NostrPublishException -import ac.cord.auxiliary.compose.network.sockets.NostrIncomingMessage +import at.torch.compose.network.dto.mapToRelayDTO import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.relay.commands.toRelay.CloseCmd import com.vitorpamplona.quartz.nip01Core.relay.commands.toRelay.ReqCmd import com.vitorpamplona.quartz.nip77Negentropy.NegCloseCmd import com.vitorpamplona.quartz.nip77Negentropy.NegOpenCmd import fr.acinq.phoenix.data.ActiveWallet -import fr.acinq.phoenix.managers.WalletManager -import fr.acinq.phoenix.managers.nostrPrivateKey import fr.acinq.phoenix.managers.nostrPublicKey import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow @@ -38,9 +29,9 @@ import kotlinx.coroutines.flow.collectLatest */ class RelaysSocketManager constructor( private val activeWalletStateFlow: StateFlow, - private val nostrSocketClientFactory: NostrSocketClientFactory, - private val cachingImportRepository: CachingImportRepository, - private val relayRepository: RelayRepository, + private val nostrSocketClientFactory: at.torch.compose.network.sockets.NostrSocketClientFactory, + private val cachingImportRepository: at.torch.compose.repository.CachingImportRepository, + private val relayRepository: at.torch.compose.repository.RelayRepository, ) { val logger = Logger.withTag("RelaysSocketManager") private val scope = CoroutineScope(Dispatchers.IO) @@ -57,7 +48,7 @@ class RelaysSocketManager constructor( /** * Logical relayPool */ - private val userRelays = mutableSetOf() + private val userRelays = mutableSetOf() val userRelayPoolStatus = relayPool.relayPoolStatus @@ -96,7 +87,7 @@ class RelaysSocketManager constructor( } } - private suspend fun updateRelayPools(regularRelays: List?) { + private suspend fun updateRelayPools(regularRelays: List?) { relayPoolsMutex.withLock { val userRelaysChanged = relayPool.relays != regularRelays if (userRelaysChanged && !regularRelays.isNullOrEmpty()) { @@ -110,8 +101,8 @@ class RelaysSocketManager constructor( relayPool.closePool() } - @Throws(NostrPublishException::class) - suspend fun publishEvent(nostrEvent: NostrEvent): Flow { + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class) + suspend fun publishEvent(nostrEvent: at.torch.compose.database.model.NostrEvent): Flow { return if (userRelays.isNotEmpty()) { relayPool.publishEvent( nostrEvent = nostrEvent, @@ -125,8 +116,8 @@ class RelaysSocketManager constructor( } } - @Throws(NostrPublishException::class) - suspend fun publishEvent(nostrEvent: NostrEvent, relays: Set): Flow { + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class) + suspend fun publishEvent(nostrEvent: at.torch.compose.database.model.NostrEvent, relays: Set): Flow { logger.d("publishEvent: $nostrEvent") return relayPool.publishEvent( nostrEvent = nostrEvent, @@ -144,7 +135,7 @@ class RelaysSocketManager constructor( // suspend fun tryConnectingToUserRelay(url: String) = relayPool.tryConnectingToRelay(url) - suspend fun query(reqCommand: ReqCmd, relayUrl: String): Flow { + suspend fun query(reqCommand: ReqCmd, relayUrl: String): Flow { return relayPool.query( reqCommand = reqCommand, relayUrl = relayUrl @@ -159,7 +150,7 @@ class RelaysSocketManager constructor( ) } - suspend fun negentropySync(negOpenCmd: NegOpenCmd, relayUrl: String): Flow { + suspend fun negentropySync(negOpenCmd: NegOpenCmd, relayUrl: String): Flow { return relayPool.negentropySync( negOpenCmd = negOpenCmd, relayUrl = relayUrl diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastEventResponse.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastEventResponse.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastEventResponse.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastEventResponse.kt index 4f805bfd..4eb6dd02 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastEventResponse.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastEventResponse.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.relays.broadcast +package at.torch.compose.network.relays.broadcast import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastRequestBody.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastRequestBody.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastRequestBody.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastRequestBody.kt index ef31ea9f..9747e261 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/relays/broadcast/BroadcastRequestBody.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/relays/broadcast/BroadcastRequestBody.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.relays.broadcast +package at.torch.compose.network.relays.broadcast import com.vitorpamplona.quartz.nip01Core.core.Event import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/CommonJson.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/CommonJson.kt similarity index 95% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/CommonJson.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/CommonJson.kt index 383c20fb..846ab57e 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/CommonJson.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/CommonJson.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.serialization +package at.torch.compose.network.serialization import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonBuilder diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/SocketsJson.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/SocketsJson.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/SocketsJson.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/SocketsJson.kt index 11a9a183..fbf17afc 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/serialization/SocketsJson.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/serialization/SocketsJson.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.network.serialization +package at.torch.compose.network.serialization -import ac.cord.auxiliary.compose.database.model.NostrEvent import co.touchlab.kermit.Logger import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.decodeFromJsonElement @@ -8,7 +7,7 @@ import kotlinx.serialization.json.decodeFromJsonElement internal val SocketsJson = CommonJson -fun JsonObject?.asNostrEventOrNull(): NostrEvent? { +fun JsonObject?.asNostrEventOrNull(): at.torch.compose.database.model.NostrEvent? { return try { if (this != null) SocketsJson.decodeFromJsonElement(this) else null } catch (error: IllegalArgumentException) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessage.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessage.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessage.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessage.kt index c3dd3c9a..78aa5cb8 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessage.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessage.kt @@ -1,14 +1,13 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.exceptions.NetworkException -import ac.cord.auxiliary.compose.exceptions.NostrNoticeException +import at.torch.compose.exceptions.NetworkException +import at.torch.compose.exceptions.NostrNoticeException sealed class NostrIncomingMessage { data class EventMessage( val subscriptionId: String, - val nostrEvent: NostrEvent? = null, + val nostrEvent: at.torch.compose.database.model.NostrEvent? = null, ) : NostrIncomingMessage() data class EoseMessage( @@ -37,7 +36,7 @@ sealed class NostrIncomingMessage { data class EventsMessage( val subscriptionId: String, - val nostrEvents: List = emptyList(), + val nostrEvents: List = emptyList(), ) : NostrIncomingMessage() data class NegentropyMessage( @@ -53,11 +52,11 @@ sealed class NostrIncomingMessage { fun NostrIncomingMessage?.verifyOrThrow(subscriptionId: String) { if (this == null) { - throw NetworkException("No messages received.") + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException("No messages received.") } if (this is NostrIncomingMessage.NoticeMessage) { - throw NostrNoticeException( + throw _root_ide_package_.ac.cord.compose.exceptions.NostrNoticeException( reason = this.message, subscriptionId = subscriptionId, ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageExt.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageExt.kt similarity index 95% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageExt.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageExt.kt index 40196a9a..b8c1f6ab 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageExt.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageExt.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filter diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageParser.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageParser.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageParser.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageParser.kt index b2d64974..01354c03 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrIncomingMessageParser.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrIncomingMessageParser.kt @@ -1,8 +1,7 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.network.serialization.SocketsJson -import ac.cord.auxiliary.compose.network.serialization.decodeFromStringOrNull +import at.torch.compose.network.serialization.SocketsJson +import at.torch.compose.network.serialization.decodeFromStringOrNull import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.Kind @@ -16,7 +15,7 @@ import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive fun String.parseIncomingMessage(): NostrIncomingMessage? { - val jsonArray = SocketsJson.decodeFromStringOrNull(this) + val jsonArray = _root_ide_package_.ac.cord.compose.network.serialization.SocketsJson.decodeFromStringOrNull(this) val verbElement = jsonArray?.elementAtOrNull(0) ?: return null return try { @@ -76,7 +75,7 @@ private fun JsonArray.takeAsEventIncomingMessage(): NostrIncomingMessage? { if (subscriptionId == null || kind == null) return null - val nostrEvent = NostrEvent.fromEvent( + val nostrEvent = _root_ide_package_.at.torch.compose.database.model.NostrEvent.Companion.fromEvent( Event.fromJson( event.toString() ) @@ -94,10 +93,10 @@ private fun JsonArray.takeAsEventsIncomingMessage(): NostrIncomingMessage? { if (subscriptionId == null || events == null) return null - val nostrEvents = mutableListOf() + val nostrEvents = mutableListOf() events.map { it.jsonObject }.forEach { jsonEvent -> - NostrEvent.fromEvent( + _root_ide_package_.at.torch.compose.database.model.NostrEvent.Companion.fromEvent( Event.fromJson( jsonEvent.toString() ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrOutgoingMessageBuilder.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrOutgoingMessageBuilder.kt similarity index 96% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrOutgoingMessageBuilder.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrOutgoingMessageBuilder.kt index 523b5a2c..36027aa1 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrOutgoingMessageBuilder.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrOutgoingMessageBuilder.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.add diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClient.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClient.kt similarity index 94% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClient.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClient.kt index 022157fa..8783908a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClient.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClient.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets import kotlin.coroutines.cancellation.CancellationException import kotlinx.coroutines.flow.SharedFlow diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientFactory.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientFactory.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientFactory.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientFactory.kt index 1837b491..cb4f1d26 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientFactory.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientFactory.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets import io.ktor.client.HttpClient import io.ktor.client.plugins.websocket.WebSockets diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientImpl.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientImpl.kt similarity index 96% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientImpl.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientImpl.kt index 406989f6..7d969194 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrSocketClientImpl.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrSocketClientImpl.kt @@ -1,9 +1,7 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets -import ac.cord.auxiliary.compose.exceptions.NetworkException +import at.torch.compose.exceptions.NetworkException import co.touchlab.kermit.Logger -import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl -import fr.acinq.lightning.channel.states.Normal import io.ktor.client.HttpClient import io.ktor.client.plugins.websocket.webSocketSession import io.ktor.websocket.CloseReason @@ -85,7 +83,7 @@ internal class NostrSocketClientImpl( logger.w("NostrSocketClient::acquireWebSocketSession($socketUrl) failed.", error) close() onSocketConnectionClosed?.invoke(socketUrl, error) - throw NetworkException(cause = error) + throw _root_ide_package_.ac.cord.compose.exceptions.NetworkException(cause = error) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrVerb.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrVerb.kt similarity index 94% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrVerb.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrVerb.kt index 78380951..c8916b18 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/NostrVerb.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/NostrVerb.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/SocketConnectionCallbacks.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/SocketConnectionCallbacks.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/SocketConnectionCallbacks.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/SocketConnectionCallbacks.kt index e0249e42..30d2320d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/network/sockets/SocketConnectionCallbacks.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/network/sockets/SocketConnectionCallbacks.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.network.sockets +package at.torch.compose.network.sockets typealias SocketConnectionOpenedCallback = (url: String) -> Unit typealias SocketConnectionClosedCallback = (url: String, error: Throwable?) -> Unit diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/nostr/Relays.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/nostr/Relays.kt similarity index 98% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/nostr/Relays.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/nostr/Relays.kt index 8596e56f..9abeca41 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/nostr/Relays.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/nostr/Relays.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.nostr +package at.torch.compose.nostr import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer import com.vitorpamplona.quartz.nip28PublicChat.list.tags.ChannelTag diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/repository/CachingImportRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/CachingImportRepository.kt new file mode 100644 index 00000000..d9f0298e --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/CachingImportRepository.kt @@ -0,0 +1,40 @@ +package at.torch.compose.repository + +/** + * As seen in Primal + * + * https://github.com/PrimalHQ/primal-android-app/blob/a7e32e2203555d27e60a749238175cd1ee0fa2af/domain/primal/src/commonMain/kotlin/net/primal/domain/global/CachingImportRepository.kt + * + */ +interface CachingImportRepository { + suspend fun cacheNostrEvents(vararg events: at.torch.compose.database.model.NostrEvent) + suspend fun cacheNostrEvents(events: List) + + suspend fun importEvents(events: List): Boolean + suspend fun broadcastEvents(events: List, relays: List): Result> + + companion object { + val NO_OP_CACHING_IMPORT_REPOSITORY = object : CachingImportRepository { + override suspend fun cacheNostrEvents(vararg events: at.torch.compose.database.model.NostrEvent) { + } + + override suspend fun cacheNostrEvents(events: List) { + + } + + override suspend fun importEvents(events: List): Boolean { + return true + } + + override suspend fun broadcastEvents( + events: List, + relays: List + ): Result> { + return Result.success( + emptyList() + ) + } + + } + } +} diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/ChatRepository.kt similarity index 63% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/ChatRepository.kt index 122aa1c4..f2b72207 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/ChatRepository.kt @@ -1,9 +1,5 @@ -package ac.cord.auxiliary.compose.repository +package at.torch.compose.repository -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.GiftWrapPayload -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatMessage -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerSync @@ -13,55 +9,55 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow interface ChatRepository { - suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> + suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> - suspend fun getChatRoomListByPublicKey(publicKey: String): List + suspend fun getChatRoomListByPublicKey(publicKey: String): List - suspend fun getChatRoomByIdentifier(id: String): LocalChatRoom? + suspend fun getChatRoomByIdentifier(id: String): at.torch.compose.database.model.intermdiate.LocalChatRoom? - suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List + suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List - suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> + suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> suspend fun getOrCreateChatRoom( activeUserPublicKey: HexKey, publicKey: String, relayHint: String?, defaultSubject: String? = null - ): LocalChatRoom? + ): at.torch.compose.database.model.intermdiate.LocalChatRoom? suspend fun getChatMessageRelayForPublicKey(publicKey: HexKey): ChatMessageRelayListEvent? suspend fun sendChatMessage( text: String, - localChatRoom: LocalChatRoom, + localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom, messageType: Kind = ChatMessageEvent.KIND ) - fun updateChatRoomSubject(publicKey: String, subject: String): ChatRoom? + fun updateChatRoomSubject(publicKey: String, subject: String): at.torch.compose.database.model.ChatRoom? - suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow + suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow - suspend fun sealGiftWrapPayload(giftWrapPayload: GiftWrapPayload, nostrSignerSync: NostrSignerSync) + suspend fun sealGiftWrapPayload(giftWrapPayload: at.torch.compose.database.model.GiftWrapPayload, nostrSignerSync: NostrSignerSync) companion object { val NO_OP_CHAT_REPOSITORY = object: ChatRepository { - override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { + override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { return flow { } } - override suspend fun getChatRoomListByPublicKey(publicKey: String): List { + override suspend fun getChatRoomListByPublicKey(publicKey: String): List { return emptyList() } - override suspend fun getChatRoomByIdentifier(id: String): LocalChatRoom? { + override suspend fun getChatRoomByIdentifier(id: String): at.torch.compose.database.model.intermdiate.LocalChatRoom? { return null } - override suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List { + override suspend fun getChatMessageListByChatRoomId(chatRoomId: String): List { return emptyList() } - override suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> { + override suspend fun observeChatMessageListByChatRoomId(chatRoomId: String): Flow> { return flow { } } @@ -71,7 +67,7 @@ interface ChatRepository { publicKey: String, relayHint: String?, defaultSubject: String? - ): LocalChatRoom? { + ): at.torch.compose.database.model.intermdiate.LocalChatRoom? { return null } @@ -81,22 +77,22 @@ interface ChatRepository { override suspend fun sendChatMessage( text: String, - localChatRoom: LocalChatRoom, + localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom, messageType: Kind ) { // TODO("Not yet implemented") } - override fun updateChatRoomSubject(publicKey: String, subject: String): ChatRoom? { + override fun updateChatRoomSubject(publicKey: String, subject: String): at.torch.compose.database.model.ChatRoom? { return null } - override suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow { + override suspend fun observeUnsealedGiftWrapPayloads(publicKey: HexKey): Flow { TODO("Not yet implemented") } override suspend fun sealGiftWrapPayload( - giftWrapPayload: GiftWrapPayload, + giftWrapPayload: at.torch.compose.database.model.GiftWrapPayload, nostrSignerSync: NostrSignerSync ) { TODO("Not yet implemented") diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrNotaryRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrNotaryRepository.kt similarity index 65% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrNotaryRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrNotaryRepository.kt index 662db25d..d54c24fb 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrNotaryRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrNotaryRepository.kt @@ -1,14 +1,10 @@ -package ac.cord.auxiliary.compose.repository +package at.torch.compose.repository -import ac.cord.auxiliary.compose.cryptography.signOrThrow -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.exceptions.SignatureException -import ac.cord.auxiliary.compose.exceptions.SigningKeyNotFoundException -import ac.cord.auxiliary.compose.exceptions.SigningRejectedException -import ac.cord.auxiliary.compose.network.UserAgent -import ac.cord.auxiliary.compose.network.asClientTag -import ac.cord.auxiliary.compose.network.dto.RelayDTO +import at.torch.compose.database.model.UnsignedNostrEvent +import at.torch.compose.exceptions.SigningKeyNotFoundException +import at.torch.compose.exceptions.SigningRejectedException +import at.torch.compose.cryptography.signOrThrow +import at.torch.compose.network.asClientTag import com.vitorpamplona.quartz.nip19Bech32.toNsec import com.vitorpamplona.quartz.nip51Lists.relayLists.RelayFeedsListEvent import fr.acinq.phoenix.managers.WalletManager @@ -43,10 +39,10 @@ class NostrNotaryRepository( private val _responses = Channel() private fun setResponse(response: SignResult) = scope.launch { _responses.send(response) } - suspend fun signNostrEvent(unsignedNostrEvent: UnsignedNostrEvent): SignResult { + suspend fun signNostrEvent(unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent): SignResult { val result = try { signNostrEvent(publicKey = unsignedNostrEvent.pubKey, event = unsignedNostrEvent) - } catch (error: SignatureException) { + } catch (error: at.torch.compose.exceptions.SignatureException) { return SignResult.Rejected(error) } @@ -60,24 +56,24 @@ class NostrNotaryRepository( } } - fun verifySignature(nostrEvent: NostrEvent): Boolean { + fun verifySignature(nostrEvent: at.torch.compose.database.model.NostrEvent): Boolean { throw NotImplementedError() } - fun onSuccess(nostrEvent: NostrEvent) { + fun onSuccess(nostrEvent: at.torch.compose.database.model.NostrEvent) { setResponse(SignResult.Signed(nostrEvent)) } fun onFailure() { - setResponse(SignResult.Rejected(SigningRejectedException())) + setResponse(SignResult.Rejected(_root_ide_package_.ac.cord.compose.exceptions.SigningRejectedException())) } private fun findNsecOrThrow(activeUserPublicKey: String): String = runCatching { walletManager.keyManager.value?.nostrPrivateKey()?.value?.toByteArray()?.toNsec() - }.getOrNull() ?: throw SigningKeyNotFoundException() + }.getOrNull() ?: throw _root_ide_package_.ac.cord.compose.exceptions.SigningKeyNotFoundException() - private fun signNostrEvent(publicKey: String, event: UnsignedNostrEvent): NostrEvent? { + private fun signNostrEvent(publicKey: String, event: at.torch.compose.database.model.UnsignedNostrEvent): at.torch.compose.database.model.NostrEvent? { val isExternalSignerLogin = runCatching { // credentialsStore.isExternalSignerCredential(npub = publicKey.hexToNpubHrp()) false @@ -90,9 +86,9 @@ class NostrNotaryRepository( return event.signOrThrow(nsec = findNsecOrThrow(publicKey)) } - suspend fun signRelayListMetadata(userId: String, relays: List): SignResult { + suspend fun signRelayListMetadata(userId: String, relays: List): SignResult { return signNostrEvent( - unsignedNostrEvent = UnsignedNostrEvent( + unsignedNostrEvent = _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = userId, content = "", kind = RelayFeedsListEvent.KIND, @@ -106,20 +102,21 @@ class NostrNotaryRepository( else -> "" } ) - }.toTypedArray() + listOf(UserAgent.CLIENT_NAME.asClientTag()), + } + .toTypedArray() + listOf(_root_ide_package_.at.torch.compose.network.UserAgent.CLIENT_NAME.asClientTag()), ), ) } sealed class NotarySideEffect { - data class RequestSignature(val unsignedEvent: UnsignedNostrEvent) : NotarySideEffect() + data class RequestSignature(val unsignedEvent: at.torch.compose.database.model.UnsignedNostrEvent) : NotarySideEffect() } sealed class SignResult { - data class Signed(val event: NostrEvent) : SignResult() - data class Rejected(val error: SignatureException) : SignResult() + data class Signed(val event: at.torch.compose.database.model.NostrEvent) : SignResult() + data class Rejected(val error: at.torch.compose.exceptions.SignatureException) : SignResult() - fun unwrapOrThrow(onFailure: ((SignatureException) -> Unit)? = null): NostrEvent = + fun unwrapOrThrow(onFailure: ((at.torch.compose.exceptions.SignatureException) -> Unit)? = null): at.torch.compose.database.model.NostrEvent = when (this) { is Rejected -> { onFailure?.invoke(this.error) @@ -131,7 +128,7 @@ class NostrNotaryRepository( } } - fun getOrNull(onFailure: ((SignatureException) -> Unit)? = null): NostrEvent? = + fun getOrNull(onFailure: ((at.torch.compose.exceptions.SignatureException) -> Unit)? = null): at.torch.compose.database.model.NostrEvent? = when (this) { is Rejected -> { onFailure?.invoke(this.error) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrPublisherRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrPublisherRepository.kt similarity index 61% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrPublisherRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrPublisherRepository.kt index e250d3b8..219c7c16 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrPublisherRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrPublisherRepository.kt @@ -1,17 +1,12 @@ -package ac.cord.auxiliary.compose.repository +package at.torch.compose.repository -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.exceptions.SignatureException -import ac.cord.auxiliary.compose.network.dto.RelayDTO -import ac.cord.auxiliary.compose.network.relays.RelaysSocketManager +import at.torch.compose.network.dto.RelayDTO import co.touchlab.kermit.Logger import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch -import ac.cord.auxiliary.compose.exceptions.NostrPublishException /** * As Seen in Primal @@ -19,14 +14,14 @@ import ac.cord.auxiliary.compose.exceptions.NostrPublishException * https://github.com/PrimalHQ/primal-android-app/blob/ec22916b4e3472a20bade82d53957a7ef9b708b0/app/src/main/kotlin/net/primal/android/nostr/publish/NostrPublisher.kt#L20 */ class NostrPublisherRepository( - private val relaysSocketManager: RelaysSocketManager, + private val relaysSocketManager: at.torch.compose.network.relays.RelaysSocketManager, private val nostrNotary: NostrNotaryRepository, private val cachingImportRepository: CachingImportRepository, ) { val logger = Logger.withTag("NostrPublisherRepository") private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - private fun importEvent(event: NostrEvent) { + private fun importEvent(event: at.torch.compose.database.model.NostrEvent) { scope.launch { runCatching { cachingImportRepository.importEvents(events = listOf(event)) @@ -36,15 +31,21 @@ class NostrPublisherRepository( } } - @Throws(NostrPublishException::class) - private suspend fun publishAndImportEvent(signedNostrEvent: NostrEvent, outboxRelays: List = emptyList()) { + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class) + private suspend fun publishAndImportEvent(signedNostrEvent: at.torch.compose.database.model.NostrEvent, outboxRelays: List = emptyList()) { relaysSocketManager.publishEvent(signedNostrEvent) importEvent(signedNostrEvent) if (outboxRelays.isNotEmpty()) { runCatching { relaysSocketManager.publishEvent( nostrEvent = signedNostrEvent, - relays = outboxRelays.map { RelayDTO(url = it, read = false, write = true) }.toSet(), + relays = outboxRelays.map { + _root_ide_package_.ac.cord.compose.network.dto.RelayDTO( + url = it, + read = false, + write = true + ) + }.toSet(), ) }.onFailure { error -> logger.w(throwable = error) { "Failed to publish to outbox relays." } @@ -52,19 +53,19 @@ class NostrPublisherRepository( } } - @Throws(NostrPublishException::class, SignatureException::class) + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class, _root_ide_package_.at.torch.compose.exceptions.SignatureException::class) suspend fun signPublishImportNostrEvent( - unsignedNostrEvent: UnsignedNostrEvent, + unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, outboxRelays: List, - ): NostrEvent { + ): at.torch.compose.database.model.NostrEvent { val signedNostrEvent = nostrNotary.signNostrEvent(unsignedNostrEvent = unsignedNostrEvent).unwrapOrThrow() publishAndImportEvent(signedNostrEvent = signedNostrEvent, outboxRelays = outboxRelays) return signedNostrEvent } - @Throws(NostrPublishException::class, SignatureException::class) - suspend fun publishRelayList(userId: String, relays: List): NostrEvent { + @Throws(_root_ide_package_.at.torch.compose.exceptions.NostrPublishException::class, _root_ide_package_.at.torch.compose.exceptions.SignatureException::class) + suspend fun publishRelayList(userId: String, relays: List): at.torch.compose.database.model.NostrEvent { val signedNostrEvent = nostrNotary.signRelayListMetadata(userId = userId, relays = relays).unwrapOrThrow() relaysSocketManager.publishEvent(nostrEvent = signedNostrEvent, relays = relays.toSet()) importEvent(signedNostrEvent) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrRepository.kt similarity index 51% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrRepository.kt index 66f38436..ac5876dc 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/NostrRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/NostrRepository.kt @@ -1,41 +1,24 @@ -package ac.cord.auxiliary.compose.repository +package at.torch.compose.repository -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.RecentSearch -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalBroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalAccount -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowers -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.Kind import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair import kotlinx.coroutines.flow.Flow interface NostrRepository { - suspend fun observeProfile(publicKey: HexKey): Flow + suspend fun observeProfile(publicKey: HexKey): Flow - suspend fun observeRelation(publicKey: HexKey, activePublicKey: HexKey): Flow> + suspend fun observeRelation(publicKey: HexKey, activePublicKey: HexKey): Flow> - suspend fun deleteConnection(connection: Connection) + suspend fun deleteConnection(connection: at.torch.compose.database.model.Connection) - suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow + suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow - suspend fun observePendingBroadcastNostrEventRequests(): Flow> + suspend fun observePendingBroadcastNostrEventRequests(): Flow> - suspend fun observePendingSynchronizeNostrEventRequests(): Flow + suspend fun observePendingSynchronizeNostrEventRequests(): Flow - suspend fun observePendingNegentropySynchronizeRequests(): Flow + suspend fun observePendingNegentropySynchronizeRequests(): Flow suspend fun createNewProfile( publicKey: HexKey, @@ -51,120 +34,120 @@ interface NostrRepository { publicKey: HexKey, mentionedPublicKeys: List, textInput: String, - inReplyToNostrEvent: LocalNostrEvent?, - quotedNostrEvent: LocalNostrEvent?, + inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, + quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, onError: () -> Unit, onSuccess: () -> Unit ) - suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: UnsignedNostrEvent): UnsignedNostrEvent? + suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent): at.torch.compose.database.model.UnsignedNostrEvent? - suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) + suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) suspend fun wipeDatabase() suspend fun publishNostrEvent( - unsignedNostrEvent: UnsignedNostrEvent, - nostrEvent: NostrEvent, + unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURLs: List = emptyList(), activeKeyPair: KeyPair ) - suspend fun broadcastProcessed(broadcastNostrEventRequest: BroadcastNostrEventRequest, status: String = "processing") + suspend fun broadcastProcessed(broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest, status: String = "processing") - suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: SynchronizeNostrEventRequest) + suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest) - suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: NegentropySynchronizeRequest) + suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest) - suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: BroadcastNostrEventReceipt) + suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: at.torch.compose.database.model.BroadcastNostrEventReceipt) /** * Save nostrEvent from relays (and index for local viewing)... */ suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - synchronizeNostrEventRequest: SynchronizeNostrEventRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair ) suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - negentropySynchronizeRequest: NegentropySynchronizeRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair ) suspend fun queueSynchronizeNostrEvent( - synchronizeNostrEventRequests: List, + synchronizeNostrEventRequests: List, ) suspend fun queueNegentropySynchronizeRequest( - negentropySynchronizeRequests: List + negentropySynchronizeRequests: List ) suspend fun observeSynchronizeNostrEventRequestByPurposeAndStatusCount(purpose: String): Flow - suspend fun getNostrEvent(publicKey: HexKey, kind: Kind): NostrEvent? + suspend fun getNostrEvent(publicKey: HexKey, kind: Kind): at.torch.compose.database.model.NostrEvent? - suspend fun observeNostrFeed(): Flow> + suspend fun observeNostrFeed(): Flow> - suspend fun observeNostrFeed(synchronizationFilter: SynchronizationFilter): Flow> + suspend fun observeNostrFeed(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter): Flow> suspend fun getNostrFeedIds( - synchronizationFilters: Array, + synchronizationFilters: Array, applyLimits: Boolean = true - ): List + ): List - suspend fun observeLocalNostrEventById(nostrEventId: String): Flow + suspend fun observeLocalNostrEventById(nostrEventId: String): Flow - suspend fun searchableProfiles(): List + suspend fun searchableProfiles(): List - suspend fun filterProfiles(searchTerm: String): List + suspend fun filterProfiles(searchTerm: String): List - suspend fun observeProfileWithFollowers(publicKey: String): Flow + suspend fun observeProfileWithFollowers(publicKey: String): Flow - suspend fun observeProfileWithFollowing(publicKey: String): Flow + suspend fun observeProfileWithFollowing(publicKey: String): Flow - suspend fun getRecentSearches(): List + suspend fun getRecentSearches(): List - suspend fun removeRecentSearch(recentSearch: RecentSearch) + suspend fun removeRecentSearch(recentSearch: at.torch.compose.database.model.RecentSearch) - suspend fun saveSearchQuery(query: String, synchronizationFilterArray: SynchronizationFilterArray? = null) + suspend fun saveSearchQuery(query: String, synchronizationFilterArray: at.torch.compose.database.model.typealiases.SynchronizationFilterArray? = null) - suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) + suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) companion object { val NO_OP_NOSTR_REPOSITORY = object : NostrRepository { - override suspend fun observeProfile(publicKey: HexKey): Flow { + override suspend fun observeProfile(publicKey: HexKey): Flow { TODO("Not yet implemented") } override suspend fun observeRelation( publicKey: HexKey, activePublicKey: HexKey - ): Flow> { + ): Flow> { TODO("Not yet implemented") } - override suspend fun deleteConnection(connection: Connection) { + override suspend fun deleteConnection(connection: at.torch.compose.database.model.Connection) { TODO("Not yet implemented") } - override suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow { + override suspend fun observeUnsignedNostrEvents(publicKey: HexKey): Flow { TODO("Not yet implemented") } - override suspend fun observePendingBroadcastNostrEventRequests(): Flow> { + override suspend fun observePendingBroadcastNostrEventRequests(): Flow> { TODO("Not yet implemented") } - override suspend fun observePendingSynchronizeNostrEventRequests(): Flow { + override suspend fun observePendingSynchronizeNostrEventRequests(): Flow { TODO("Not yet implemented") } - override suspend fun observePendingNegentropySynchronizeRequests(): Flow { + override suspend fun observePendingNegentropySynchronizeRequests(): Flow { TODO("Not yet implemented") } @@ -183,19 +166,19 @@ interface NostrRepository { publicKey: HexKey, mentionedPublicKeys: List, textInput: String, - inReplyToNostrEvent: LocalNostrEvent?, - quotedNostrEvent: LocalNostrEvent?, + inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, + quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, onError: () -> Unit, onSuccess: () -> Unit ) { TODO("Not yet implemented") } - override suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: UnsignedNostrEvent): UnsignedNostrEvent? { + override suspend fun saveUnsignedNostrEvent(unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent): at.torch.compose.database.model.UnsignedNostrEvent? { return null } - override suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) { + override suspend fun saveUnsignedNostrEvents(unsignedNostrEvents: List) { TODO("Not yet implemented") } @@ -203,8 +186,8 @@ interface NostrRepository { } override suspend fun publishNostrEvent( - unsignedNostrEvent: UnsignedNostrEvent, - nostrEvent: NostrEvent, + unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, + nostrEvent: at.torch.compose.database.model.NostrEvent, relayURLs: List, activeKeyPair: KeyPair ) { @@ -212,27 +195,27 @@ interface NostrRepository { } override suspend fun broadcastProcessed( - broadcastNostrEventRequest: BroadcastNostrEventRequest, + broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest, status: String ) { TODO("Not yet implemented") } - override suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: SynchronizeNostrEventRequest) { + override suspend fun synchronizeNostrEventRequestProcessed(synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest) { TODO("Not yet implemented") } - override suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: NegentropySynchronizeRequest) { + override suspend fun negentropySynchronizeRequestProcessed(negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest) { TODO("Not yet implemented") } - override suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: BroadcastNostrEventReceipt) { + override suspend fun saveBroadcastReceipt(broadcastNostrEventReceipt: at.torch.compose.database.model.BroadcastNostrEventReceipt) { TODO("Not yet implemented") } override suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - synchronizeNostrEventRequest: SynchronizeNostrEventRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + synchronizeNostrEventRequest: at.torch.compose.database.model.SynchronizeNostrEventRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair ) { @@ -240,19 +223,19 @@ interface NostrRepository { } override suspend fun saveNostrEvent( - nostrEvent: NostrEvent, - negentropySynchronizeRequest: NegentropySynchronizeRequest, + nostrEvent: at.torch.compose.database.model.NostrEvent, + negentropySynchronizeRequest: at.torch.compose.database.model.NegentropySynchronizeRequest, synchronizationRelayURLs: List, activeKeyPair: KeyPair ) { TODO("Not yet implemented") } - override suspend fun queueSynchronizeNostrEvent(synchronizeNostrEventRequests: List) { + override suspend fun queueSynchronizeNostrEvent(synchronizeNostrEventRequests: List) { TODO("Not yet implemented") } - override suspend fun queueNegentropySynchronizeRequest(negentropySynchronizeRequests: List) { + override suspend fun queueNegentropySynchronizeRequest(negentropySynchronizeRequests: List) { TODO("Not yet implemented") } @@ -263,61 +246,61 @@ interface NostrRepository { override suspend fun getNostrEvent( publicKey: HexKey, kind: Kind - ): NostrEvent? { + ): at.torch.compose.database.model.NostrEvent? { TODO("Not yet implemented") } - override suspend fun observeNostrFeed(): Flow> { + override suspend fun observeNostrFeed(): Flow> { TODO("Not yet implemented") } - override suspend fun observeNostrFeed(synchronizationFilter: SynchronizationFilter): Flow> { + override suspend fun observeNostrFeed(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter): Flow> { TODO("Not yet implemented") } override suspend fun getNostrFeedIds( - synchronizationFilters: Array, + synchronizationFilters: Array, applyLimits: Boolean - ): List { + ): List { TODO("Not yet implemented") } - override suspend fun observeLocalNostrEventById(nostrEventId: String): Flow { + override suspend fun observeLocalNostrEventById(nostrEventId: String): Flow { TODO("Not yet implemented") } - override suspend fun searchableProfiles(): List { + override suspend fun searchableProfiles(): List { TODO("Not yet implemented") } - override suspend fun filterProfiles(searchTerm: String): List { + override suspend fun filterProfiles(searchTerm: String): List { TODO("Not yet implemented") } - override suspend fun observeProfileWithFollowers(publicKey: String): Flow { + override suspend fun observeProfileWithFollowers(publicKey: String): Flow { TODO("Not yet implemented") } - override suspend fun observeProfileWithFollowing(publicKey: String): Flow { + override suspend fun observeProfileWithFollowing(publicKey: String): Flow { TODO("Not yet implemented") } - override suspend fun getRecentSearches(): List { + override suspend fun getRecentSearches(): List { TODO("Not yet implemented") } - override suspend fun removeRecentSearch(recentSearch: RecentSearch) { + override suspend fun removeRecentSearch(recentSearch: at.torch.compose.database.model.RecentSearch) { TODO("Not yet implemented") } override suspend fun saveSearchQuery( query: String, - synchronizationFilterArray: SynchronizationFilterArray? + synchronizationFilterArray: at.torch.compose.database.model.typealiases.SynchronizationFilterArray? ) { TODO("Not yet implemented") } - override suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) { + override suspend fun scheduleBroadcastNostrEventRequests(broadcastNostrEventRequests: List) { TODO("Not yet implemented") } } diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/repository/PostRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/PostRepository.kt new file mode 100644 index 00000000..dc6004d0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/PostRepository.kt @@ -0,0 +1,4 @@ +package at.torch.compose.repository + +interface PostRepository { +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/RelayRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/RelayRepository.kt similarity index 53% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/RelayRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/RelayRepository.kt index 20af3e0d..f389e277 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/RelayRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/RelayRepository.kt @@ -1,8 +1,7 @@ -package ac.cord.auxiliary.compose.repository +package at.torch.compose.repository -import ac.cord.auxiliary.compose.database.model.Relay import kotlinx.coroutines.flow.Flow interface RelayRepository { - suspend fun observePublicKeyRelays(publicKey: String): Flow> + suspend fun observePublicKeyRelays(publicKey: String): Flow> } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/SearchRepository.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/SearchRepository.kt similarity index 54% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/SearchRepository.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/repository/SearchRepository.kt index 33e4ab87..a27a3315 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/SearchRepository.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/repository/SearchRepository.kt @@ -1,16 +1,14 @@ -package ac.cord.auxiliary.compose.repository - -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest +package at.torch.compose.repository interface SearchRepository { suspend fun submitSearch( - synchronizeNostrEventRequests: List, + synchronizeNostrEventRequests: List, ) companion object { val NO_OP_SEARCH_REPOSITORY = object: SearchRepository { - override suspend fun submitSearch(synchronizeNostrEventRequests: List) { + override suspend fun submitSearch(synchronizeNostrEventRequests: List) { TODO("Not yet implemented") } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/BlurHashDecoder.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/BlurHashDecoder.kt similarity index 95% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/BlurHashDecoder.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/BlurHashDecoder.kt index 58c1debd..eb61deaa 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/BlurHashDecoder.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/BlurHashDecoder.kt @@ -1,10 +1,6 @@ -package ac.cord.auxiliary.compose.ui +package at.torch.compose.ui -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb import coil3.Bitmap -import kotlin.math.PI -import kotlin.math.cos import kotlin.math.pow import kotlin.math.withSign diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ChatRoomDetailScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt similarity index 82% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ChatRoomDetailScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt index f9530131..a30c2df4 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ChatRoomDetailScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ChatRoomDetailScreen.kt @@ -1,14 +1,8 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.database.model.ChatRoom -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.ChatRoomDetailMessageListViewModel -import ac.cord.auxiliary.compose.ui.view.model.ChatRoomDetailViewModel -import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailUIState +import at.torch.compose.database.model.ChatRoom +import at.torch.compose.database.model.intermdiate.LocalChatRoom +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -53,12 +47,12 @@ fun ChatRoomDetailScreen( activeUserPublicKey: HexKey, publicKey: String, relayHint: String?, - initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading, - nostrRepository: NostrRepository, - chatRepository: ChatRepository + initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository ) { - val chatRoomDetailViewModel: ChatRoomDetailViewModel = viewModel( - factory = ChatRoomDetailViewModel.factory( + val chatRoomDetailViewModel: at.torch.compose.ui.view.model.ChatRoomDetailViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomDetailViewModel.Companion.factory( publicKey = publicKey, relayHint = relayHint, initialChatRoomDetailUIState = initialChatRoomDetailUIState, @@ -69,7 +63,7 @@ fun ChatRoomDetailScreen( ) when (val chatRoomDetailUIState = chatRoomDetailViewModel.chatRoomDetailUIState) { - ChatRoomDetailUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -82,11 +76,11 @@ fun ChatRoomDetailScreen( ) } } - is ChatRoomDetailUIState.Loaded -> { + is at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded -> { val textFieldState = rememberTextFieldState() - val chatRoomDetailMessageListViewModel: ChatRoomDetailMessageListViewModel = viewModel( - factory = ChatRoomDetailMessageListViewModel.factory( + val chatRoomDetailMessageListViewModel: at.torch.compose.ui.view.model.ChatRoomDetailMessageListViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomDetailMessageListViewModel.Companion.factory( localChatRoom = chatRoomDetailUIState.localChatRoom, nostrRepository = nostrRepository, chatRepository = chatRepository @@ -223,7 +217,7 @@ fun ChatRoomDetailScreen( } } } - ChatRoomDetailUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth().padding( 20.dp @@ -247,7 +241,7 @@ fun ChatRoomDetailScreen( textAlign = TextAlign.Center ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -259,7 +253,7 @@ fun ChatRoomDetailScreen( } LaunchedEffect(true) { - if (initialChatRoomDetailUIState == ChatRoomDetailUIState.Loading) { + if (initialChatRoomDetailUIState == _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading) { chatRoomDetailViewModel.initiateChatRoomDetail() } } @@ -268,7 +262,7 @@ fun ChatRoomDetailScreen( @Preview @Composable private fun ChatRoomDetailScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { @@ -276,9 +270,9 @@ private fun ChatRoomDetailScreenPreview() { activeUserPublicKey = "", publicKey = "publicKey", relayHint = null, - initialChatRoomDetailUIState = ChatRoomDetailUIState.Loaded( - localChatRoom = LocalChatRoom( - chatRoom = ChatRoom( + initialChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded( + localChatRoom = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalChatRoom( + chatRoom = _root_ide_package_.ac.cord.compose.database.model.ChatRoom( id = "", userPublicKey = "", subject = "Message title", @@ -286,8 +280,8 @@ private fun ChatRoomDetailScreenPreview() { ), ) ), - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY, - chatRepository = ChatRepository.NO_OP_CHAT_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY, + chatRepository = _root_ide_package_.at.torch.compose.repository.ChatRepository.Companion.NO_OP_CHAT_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/CreateProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/CreateProfileScreen.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/CreateProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/CreateProfileScreen.kt index aa424252..873d60ec 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/CreateProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/CreateProfileScreen.kt @@ -1,12 +1,9 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.theme.BluePill -import ac.cord.auxiliary.compose.ui.theme.RedPill -import ac.cord.auxiliary.compose.ui.view.model.CreateProfileViewModel -import ac.cord.auxiliary.compose.ui.view.state.CreateProfileUIState +import at.torch.compose.database.model.Profile +import at.torch.compose.ui.theme.BluePill +import at.torch.compose.ui.theme.RedPill +import at.torch.compose.ui.view.model.CreateProfileViewModel import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -38,15 +35,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import fr.acinq.bitcoin.Chain -import fr.acinq.phoenix.managers.WalletManager @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun CreateProfileScreen( - initialCreateProfileUIState: CreateProfileUIState = CreateProfileUIState.Declaration, + initialCreateProfileUIState: at.torch.compose.ui.view.state.CreateProfileUIState = _root_ide_package_.at.torch.compose.ui.view.state.CreateProfileUIState.Declaration, onNavigateToEndThis: () -> Unit, - nostrRepository: NostrRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, writeSeed: (List) -> Unit ) { val createProfileViewModel: CreateProfileViewModel = viewModel ( @@ -69,7 +64,7 @@ fun CreateProfileScreen( ) { when (val createAccountUIState = createProfileViewModel.createProfileUIState.value) { - is CreateProfileUIState.Declaration -> { + is at.torch.compose.ui.view.state.CreateProfileUIState.Declaration -> { Text( "Create Profile", @@ -95,7 +90,7 @@ fun CreateProfileScreen( Button( onClick = { - createProfileViewModel.createProfileUIState.value = CreateProfileUIState.InputPrompt + createProfileViewModel.createProfileUIState.value = _root_ide_package_.at.torch.compose.ui.view.state.CreateProfileUIState.InputPrompt } ) { Text( @@ -103,7 +98,7 @@ fun CreateProfileScreen( ) } } - is CreateProfileUIState.InputPrompt -> { + is at.torch.compose.ui.view.state.CreateProfileUIState.InputPrompt -> { Text( "Create Profile", style = MaterialTheme.typography.headlineSmall @@ -208,7 +203,7 @@ fun CreateProfileScreen( createProfileViewModel.validateInput().let { isInputValid -> if (isInputValid) { createProfileViewModel.createProfileUIState.value = - CreateProfileUIState.ConfirmInput( + _root_ide_package_.at.torch.compose.ui.view.state.CreateProfileUIState.ConfirmInput( name = createProfileViewModel.createProfileFormState.nameField.textFieldState.text.toString(), bio = createProfileViewModel.createProfileFormState.biographyField.textFieldState.text.toString() ) @@ -224,7 +219,7 @@ fun CreateProfileScreen( } } - is CreateProfileUIState.ConfirmInput -> { + is at.torch.compose.ui.view.state.CreateProfileUIState.ConfirmInput -> { Text( text = "Name", @@ -282,7 +277,7 @@ fun CreateProfileScreen( } } - is CreateProfileUIState.Error -> { + is at.torch.compose.ui.view.state.CreateProfileUIState.Error -> { Spacer( modifier = Modifier.weight(1f) ) @@ -295,7 +290,7 @@ fun CreateProfileScreen( modifier = Modifier.weight(1f) ) } - is CreateProfileUIState.ProfileReady -> { + is at.torch.compose.ui.view.state.CreateProfileUIState.ProfileReady -> { Spacer( modifier = Modifier.weight(1f) @@ -312,7 +307,7 @@ fun CreateProfileScreen( Button( colors = ButtonDefaults.buttonColors( - containerColor = RedPill, + containerColor = _root_ide_package_.ac.cord.compose.ui.theme.RedPill, contentColor = Color.White ), onClick = { @@ -330,7 +325,7 @@ fun CreateProfileScreen( Button( colors = ButtonDefaults.buttonColors( - containerColor = BluePill, + containerColor = _root_ide_package_.ac.cord.compose.ui.theme.BluePill, contentColor = Color.DarkGray ), onClick = { @@ -357,7 +352,7 @@ fun CreateProfileScreen( @Preview @Composable fun CreateAccountScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { @@ -390,8 +385,8 @@ fun CreateAccountScreenPreview() { // name = "Alan Turing", // bio = "Polyglot: Math... is my middle name, computer scientist. cryptographer, and gold hider." // ), - CreateProfileUIState.ProfileReady( - profile = Profile( + _root_ide_package_.at.torch.compose.ui.view.state.CreateProfileUIState.ProfileReady( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "", displayName = "Alan Turing", @@ -400,7 +395,7 @@ fun CreateAccountScreenPreview() { ), onNavigateToEndThis = {}, writeSeed = {}, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/HomeScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/HomeScreen.kt similarity index 74% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/HomeScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/HomeScreen.kt index eaada0d2..c51ce80f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/HomeScreen.kt @@ -1,23 +1,11 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.FeedListViewModel -import ac.cord.auxiliary.compose.ui.view.model.HomeScreenType -import ac.cord.auxiliary.compose.ui.view.model.HomeViewModel -import ac.cord.auxiliary.compose.ui.view.model.ChatRoomListViewModel -import ac.cord.auxiliary.compose.ui.view.state.FeedListUIState -import ac.cord.auxiliary.compose.ui.view.state.HomeScreenUIState -import ac.cord.auxiliary.compose.ui.view.state.ChatRoomListUIState +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -58,27 +46,27 @@ import kotlinx.coroutines.launch @Composable fun HomeScreen( activeUserPublicKey: HexKey, - initialHomeScreenUIState: HomeScreenUIState = HomeScreenUIState.Loading, - onNavigateToEvent: (Route) -> Unit, - onNavigateToDirectMessageDetail: (Route) -> Unit, + initialHomeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState = _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Loading, + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, + onNavigateToDirectMessageDetail: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, onNavigateToWriteNewNote: () -> Unit, onNavigateToSearch: () -> Unit, - nostrRepository: NostrRepository, - chatRepository: ChatRepository + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository ) { val scope = rememberCoroutineScope() - val homeScreenViewModel: HomeViewModel = viewModel( - factory = HomeViewModel.factory( + val homeScreenViewModel: at.torch.compose.ui.view.model.HomeViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.HomeViewModel.Companion.factory( activeUserPublicKey = activeUserPublicKey, initialHomeScreenUIState = initialHomeScreenUIState, nostrRepository = nostrRepository, - pagerState = rememberPagerState { HomeScreenType.entries.size } + pagerState = rememberPagerState { _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.entries.size } ), ) when(val homeScreenUIState = homeScreenViewModel.homeScreenUIState) { - HomeScreenUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Error -> { Scaffold { innerPadding -> Column( modifier = Modifier.padding(innerPadding).fillMaxSize(), @@ -99,7 +87,7 @@ fun HomeScreen( } } - is HomeScreenUIState.Loaded -> { + is at.torch.compose.ui.view.state.HomeScreenUIState.Loaded -> { Scaffold( modifier = Modifier, topBar = { @@ -117,14 +105,14 @@ fun HomeScreen( IconButton( onClick = { onNavigateToEvent.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, nostrEventId = homeScreenUIState.profileWithFollowing.nostrEvent.id ) ) } ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = homeScreenUIState.profileWithFollowing.profile, publicKey = homeScreenUIState.profileWithFollowing.profile.publicKey ) @@ -168,7 +156,7 @@ fun HomeScreen( edgePadding = 10.dp, selectedTabIndex = homeScreenViewModel.pagerState.currentPage, ) { - HomeScreenType.entries.forEachIndexed { index, destination -> + _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.entries.forEachIndexed { index, destination -> Tab( selected = homeScreenViewModel.pagerState.currentPage == index, onClick = { @@ -193,12 +181,12 @@ fun HomeScreen( HorizontalPager( state = homeScreenViewModel.pagerState, ) { pageIndex -> - when (val homeScreenTypeType = HomeScreenType.entries[pageIndex]) { - HomeScreenType.Following, HomeScreenType.Mentions -> { - val feedListViewModel: FeedListViewModel = viewModel( + when (val homeScreenTypeType = _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.entries[pageIndex]) { + _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.Following, _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.Mentions -> { + val feedListViewModel: at.torch.compose.ui.view.model.FeedListViewModel = viewModel( key = homeScreenTypeType.name, - factory = FeedListViewModel.factory( - initialFeedListUIState = FeedListUIState.Loading, + factory = _root_ide_package_.at.torch.compose.ui.view.model.FeedListViewModel.Companion.factory( + initialFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading, synchronizationFilter = homeScreenViewModel.getSynchronizationFilter( homeScreenTypeType, profileWithFollowing = homeScreenUIState.profileWithFollowing @@ -218,11 +206,11 @@ fun HomeScreen( feedListViewModel.initiate() } } - HomeScreenType.Messages -> { - val chatRoomListViewModel: ChatRoomListViewModel = viewModel( + _root_ide_package_.at.torch.compose.ui.view.model.HomeScreenType.Messages -> { + val chatRoomListViewModel: at.torch.compose.ui.view.model.ChatRoomListViewModel = viewModel( key = homeScreenTypeType.name, - factory = ChatRoomListViewModel.factory( - initialChatRoomListUIState = ChatRoomListUIState.Loading, + factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomListViewModel.Companion.factory( + initialChatRoomListUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomListUIState.Loading, publicKey = homeScreenUIState.profileWithFollowing.profile.publicKey, synchronizationFilter = homeScreenViewModel.getSynchronizationFilter( homeScreenTypeType, @@ -249,8 +237,8 @@ fun HomeScreen( } } } - HomeScreenUIState.Loading -> { - LoadingDataIndicator() + _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Loading -> { + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator() } } @@ -262,15 +250,15 @@ fun HomeScreen( @Preview @Composable private fun HomeScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { HomeScreen( activeUserPublicKey = "", - initialHomeScreenUIState = HomeScreenUIState.Loaded( - profileWithFollowing = LocalProfileWithFollowing( - nostrEvent = NostrEvent( + initialHomeScreenUIState = _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Loaded( + profileWithFollowing = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalProfileWithFollowing( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Lorem Ipsum is simply dummy text of the printing and typesetting industry. @@ -282,7 +270,7 @@ It has survived not only five centuries, but also the leap into electronic types sig = "", kind = TextNoteEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nostrEventId = "nostrEventId" @@ -294,8 +282,8 @@ It has survived not only five centuries, but also the leap into electronic types onNavigateToWriteNewNote = {}, onNavigateToSearch = {}, onNavigateToDirectMessageDetail = {}, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY, - chatRepository = ChatRepository.NO_OP_CHAT_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY, + chatRepository = _root_ide_package_.at.torch.compose.repository.ChatRepository.Companion.NO_OP_CHAT_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ImplementationPendingScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ImplementationPendingScreen.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ImplementationPendingScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ImplementationPendingScreen.kt index 4642a63d..a14b5530 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/ImplementationPendingScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/ImplementationPendingScreen.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.theme.AuxTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -40,7 +39,7 @@ fun ImplementationPendingScreen( @Preview @Composable private fun ImplementationPendingScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LandingScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LandingScreen.kt similarity index 96% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LandingScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LandingScreen.kt index 3ef53848..e6b5325f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LandingScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LandingScreen.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.theme.AuxTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -102,7 +101,7 @@ fun LandingScreen( @Preview @Composable private fun LandingScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LoadingScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LoadingScreen.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LoadingScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LoadingScreen.kt index 19f47aa4..06bf6e05 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/LoadingScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/LoadingScreen.kt @@ -1,13 +1,11 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview @@ -20,7 +18,7 @@ fun LoadingScreen( Column( modifier = Modifier.padding(innerPadding) ) { - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( text = text ) } @@ -30,7 +28,7 @@ fun LoadingScreen( @Preview @Composable private fun LoadingScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/NostrEventDetailScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/NostrEventDetailScreen.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/NostrEventDetailScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/NostrEventDetailScreen.kt index 116d56e4..f428ce8c 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/NostrEventDetailScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/NostrEventDetailScreen.kt @@ -1,16 +1,11 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.composable.widgets.detail.MetadataEventDetail -import ac.cord.auxiliary.compose.ui.composable.widgets.detail.TextNoteEventDetail -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.NostrEventDetailViewModel -import ac.cord.auxiliary.compose.ui.view.state.NostrEventDetailUIState +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.intermdiate.LocalNostrEvent +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator +import at.torch.compose.ui.composable.widgets.detail.MetadataEventDetail +import at.torch.compose.ui.composable.widgets.detail.TextNoteEventDetail import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -34,19 +29,19 @@ import com.vitorpamplona.quartz.nip18Reposts.RepostEvent @OptIn(ExperimentalMaterial3Api::class) @Composable fun NostrEventDetailScreen( - initialNostrEventDetailUIState: NostrEventDetailUIState, + initialNostrEventDetailUIState: at.torch.compose.ui.view.state.NostrEventDetailUIState, activeUserPublicKey: HexKey, nostrEventId: HexKey, - nostrRepository: NostrRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, onNavigateBack: () -> Unit, - onNavigateToEvent: (Route) -> Unit, - onNavigateToDirectMessage: (Route) -> Unit, + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, + onNavigateToDirectMessage: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, onNavigateToEditProfile: () -> Unit, onNavigateToWriteAReply: (String) -> Unit, onNavigateToQuoteNostrEvent: (String) -> Unit, ) { - val nostrEventDetailViewModel: NostrEventDetailViewModel = viewModel( - factory = NostrEventDetailViewModel.factory( + val nostrEventDetailViewModel: at.torch.compose.ui.view.model.NostrEventDetailViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.NostrEventDetailViewModel.Companion.factory( nostrEventId = nostrEventId, initialNostrEventDetailUIState = initialNostrEventDetailUIState, nostrRepository = nostrRepository, @@ -55,7 +50,7 @@ fun NostrEventDetailScreen( ) when(val feedListUIState = nostrEventDetailViewModel.nostrEventDetailUIState) { - NostrEventDetailUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Error -> { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, @@ -64,11 +59,11 @@ fun NostrEventDetailScreen( Text("Something went wrong") } } - is NostrEventDetailUIState.Loaded -> { + is at.torch.compose.ui.view.state.NostrEventDetailUIState.Loaded -> { when(feedListUIState.localNostrEvent.nostrEvent.kind) { MetadataEvent.KIND -> { - MetadataEventDetail( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.detail.MetadataEventDetail( activeUserPublicKey = activeUserPublicKey, localNostrEvent = feedListUIState.localNostrEvent, onNavigateBack = onNavigateBack, @@ -79,7 +74,7 @@ fun NostrEventDetailScreen( ) } TextNoteEvent.KIND -> { - TextNoteEventDetail( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.detail.TextNoteEventDetail( feedListUIState.localNostrEvent, onNavigateBack = onNavigateBack, onNavigateToWriteAReply = onNavigateToWriteAReply, @@ -118,14 +113,14 @@ fun NostrEventDetailScreen( } } } - NostrEventDetailUIState.Loading -> { - LoadingDataIndicator() + _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loading -> { + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator() LaunchedEffect(true) { nostrEventDetailViewModel.loadNostrFeed() } } - NostrEventDetailUIState.NotFound -> { + _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.NotFound -> { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, @@ -140,14 +135,14 @@ fun NostrEventDetailScreen( @Preview @Composable private fun NostrEventDetailScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { NostrEventDetailScreen( - initialNostrEventDetailUIState = NostrEventDetailUIState.Loaded( - localNostrEvent = LocalNostrEvent( - nostrEvent = NostrEvent( + initialNostrEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loaded( + localNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Lorem Ipsum is simply dummy text of the printing and typesetting industry. @@ -159,7 +154,7 @@ It has survived not only five centuries, but also the leap into electronic types sig = "", kind = TextNoteEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nostrEventId = "nostrEventId" @@ -168,7 +163,7 @@ It has survived not only five centuries, but also the leap into electronic types ), nostrEventId = "", activeUserPublicKey = "", - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY, + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY, onNavigateBack = {}, onNavigateToEvent = {}, onNavigateToWriteAReply = {}, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchResultScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchResultScreen.kt similarity index 83% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchResultScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchResultScreen.kt index 25d00763..358fb985 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchResultScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchResultScreen.kt @@ -1,14 +1,7 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.SearchRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.feed.ListView -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.SearchResultType -import ac.cord.auxiliary.compose.ui.view.model.SearchResultViewModel -import ac.cord.auxiliary.compose.ui.view.state.SearchResultListUIState +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.widgets.feed.ListView import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -65,16 +58,16 @@ import kotlinx.coroutines.launch fun SearchResultScreen( activeUserPublicKey: String, searchQuery: String, - nostrRepository: NostrRepository, - searchRepository: SearchRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, + searchRepository: at.torch.compose.repository.SearchRepository, onNavigateBack: () -> Unit, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { val scope = rememberCoroutineScope() - val searchViewModel: SearchResultViewModel = viewModel( - factory = SearchResultViewModel.factory( - initialSearchResultType = SearchResultType.Posts, + val searchViewModel: at.torch.compose.ui.view.model.SearchResultViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.SearchResultViewModel.Companion.factory( + initialSearchResultType = _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Posts, searchQuery = searchQuery, nostrRepository = nostrRepository, searchRepository = searchRepository @@ -162,14 +155,14 @@ fun SearchResultScreen( }, windowInsets = TopAppBarDefaults.windowInsets ) { - val pagerState = rememberPagerState { SearchResultType.entries.size } + val pagerState = rememberPagerState { _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.entries.size } PrimaryScrollableTabRow( modifier = Modifier, edgePadding = 10.dp, selectedTabIndex = searchViewModel.searchResultType.ordinal, ) { - SearchResultType.entries.forEach { searchResultType -> + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.entries.forEach { searchResultType -> Tab( selected = searchViewModel.searchResultType == searchResultType, onClick = { @@ -202,29 +195,29 @@ fun SearchResultScreen( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { - when(SearchResultType.entries[pageIndex]) { - SearchResultType.Posts -> { + when(_root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.entries[pageIndex]) { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Posts -> { Text("Posts") } - SearchResultType.Articles -> { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Articles -> { Text("Articles") } - SearchResultType.Profiles -> { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Profiles -> { Text("Profiles") } - SearchResultType.Photos -> { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Photos -> { Text("Photos") } - SearchResultType.Videos -> { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Videos -> { Text("Videos") } - SearchResultType.Shorts -> { + _root_ide_package_.at.torch.compose.ui.view.model.SearchResultType.Shorts -> { Text("Shorts") } } when (val searchResultListUIState = searchViewModel.searchResultListUIState) { - SearchResultListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.SearchResultListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -237,7 +230,7 @@ fun SearchResultScreen( ) } } - is SearchResultListUIState.Loaded -> { + is at.torch.compose.ui.view.state.SearchResultListUIState.Loaded -> { // TODO: Handle gallery UI if (searchResultListUIState.localNostrEvents.isEmpty()) { Column( @@ -265,7 +258,7 @@ fun SearchResultScreen( localNostrEvent.ListView( onNavigateToEvent = { nostrEventId -> onNavigateToEvent.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, nostrEventId = nostrEventId ) @@ -277,7 +270,7 @@ fun SearchResultScreen( } } - SearchResultListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.SearchResultListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -312,15 +305,15 @@ fun SearchResultScreen( @Preview @Composable private fun SearchResultScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { SearchResultScreen( activeUserPublicKey = "", searchQuery = "What happened...", - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY, - searchRepository = SearchRepository.NO_OP_SEARCH_REPOSITORY, + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY, + searchRepository = _root_ide_package_.at.torch.compose.repository.SearchRepository.Companion.NO_OP_SEARCH_REPOSITORY, onNavigateBack = {}, onNavigateToEvent = {} ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchScreen.kt similarity index 85% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchScreen.kt index 4b83ac86..ec0f9e3d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SearchScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SearchScreen.kt @@ -1,15 +1,8 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.SearchRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SearchResultRoute -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.SearchViewModel -import ac.cord.auxiliary.compose.ui.view.state.SearchUIState +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.navigation.routes.SearchResultRoute +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -22,13 +15,10 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBackIosNew import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Person import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Tag import androidx.compose.material.icons.filled.TravelExplore @@ -55,7 +45,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.semantics.isTraversalGroup import androidx.compose.ui.semantics.semantics @@ -70,14 +59,14 @@ import androidx.lifecycle.viewmodel.compose.viewModel @Composable fun SearchScreen( activeUserPublicKey: String, - initialSearchUIState: SearchUIState, - nostrRepository: NostrRepository, - searchRepository: SearchRepository, - onNavigateToSearchResult: (Route) -> Unit, - onNavigateToProfile: (Route) -> Unit + initialSearchUIState: at.torch.compose.ui.view.state.SearchUIState, + nostrRepository: at.torch.compose.repository.NostrRepository, + searchRepository: at.torch.compose.repository.SearchRepository, + onNavigateToSearchResult: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, + onNavigateToProfile: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { - val searchViewModel: SearchViewModel = viewModel( - factory = SearchViewModel.factory( + val searchViewModel: at.torch.compose.ui.view.model.SearchViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.SearchViewModel.Companion.factory( initialSearchUIState = initialSearchUIState, nostrRepository = nostrRepository, searchRepository = searchRepository @@ -165,7 +154,7 @@ fun SearchScreen( IconButton( onClick = { onNavigateToSearchResult.invoke( - SearchResultRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.SearchResultRoute( activeUserPublicKey = activeUserPublicKey, textFieldState.text.toString() ) @@ -181,7 +170,7 @@ fun SearchScreen( modifier = Modifier .clickable { onNavigateToSearchResult.invoke( - SearchResultRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.SearchResultRoute( activeUserPublicKey = activeUserPublicKey, textFieldState.text.toString() ) @@ -204,9 +193,12 @@ fun SearchScreen( IconButton( onClick = { onNavigateToSearchResult.invoke( - SearchResultRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.SearchResultRoute( activeUserPublicKey = activeUserPublicKey, - query = "#${textFieldState.text.toString().replace("#","")}" + query = "#${ + textFieldState.text.toString() + .replace("#", "") + }" ) ) } @@ -220,9 +212,12 @@ fun SearchScreen( modifier = Modifier .clickable { onNavigateToSearchResult.invoke( - SearchResultRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.SearchResultRoute( activeUserPublicKey = activeUserPublicKey, - "#${textFieldState.text.toString().replaceFirst("#","")}" + "#${ + textFieldState.text.toString() + .replaceFirst("#", "") + }" ) ) } @@ -243,12 +238,12 @@ fun SearchScreen( supportingContent = { Text( text = profile.staticIdentifier() ?: "", - color = ProfileColor.fromPublicKey(profile.publicKey), + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(profile.publicKey), maxLines = 1, ) }, leadingContent = { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = profile, publicKey = profile.publicKey ) @@ -256,7 +251,7 @@ fun SearchScreen( modifier = Modifier .clickable { onNavigateToProfile.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, profile.nostrEventId ) @@ -299,14 +294,14 @@ fun SearchScreen( .size(IconButtonDefaults.mediumContainerSize()), onClick = { onNavigateToProfile.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, profile.nostrEventId ) ) } ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( size = 70.dp, profile = profile, publicKey = profile.publicKey @@ -315,7 +310,7 @@ fun SearchScreen( Text( text = profile.humanReadableNameOrPubkey(), - color = ProfileColor.fromPublicKey(profile.publicKey), + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(profile.publicKey), overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.labelSmall @@ -361,7 +356,7 @@ fun SearchScreen( modifier = Modifier .clickable { onNavigateToSearchResult.invoke( - SearchResultRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.SearchResultRoute( activeUserPublicKey = activeUserPublicKey, query = recentSearch.query ) @@ -409,15 +404,15 @@ fun SearchScreen( @Preview @Composable private fun SearchScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { SearchScreen( activeUserPublicKey = "", - initialSearchUIState = SearchUIState.Prompt, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY, - searchRepository = SearchRepository.NO_OP_SEARCH_REPOSITORY, + initialSearchUIState = _root_ide_package_.at.torch.compose.ui.view.state.SearchUIState.Prompt, + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY, + searchRepository = _root_ide_package_.at.torch.compose.repository.SearchRepository.Companion.NO_OP_SEARCH_REPOSITORY, onNavigateToSearchResult = {}, onNavigateToProfile = {} ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SignInScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SignInScreen.kt similarity index 87% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SignInScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SignInScreen.kt index 8980a7cd..0aed7228 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SignInScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SignInScreen.kt @@ -1,9 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.SignInToProfileViewModel -import ac.cord.auxiliary.compose.ui.view.state.SignInToProfileUIState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -38,11 +34,11 @@ import com.vitorpamplona.quartz.nip19Bech32.entities.NSec @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun SignInToProfileScreen( - initialSignInToProfileUIState: SignInToProfileUIState = SignInToProfileUIState.InputPrompt, - nostrRepository: NostrRepository + initialSignInToProfileUIState: at.torch.compose.ui.view.state.SignInToProfileUIState = _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.InputPrompt, + nostrRepository: at.torch.compose.repository.NostrRepository ) { - val signInToProfileViewModel: SignInToProfileViewModel = viewModel ( - factory = SignInToProfileViewModel.factory( + val signInToProfileViewModel: at.torch.compose.ui.view.model.SignInToProfileViewModel = viewModel ( + factory = _root_ide_package_.at.torch.compose.ui.view.model.SignInToProfileViewModel.Companion.factory( initialSignInToProfileUIState, nostrRepository ) @@ -61,7 +57,7 @@ fun SignInToProfileScreen( ) { when (val signInToProfileUIState = signInToProfileViewModel.signInToProfileUIState.value) { - is SignInToProfileUIState.InputPrompt -> { + is at.torch.compose.ui.view.state.SignInToProfileUIState.InputPrompt -> { Text( "Sign In", style = MaterialTheme.typography.headlineSmall @@ -110,19 +106,19 @@ fun SignInToProfileScreen( signInToProfileViewModel.signInToProfileUIState.value = signInToProfileViewModel.validateCredential().let { credentialEntity -> when (credentialEntity) { is NSec -> { - SignInToProfileUIState.ConfirmNsecSignIn( + _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.ConfirmNsecSignIn( nsec = signInToProfileViewModel.signInToProfileFormState.textField.textFieldState.text.toString(), hexKey = credentialEntity.hex ) } is NPub -> { - SignInToProfileUIState.ConfirmNpubSignIn( + _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.ConfirmNpubSignIn( npub = signInToProfileViewModel.signInToProfileFormState.textField.textFieldState.text.toString(), hexKey = credentialEntity.hex ) } else -> { - SignInToProfileUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.Error } } } @@ -138,7 +134,7 @@ fun SignInToProfileScreen( } } - is SignInToProfileUIState.ConfirmNpubSignIn-> { + is at.torch.compose.ui.view.state.SignInToProfileUIState.ConfirmNpubSignIn-> { Spacer( modifier = Modifier.weight(1f) @@ -190,7 +186,7 @@ fun SignInToProfileScreen( } } - is SignInToProfileUIState.ConfirmNsecSignIn-> { + is at.torch.compose.ui.view.state.SignInToProfileUIState.ConfirmNsecSignIn-> { Spacer( modifier = Modifier.weight(1f) @@ -236,7 +232,7 @@ fun SignInToProfileScreen( } } - is SignInToProfileUIState.Error -> { + is at.torch.compose.ui.view.state.SignInToProfileUIState.Error -> { Spacer( modifier = Modifier.weight(1f) ) @@ -258,13 +254,13 @@ fun SignInToProfileScreen( @Preview @Composable private fun SignInToProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { SignInToProfileScreen( initialSignInToProfileUIState = - SignInToProfileUIState.InputPrompt, + _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.InputPrompt, // SignInToProfileUIState.Error, // SignInToProfileUIState.ConfirmNpubSignIn( // npub = "npub1uh366qnj68a7atvwgwdy4569xd6v5jtferftapqztwjwlzh9553q47pqsx", @@ -274,7 +270,8 @@ private fun SignInToProfileScreenPreview() { // nsec = "nsecthingsaretobekeptsecret", // hexKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522" // ), - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY) + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY + ) } } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SocialPreconditionScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SocialPreconditionScreen.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SocialPreconditionScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SocialPreconditionScreen.kt index b289c1d6..5c0aa7f0 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SocialPreconditionScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SocialPreconditionScreen.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.theme.AuxTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -115,7 +114,7 @@ fun SocialPreconditionScreen( @Preview @Composable private fun SocialPreconditionScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SovereignWalletStartupScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SovereignWalletStartupScreen.kt similarity index 82% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SovereignWalletStartupScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SovereignWalletStartupScreen.kt index e2a4fdf9..6f6c599c 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/SovereignWalletStartupScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/SovereignWalletStartupScreen.kt @@ -1,13 +1,8 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.composable.widgets.wallet.WalletsSelector -import ac.cord.auxiliary.compose.ui.view.model.SovereignWalletStartupViewModel -import ac.cord.auxiliary.compose.ui.view.model.SovereignWalletViewModel -import ac.cord.auxiliary.compose.ui.view.model.StartupViewState +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator +import at.torch.compose.ui.composable.widgets.wallet.WalletsSelector import androidx.compose.foundation.layout.* -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -36,14 +31,14 @@ import kotlin.collections.get @Composable fun SovereignWalletStartupScreen( - sovereignWalletViewModel: SovereignWalletViewModel, + sovereignWalletViewModel: at.torch.compose.ui.view.model.SovereignWalletViewModel, onNavigateToWalletIntroPage: () -> Unit, onNavigateToWalletLandingPage: () -> Unit, onNavigateToWalletDashboard: () -> Unit, forceWalletId: WalletId?, ) { - val sovereignWalletStartupViewModel = viewModel( - factory = SovereignWalletStartupViewModel.factory( + val sovereignWalletStartupViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.SovereignWalletStartupViewModel.Companion.factory( phoenixGlobal = sovereignWalletViewModel.phoenixGlobal, ) ) @@ -61,7 +56,7 @@ fun SovereignWalletStartupScreen( ) { when (sovereignWalletViewModel.listWalletState.value) { is ListWalletState.Init -> { - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( text = "Decrypting..." ) } @@ -89,13 +84,19 @@ fun SovereignWalletStartupScreen( when { availableWallets.isEmpty() -> { LaunchedEffect(Unit) { onNavigateToWalletLandingPage.invoke() } - LoadingDataIndicator(text = "Initializing...") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( + text = "Initializing..." + ) } availableWalletMetadata == null || defaultWallet.value == null -> { - LoadingDataIndicator(text = "Preparing wallet...") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( + text = "Preparing wallet..." + ) } activeWallet != null -> { - LoadingDataIndicator(text = "Opening Wallet") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( + text = "Opening Wallet" + ) LaunchedEffect(Unit) { sovereignWalletViewModel.loadSovereignData(activeWallet.id) onNavigateToWalletDashboard.invoke() @@ -103,7 +104,7 @@ fun SovereignWalletStartupScreen( } else -> { when (val startupState = sovereignWalletStartupViewModel.state.value) { - is StartupViewState.Init -> { + is at.torch.compose.ui.view.model.StartupViewState.Init -> { var loadingWallet by remember { mutableStateOf( when { @@ -118,17 +119,24 @@ fun SovereignWalletStartupScreen( } when (val wallet = loadingWallet) { null -> { - WalletsSelector( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.wallet.WalletsSelector( wallets = availableWallets, globalPrefs = globalPrefs, walletsMetadata = availableWalletMetadata, activeWalletId = null, - onWalletClick = { sovereignWalletViewModel.switchToWallet(it.walletId) ; loadingWallet = it }, + onWalletClick = { + sovereignWalletViewModel.switchToWallet( + it.walletId + ); loadingWallet = it + }, canEdit = false, modifier = Modifier.padding(horizontal = 24.dp), topContent = { Spacer(Modifier.height(64.dp)) - Text(text = "Select a wallet", style = MaterialTheme.typography.headlineSmall) + Text( + text = "Select a wallet", + style = MaterialTheme.typography.headlineSmall + ) Spacer(Modifier.height(16.dp)) }, bottomContent = { @@ -162,13 +170,17 @@ fun SovereignWalletStartupScreen( } } } - is StartupViewState.StartingBusiness -> { - LoadingDataIndicator(text = "Starting wallet") + is at.torch.compose.ui.view.model.StartupViewState.StartingBusiness -> { + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( + text = "Starting wallet" + ) } - is StartupViewState.BusinessActive -> { - LoadingDataIndicator(text = "Opening wallet") + is at.torch.compose.ui.view.model.StartupViewState.BusinessActive -> { + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( + text = "Opening wallet" + ) } - is StartupViewState.Error -> { + is at.torch.compose.ui.view.model.StartupViewState.Error -> { Column(horizontalAlignment = Alignment.CenterHorizontally) { Text( @@ -176,7 +188,7 @@ fun SovereignWalletStartupScreen( ) when (startupState) { - is StartupViewState.Error.Generic -> { + is at.torch.compose.ui.view.model.StartupViewState.Error.Generic -> { startupState.cause?.message?.let { message -> Text( text = message, @@ -226,10 +238,10 @@ private fun BoxScope.LoadWallet( when (isScreenLockRequired.value) { null -> { - LoadingDataIndicator(text = "Loading preferences...") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator(text = "Loading preferences...") } true -> { - LoadingDataIndicator(text = "Unlock to continue") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator(text = "Unlock to continue") ScreenLockPrompt( walletId = userWallet.walletId, walletName = metadata.nameOrDefault(), @@ -241,7 +253,7 @@ private fun BoxScope.LoadWallet( ) } false -> { - LoadingDataIndicator(text = "Starting wallet...") + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator(text = "Starting wallet...") LaunchedEffect(Unit) { doLoadWallet(userWallet) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnannouncedProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnannouncedProfileScreen.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnannouncedProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnannouncedProfileScreen.kt index c293fed8..8a429c6d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnannouncedProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnannouncedProfileScreen.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -54,7 +53,7 @@ fun UnannouncedProfileScreen() { Spacer( modifier = Modifier.weight(1f) ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -72,7 +71,7 @@ fun UnannouncedProfileScreen() { @Preview @Composable private fun UnannouncedProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnindexedProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnindexedProfileScreen.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnindexedProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnindexedProfileScreen.kt index 7c4113f4..9816a4ce 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnindexedProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnindexedProfileScreen.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -54,7 +53,7 @@ fun UnindexedProfileScreen() { Spacer( modifier = Modifier.weight(1f) ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -72,7 +71,7 @@ fun UnindexedProfileScreen() { @Preview @Composable private fun UnannouncedProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileScreen.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileScreen.kt index 2564c005..01f30dbe 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileScreen.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -54,7 +53,7 @@ fun UnqueuedProfileScreen() { Spacer( modifier = Modifier.weight(1f) ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -72,7 +71,7 @@ fun UnqueuedProfileScreen() { @Preview @Composable private fun UnannouncedProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt index efbbd312..7ad1ad61 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnqueuedProfileSynchronizationScreen.kt @@ -1,9 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.UnqueuedProfileSynchronizationViewModel +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -29,10 +26,10 @@ import androidx.lifecycle.viewmodel.compose.viewModel fun UnqueuedProfileSynchronizationScreen( unsignedNostrEventId: Long, profilePublicKey: String, - nostrRepository: NostrRepository + nostrRepository: at.torch.compose.repository.NostrRepository ) { - val unqueuedProfileSynchronizationViewModel: UnqueuedProfileSynchronizationViewModel = viewModel( - factory = UnqueuedProfileSynchronizationViewModel.factory( + val unqueuedProfileSynchronizationViewModel: at.torch.compose.ui.view.model.UnqueuedProfileSynchronizationViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.UnqueuedProfileSynchronizationViewModel.Companion.factory( unsignedNostrEventId = unsignedNostrEventId, profilePublicKey = profilePublicKey, nostrRepository = nostrRepository @@ -67,7 +64,7 @@ fun UnqueuedProfileSynchronizationScreen( textAlign = TextAlign.Center ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -86,14 +83,14 @@ fun UnqueuedProfileSynchronizationScreen( @Preview @Composable private fun UnqueuedProfileSynchronizationScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { UnqueuedProfileSynchronizationScreen( unsignedNostrEventId = 2, profilePublicKey = "npub is for living.", - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsignedProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsignedProfileScreen.kt similarity index 89% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsignedProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsignedProfileScreen.kt index 898e0638..5ce90ab0 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsignedProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsignedProfileScreen.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -51,7 +50,7 @@ fun UnsignedProfileScreen() { textAlign = TextAlign.Center ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -66,7 +65,7 @@ fun UnsignedProfileScreen() { @Preview @Composable private fun UnsignedProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsyncedProfileScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsyncedProfileScreen.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsyncedProfileScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsyncedProfileScreen.kt index 0e6b113c..9aadb498 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/UnsyncedProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/UnsyncedProfileScreen.kt @@ -1,7 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -53,7 +52,7 @@ fun UnsyncedProfileScreen( textAlign = TextAlign.Center ) - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( fillScreen = false ) @@ -68,7 +67,7 @@ fun UnsyncedProfileScreen( @Preview @Composable private fun UnsyncedProfileScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/WriteNewNoteScreen.kt similarity index 87% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/WriteNewNoteScreen.kt index 9dac19f0..873f0941 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/WriteNewNoteScreen.kt @@ -1,22 +1,15 @@ -package ac.cord.auxiliary.compose.ui.composable +package at.torch.compose.ui.composable -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalMention -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentParser -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentSegment -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.WriteNewNoteViewModel -import ac.cord.auxiliary.compose.ui.view.state.WriteNewNoteUIState +import at.torch.compose.database.model.Mention +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.intermdiate.LocalMention +import at.torch.compose.database.model.intermdiate.LocalNostrEvent +import at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator +import at.torch.compose.ui.composable.widgets.content.RichContent +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -64,15 +57,15 @@ import kotlin.time.Clock @Composable fun WriteNewNoteScreen( activeUserPublicKey: HexKey, - initialWriteNewNoteUIState: WriteNewNoteUIState = WriteNewNoteUIState.Loading, + initialWriteNewNoteUIState: at.torch.compose.ui.view.state.WriteNewNoteUIState = _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.Loading, replyToNostrEventId: HexKey?, quotedNostrEventId: HexKey?, onNostrEventPublished: () -> Unit, onNavigateToNostrEvent: (HexKey) -> Unit, - nostrRepository: NostrRepository + nostrRepository: at.torch.compose.repository.NostrRepository ) { - val writeNewNoteViewModel: WriteNewNoteViewModel = viewModel ( - factory = WriteNewNoteViewModel.factory( + val writeNewNoteViewModel: at.torch.compose.ui.view.model.WriteNewNoteViewModel = viewModel ( + factory = _root_ide_package_.at.torch.compose.ui.view.model.WriteNewNoteViewModel.Companion.factory( activeUserPublicKey = activeUserPublicKey, replyToNostrEventId = replyToNostrEventId, quotedNostrEventId = quotedNostrEventId, @@ -94,10 +87,10 @@ fun WriteNewNoteScreen( ) { when (val writeNewNoteUIState = writeNewNoteViewModel.writeNewNoteUIState) { - is WriteNewNoteUIState.Loading -> { - LoadingDataIndicator() + is at.torch.compose.ui.view.state.WriteNewNoteUIState.Loading -> { + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator() } - is WriteNewNoteUIState.InputPrompt -> { + is at.torch.compose.ui.view.state.WriteNewNoteUIState.InputPrompt -> { val listState = rememberLazyListState() @@ -174,7 +167,7 @@ fun WriteNewNoteScreen( ) }, leadingIcon = { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = writeNewNoteUIState.localProfile.profile, size = 35.dp ) @@ -191,8 +184,8 @@ fun WriteNewNoteScreen( }, outputTransformation = OutputTransformation { val content = originalText.toString() - val nostrProfiles = ContentParser.parse(content.trimEnd('\n', '\r'), emptyMap(), emptyMap(), trimBlankLines = true) - .filterIsInstance() + val nostrProfiles = _root_ide_package_.at.torch.compose.ui.composable.widgets.content.ContentParser.parse(content.trimEnd('\n', '\r'), emptyMap(), emptyMap(), trimBlankLines = true) + .filterIsInstance() // TODO: We might want to order these profiles by the startIndex so that we can replace the better if (writeNewNoteViewModel.mentionedProfiles.isNotEmpty()) { @@ -208,7 +201,7 @@ fun WriteNewNoteScreen( addStyle( SpanStyle( - color = ProfileColor.fromPublicKey(mentionedProfile.publicKey) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(mentionedProfile.publicKey) ), nostrProfile.startIndex, nostrProfile.startIndex + profileMention.length @@ -235,7 +228,7 @@ fun WriteNewNoteScreen( ) }, leadingIcon = { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = profile ) }, @@ -290,7 +283,7 @@ fun WriteNewNoteScreen( } } - is WriteNewNoteUIState.ConfirmNote-> { + is at.torch.compose.ui.view.state.WriteNewNoteUIState.ConfirmNote-> { val listState = rememberLazyListState() @@ -338,7 +331,7 @@ fun WriteNewNoteScreen( ) } - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = writeNewNoteUIState.localProfile.profile ) @@ -350,9 +343,9 @@ fun WriteNewNoteScreen( ) } - RichContent( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.content.RichContent( // Hack to have the thing rendered for a preview... - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "", content = writeNewNoteUIState.text, sig = "", @@ -363,8 +356,8 @@ fun WriteNewNoteScreen( ), localQuotedNostrEvent = null, mentionedProfiles = writeNewNoteViewModel.mentionableProfiles.map { - LocalMention( - mention = Mention( + _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalMention( + mention = _root_ide_package_.ac.cord.compose.database.model.Mention( mentionedPublicKey = it.publicKey, mentioningNostrEventId = "" ), @@ -433,7 +426,7 @@ fun WriteNewNoteScreen( } } - is WriteNewNoteUIState.Error -> { + is at.torch.compose.ui.view.state.WriteNewNoteUIState.Error -> { Spacer( modifier = Modifier.weight(1f) ) @@ -459,7 +452,7 @@ fun WriteNewNoteScreen( @Preview @Composable private fun WriteNewNoteScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.fillMaxSize() ) { @@ -468,10 +461,10 @@ private fun WriteNewNoteScreenPreview() { replyToNostrEventId = null, quotedNostrEventId = null, initialWriteNewNoteUIState = - WriteNewNoteUIState.InputPrompt( + _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.InputPrompt( // text = "Yes, I did it. So WHAT?!", - inReplyToNostrEvent = LocalNostrEvent( - nostrEvent = NostrEvent( + inReplyToNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Lorem Ipsum is simply dummy text of the printing and typesetting industry. @@ -483,14 +476,14 @@ It has survived not only five centuries, but also the leap into electronic types sig = "", kind = TextNoteEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nostrEventId = "nostrEventId" ), ), - localProfile = LocalProfileWithFollowing( - nostrEvent = NostrEvent( + localProfile = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalProfileWithFollowing( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Lorem Ipsum is simply dummy text of the printing and typesetting industry. @@ -502,7 +495,7 @@ It has survived not only five centuries, but also the leap into electronic types sig = "", kind = TextNoteEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nip05 = "john@doe.com", @@ -513,7 +506,8 @@ It has survived not only five centuries, but also the leap into electronic types ), onNostrEventPublished = {}, onNavigateToNostrEvent = {}, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY) + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY + ) } } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt similarity index 52% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt index a8aed20a..e7fbb0c9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/TorchNavHost.kt @@ -1,69 +1,19 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation +package at.torch.compose.ui.composable.navigation -import ac.cord.auxiliary.compose.AuxGlobal -import ac.cord.auxiliary.compose.database.repository.DatabaseChatRepository -import ac.cord.auxiliary.compose.database.repository.DatabaseNostrRepository -import ac.cord.auxiliary.compose.database.repository.DatabaseSearchRepository -import ac.cord.auxiliary.compose.managers.AuxDatabaseManager -import ac.cord.auxiliary.compose.ui.composable.CreateProfileScreen -import ac.cord.auxiliary.compose.ui.composable.ChatRoomDetailScreen -import ac.cord.auxiliary.compose.ui.composable.HomeScreen -import ac.cord.auxiliary.compose.ui.composable.ImplementationPendingScreen -import ac.cord.auxiliary.compose.ui.composable.LandingScreen -import ac.cord.auxiliary.compose.ui.composable.LoadingScreen -import ac.cord.auxiliary.compose.ui.composable.NostrEventDetailScreen -import ac.cord.auxiliary.compose.ui.composable.SearchResultScreen -import ac.cord.auxiliary.compose.ui.composable.SearchScreen -import ac.cord.auxiliary.compose.ui.composable.SignInToProfileScreen -import ac.cord.auxiliary.compose.ui.composable.SocialPreconditionScreen -import ac.cord.auxiliary.compose.ui.composable.SovereignWalletStartupScreen -import ac.cord.auxiliary.compose.ui.composable.UnannouncedProfileScreen -import ac.cord.auxiliary.compose.ui.composable.UnindexedProfileScreen -import ac.cord.auxiliary.compose.ui.composable.UnqueuedProfileScreen -import ac.cord.auxiliary.compose.ui.composable.UnqueuedProfileSynchronizationScreen -import ac.cord.auxiliary.compose.ui.composable.UnsignedProfileScreen -import ac.cord.auxiliary.compose.ui.composable.UnsyncedProfileScreen -import ac.cord.auxiliary.compose.ui.composable.WriteNewNoteScreen -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.BlankRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.CreateProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.FeedRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ImplementationPendingRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.LandingRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.LoadingRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SearchResultRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SearchRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SignInRoute import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.toRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SocialPreconditionRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.SovereignWalletStartupRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnannouncedProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnindexedProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnqueuedProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnqueuedProfileSynchronizationRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnsignedProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.UnsyncedProfileRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.WriteNewNoteRoute -import ac.cord.auxiliary.compose.ui.view.model.NavigationViewModel -import ac.cord.auxiliary.compose.ui.view.model.NotaryViewModel -import ac.cord.auxiliary.compose.ui.view.model.SovereignWalletViewModel -import ac.cord.auxiliary.compose.ui.view.model.SynchronizationViewModel -import ac.cord.auxiliary.compose.ui.view.state.NavigationUIState -import ac.cord.auxiliary.compose.ui.view.state.NostrEventDetailUIState -import ac.cord.auxiliary.compose.ui.view.state.SearchUIState +import at.torch.compose.ui.composable.navigation.routes.WriteNewNoteRoute import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.compose.composable import co.touchlab.kermit.Logger import fr.acinq.phoenix.PhoenixGlobal import kotlinx.coroutines.CoroutineExceptionHandler @@ -74,8 +24,8 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch @Composable -fun AuxNavHost( - auxGlobal: AuxGlobal, +fun TorchNavHost( + torchGlobal: at.torch.compose.TorchGlobal, phoenixGlobal: PhoenixGlobal, navController: NavHostController ) { @@ -91,37 +41,41 @@ fun AuxNavHost( val lifecycleOwner = LocalLifecycleOwner.current - val auxDatabaseManager = AuxDatabaseManager(auxGlobal) + val auxDatabaseManager = + _root_ide_package_.at.torch.compose.managers.AuxDatabaseManager(torchGlobal) - val databaseNostrRepository = DatabaseNostrRepository( - database = auxDatabaseManager.auxDatabase, - applicationIOScope - ) - val databaseChatRepository = DatabaseChatRepository( - database = auxDatabaseManager.auxDatabase, - applicationIOScope - ) + val databaseNostrRepository = + _root_ide_package_.at.torch.compose.database.repository.DatabaseNostrRepository( + database = auxDatabaseManager.auxDatabase, + applicationIOScope + ) + val databaseChatRepository = + _root_ide_package_.at.torch.compose.database.repository.DatabaseChatRepository( + database = auxDatabaseManager.auxDatabase, + applicationIOScope + ) - val searchRepository = DatabaseSearchRepository( - database = auxDatabaseManager.auxDatabase - ) + val searchRepository = + _root_ide_package_.at.torch.compose.database.repository.DatabaseSearchRepository( + database = auxDatabaseManager.auxDatabase + ) - val sovereignWalletViewModel: SovereignWalletViewModel = viewModel(factory = SovereignWalletViewModel.factory( + val sovereignWalletViewModel: at.torch.compose.ui.view.model.SovereignWalletViewModel = viewModel(factory = _root_ide_package_.at.torch.compose.ui.view.model.SovereignWalletViewModel.Companion.factory( phoenixGlobal = phoenixGlobal )) - val navigationViewModel: NavigationViewModel = viewModel ( - factory = NavigationViewModel.factory( + val navigationViewModel: at.torch.compose.ui.view.model.NavigationViewModel = viewModel ( + factory = _root_ide_package_.at.torch.compose.ui.view.model.NavigationViewModel.Companion.factory( activeWallet = sovereignWalletViewModel.activeWalletInUI, - initialNavigationUIState = NavigationUIState.Loading(), + initialNavigationUIState = _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.Loading(), nostrRepository = databaseNostrRepository, scope = applicationIOScope ) ) - val notaryViewModel: NotaryViewModel = viewModel( - factory = NotaryViewModel.factory( + val notaryViewModel: at.torch.compose.ui.view.model.NotaryViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.NotaryViewModel.Companion.factory( activeWalletStateFlow = sovereignWalletViewModel.activeWalletInUI, nostrRepository = databaseNostrRepository, chatRepository = databaseChatRepository, @@ -129,8 +83,8 @@ fun AuxNavHost( ) ) // TODO: Produce a notary UI Element... - val synchronizationViewModel: SynchronizationViewModel = viewModel( - factory = SynchronizationViewModel.factory( + val synchronizationViewModel: at.torch.compose.ui.view.model.SynchronizationViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.SynchronizationViewModel.Companion.factory( activeWalletStateFlow = sovereignWalletViewModel.activeWalletInUI, nostrRepository = databaseNostrRepository, chatRepository = databaseChatRepository, @@ -143,92 +97,94 @@ fun AuxNavHost( LaunchedEffect(lifecycleOwner) { navigationViewModel.navigationUIState.collect { state -> when (state) { - is NavigationUIState.Error -> { + is at.torch.compose.ui.view.state.NavigationUIState.Error -> { navController.navigate( - route = ImplementationPendingRoute("Error screen") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "Error screen" + ) ) { popUpTo(0) } } - is NavigationUIState.StartupPhoenix -> { + is at.torch.compose.ui.view.state.NavigationUIState.StartupPhoenix -> { navController.navigate( - route = SovereignWalletStartupRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.SovereignWalletStartupRoute ) { popUpTo(0) } } - is NavigationUIState.Loading -> { + is at.torch.compose.ui.view.state.NavigationUIState.Loading -> { navController.navigate( - route = LoadingRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LoadingRoute( text = state.text ) ) { popUpTo(0) } } - is NavigationUIState.Landing -> { + is at.torch.compose.ui.view.state.NavigationUIState.Landing -> { navController.navigate( - route = LandingRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LandingRoute ) { popUpTo(0) } } - is NavigationUIState.UnsignedProfile -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnsignedProfile -> { navController.navigate( - route = UnsignedProfileRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnsignedProfileRoute( state.unsignedNostrEvent.id ) ) { popUpTo(0) } } - is NavigationUIState.UnsyncedProfile -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnsyncedProfile -> { navController.navigate( - route = UnsyncedProfileRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnsyncedProfileRoute( state.unsignedNostrEvent.pubKey ) ) { popUpTo(0) } } - is NavigationUIState.UnqueuedProfileSynchronization -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnqueuedProfileSynchronization -> { navController.navigate( - route = UnqueuedProfileSynchronizationRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnqueuedProfileSynchronizationRoute( unsignedNostrEventId = state.unsignedNostrEvent.id, - publicKey = state.unsignedNostrEvent.pubKey + publicKey = state.unsignedNostrEvent.pubKey ) ) { popUpTo(0) } } - is NavigationUIState.UnindexedProfile -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnindexedProfile -> { navController.navigate( - route = UnindexedProfileRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnindexedProfileRoute( state.nostrEvent.id ) ) { popUpTo(0) } } - is NavigationUIState.UnqueuedProfile -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnqueuedProfile -> { navController.navigate( - route = UnqueuedProfileRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnqueuedProfileRoute( state.profile.nostrEventId ) ) } - is NavigationUIState.UnannouncedProfile -> { + is at.torch.compose.ui.view.state.NavigationUIState.UnannouncedProfile -> { navController.navigate( - route = UnannouncedProfileRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.UnannouncedProfileRoute( state.broadcastNostrEventRequest.nostrEventId ) ) { popUpTo(0) } } - is NavigationUIState.ProfileLoaded -> { + is at.torch.compose.ui.view.state.NavigationUIState.ProfileLoaded -> { navController.navigate( - route = SocialPreconditionRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.SocialPreconditionRoute( activeUserPubkey = state.publicKey ) ) { @@ -237,7 +193,9 @@ fun AuxNavHost( } else -> { navController.navigate( - route = ImplementationPendingRoute("Unsupported $state") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "Unsupported $state" + ) ) { popUpTo(0) } @@ -248,26 +206,26 @@ fun AuxNavHost( NavHost( navController = navController, - startDestination = LoadingRoute() + startDestination = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LoadingRoute() ) { - composable { - SovereignWalletStartupScreen( + composable { + _root_ide_package_.at.torch.compose.ui.composable.SovereignWalletStartupScreen( sovereignWalletViewModel = sovereignWalletViewModel, onNavigateToWalletLandingPage = { navController.navigate( - route = LoadingRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LoadingRoute( text = "Loading Aux" ) ) }, onNavigateToWalletIntroPage = { navController.navigate( - route = LandingRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LandingRoute ) }, onNavigateToWalletDashboard = { navController.navigate( - route = LoadingRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.LoadingRoute( text = "Opening Aux" ) ) @@ -275,37 +233,39 @@ fun AuxNavHost( forceWalletId = null, ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - LoadingScreen( + _root_ide_package_.at.torch.compose.ui.composable.LoadingScreen( text = route.text ) } - composable { - LandingScreen( + composable { + _root_ide_package_.at.torch.compose.ui.composable.LandingScreen( onNavigateToLearnMore = { navController.navigate( - route = ImplementationPendingRoute("Learn more") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "Learn more" + ) ) }, onNavigateToSignIn = { navController.navigate( - route = SignInRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.SignInRoute ) }, onNavigateToCreateProfile = { navController.navigate( - route = CreateProfileRoute() + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.CreateProfileRoute() ) } ) } - composable { - CreateProfileScreen( + composable { + _root_ide_package_.at.torch.compose.ui.composable.CreateProfileScreen( onNavigateToEndThis = { navController.navigate( - route = BlankRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.BlankRoute ) { popUpTo(0) } @@ -321,7 +281,7 @@ fun AuxNavHost( sovereignWalletViewModel.listAvailableWallets { sovereignWalletViewModel.switchToWallet(walletId) navController.navigate( - route = SovereignWalletStartupRoute + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.SovereignWalletStartupRoute ) } } @@ -332,7 +292,7 @@ fun AuxNavHost( } composable { backStackEntry -> val route = backStackEntry.toRoute() - WriteNewNoteScreen( + _root_ide_package_.at.torch.compose.ui.composable.WriteNewNoteScreen( replyToNostrEventId = route.inReplyToEventId, activeUserPublicKey = route.activeUserPublicKey, quotedNostrEventId = route.quotedEventId, @@ -343,7 +303,7 @@ fun AuxNavHost( }, onNavigateToNostrEvent = { hexKey -> navController.navigate( - route = NostrEventDetailRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = route.activeUserPublicKey, nostrEventId = hexKey ) @@ -352,66 +312,70 @@ fun AuxNavHost( nostrRepository = databaseNostrRepository ) } - composable { - SignInToProfileScreen( + composable { + _root_ide_package_.at.torch.compose.ui.composable.SignInToProfileScreen( nostrRepository = databaseNostrRepository ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - UnsignedProfileScreen() + _root_ide_package_.at.torch.compose.ui.composable.UnsignedProfileScreen() } - composable { backStackEntry -> - val route = backStackEntry.toRoute() - UnsyncedProfileScreen( + composable { backStackEntry -> + val route = backStackEntry.toRoute() + _root_ide_package_.at.torch.compose.ui.composable.UnsyncedProfileScreen( unsyncedProfilePublicKey = route.publicKey ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() - UnqueuedProfileSynchronizationScreen( + composable { backStackEntry -> + val route = backStackEntry.toRoute() + _root_ide_package_.at.torch.compose.ui.composable.UnqueuedProfileSynchronizationScreen( unsignedNostrEventId = route.unsignedNostrEventId, profilePublicKey = route.publicKey, nostrRepository = databaseNostrRepository ) } - composable { - UnindexedProfileScreen() + composable { + _root_ide_package_.at.torch.compose.ui.composable.UnindexedProfileScreen() } - composable { - UnqueuedProfileScreen() + composable { + _root_ide_package_.at.torch.compose.ui.composable.UnqueuedProfileScreen() } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - UnannouncedProfileScreen() + _root_ide_package_.at.torch.compose.ui.composable.UnannouncedProfileScreen() } - composable { backStackEntry -> - val route = backStackEntry.toRoute() - SocialPreconditionScreen( + composable { backStackEntry -> + val route = backStackEntry.toRoute() + _root_ide_package_.at.torch.compose.ui.composable.SocialPreconditionScreen( onNavigateToSkipForNow = { navController.navigate( - route = FeedRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.FeedRoute( activeUserPublicKey = route.activeUserPubkey ) ) }, onNavigateToInviteFriend = { navController.navigate( - route = ImplementationPendingRoute("Invite Friend") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "Invite Friend" + ) ) }, onNavigateToViewInvites = { navController.navigate( - route = ImplementationPendingRoute("View invites") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "View invites" + ) ) } ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() - HomeScreen( + composable { backStackEntry -> + val route = backStackEntry.toRoute() + _root_ide_package_.at.torch.compose.ui.composable.HomeScreen( activeUserPublicKey = route.activeUserPublicKey, onNavigateToEvent = { eventRoute -> navController.navigate( @@ -427,7 +391,7 @@ fun AuxNavHost( }, onNavigateToSearch = { navController.navigate( - route = SearchRoute( + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.SearchRoute( activeUserPublicKey = route.activeUserPublicKey ) ) @@ -441,7 +405,7 @@ fun AuxNavHost( chatRepository = databaseChatRepository ) } - composable { + composable { Surface( modifier = Modifier.fillMaxSize(), color = Color.Black @@ -449,10 +413,10 @@ fun AuxNavHost( } } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - ChatRoomDetailScreen( + _root_ide_package_.at.torch.compose.ui.composable.ChatRoomDetailScreen( activeUserPublicKey = route.activeUserPublicKey, publicKey = route.directMessageIdentifier, relayHint = route.relayHint, @@ -460,12 +424,12 @@ fun AuxNavHost( chatRepository = databaseChatRepository ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - SearchScreen( + _root_ide_package_.at.torch.compose.ui.composable.SearchScreen( activeUserPublicKey = route.activeUserPublicKey, - initialSearchUIState = SearchUIState.Prompt, + initialSearchUIState = _root_ide_package_.at.torch.compose.ui.view.state.SearchUIState.Prompt, nostrRepository = databaseNostrRepository, searchRepository = searchRepository, onNavigateToProfile = { route -> @@ -480,10 +444,10 @@ fun AuxNavHost( } ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - SearchResultScreen( + _root_ide_package_.at.torch.compose.ui.composable.SearchResultScreen( activeUserPublicKey = route.activeUserPublicKey, searchQuery = route.query, nostrRepository = databaseNostrRepository, @@ -498,12 +462,12 @@ fun AuxNavHost( } ) } - composable { backStackEntry -> - val route = backStackEntry.toRoute() + composable { backStackEntry -> + val route = backStackEntry.toRoute() - NostrEventDetailScreen( + _root_ide_package_.at.torch.compose.ui.composable.NostrEventDetailScreen( activeUserPublicKey = route.activeUserPublicKey, - initialNostrEventDetailUIState = NostrEventDetailUIState.Loading, + initialNostrEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loading, nostrEventId = route.nostrEventId, nostrRepository = databaseNostrRepository, onNavigateBack = { @@ -524,7 +488,9 @@ fun AuxNavHost( }, onNavigateToEditProfile = { navController.navigate( - route = ImplementationPendingRoute("Edit Profile") + route = _root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute( + "Edit Profile" + ) ) }, onNavigateToQuoteNostrEvent = { nostrEventId -> @@ -542,9 +508,9 @@ fun AuxNavHost( }, ) } - composable { backStackEntry -> - val route: ImplementationPendingRoute = backStackEntry.toRoute() - ImplementationPendingScreen( + composable { backStackEntry -> + val route: at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute = backStackEntry.toRoute() + _root_ide_package_.at.torch.compose.ui.composable.ImplementationPendingScreen( route.name ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt index c9217b7f..0accd5cc 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/AuthenticatedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/BlankRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/BlankRoute.kt new file mode 100755 index 00000000..57bdd0c0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/BlankRoute.kt @@ -0,0 +1,6 @@ +package at.torch.compose.ui.composable.navigation.routes + +import kotlinx.serialization.Serializable + +@Serializable +object BlankRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt index 025b3cc0..b498fd49 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ChatRoomDetailRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/CreateProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/CreateProfileRoute.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/CreateProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/CreateProfileRoute.kt index 7e6868c5..79bfdab8 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/CreateProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/CreateProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/FeedRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/FeedRoute.kt similarity index 60% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/FeedRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/FeedRoute.kt index 01fc3bb3..3145863f 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/FeedRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/FeedRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt index 5a593041..d5db557c 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/ImplementationPendingRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LandingRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LandingRoute.kt new file mode 100755 index 00000000..c37b8e3a --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LandingRoute.kt @@ -0,0 +1,6 @@ +package at.torch.compose.ui.composable.navigation.routes + +import kotlinx.serialization.Serializable + +@Serializable +object LandingRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LoadingRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LoadingRoute.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LoadingRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LoadingRoute.kt index a5e82bea..09889b92 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/LoadingRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/LoadingRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt similarity index 71% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt index 758edf8b..50bda11f 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/NostrEventDetailRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/Route.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/Route.kt new file mode 100755 index 00000000..1374a360 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/Route.kt @@ -0,0 +1,3 @@ +package at.torch.compose.ui.composable.navigation.routes + +abstract class Route \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchResultRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchResultRoute.kt similarity index 65% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchResultRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchResultRoute.kt index 3e959c8b..a3154280 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchResultRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchResultRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchRoute.kt similarity index 61% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchRoute.kt index 53959cf2..3a84cc83 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SearchRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SearchRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SignInRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SignInRoute.kt new file mode 100755 index 00000000..4c2d4f5b --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SignInRoute.kt @@ -0,0 +1,6 @@ +package at.torch.compose.ui.composable.navigation.routes + +import kotlinx.serialization.Serializable + +@Serializable +object SignInRoute: Route() \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt similarity index 62% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt index a8c18f57..b6ada992 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SocialPreconditionRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt new file mode 100644 index 00000000..c4a8acb9 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/SovereignWalletStartupRoute.kt @@ -0,0 +1,6 @@ +package at.torch.compose.ui.composable.navigation.routes + +import kotlinx.serialization.Serializable + +@Serializable +data object SovereignWalletStartupRoute \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt index 29e75a46..9e8e14b3 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnannouncedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt index a286c58f..e5fbaa5c 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnindexedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt index a1cc60cf..48ed8c63 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt index 3a9c7357..c7f60eb1 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnqueuedProfileSynchronizationRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt index 9ebaaee3..b7e53bb6 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsignedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt similarity index 66% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt index 11fe5e84..8ccbf8ee 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/UnsyncedProfileRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt index da05fd87..3e850526 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/navigation/routes/WriteNewNoteRoute.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.navigation.routes +package at.torch.compose.ui.composable.navigation.routes import kotlinx.serialization.Serializable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/LoadingDataIndicator.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/LoadingDataIndicator.kt similarity index 93% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/LoadingDataIndicator.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/LoadingDataIndicator.kt index de2980e3..ff2d5ca7 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/LoadingDataIndicator.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/LoadingDataIndicator.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets +package at.torch.compose.ui.composable.widgets -import ac.cord.auxiliary.compose.ui.theme.AuxTheme import androidx.compose.foundation.layout.* import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme @@ -58,7 +57,7 @@ fun LoadingDataIndicator( @Preview @Composable private fun TransferHistoryScreenPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface(modifier = Modifier.fillMaxSize()) { LoadingDataIndicator( text = "Starting up" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/buttons/Clickable.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/buttons/Clickable.kt similarity index 100% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/buttons/Clickable.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/buttons/Clickable.kt diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/coil/forwardingPainter.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/coil/forwardingPainter.kt similarity index 96% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/coil/forwardingPainter.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/coil/forwardingPainter.kt index 712fd3d7..13a0aa7e 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/coil/forwardingPainter.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/coil/forwardingPainter.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.coil +package at.torch.compose.ui.composable.widgets.coil import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.DefaultAlpha diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ArticleCard.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ArticleCard.kt similarity index 88% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ArticleCard.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ArticleCard.kt index 370332a3..b4647103 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ArticleCard.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ArticleCard.kt @@ -1,17 +1,13 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.formatQuotedTimestamp -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -21,20 +17,15 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @Composable private fun ArticleCard( - localNostrEvent: LocalNostrEvent, + localNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent, dTag: String, author: String, relayHints: List, @@ -136,7 +127,11 @@ private fun ArticleCard( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(top = 6.dp) ) { - ProfileAvatar(profile = profile, publicKey = localNostrEvent.nostrEvent.pubKey, size = 20.dp) + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( + profile = profile, + publicKey = localNostrEvent.nostrEvent.pubKey, + size = 20.dp + ) Spacer(Modifier.width(6.dp)) val displayName = profile?.humanReadableNameOrPubkey() ?: "${author.take(8)}...${author.takeLast(4)}" @@ -152,7 +147,11 @@ private fun ArticleCard( ) if (publishedAt != null) { Text( - text = " \u00b7 ${formatQuotedTimestamp(publishedAt)}", + text = " \u00b7 ${ + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.formatQuotedTimestamp( + publishedAt + ) + }", style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f) ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Constants.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Constants.kt similarity index 91% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Constants.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Constants.kt index 81b5f505..7b4c9cb2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Constants.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Constants.kt @@ -1,10 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import androidx.collection.LruCache -import fr.acinq.lightning.payment.Bolt11Invoice -import io.ktor.http.Url -import io.ktor.http.fullPath -import kotlinx.coroutines.flow.MutableStateFlow object Constants { internal const val INLINE_CONTENT_TAG = "androidx.compose.foundation.text.inlineContent" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentParser.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentParser.kt similarity index 68% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentParser.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentParser.kt index f40d001b..afd02ea9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentParser.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentParser.kt @@ -1,16 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.audioExtensions -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.imageExtensions -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.videoExtensions -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.classifyByMime -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.isBlossomUrl -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.isStandaloneUrl -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.splitTextForEmojis -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.splitTextForInvoices -import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip19Bech32.Nip19Parser -import com.vitorpamplona.quartz.nip19Bech32.entities.Entity import com.vitorpamplona.quartz.nip19Bech32.entities.NAddress import com.vitorpamplona.quartz.nip19Bech32.entities.NEvent import com.vitorpamplona.quartz.nip19Bech32.entities.NNote @@ -40,17 +30,26 @@ internal object ContentParser { } else if (!bareDomainCapture.isNullOrEmpty() && !token.startsWith("http")) { val url = "https://$bareDomainCapture" val meta = imetaMap[url] - val imetaMime = meta?.mime?.let { classifyByMime(it) } + val imetaMime = meta?.mime?.let { + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.classifyByMime( + it + ) + } val ext = url.substringAfterLast('.').substringBefore('?').lowercase() when { imetaMime == "image" -> segments.add(ContentSegment.ImageSegment(meta!!)) imetaMime == "video" -> segments.add(ContentSegment.VideoSegment(meta!!)) imetaMime == "audio" -> segments.add(ContentSegment.AudioSegment(meta!!)) - ext in imageExtensions -> segments.add(ContentSegment.ImageSegment(meta ?: MediaMeta(url))) - ext in videoExtensions -> segments.add(ContentSegment.VideoSegment(meta ?: MediaMeta(url))) - ext in audioExtensions -> segments.add(ContentSegment.AudioSegment(meta ?: MediaMeta(url))) - isBlossomUrl(url) -> segments.add(ContentSegment.UnknownMediaSegment(meta ?: MediaMeta(url))) - isStandaloneUrl(content, match.range) -> segments.add(ContentSegment.LinkSegment(url)) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.imageExtensions -> segments.add(ContentSegment.ImageSegment(meta ?: MediaMeta(url))) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.videoExtensions -> segments.add(ContentSegment.VideoSegment(meta ?: MediaMeta(url))) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.audioExtensions -> segments.add(ContentSegment.AudioSegment(meta ?: MediaMeta(url))) + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.isBlossomUrl( + url + ) -> segments.add(ContentSegment.UnknownMediaSegment(meta ?: MediaMeta(url))) + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.isStandaloneUrl( + content, + match.range + ) -> segments.add(ContentSegment.LinkSegment(url)) else -> segments.add(ContentSegment.InlineLinkSegment(url)) } }else if (token.startsWith("nostr:")) { @@ -97,15 +96,19 @@ internal object ContentParser { val url = token.trimEnd('.', ',', ')', ']', ';', ':', '!', '?') val isWebSocket = url.startsWith("wss://") || url.startsWith("ws://") val meta = imetaMap[url] - val imetaMime = meta?.mime?.let { classifyByMime(it) } + val imetaMime = meta?.mime?.let { + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.classifyByMime( + it + ) + } val ext = url.substringAfterLast('.').substringBefore('?').lowercase() when { imetaMime == "image" -> segments.add(ContentSegment.ImageSegment(meta!!)) imetaMime == "video" -> segments.add(ContentSegment.VideoSegment(meta!!)) imetaMime == "audio" -> segments.add(ContentSegment.AudioSegment(meta!!)) - ext in imageExtensions -> segments.add(ContentSegment.ImageSegment(meta ?: MediaMeta(url))) - ext in videoExtensions -> segments.add(ContentSegment.VideoSegment(meta ?: MediaMeta(url))) - ext in audioExtensions -> segments.add(ContentSegment.AudioSegment(meta ?: MediaMeta(url))) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.imageExtensions -> segments.add(ContentSegment.ImageSegment(meta ?: MediaMeta(url))) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.videoExtensions -> segments.add(ContentSegment.VideoSegment(meta ?: MediaMeta(url))) + ext in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.audioExtensions -> segments.add(ContentSegment.AudioSegment(meta ?: MediaMeta(url))) // TODO: Support websockets // isWebSocket && '\'' in url -> { // val parsed = Nip29.parseGroupIdentifier(url) @@ -113,8 +116,13 @@ internal object ContentParser { // else segments.add(ContentSegment.InlineLinkSegment(url)) // } isWebSocket -> segments.add(ContentSegment.InlineLinkSegment(url)) - isBlossomUrl(url) -> segments.add(ContentSegment.UnknownMediaSegment(meta ?: MediaMeta(url))) - isStandaloneUrl(content, match.range) -> segments.add(ContentSegment.LinkSegment(url)) + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.isBlossomUrl( + url + ) -> segments.add(ContentSegment.UnknownMediaSegment(meta ?: MediaMeta(url))) + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.isStandaloneUrl( + content, + match.range + ) -> segments.add(ContentSegment.LinkSegment(url)) else -> segments.add(ContentSegment.InlineLinkSegment(url)) } } @@ -132,7 +140,12 @@ internal object ContentParser { val result = mutableListOf() for (segment in segments) { if (segment is ContentSegment.TextSegment) { - result.addAll(splitTextForEmojis(segment.text, emojiMap)) + result.addAll( + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.splitTextForEmojis( + segment.text, + emojiMap + ) + ) } else { result.add(segment) } @@ -144,7 +157,11 @@ internal object ContentParser { val finalResult = mutableListOf() for (segment in afterEmoji) { if (segment is ContentSegment.TextSegment) { - finalResult.addAll(splitTextForInvoices(segment.text)) + finalResult.addAll( + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.splitTextForInvoices( + segment.text + ) + ) } else { finalResult.add(segment) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentSegment.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentSegment.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentSegment.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentSegment.kt index 62bb6c4d..ea670072 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ContentSegment.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ContentSegment.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import com.vitorpamplona.quartz.nip01Core.relay.normalizer.normalizeRelayUrl import com.vitorpamplona.quartz.nip19Bech32.entities.NAddress diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/FullScreenImageViewer.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/FullScreenImageViewer.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/FullScreenImageViewer.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/FullScreenImageViewer.kt index 0fc0a1ea..88fb6285 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/FullScreenImageViewer.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/FullScreenImageViewer.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.ContentCopy -import androidx.compose.material.icons.filled.Download import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.IconButtonDefaults @@ -38,7 +37,6 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import coil3.compose.AsyncImage -import kotlinx.coroutines.launch @Composable fun FullScreenImageViewer( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Helpers.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Helpers.kt similarity index 83% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Helpers.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Helpers.kt index 91b021d8..394489f6 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/Helpers.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/Helpers.kt @@ -1,19 +1,10 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.audioMimeTypes -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.blossomPathRegex -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.bolt11Regex -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.emojiShortcodeRegex -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.imageMimeTypes -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.ogCache -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.videoMimeTypes import com.vitorpamplona.quartz.nip68Picture.PictureEvent import com.vitorpamplona.quartz.nip71Video.VideoNormalEvent import com.vitorpamplona.quartz.nip71Video.VideoShortEvent import fr.acinq.lightning.payment.Bolt11Invoice import io.ktor.http.Url -import io.ktor.http.cio.Request import io.ktor.http.fullPath import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -25,7 +16,7 @@ internal object Helpers { return try { val uri = Url(url) val path = uri.fullPath ?: return false - blossomPathRegex.matches(path) + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.blossomPathRegex.matches(path) } catch (_: Exception) { false } @@ -49,16 +40,16 @@ internal object Helpers { fun classifyByMime(mime: String): String? = when { - imageMimeTypes.any { mime.startsWith(it) } -> "image" - videoMimeTypes.any { mime.startsWith(it) } -> "video" - audioMimeTypes.any { mime.startsWith(it) } -> "audio" + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.imageMimeTypes.any { mime.startsWith(it) } -> "image" + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.videoMimeTypes.any { mime.startsWith(it) } -> "video" + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.audioMimeTypes.any { mime.startsWith(it) } -> "audio" else -> null } fun splitTextForEmojis(text: String, emojiMap: Map): List { val result = mutableListOf() var lastEnd = 0 - for (match in emojiShortcodeRegex.findAll(text)) { + for (match in _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.emojiShortcodeRegex.findAll(text)) { val shortcode = match.groupValues[1] val url = emojiMap[shortcode] ?: continue if (match.range.first > lastEnd) { @@ -76,7 +67,7 @@ internal object Helpers { } fun splitTextForInvoices(text: String): List { - val matches = bolt11Regex.findAll(text).toList() + val matches = _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.bolt11Regex.findAll(text).toList() if (matches.isEmpty()) return listOf(ContentSegment.TextSegment(text)) val result = mutableListOf() var lastEnd = 0 @@ -120,7 +111,7 @@ internal object Helpers { } suspend fun fetchOgData(url: String): OgData? = withContext(Dispatchers.IO) { - ogCache.get(url)?.let { return@withContext it } + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.ogCache.get(url)?.let { return@withContext it } null // TODO: YouTube blocks bot User-Agents; use their oEmbed API instead @@ -170,7 +161,7 @@ internal object Helpers { // } } - fun isGalleryEvent(event: NostrEvent): Boolean = event.kind in arrayOf( + fun isGalleryEvent(event: at.torch.compose.database.model.NostrEvent): Boolean = event.kind in arrayOf( PictureEvent.KIND, VideoNormalEvent.KIND, VideoShortEvent.KIND diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ImageWithContextMenu.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ImageWithContextMenu.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ImageWithContextMenu.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ImageWithContextMenu.kt index 35eb689f..007b4ff9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/ImageWithContextMenu.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/ImageWithContextMenu.kt @@ -1,8 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.ui.BlurHashDecoder import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -25,18 +23,14 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.unit.dp -import coil3.asImage @kotlin.OptIn(ExperimentalFoundationApi::class) @Composable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/InvoicePayState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/InvoicePayState.kt similarity index 52% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/InvoicePayState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/InvoicePayState.kt index ad15beba..173c3435 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/InvoicePayState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/InvoicePayState.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content internal enum class InvoicePayState { Idle, Paying, Success, Failed diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LightningInvoiceCard.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LightningInvoiceCard.kt similarity index 99% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LightningInvoiceCard.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LightningInvoiceCard.kt index 66d8115b..00f87e07 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LightningInvoiceCard.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LightningInvoiceCard.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Column diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LinkPreview.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LinkPreview.kt similarity index 93% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LinkPreview.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LinkPreview.kt index cf410cbe..be3d1786 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LinkPreview.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LinkPreview.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.ogCache -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Helpers.fetchOgData import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column @@ -29,12 +27,15 @@ import io.ktor.http.Url @Composable internal fun LinkPreview(url: String) { - var ogData by remember(url) { mutableStateOf(ogCache.get(url)) } + var ogData by remember(url) { mutableStateOf(_root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.ogCache.get(url)) } val uriHandler = LocalUriHandler.current LaunchedEffect(url) { if (ogData == null) { - ogData = fetchOgData(url) + ogData = + _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Helpers.fetchOgData( + url + ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCard.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCard.kt similarity index 86% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCard.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCard.kt index 74fd7359..717cd21c 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCard.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCard.kt @@ -1,25 +1,20 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable private fun LiveStreamCard( - localNostrEvent: LocalNostrEvent, + localNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent, dTag: String, author: String, relayHints: List, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCardContent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCardContent.kt similarity index 89% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCardContent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCardContent.kt index c16c10e0..e84f2f17 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LiveStreamCardContent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LiveStreamCardContent.kt @@ -1,16 +1,11 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.aspectRatio -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape @@ -19,25 +14,21 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.painter.BitmapPainter -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @Composable internal fun LiveStreamCardContent( - event: NostrEvent?, + event: at.torch.compose.database.model.NostrEvent?, streamUrl: String?, image: String?, title: String?, summary: String?, status: String?, - profile: Profile?, + profile: at.torch.compose.database.model.Profile?, author: String, onProfileClick: ((String) -> Unit)? ) { @@ -140,7 +131,11 @@ internal fun LiveStreamCardContent( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(top = 6.dp) ) { - ProfileAvatar(profile = profile, publicKey = event.pubKey, size = 20.dp) + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( + profile = profile, + publicKey = event.pubKey, + size = 20.dp + ) Spacer(Modifier.width(6.dp)) val displayName = profile?.humanReadableNameOrPubkey() ?: "${author.take(8)}...${author.takeLast(4)}" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LoadingAsyncImage.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LoadingAsyncImage.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LoadingAsyncImage.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LoadingAsyncImage.kt index 3f1d957a..ed26a8c2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/LoadingAsyncImage.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/LoadingAsyncImage.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.combinedClickable diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/MediaMeta.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/MediaMeta.kt similarity index 69% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/MediaMeta.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/MediaMeta.kt index da041e15..8437314f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/MediaMeta.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/MediaMeta.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content data class MediaMeta( val url: String, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/NoteActions.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/NoteActions.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/NoteActions.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/NoteActions.kt index bcd307e7..093a0b48 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/NoteActions.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/NoteActions.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.NostrEvent +import at.torch.compose.database.model.NostrEvent data class NoteActions( val onReply: (NostrEvent) -> Unit = {}, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/OgData.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/OgData.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/OgData.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/OgData.kt index f0e36cda..8b2dc7cd 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/OgData.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/OgData.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content internal data class OgData( val title: String?, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedAddressableNote.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedAddressableNote.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedAddressableNote.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedAddressableNote.kt index 7a229737..5f6348a9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedAddressableNote.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedAddressableNote.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalQuotedNostrEvent import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -22,7 +21,7 @@ import androidx.compose.ui.unit.dp @Composable internal fun QuotedAddressableNote( - localQuotedNostrEvent: LocalQuotedNostrEvent?, + localQuotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent?, kind: Int, dTag: String, author: String, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedNote.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedNote.kt similarity index 86% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedNote.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedNote.kt index a71a0443..8a7c4a97 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/QuotedNote.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/QuotedNote.kt @@ -1,10 +1,9 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalQuotedNostrEvent -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.QuotedRelation +import at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -27,7 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey @Composable fun QuotedNote( - localQuotedNostrEvent: LocalQuotedNostrEvent? = null, + localQuotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent? = null, onNavigateToEvent:(HexKey) -> Unit, noteActions: NoteActions? = null ) { @@ -119,14 +118,14 @@ fun QuotedNote( @Preview @Composable private fun QuotedNotePreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { QuotedNote( - localQuotedNostrEvent = LocalQuotedNostrEvent( - nostrEvent = NostrEvent( + localQuotedNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalQuotedNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6", content = "God is not in the habit of coming down from heaven to solve people’s problems on earth.", pubKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", @@ -134,18 +133,18 @@ private fun QuotedNotePreview() { sig = "hexsig", tags = emptyArray() ), - quotedRelation = QuotedRelation( + quotedRelation = _root_ide_package_.ac.cord.compose.database.model.QuotedRelation( quotingNostrEventId = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520", quotedProfilePublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", quotedNostrEventId = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6" ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Steve Biko" ), ), - onNavigateToEvent = { }, + onNavigateToEvent = { }, noteActions = null ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/RichContent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/RichContent.kt similarity index 92% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/RichContent.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/RichContent.kt index c6f4b210..612a1eb7 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/RichContent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/RichContent.kt @@ -1,18 +1,13 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalMention -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalQuotedNostrEvent -import ac.cord.auxiliary.compose.ui.composable.widgets.content.Constants.INLINE_CONTENT_TAG -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.Mention +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.QuotedRelation +import at.torch.compose.database.model.intermdiate.LocalMention +import at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.selection.SelectionContainer @@ -45,9 +40,9 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey @Composable fun RichContent( - nostrEvent: NostrEvent, - localQuotedNostrEvent: LocalQuotedNostrEvent?, - mentionedProfiles: List, + nostrEvent: at.torch.compose.database.model.NostrEvent, + localQuotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent?, + mentionedProfiles: List, style: TextStyle = MaterialTheme.typography.bodyLarge, color: Color = MaterialTheme.colorScheme.onSurface, linkColor: Color = Color.Unspecified, @@ -181,7 +176,7 @@ fun RichContent( } is ContentSegment.CustomEmojiSegment -> { pushStringAnnotation( - tag = INLINE_CONTENT_TAG, + tag = _root_ide_package_.at.torch.compose.ui.composable.widgets.content.Constants.INLINE_CONTENT_TAG, annotation = seg.shortcode ) append(":${seg.shortcode}:") @@ -208,7 +203,7 @@ fun RichContent( onProfileClick?.invoke(pubkey) } ) { - withStyle(SpanStyle(color = ProfileColor.fromPublicKey(seg.pubkey), textDecoration = linkDecoration)) { + withStyle(SpanStyle(color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(seg.pubkey), textDecoration = linkDecoration)) { append("@${displayName.trimEnd()}") } } @@ -408,7 +403,7 @@ fun RichContent( @Preview @Composable private fun RichContentPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { @@ -417,7 +412,7 @@ private fun RichContentPreview() { ) { RichContent( modifier = Modifier.padding(10.dp), - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520", content = "Something something something nostr:npub1uh366qnj68a7atvwgwdy4569xd6v5jtferftapqztwjwlzh9553q47pqsx\nhttps://www.brainyquote.com/authors/steven-biko-quotes\nnostr:nevent1qqspcusnzxx5u97xht2udvg3yhcq2cvmc0jrxa90lwwdvjplve0atespzpmhxue69uhkummnw3ezuamfdejsyg8h5g639qhuv803hzwexfwhyud6t6suxfu364anddqvrmn9j4cahvxksr8q", pubKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", @@ -425,8 +420,8 @@ private fun RichContentPreview() { sig = "hexsig", tags = emptyArray() ), - localQuotedNostrEvent = LocalQuotedNostrEvent( - nostrEvent = NostrEvent( + localQuotedNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalQuotedNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6", content = "God is not in the habit of coming down from heaven to solve people’s problems on earth.", pubKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", @@ -434,24 +429,24 @@ private fun RichContentPreview() { sig = "hexsig", tags = emptyArray() ), - quotedRelation = QuotedRelation( + quotedRelation = _root_ide_package_.ac.cord.compose.database.model.QuotedRelation( quotingNostrEventId = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520", quotedProfilePublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", quotedNostrEventId = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6" ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Steve Biko" ), ), mentionedProfiles = listOf( - LocalMention( - mention = Mention( + _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalMention( + mention = _root_ide_package_.ac.cord.compose.database.model.Mention( id = 1, mentionedPublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Frank Talk" diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt similarity index 94% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt index c20550dc..4ee78352 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/content/UnsupportedKindBadge.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.content +package at.torch.compose.ui.composable.widgets.content import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.fillMaxWidth diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/MetadataEventDetail.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/MetadataEventDetail.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt index 6e6532cd..33e95539 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/MetadataEventDetail.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/MetadataEventDetail.kt @@ -1,23 +1,10 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.detail +package at.torch.compose.ui.composable.widgets.detail -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ImplementationPendingRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.FeedListViewModel -import ac.cord.auxiliary.compose.ui.view.model.FollowersListViewModel -import ac.cord.auxiliary.compose.ui.view.model.FollowingListViewModel -import ac.cord.auxiliary.compose.ui.view.model.MetadataEventDetailType -import ac.cord.auxiliary.compose.ui.view.model.MetadataEventDetailViewModel -import ac.cord.auxiliary.compose.ui.view.state.FeedListUIState -import ac.cord.auxiliary.compose.ui.view.state.FollowersListUIState -import ac.cord.auxiliary.compose.ui.view.state.FollowingListUIState -import ac.cord.auxiliary.compose.ui.view.state.MetadataEventDetailUIState +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.intermdiate.LocalNostrEvent +import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -67,25 +54,25 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun MetadataEventDetail( - localNostrEvent: LocalNostrEvent, + localNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent, activeUserPublicKey: HexKey, onNavigateBack: () -> Unit, - onNavigateToEvent: (Route) -> Unit, + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, onNavigateToEditProfile: () -> Unit, - onNavigateToChatRoom: (Route) -> Unit, - nostrRepository: NostrRepository + onNavigateToChatRoom: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit, + nostrRepository: at.torch.compose.repository.NostrRepository ) { val scope = rememberCoroutineScope() val profile = localNostrEvent.profile val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) - val metadataEventDetailViewModel: MetadataEventDetailViewModel = viewModel( - factory = MetadataEventDetailViewModel.factory( + val metadataEventDetailViewModel: at.torch.compose.ui.view.model.MetadataEventDetailViewModel = viewModel( + factory = _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailViewModel.Companion.factory( activeUserPublicKey = activeUserPublicKey, publicKey = localNostrEvent.nostrEvent.pubKey, nostrRepository = nostrRepository, - pagerState = rememberPagerState { MetadataEventDetailType.entries.size } + pagerState = rememberPagerState { _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.entries.size } ), ) @@ -156,7 +143,7 @@ fun MetadataEventDetail( horizontalArrangement = Arrangement.spacedBy(10.dp), verticalAlignment = Alignment.CenterVertically ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( size = 75.dp, profile = profile, publicKey = localNostrEvent.nostrEvent.pubKey @@ -168,13 +155,13 @@ fun MetadataEventDetail( ) when(val metadataEventDetailUIState = metadataEventDetailViewModel.metadataEventDetailUIState) { - MetadataEventDetailUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.MetadataEventDetailUIState.Error -> { Icon( Icons.Default.Error, contentDescription = "Something went wrong" ) } - is MetadataEventDetailUIState.Loaded -> { + is at.torch.compose.ui.view.state.MetadataEventDetailUIState.Loaded -> { if (metadataEventDetailViewModel.isActionPending.value) { LoadingIndicator() @@ -221,7 +208,7 @@ fun MetadataEventDetail( } - MetadataEventDetailUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.MetadataEventDetailUIState.Loading -> { LoadingIndicator() } } @@ -229,7 +216,7 @@ fun MetadataEventDetail( IconButton( onClick = { onNavigateToChatRoom.invoke( - ChatRoomDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.ChatRoomDetailRoute( activeUserPublicKey = activeUserPublicKey, directMessageIdentifier = localNostrEvent.nostrEvent.pubKey, relayHint = localNostrEvent.nostrEvent.relayUrl, @@ -264,7 +251,7 @@ fun MetadataEventDetail( edgePadding = 10.dp, selectedTabIndex = metadataEventDetailViewModel.pagerState.currentPage, ) { - MetadataEventDetailType.entries.forEachIndexed { index, destination -> + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.entries.forEachIndexed { index, destination -> Tab( selected = metadataEventDetailViewModel.pagerState.currentPage == index, onClick = { @@ -291,17 +278,17 @@ fun MetadataEventDetail( HorizontalPager( state = metadataEventDetailViewModel.pagerState, ) { pageIndex -> - val metadataEventDetailType = MetadataEventDetailType.entries[pageIndex] + val metadataEventDetailType = _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.entries[pageIndex] when (metadataEventDetailType) { - MetadataEventDetailType.Posts, MetadataEventDetailType.Replies, - MetadataEventDetailType.Articles, MetadataEventDetailType.Zaps, - MetadataEventDetailType.Photos, MetadataEventDetailType.Shorts, MetadataEventDetailType.Videos, - MetadataEventDetailType.Bookmarks, MetadataEventDetailType.Reports, MetadataEventDetailType.Relays -> { - val feedListViewModel: FeedListViewModel = viewModel( + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Posts, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Replies, + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Articles, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Zaps, + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Photos, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Shorts, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Videos, + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Bookmarks, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Reports, _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Relays -> { + val feedListViewModel: at.torch.compose.ui.view.model.FeedListViewModel = viewModel( key = metadataEventDetailType.name, - factory = FeedListViewModel.factory( - initialFeedListUIState = FeedListUIState.Loading, + factory = _root_ide_package_.at.torch.compose.ui.view.model.FeedListViewModel.Companion.factory( + initialFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading, synchronizationFilter = metadataEventDetailViewModel.getSynchronizationFilter(metadataEventDetailType), nostrRepository = nostrRepository ), @@ -319,11 +306,11 @@ fun MetadataEventDetail( } } // TODO: Support gallery feeds... - MetadataEventDetailType.Following -> { - val followingListViewModel: FollowingListViewModel = viewModel( + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Following -> { + val followingListViewModel: at.torch.compose.ui.view.model.FollowingListViewModel = viewModel( key = metadataEventDetailType.name, - factory = FollowingListViewModel.factory( - initialFeedListUIState = FollowingListUIState.Loading, + factory = _root_ide_package_.at.torch.compose.ui.view.model.FollowingListViewModel.Companion.factory( + initialFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowingListUIState.Loading, publicKey = localNostrEvent.nostrEvent.pubKey, synchronizationFilter = metadataEventDetailViewModel.getSynchronizationFilter(metadataEventDetailType), nostrRepository = nostrRepository @@ -342,11 +329,11 @@ fun MetadataEventDetail( followingListViewModel.initiate() } } - MetadataEventDetailType.Followers -> { - val followersListViewModel: FollowersListViewModel = viewModel( + _root_ide_package_.at.torch.compose.ui.view.model.MetadataEventDetailType.Followers -> { + val followersListViewModel: at.torch.compose.ui.view.model.FollowersListViewModel = viewModel( key = metadataEventDetailType.name, - factory = FollowersListViewModel.factory( - initialFeedListUIState = FollowersListUIState.Loading, + factory = _root_ide_package_.at.torch.compose.ui.view.model.FollowersListViewModel.Companion.factory( + initialFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowersListUIState.Loading, publicKey = localNostrEvent.nostrEvent.pubKey, synchronizationFilter = metadataEventDetailViewModel.getSynchronizationFilter(metadataEventDetailType), nostrRepository = nostrRepository @@ -382,14 +369,14 @@ fun MetadataEventDetail( @Composable private fun MetadataEventEventDetailPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { MetadataEventDetail( activeUserPublicKey = "", - localNostrEvent = LocalNostrEvent( - nostrEvent = NostrEvent( + localNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Profile""".trimIndent(), @@ -397,7 +384,7 @@ private fun MetadataEventEventDetailPreview() { sig = "", kind = MetadataEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nip05 = "john@doe.com", @@ -409,7 +396,7 @@ private fun MetadataEventEventDetailPreview() { onNavigateToEvent = {}, onNavigateToEditProfile = {}, onNavigateToChatRoom = {}, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt similarity index 88% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt index 8da4b479..f3327dc7 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt @@ -1,18 +1,11 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.detail +package at.torch.compose.ui.composable.widgets.detail -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme -import ac.cord.auxiliary.compose.ui.view.model.FeedListViewModel -import ac.cord.auxiliary.compose.ui.view.model.InReplyToViewModel -import ac.cord.auxiliary.compose.ui.view.state.FeedListUIState +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.intermdiate.LocalNostrEvent +import at.torch.compose.ui.composable.widgets.content.RichContent +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -36,7 +29,6 @@ import androidx.compose.material.icons.filled.Person import androidx.compose.material.icons.filled.Repeat import androidx.compose.material3.BottomAppBar import androidx.compose.material3.BottomAppBarDefaults -import androidx.compose.material3.BottomAppBarScrollBehavior import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FlexibleBottomAppBar @@ -49,8 +41,6 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment @@ -62,26 +52,24 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent -import com.vitorpamplona.quartz.nip18Reposts.RepostEvent -import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun TextNoteEventDetail( - localNostrEvent: LocalNostrEvent, + localNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent, onNavigateBack: () -> Unit, - nostrRepository: NostrRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, onNavigateToWriteAReply: (String) -> Unit, onNavigateToNostrEvent: (HexKey) -> Unit, ) { val scrollBehavior = BottomAppBarDefaults.exitAlwaysScrollBehavior() - val inReplyToNostrEventFeedListViewModel: InReplyToViewModel = viewModel( + val inReplyToNostrEventFeedListViewModel: at.torch.compose.ui.view.model.InReplyToViewModel = viewModel( key = "replies-${localNostrEvent.nostrEvent.id}", - factory = InReplyToViewModel.factory( + factory = _root_ide_package_.at.torch.compose.ui.view.model.InReplyToViewModel.Companion.factory( nostrEvent = localNostrEvent.nostrEvent, profile = localNostrEvent.profile, - initialFeedListUIState = FeedListUIState.Loading, + initialFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading, nostrRepository = nostrRepository, createdAt = localNostrEvent.nostrEvent.createdAt ), @@ -135,7 +123,7 @@ fun TextNoteEventDetail( Icon( Icons.Default.Person, contentDescription = "User profile", - tint = ProfileColor.fromPublicKey("profile") + tint = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey("profile") ) // ProfileAvatar( // profile = localProfile.profile, @@ -219,7 +207,7 @@ fun TextNoteEventDetail( ) { val profile = localNostrEvent.profile - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( profile = localNostrEvent.profile, publicKey = localNostrEvent.nostrEvent.pubKey ) @@ -236,7 +224,7 @@ fun TextNoteEventDetail( Text( text = staticIdentifier, style = MaterialTheme.typography.labelMedium, - color = ProfileColor.fromProfile( + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromProfile( profile ) ) @@ -266,7 +254,7 @@ fun TextNoteEventDetail( } } - RichContent( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.content.RichContent( modifier = Modifier.fillMaxWidth().padding( horizontal = 20.dp ), @@ -353,7 +341,7 @@ fun TextNoteEventDetail( } when (val inReplyToFeedListUIState = inReplyToNostrEventFeedListViewModel.inReplyToFeedListUIState) { - is FeedListUIState.Loaded -> { + is at.torch.compose.ui.view.state.FeedListUIState.Loaded -> { if (inReplyToFeedListUIState.localNostrEvents.isEmpty()) { item { Text( @@ -371,14 +359,14 @@ fun TextNoteEventDetail( } } } - FeedListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Error -> { item { Text( text = "Something went wrong" ) } } - FeedListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading -> { item { LoadingIndicator() } @@ -397,13 +385,13 @@ fun TextNoteEventDetail( @Composable private fun TextNoteEventDetailPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { TextNoteEventDetail( - localNostrEvent = LocalNostrEvent( - nostrEvent = NostrEvent( + localNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "eventId", pubKey = "publicKey", content = """Lorem Ipsum is simply dummy text of the printing and typesetting industry. @@ -415,7 +403,7 @@ It has survived not only five centuries, but also the leap into electronic types sig = "", kind = TextNoteEvent.KIND ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "pubKey", displayName = "John Doe", nip05 = "john@doe.me", @@ -425,7 +413,7 @@ It has survived not only five centuries, but also the leap into electronic types onNavigateBack = {}, onNavigateToWriteAReply = {}, onNavigateToNostrEvent = {}, - nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY + nostrRepository = _root_ide_package_.at.torch.compose.repository.NostrRepository.Companion.NO_OP_NOSTR_REPOSITORY ) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/dialogs/BottomSheetDialog.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/dialogs/BottomSheetDialog.kt similarity index 100% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/dialogs/BottomSheetDialog.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/dialogs/BottomSheetDialog.kt diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/EventListView.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/EventListView.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/EventListView.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/EventListView.kt index 662402e1..0a8f9a83 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/EventListView.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/EventListView.kt @@ -1,17 +1,13 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.feed +package at.torch.compose.ui.composable.widgets.feed -import ac.cord.auxiliary.compose.database.model.InReplyToRelation -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.RepostedRelation -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalInReplyToNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalRepostedNostrEvent -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.InReplyToRelation +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.RepostedRelation +import at.torch.compose.database.model.intermdiate.LocalInReplyToNostrEvent +import at.torch.compose.database.model.intermdiate.LocalNostrEvent +import at.torch.compose.database.model.intermdiate.LocalRepostedNostrEvent +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -19,24 +15,15 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Repeat -import androidx.compose.material.icons.filled.Sync -import androidx.compose.material3.AssistChip -import androidx.compose.material3.ElevatedCard -import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialShapes import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.SuggestionChip import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.vitorpamplona.quartz.nip01Core.core.HexKey @@ -45,7 +32,7 @@ import com.vitorpamplona.quartz.nip18Reposts.RepostEvent import kotlin.time.Instant @Composable -fun LocalNostrEvent.ListView( +fun at.torch.compose.database.model.intermdiate.LocalNostrEvent.ListView( onNavigateToEvent: (HexKey) -> Unit ) { when (nostrEvent.kind) { @@ -80,7 +67,7 @@ fun LocalNostrEvent.ListView( Text( text = profile?.humanReadableNameOrPubkey() ?: nostrEvent.pubKey, style = MaterialTheme.typography.labelSmall, - color = ProfileColor.fromPublicKey(profile?.publicKey ?: nostrEvent.pubKey) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(profile?.publicKey ?: nostrEvent.pubKey) ) Text( text = "reposted", @@ -141,12 +128,12 @@ fun LocalNostrEvent.ListView( @Preview @Composable private fun EventListViewRepostedPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { - LocalNostrEvent( - nostrEvent = NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Reposting", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -154,13 +141,13 @@ private fun EventListViewRepostedPreview() { sig = "hexsig", tags = emptyArray() ), - localRepostedNostrEvent = LocalRepostedNostrEvent( - repostedRelation = RepostedRelation( + localRepostedNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalRepostedNostrEvent( + repostedRelation = _root_ide_package_.ac.cord.compose.database.model.RepostedRelation( repostingNostrEventId = "hex", repostedNostrEventId = "repostedhex", repostedProfilePublicKey = "reposterHex" ), - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Something something something", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -168,7 +155,7 @@ private fun EventListViewRepostedPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "hesd", nostrEventId = "referenced", displayName = "Frank Talk", @@ -176,7 +163,7 @@ private fun EventListViewRepostedPreview() { ), mentionedProfiles = emptyList() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Steve Biko", @@ -192,12 +179,12 @@ private fun EventListViewRepostedPreview() { @Preview @Composable private fun EventListViewInReplyPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { - LocalNostrEvent( - nostrEvent = NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Reposting", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -205,15 +192,15 @@ private fun EventListViewInReplyPreview() { sig = "hexsig", tags = emptyArray() ), - localInReplyToNostrEvent = LocalInReplyToNostrEvent( - inReplyToRelation = InReplyToRelation( + localInReplyToNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalInReplyToNostrEvent( + inReplyToRelation = _root_ide_package_.ac.cord.compose.database.model.InReplyToRelation( inReplyToNostrEventId = "nostrEvent", inReplyToRootNostrEventId = "rootId", inReplyToProfilePublicKey = "inReplyToProfileKey", inReplyToRootProfilePublicKey = "rootPubKey", replyingNostrEventId = "hex" ), - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Something something something", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -221,7 +208,7 @@ private fun EventListViewInReplyPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "hesd", nostrEventId = "referenced", displayName = "Frank Talk", @@ -229,7 +216,7 @@ private fun EventListViewInReplyPreview() { ), mentionedProfiles = emptyList() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Steve Biko", diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt similarity index 76% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt index ef238969..e0f5fa68 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/feed/TextNoteFeedItem.kt @@ -1,18 +1,16 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.feed +package at.torch.compose.ui.composable.widgets.feed -import ac.cord.auxiliary.compose.database.model.InReplyToRelation -import ac.cord.auxiliary.compose.database.model.Mention -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.QuotedRelation -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalInReplyToNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalMention -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalQuotedNostrEvent -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.InReplyToRelation +import at.torch.compose.database.model.Mention +import at.torch.compose.database.model.NostrEvent +import at.torch.compose.database.model.Profile +import at.torch.compose.database.model.QuotedRelation +import at.torch.compose.database.model.intermdiate.LocalInReplyToNostrEvent +import at.torch.compose.database.model.intermdiate.LocalMention +import at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent +import at.torch.compose.ui.composable.widgets.content.RichContent +import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -40,11 +38,11 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable internal fun TextNoteFeedItem( - nostrEvent: NostrEvent, - profile: Profile?, - localInReplyToNostrEvent: LocalInReplyToNostrEvent?, - localQuotedNostrEvent: LocalQuotedNostrEvent?, - mentionedProfiles: List, + nostrEvent: at.torch.compose.database.model.NostrEvent, + profile: at.torch.compose.database.model.Profile?, + localInReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalInReplyToNostrEvent?, + localQuotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalQuotedNostrEvent?, + mentionedProfiles: List, onNavigateToEvent: (HexKey) -> Unit ) { val expended = mutableStateOf(false) @@ -71,7 +69,7 @@ internal fun TextNoteFeedItem( } ), style = MaterialTheme.typography.labelLargeEmphasized, - color = ProfileColor.fromPublicKey(localInReplyToNostrEvent.nostrEvent.pubKey), + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(localInReplyToNostrEvent.nostrEvent.pubKey), text = localInReplyToNostrEvent.profile?.humanReadableNameOrPubkey() ?: "loading information..." ) } @@ -100,7 +98,7 @@ internal fun TextNoteFeedItem( horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start), verticalAlignment = Alignment.CenterVertically ) { - ProfileAvatar( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.profile.ProfileAvatar( publicKey = nostrEvent.pubKey, profile = profile ) @@ -117,7 +115,7 @@ internal fun TextNoteFeedItem( Text( text = staticIdentifier, style = MaterialTheme.typography.bodySmall, - color = ProfileColor.fromProfile(profile) + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromProfile(profile) ) } } @@ -128,7 +126,7 @@ internal fun TextNoteFeedItem( ) } - RichContent( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.content.RichContent( modifier = Modifier.fillMaxWidth(), nostrEvent = nostrEvent, localQuotedNostrEvent = localQuotedNostrEvent, @@ -191,12 +189,12 @@ internal fun TextNoteFeedItem( @Preview @Composable private fun TextNoteFeedItemPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { TextNoteFeedItem( - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "You are either alive and proud or you are dead, and when you are dead, you can't care anyway. https://www.brainyquote.com/authors/steven-biko-quotes", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -204,7 +202,7 @@ private fun TextNoteFeedItemPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Frank Talk", @@ -222,12 +220,12 @@ private fun TextNoteFeedItemPreview() { @Preview @Composable private fun TextNoteFeedItemInReplyToPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { TextNoteFeedItem( - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "It is better to die for an idea that will live, than to live for an idea that will die", pubKey = "hexpubkeypubkeypubkeypubkey", @@ -235,22 +233,22 @@ private fun TextNoteFeedItemInReplyToPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Frank Talk", nip05 = "frank@talk.at" ), localQuotedNostrEvent = null, - localInReplyToNostrEvent = LocalInReplyToNostrEvent( - inReplyToRelation = InReplyToRelation( + localInReplyToNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalInReplyToNostrEvent( + inReplyToRelation = _root_ide_package_.ac.cord.compose.database.model.InReplyToRelation( inReplyToNostrEventId = "nostrEvent", inReplyToRootNostrEventId = "rootId", inReplyToProfilePublicKey = "inReplyToProfileKey", inReplyToRootProfilePublicKey = "rootPubKey", replyingNostrEventId = "hex" ), - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Something something something", pubKey = "hexie", @@ -258,7 +256,7 @@ private fun TextNoteFeedItemInReplyToPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "hesd", nostrEventId = "referenced", displayName = "Steve Biko", @@ -276,12 +274,12 @@ private fun TextNoteFeedItemInReplyToPreview() { @Preview @Composable private fun TextNoteFeedItemQuoteNostrEventPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { TextNoteFeedItem( - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "The revolutionary sees his task as liberation not only of the oppressed but also of the oppressor. Happiness can never truly exist in a state of tension.\n" + "Read more at nostr:npub1uh366qnj68a7atvwgwdy4569xd6v5jtferftapqztwjwlzh9553q47pqsx\nnostr:nevent1qqspcusnzxx5u97xht2udvg3yhcq2cvmc0jrxa90lwwdvjplve0atespzpmhxue69uhkummnw3ezuamfdejsyg8h5g639qhuv803hzwexfwhyud6t6suxfu364anddqvrmn9j4cahvxksr8q", @@ -290,14 +288,14 @@ private fun TextNoteFeedItemQuoteNostrEventPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Frank Talk", nip05 = "frank@talk.at" ), - localQuotedNostrEvent = LocalQuotedNostrEvent( - nostrEvent = NostrEvent( + localQuotedNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalQuotedNostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6", content = "God is not in the habit of coming down from heaven to solve people’s problems on earth.", pubKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", @@ -305,26 +303,26 @@ private fun TextNoteFeedItemQuoteNostrEventPreview() { sig = "hexsig", tags = emptyArray() ), - quotedRelation = QuotedRelation( + quotedRelation = _root_ide_package_.ac.cord.compose.database.model.QuotedRelation( quotingNostrEventId = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520", quotedProfilePublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", quotedNostrEventId = "1c7213118d4e17c6bad5c6b11125f005619bc3e43374affb9cd6483f665fd5e6" ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Steve Biko" ), ), - localInReplyToNostrEvent = LocalInReplyToNostrEvent( - inReplyToRelation = InReplyToRelation( + localInReplyToNostrEvent = _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalInReplyToNostrEvent( + inReplyToRelation = _root_ide_package_.ac.cord.compose.database.model.InReplyToRelation( inReplyToNostrEventId = "nostrEvent", inReplyToRootNostrEventId = "rootId", inReplyToProfilePublicKey = "inReplyToProfileKey", inReplyToRootProfilePublicKey = "rootPubKey", replyingNostrEventId = "hex" ), - nostrEvent = NostrEvent( + nostrEvent = _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = "hex", content = "Something something something", pubKey = "hexie", @@ -332,7 +330,7 @@ private fun TextNoteFeedItemQuoteNostrEventPreview() { sig = "hexsig", tags = emptyArray() ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "hesd", nostrEventId = "referenced", displayName = "Steve Biko", @@ -341,12 +339,12 @@ private fun TextNoteFeedItemQuoteNostrEventPreview() { mentionedProfiles = emptyList() ), mentionedProfiles = listOf( - LocalMention( - mention = Mention( + _root_ide_package_.ac.cord.compose.database.model.intermdiate.LocalMention( + mention = _root_ide_package_.ac.cord.compose.database.model.Mention( mentioningNostrEventId = "000067b3f15cac88ba066b28c370083a4fc80dacc054e554ab1dc0def974c89c", mentionedPublicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522" ), - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522", nostrEventId = "referenced", displayName = "Steve Biko", diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileAvatar.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileAvatar.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileAvatar.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileAvatar.kt index d66ec970..59e11e81 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileAvatar.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileAvatar.kt @@ -1,8 +1,7 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.profile +package at.torch.compose.ui.composable.widgets.profile -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.ui.composable.widgets.coil.forwardingPainter -import ac.cord.auxiliary.compose.ui.theme.AuxTheme +import at.torch.compose.database.model.Profile +import at.torch.compose.ui.composable.widgets.coil.forwardingPainter import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape @@ -15,7 +14,6 @@ import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.vector.rememberVectorPainter @@ -24,13 +22,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage -import kotlin.math.abs @Composable fun ProfileAvatar( size: Dp = 55.dp, shape: Shape = CircleShape, - profile: Profile + profile: at.torch.compose.database.model.Profile ) { ProfileAvatar( size = size, @@ -45,7 +42,7 @@ fun ProfileAvatar( size: Dp = 55.dp, shape: Shape = CircleShape, publicKey: String, - profile: Profile? + profile: at.torch.compose.database.model.Profile? ) { val modifier = Modifier.size(size).clip(shape = shape) @@ -62,19 +59,22 @@ fun ProfileAvatar( ) } else { // Load image... - val placeHolderGraphic = forwardingPainter( - painter = rememberVectorPainter(Icons.Default.Face5), - colorFilter = ColorFilter.tint(tintColor) - ) + val placeHolderGraphic = + _root_ide_package_.ac.cord.compose.ui.composable.widgets.coil.forwardingPainter( + painter = rememberVectorPainter(Icons.Default.Face5), + colorFilter = ColorFilter.tint(tintColor) + ) - val fallbackGraphic = forwardingPainter( - painter = rememberVectorPainter(Icons.Default.Face5), - colorFilter = ColorFilter.tint(tintColor) - ) - val errorGraphic = forwardingPainter( - painter = rememberVectorPainter(Icons.Default.FaceRetouchingOff), - colorFilter = ColorFilter.tint(tintColor) - ) + val fallbackGraphic = + _root_ide_package_.ac.cord.compose.ui.composable.widgets.coil.forwardingPainter( + painter = rememberVectorPainter(Icons.Default.Face5), + colorFilter = ColorFilter.tint(tintColor) + ) + val errorGraphic = + _root_ide_package_.ac.cord.compose.ui.composable.widgets.coil.forwardingPainter( + painter = rememberVectorPainter(Icons.Default.FaceRetouchingOff), + colorFilter = ColorFilter.tint(tintColor) + ) AsyncImage( model = profile.picture, @@ -93,13 +93,13 @@ fun ProfileAvatar( @Preview @Composable fun ProfileAvatarPreview() { - AuxTheme { + _root_ide_package_.ac.cord.compose.ui.theme.AuxTheme { Surface( modifier = Modifier.padding(20.dp) ) { ProfileAvatar( publicKey = "hwgwefwase", - profile = Profile( + profile = _root_ide_package_.ac.cord.compose.database.model.Profile( publicKey = "", nostrEventId = "referenced", displayName = "Frank Talk", diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileColor.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileColor.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileColor.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileColor.kt index 869de8ac..a3cdd08a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/profile/ProfileColor.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/profile/ProfileColor.kt @@ -1,6 +1,5 @@ -package ac.cord.auxiliary.compose.ui.composable.widgets.profile +package at.torch.compose.ui.composable.widgets.profile -import ac.cord.auxiliary.compose.database.model.Profile import androidx.compose.ui.graphics.Color import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlin.math.abs @@ -16,7 +15,7 @@ object ProfileColor { ) } - fun fromProfile(profile: Profile): Color { + fun fromProfile(profile: at.torch.compose.database.model.Profile): Color { return fromPublicKey( profile.publicKey ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletAvatar.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletAvatar.kt similarity index 98% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletAvatar.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletAvatar.kt index 47ff23a1..25832e62 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletAvatar.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletAvatar.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package ac.cord.auxiliary.compose.ui.composable.widgets.wallet +package at.torch.compose.ui.composable.widgets.wallet import androidx.compose.foundation.background import androidx.compose.foundation.border diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletsSelector.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletsSelector.kt similarity index 96% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletsSelector.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletsSelector.kt index 0451f1c8..6a070e9d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/wallet/WalletsSelector.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/composable/widgets/wallet/WalletsSelector.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package ac.cord.auxiliary.compose.ui.composable.widgets.wallet +package at.torch.compose.ui.composable.widgets.wallet -import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator +import at.torch.compose.ui.composable.widgets.LoadingDataIndicator import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize @@ -117,7 +117,7 @@ private fun AvailableWalletView( ) { var showWalletEditDialog by remember { mutableStateOf(false) } if (showWalletEditDialog) { - LoadingDataIndicator( + _root_ide_package_.ac.cord.compose.ui.composable.widgets.LoadingDataIndicator( text = "Edit function coming soon" ) // EditWalletDialog( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Color.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Color.kt similarity index 99% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Color.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Color.kt index 4f108dbf..dd3074d1 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Color.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.theme +package at.torch.compose.ui.theme import androidx.compose.ui.graphics.Color diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Theme.kt similarity index 99% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Theme.kt index 8cdea971..d7e8ca7f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.theme +package at.torch.compose.ui.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme @@ -251,7 +251,7 @@ val unspecified_scheme = ColorFamily( ) @Composable -fun AuxTheme( +fun TorchTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Type.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Type.kt similarity index 100% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Type.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/theme/Type.kt diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt similarity index 89% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt index 59d78bae..05b1a88d 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailMessageListViewModel.kt @@ -1,14 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailMessageListUIState +import at.torch.compose.database.model.NegentropySynchronizeRequest +import at.torch.compose.database.model.types.SynchronizationFilter +import at.torch.compose.extensions.toFormattedTimeAndDateString import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column @@ -60,13 +54,13 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch class ChatRoomDetailMessageListViewModel( - initialChatRoomDetailMessageListUIState: ChatRoomDetailMessageListUIState, - val localChatRoom: LocalChatRoom, - val nostrRepository: NostrRepository, - val chatRepository: ChatRepository + initialChatRoomDetailMessageListUIState: at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState, + val localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val chatRepository: at.torch.compose.repository.ChatRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var chatRoomDetailMessageListUIState: ChatRoomDetailMessageListUIState by mutableStateOf(initialChatRoomDetailMessageListUIState) + var chatRoomDetailMessageListUIState: at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState by mutableStateOf(initialChatRoomDetailMessageListUIState) private set val isReceiverChatMessageRelayListMissing: MutableState = mutableStateOf(false) @@ -84,7 +78,7 @@ class ChatRoomDetailMessageListViewModel( localChatRoom.chatRoom.id ).distinctUntilChanged().collect { chatMessages -> logger.d("getChatMessageListByChatRoomId: $chatMessages") - chatRoomDetailMessageListUIState = ChatRoomDetailMessageListUIState.Loaded( + chatRoomDetailMessageListUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState.Loaded( chatMessageList = chatMessages ) } @@ -104,7 +98,7 @@ class ChatRoomDetailMessageListViewModel( // Sync messages from this relay... Pair( chatMessageRelayListEvent.relays(), - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( GiftWrapEvent.KIND, ), @@ -120,8 +114,8 @@ class ChatRoomDetailMessageListViewModel( isReceiverChatMessageRelayListMissing.value = true // TODO: compute the timestamp for when list we sent messages and use that as since... Pair( - Relays.negentropicRelaySet, - SynchronizationFilter( + _root_ide_package_.at.torch.compose.nostr.Relays.negentropicRelaySet, + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( ChatMessageRelayListEvent.KIND, ), @@ -136,8 +130,8 @@ class ChatRoomDetailMessageListViewModel( logger.i("GiftWrapFilter: ${relayAndSynchronizationFilter.second}") val negentropySynchronizeRequests = relayAndSynchronizationFilter.first.map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = relayAndSynchronizationFilter.second ), @@ -169,7 +163,7 @@ class ChatRoomDetailMessageListViewModel( horizontalAlignment = Alignment.CenterHorizontally ) { when (val chatRoomDetailMessageListUIState = this@ChatRoomDetailMessageListViewModel.chatRoomDetailMessageListUIState) { - ChatRoomDetailMessageListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -182,7 +176,7 @@ class ChatRoomDetailMessageListViewModel( ) } } - is ChatRoomDetailMessageListUIState.Loaded -> { + is at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState.Loaded -> { Spacer( modifier = Modifier.weight(1f) ) @@ -294,7 +288,7 @@ class ChatRoomDetailMessageListViewModel( text = localChatMessage.profile?.humanReadableNameOrPubkey() ?: localChatMessage.chatMessage.senderPublicKey, maxLines = 1, overflow = TextOverflow.MiddleEllipsis, - color = ProfileColor.fromPublicKey(localChatMessage.chatMessage.senderPublicKey), + color = _root_ide_package_.at.torch.compose.ui.composable.widgets.profile.ProfileColor.fromPublicKey(localChatMessage.chatMessage.senderPublicKey), style = MaterialTheme.typography.labelSmall ) } @@ -350,7 +344,7 @@ class ChatRoomDetailMessageListViewModel( } } } - ChatRoomDetailMessageListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -392,10 +386,10 @@ class ChatRoomDetailMessageListViewModel( const val TAG = "ChatRoomDetailMessageListViewModel" fun factory( - initialChatRoomDetailMessageListUIState: ChatRoomDetailMessageListUIState = ChatRoomDetailMessageListUIState.Loading, - localChatRoom: LocalChatRoom, - nostrRepository: NostrRepository, - chatRepository: ChatRepository + initialChatRoomDetailMessageListUIState: at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailMessageListUIState.Loading, + localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository ): ViewModelProvider.Factory = viewModelFactory { initializer { ChatRoomDetailMessageListViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt index 95bbf988..52012a79 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomDetailViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomDetailViewModel.kt @@ -1,8 +1,5 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailUIState import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -23,12 +20,12 @@ class ChatRoomDetailViewModel( val directMessageId: String, val activeUserPublicKey: HexKey, val relayHint: String?, - initialChatRoomDetailUIState: ChatRoomDetailUIState, - val nostrRepository: NostrRepository, - val chatRepository: ChatRepository + initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val chatRepository: at.torch.compose.repository.ChatRepository ): ViewModel() { - var chatRoomDetailUIState: ChatRoomDetailUIState by mutableStateOf(initialChatRoomDetailUIState) + var chatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState by mutableStateOf(initialChatRoomDetailUIState) private set @@ -45,9 +42,9 @@ class ChatRoomDetailViewModel( val localChatRoom = chatRepository.getChatRoomByIdentifier(directMessageId) chatRoomDetailUIState = if (localChatRoom == null) { - ChatRoomDetailUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Error } else { - ChatRoomDetailUIState.Loaded( + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded( localChatRoom = localChatRoom ) } @@ -64,9 +61,9 @@ class ChatRoomDetailViewModel( ) chatRoomDetailUIState = if (localChatRoom == null) { - ChatRoomDetailUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Error } else { - ChatRoomDetailUIState.Loaded( + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded( localChatRoom = localChatRoom ) } @@ -82,9 +79,9 @@ class ChatRoomDetailViewModel( activeUserPublicKey: HexKey, publicKey: String, relayHint: String?, - initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading, - nostrRepository: NostrRepository, - chatRepository: ChatRepository + initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository ): ViewModelProvider.Factory = viewModelFactory { initializer { ChatRoomDetailViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt index 9d2f3453..be7824ed 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt @@ -1,15 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor -import ac.cord.auxiliary.compose.ui.view.state.ChatRoomListUIState +import at.torch.compose.database.model.NegentropySynchronizeRequest +import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -28,10 +20,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider @@ -41,18 +30,17 @@ import androidx.lifecycle.viewmodel.viewModelFactory import co.touchlab.kermit.Logger import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO -import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch class ChatRoomListViewModel( - initialChatRoomListUIState: ChatRoomListUIState, + initialChatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState, val publicKey: String, - val synchronizationFilter: SynchronizationFilter, - val nostrRepository: NostrRepository, - val chatRepository: ChatRepository + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val chatRepository: at.torch.compose.repository.ChatRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var chatRoomListUIState: ChatRoomListUIState by mutableStateOf(initialChatRoomListUIState) + var chatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState by mutableStateOf(initialChatRoomListUIState) private set fun initiate() { @@ -68,7 +56,7 @@ class ChatRoomListViewModel( publicKey ).collect { chatRooms -> logger.d("ChatRoomList: $chatRooms") - chatRoomListUIState = ChatRoomListUIState.Loaded( + chatRoomListUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomListUIState.Loaded( chatRoomList = chatRooms ) } @@ -80,9 +68,9 @@ class ChatRoomListViewModel( viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background nostrRepository.queueNegentropySynchronizeRequest( - Relays.DefaultDMRelayList.shuffled().map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.at.torch.compose.nostr.Relays.DefaultDMRelayList.shuffled().map { normalizedRelayUrl -> + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -99,14 +87,14 @@ class ChatRoomListViewModel( @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun RenderFeed( - onNavigateToDirectMessageDetail: (Route) -> Unit + onNavigateToDirectMessageDetail: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { when (val chatRoomListUIState = chatRoomListUIState) { - ChatRoomListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -119,7 +107,7 @@ class ChatRoomListViewModel( ) } } - is ChatRoomListUIState.Loaded -> { + is at.torch.compose.ui.view.state.ChatRoomListUIState.Loaded -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, @@ -143,7 +131,7 @@ class ChatRoomListViewModel( modifier = Modifier.fillMaxWidth(), onClick = { onNavigateToDirectMessageDetail.invoke( - ChatRoomDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.ChatRoomDetailRoute( activeUserPublicKey = publicKey, directMessageIdentifier = localChatRoom.chatRoom.id, relayHint = localChatRoom.localParticipants.firstOrNull { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }?.participant?.relayHint @@ -163,7 +151,7 @@ class ChatRoomListViewModel( } } } - ChatRoomListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -190,11 +178,11 @@ class ChatRoomListViewModel( const val TAG = "ChatRoomListViewModel" fun factory( - initialChatRoomListUIState: ChatRoomListUIState = ChatRoomListUIState.Loading, + initialChatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomListUIState.Loading, publicKey: String, - synchronizationFilter: SynchronizationFilter, - nostrRepository: NostrRepository, - chatRepository: ChatRepository + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository ): ViewModelProvider.Factory = viewModelFactory { initializer { ChatRoomListViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/CreateProfileViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/CreateProfileViewModel.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/CreateProfileViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/CreateProfileViewModel.kt index a7414d1d..3c7aa29a 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/CreateProfileViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/CreateProfileViewModel.kt @@ -1,26 +1,22 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.CreateProfileUIState +import at.torch.compose.repository.NostrRepository +import at.torch.compose.ui.view.state.CreateProfileUIState import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory -import ac.cord.auxiliary.compose.ui.view.state.form.CreateProfileFormState +import at.torch.compose.ui.view.state.form.CreateProfileFormState import androidx.lifecycle.viewModelScope import co.touchlab.kermit.Logger -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import fr.acinq.bitcoin.Chain import fr.acinq.bitcoin.MnemonicCode import fr.acinq.bitcoin.byteVector import fr.acinq.lightning.Lightning -import fr.acinq.lightning.crypto.KeyManager import fr.acinq.lightning.crypto.LocalKeyManager import fr.acinq.phoenix.managers.NodeParamsManager -import fr.acinq.phoenix.managers.WalletManager -import fr.acinq.phoenix.managers.nostrPrivateKey import fr.acinq.phoenix.managers.nostrPublicKey import fr.acinq.phoenix.utils.MnemonicLanguage import kotlinx.coroutines.CoroutineExceptionHandler diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FeedListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FeedListViewModel.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FeedListViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FeedListViewModel.kt index 5e032633..98123ec5 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FeedListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FeedListViewModel.kt @@ -1,14 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.feed.ListView -import ac.cord.auxiliary.compose.ui.view.state.FeedListUIState +import at.torch.compose.database.model.NegentropySynchronizeRequest +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.widgets.feed.ListView import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -34,31 +28,26 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import co.touchlab.kermit.Logger -import com.vitorpamplona.quartz.nip01Core.core.HexKey import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO -import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch -import kotlin.time.Clock -import kotlin.time.Duration.Companion.days class FeedListViewModel( - initialFeedListUIState: FeedListUIState, - val synchronizationFilter: SynchronizationFilter, - val nostrRepository: NostrRepository + initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState, + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var feedListUIState: FeedListUIState by mutableStateOf(initialFeedListUIState) + var feedListUIState: at.torch.compose.ui.view.state.FeedListUIState by mutableStateOf(initialFeedListUIState) private set val isSynchronizationPending: MutableState = mutableStateOf(false) - val negentropySynchronizeRequests = Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + val negentropySynchronizeRequests = _root_ide_package_.at.torch.compose.nostr.Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -83,7 +72,7 @@ class FeedListViewModel( nostrRepository.observeNostrFeed( synchronizationFilter ).distinctUntilChanged().first().let { localNostrEvents -> - feedListUIState = FeedListUIState.Loaded( + feedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loaded( localNostrEvents = localNostrEvents ) } @@ -114,14 +103,14 @@ class FeedListViewModel( @Composable fun RenderFeed( activeUserPublicKey: String, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { when (val feedListUIState = feedListUIState) { - FeedListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -134,7 +123,7 @@ class FeedListViewModel( ) } } - is FeedListUIState.Loaded -> { + is at.torch.compose.ui.view.state.FeedListUIState.Loaded -> { if (feedListUIState.localNostrEvents.isEmpty()) { Column( modifier = Modifier.fillMaxWidth(), @@ -160,7 +149,7 @@ class FeedListViewModel( localNostrEvent.ListView( onNavigateToEvent = { nostrEventId -> onNavigateToEvent.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, nostrEventId = nostrEventId ) @@ -172,7 +161,7 @@ class FeedListViewModel( } } - FeedListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -199,9 +188,9 @@ class FeedListViewModel( const val TAG = "FeedListViewModel" fun factory( - initialFeedListUIState: FeedListUIState = FeedListUIState.Loading, - synchronizationFilter: SynchronizationFilter, - nostrRepository: NostrRepository, + initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading, + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { FeedListViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowersListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowersListViewModel.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowersListViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowersListViewModel.kt index bd3159e5..00d919aa 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowersListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowersListViewModel.kt @@ -1,14 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.view.state.FollowersListUIState -import androidx.compose.foundation.clickable +import at.torch.compose.database.model.NegentropySynchronizeRequest import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -40,13 +32,13 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch class FollowersListViewModel( - initialFollowingListUIState: FollowersListUIState, + initialFollowingListUIState: at.torch.compose.ui.view.state.FollowersListUIState, val publicKey: String, - val synchronizationFilter: SynchronizationFilter, - val nostrRepository: NostrRepository + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var followersListUIState: FollowersListUIState by mutableStateOf(initialFollowingListUIState) + var followersListUIState: at.torch.compose.ui.view.state.FollowersListUIState by mutableStateOf(initialFollowingListUIState) private set val isSynchronizationPending: MutableState = mutableStateOf(false) @@ -64,7 +56,7 @@ class FollowersListViewModel( nostrRepository.observeProfileWithFollowers( publicKey ).collect { localFollowers -> - followersListUIState = FollowersListUIState.Loaded( + followersListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowersListUIState.Loaded( followers = localFollowers?.followers ?: emptyList() ) } @@ -76,9 +68,9 @@ class FollowersListViewModel( viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background nostrRepository.queueNegentropySynchronizeRequest( - Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.at.torch.compose.nostr.Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -106,14 +98,14 @@ class FollowersListViewModel( @Composable fun RenderFeed( activeUserPublicKey: String, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { when (val followersListUIState = followersListUIState) { - FollowersListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.FollowersListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -126,7 +118,7 @@ class FollowersListViewModel( ) } } - is FollowersListUIState.Loaded -> { + is at.torch.compose.ui.view.state.FollowersListUIState.Loaded -> { if (followersListUIState.followers.isEmpty()) { Column( modifier = Modifier.fillMaxWidth(), @@ -158,7 +150,7 @@ class FollowersListViewModel( } } - FollowersListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.FollowersListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -185,10 +177,10 @@ class FollowersListViewModel( const val TAG = "FollowersListViewModel" fun factory( - initialFeedListUIState: FollowersListUIState = FollowersListUIState.Loading, + initialFeedListUIState: at.torch.compose.ui.view.state.FollowersListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowersListUIState.Loading, publicKey: String, - synchronizationFilter: SynchronizationFilter, - nostrRepository: NostrRepository, + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { FollowersListViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowingListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowingListViewModel.kt similarity index 80% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowingListViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowingListViewModel.kt index 8e42b639..41804622 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/FollowingListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/FollowingListViewModel.kt @@ -1,14 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.view.state.FollowingListUIState -import androidx.compose.foundation.clickable +import at.torch.compose.database.model.NegentropySynchronizeRequest import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -40,13 +32,13 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch class FollowingListViewModel( - initialFollowingListUIState: FollowingListUIState, + initialFollowingListUIState: at.torch.compose.ui.view.state.FollowingListUIState, val publicKey: String, - val synchronizationFilter: SynchronizationFilter, - val nostrRepository: NostrRepository + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var followingListUIState: FollowingListUIState by mutableStateOf(initialFollowingListUIState) + var followingListUIState: at.torch.compose.ui.view.state.FollowingListUIState by mutableStateOf(initialFollowingListUIState) private set val isSynchronizationPending: MutableState = mutableStateOf(false) @@ -63,7 +55,7 @@ class FollowingListViewModel( nostrRepository.observeProfileWithFollowing( publicKey ).collect { localFollowing -> - followingListUIState = FollowingListUIState.Loaded( + followingListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowingListUIState.Loaded( following = localFollowing?.following ?: emptyList() ) } @@ -75,9 +67,9 @@ class FollowingListViewModel( viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background nostrRepository.queueNegentropySynchronizeRequest( - Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.at.torch.compose.nostr.Relays.negentropicRelaySet.shuffled().map { normalizedRelayUrl -> + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -105,14 +97,14 @@ class FollowingListViewModel( @Composable fun RenderFeed( activeUserPublicKey: String, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { when (val feedListUIState = followingListUIState) { - FollowingListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.FollowingListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -125,7 +117,7 @@ class FollowingListViewModel( ) } } - is FollowingListUIState.Loaded -> { + is at.torch.compose.ui.view.state.FollowingListUIState.Loaded -> { if (feedListUIState.following.isEmpty()) { Column( modifier = Modifier.fillMaxWidth(), @@ -157,7 +149,7 @@ class FollowingListViewModel( } } - FollowingListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.FollowingListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -184,10 +176,10 @@ class FollowingListViewModel( const val TAG = "FollowingListViewModel" fun factory( - initialFeedListUIState: FollowingListUIState = FollowingListUIState.Loading, + initialFeedListUIState: at.torch.compose.ui.view.state.FollowingListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FollowingListUIState.Loading, publicKey: String, - synchronizationFilter: SynchronizationFilter, - nostrRepository: NostrRepository, + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { FollowingListViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/HomeViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/HomeViewModel.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/HomeViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/HomeViewModel.kt index ae2869f4..a899b61f 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/HomeViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/HomeViewModel.kt @@ -1,9 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.HomeScreenUIState +import at.torch.compose.database.model.types.SynchronizationFilter import androidx.compose.foundation.pager.PagerState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -15,12 +12,10 @@ import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent import com.vitorpamplona.quartz.nip04Dm.messages.PrivateDmEvent import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent import com.vitorpamplona.quartz.nip18Reposts.RepostEvent -import com.vitorpamplona.quartz.nip23LongContent.LongTextNoteEvent import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent @@ -39,15 +34,15 @@ enum class HomeScreenType { class HomeViewModel( val activeUserPublicKey: HexKey, - val initialHomeScreenUIState: HomeScreenUIState, - val nostrRepository: NostrRepository, + val initialHomeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState, + val nostrRepository: at.torch.compose.repository.NostrRepository, val pagerState: PagerState ): ViewModel() { val logger = Logger.withTag(TAG) - var homeScreenUIState: HomeScreenUIState by mutableStateOf(initialHomeScreenUIState) + var homeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState by mutableStateOf(initialHomeScreenUIState) private set fun initiate() { @@ -61,11 +56,11 @@ class HomeViewModel( activeUserPublicKey ).collect { profileWithFollowing -> homeScreenUIState = if (profileWithFollowing != null) { - HomeScreenUIState.Loaded( + _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Loaded( profileWithFollowing = profileWithFollowing ) } else { - HomeScreenUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.HomeScreenUIState.Error } } } @@ -73,15 +68,15 @@ class HomeViewModel( fun getSynchronizationFilter( homeScreenType: HomeScreenType, - profileWithFollowing: LocalProfileWithFollowing, - ): SynchronizationFilter { + profileWithFollowing: at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing, + ): at.torch.compose.database.model.types.SynchronizationFilter { val twelveHoursAgo = Clock.System.now().minus(12.hours) val now = Clock.System.now() return when (homeScreenType) { HomeScreenType.Following -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = profileWithFollowing.following.map { it.publicKey }.toTypedArray(), kinds = arrayOf( TextNoteEvent.KIND, @@ -93,7 +88,7 @@ class HomeViewModel( ) } HomeScreenType.Mentions -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( TextNoteEvent.KIND, RepostEvent.KIND, @@ -114,7 +109,7 @@ class HomeViewModel( ) } HomeScreenType.Messages -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( GiftWrapEvent.KIND, ), @@ -132,8 +127,8 @@ class HomeViewModel( fun factory( activeUserPublicKey: HexKey, - initialHomeScreenUIState: HomeScreenUIState, - nostrRepository: NostrRepository, + initialHomeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState, + nostrRepository: at.torch.compose.repository.NostrRepository, pagerState: PagerState ): ViewModelProvider.Factory = viewModelFactory { initializer { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/InReplyToViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/InReplyToViewModel.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/InReplyToViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/InReplyToViewModel.kt index dba9bc59..da73aa0c 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/InReplyToViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/InReplyToViewModel.kt @@ -1,17 +1,9 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.NostrEventRelay -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.NostrEventDetailRoute -import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route -import ac.cord.auxiliary.compose.ui.composable.widgets.feed.ListView -import ac.cord.auxiliary.compose.ui.view.state.FeedListUIState +import at.torch.compose.database.model.NegentropySynchronizeRequest +import at.torch.compose.database.model.types.SynchronizationFilter +import at.torch.compose.ui.composable.navigation.routes.NostrEventDetailRoute +import at.torch.compose.ui.composable.widgets.feed.ListView import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -40,7 +32,6 @@ import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent import com.vitorpamplona.quartz.nip18Reposts.RepostEvent import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent -import com.vitorpamplona.quartz.nip51Lists.relayLists.RelayFeedsListEvent import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.flow.distinctUntilChanged @@ -48,14 +39,14 @@ import kotlinx.coroutines.launch import kotlin.time.Instant class InReplyToViewModel( - val nostrEvent: NostrEvent, - val profile: Profile?, - initialFeedListUIState: FeedListUIState, - val synchronizationFilter: SynchronizationFilter, - val nostrRepository: NostrRepository + val nostrEvent: at.torch.compose.database.model.NostrEvent, + val profile: at.torch.compose.database.model.Profile?, + initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState, + val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter, + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { val logger = Logger.withTag(TAG) - var inReplyToFeedListUIState: FeedListUIState by mutableStateOf(initialFeedListUIState) + var inReplyToFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState by mutableStateOf(initialFeedListUIState) private set val isSynchronizationPending: MutableState = mutableStateOf(false) @@ -73,7 +64,7 @@ class InReplyToViewModel( nostrRepository.observeNostrFeed( synchronizationFilter ).distinctUntilChanged().collect { localNostrEvents -> - inReplyToFeedListUIState = FeedListUIState.Loaded( + inReplyToFeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loaded( localNostrEvents = localNostrEvents ) } @@ -86,12 +77,12 @@ class InReplyToViewModel( // Sync Notifications... might want to also run this in the background val publicRelays = profile?.profilePublicRelays( nostrRepository - ) ?: Relays.negentropicRelaySet + ) ?: _root_ide_package_.at.torch.compose.nostr.Relays.negentropicRelaySet nostrRepository.queueNegentropySynchronizeRequest( publicRelays.take(3).map { normalizedRelayUrl -> - NegentropySynchronizeRequest( - id = NegentropySynchronizeRequest.computeId( + _root_ide_package_.ac.cord.compose.database.model.NegentropySynchronizeRequest( + id = _root_ide_package_.at.torch.compose.database.model.NegentropySynchronizeRequest.Companion.computeId( relayURL = normalizedRelayUrl.url, synchronizationFilter = synchronizationFilter ), @@ -119,14 +110,14 @@ class InReplyToViewModel( @Composable fun RenderFeed( activeUserPublicKey: String, - onNavigateToEvent: (Route) -> Unit + onNavigateToEvent: (at.torch.compose.ui.composable.navigation.routes.Route) -> Unit ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { when (val feedListUIState = inReplyToFeedListUIState) { - FeedListUIState.Error -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Error -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -139,7 +130,7 @@ class InReplyToViewModel( ) } } - is FeedListUIState.Loaded -> { + is at.torch.compose.ui.view.state.FeedListUIState.Loaded -> { if (feedListUIState.localNostrEvents.isEmpty()) { Column( modifier = Modifier.fillMaxWidth(), @@ -165,7 +156,7 @@ class InReplyToViewModel( localNostrEvent.ListView( onNavigateToEvent = { nostrEventId -> onNavigateToEvent.invoke( - NostrEventDetailRoute( + _root_ide_package_.ac.cord.compose.ui.composable.navigation.routes.NostrEventDetailRoute( activeUserPublicKey = activeUserPublicKey, nostrEventId = nostrEventId ) @@ -177,7 +168,7 @@ class InReplyToViewModel( } } - FeedListUIState.Loading -> { + _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading -> { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally @@ -204,11 +195,11 @@ class InReplyToViewModel( const val TAG = "InReplyToViewModel" fun factory( - nostrEvent: NostrEvent, - profile: Profile?, + nostrEvent: at.torch.compose.database.model.NostrEvent, + profile: at.torch.compose.database.model.Profile?, createdAt: Instant, - initialFeedListUIState: FeedListUIState = FeedListUIState.Loading, - synchronizationFilter: SynchronizationFilter = SynchronizationFilter( + initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState = _root_ide_package_.at.torch.compose.ui.view.state.FeedListUIState.Loading, + synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter = _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( TextNoteEvent.KIND, ReactionEvent.KIND, @@ -221,7 +212,7 @@ class InReplyToViewModel( ), since = createdAt ), - nostrRepository: NostrRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { InReplyToViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/MetadataEventDetailViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/MetadataEventDetailViewModel.kt similarity index 82% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/MetadataEventDetailViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/MetadataEventDetailViewModel.kt index 364db056..c9e17ee6 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/MetadataEventDetailViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/MetadataEventDetailViewModel.kt @@ -1,10 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.Connection -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.MetadataEventDetailUIState +import at.torch.compose.database.model.UnsignedNostrEvent +import at.torch.compose.database.model.types.SynchronizationFilter import androidx.compose.foundation.pager.PagerState import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue @@ -18,7 +15,6 @@ import androidx.lifecycle.viewmodel.viewModelFactory import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArray -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip01Core.tags.people.isTaggedUser import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent import com.vitorpamplona.quartz.nip02FollowList.RelaySet @@ -44,16 +40,16 @@ enum class MetadataEventDetailType { } class MetadataEventDetailViewModel( - initialMetadataEventDetailUIState: MetadataEventDetailUIState = MetadataEventDetailUIState.Loading, + initialMetadataEventDetailUIState: at.torch.compose.ui.view.state.MetadataEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.MetadataEventDetailUIState.Loading, val activeUserPublicKey: HexKey, val eventPublicKey: HexKey, - val nostrRepository: NostrRepository, + val nostrRepository: at.torch.compose.repository.NostrRepository, val pagerState: PagerState ): ViewModel() { val isActionPending: MutableState = mutableStateOf(false) - var metadataEventDetailUIState: MetadataEventDetailUIState by mutableStateOf(initialMetadataEventDetailUIState) + var metadataEventDetailUIState: at.torch.compose.ui.view.state.MetadataEventDetailUIState by mutableStateOf(initialMetadataEventDetailUIState) private set val logger = Logger.withTag("MetadataEventDetailViewModel") @@ -72,7 +68,7 @@ class MetadataEventDetailViewModel( ).collect { relations -> logger.d("We found relations: $relations") - metadataEventDetailUIState = MetadataEventDetailUIState.Loaded( + metadataEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.MetadataEventDetailUIState.Loaded( isActiveUser = isActiveUser(activeUserPublicKey), followingActiveUserConnection = relations.find { connection -> connection.sourcePublicKey == eventPublicKey && connection.destinationPublicKey == activeUserPublicKey }, followedByActiveUserConnection = relations.find { connection -> connection.sourcePublicKey == activeUserPublicKey && connection.destinationPublicKey == eventPublicKey } @@ -100,7 +96,7 @@ class MetadataEventDetailViewModel( metadataEventDetailType: MetadataEventDetailType ) = when (metadataEventDetailType) { MetadataEventDetailType.Posts -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -112,7 +108,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Replies -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -125,7 +121,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Articles -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -136,7 +132,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Followers -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -148,7 +144,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Following -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -159,7 +155,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Zaps -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -171,7 +167,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Photos -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -182,7 +178,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Shorts -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -193,7 +189,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Videos -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -204,7 +200,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Bookmarks -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -215,7 +211,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Reports -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -226,7 +222,7 @@ class MetadataEventDetailViewModel( ) } MetadataEventDetailType.Relays -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf( eventPublicKey ), @@ -271,7 +267,7 @@ class MetadataEventDetailViewModel( followUsers.map { it } nostrRepository.saveUnsignedNostrEvent( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = activeUserPublicKey, kind = ContactListEvent.KIND, tags = contactListTagList.toTypedArray(), @@ -283,7 +279,7 @@ class MetadataEventDetailViewModel( } } - fun unfollow(connection: Connection) { + fun unfollow(connection: at.torch.compose.database.model.Connection) { isActionPending.value = true viewModelScope.launch(Dispatchers.IO) { @@ -298,10 +294,11 @@ class MetadataEventDetailViewModel( logger.d("User is not being followed so no need to unfollow: $eventPublicKey") } else { nostrRepository.saveUnsignedNostrEvent( - UnsignedNostrEvent( + _root_ide_package_.ac.cord.compose.database.model.UnsignedNostrEvent( pubKey = activeUserPublicKey, kind = ContactListEvent.KIND, - tags = contactListEvent.tags.filter { it.size > 1 && it[1] != eventPublicKey }.toTypedArray(), + tags = contactListEvent.tags.filter { it.size > 1 && it[1] != eventPublicKey } + .toTypedArray(), content = RelaySet.assemble( emptyMap() ) @@ -321,7 +318,7 @@ class MetadataEventDetailViewModel( fun factory( activeUserPublicKey: HexKey, publicKey: HexKey, - nostrRepository: NostrRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, pagerState: PagerState ): ViewModelProvider.Factory = viewModelFactory { initializer { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.kt similarity index 77% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.kt index e26ccacb..3a173ee2 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.kt @@ -1,7 +1,5 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.NavigationUIState import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer @@ -23,8 +21,8 @@ import kotlinx.coroutines.launch class NavigationViewModel( val activeWalletStateFlow: StateFlow, - initialNavigationUIState: NavigationUIState, - val nostrRepository: NostrRepository, + initialNavigationUIState: at.torch.compose.ui.view.state.NavigationUIState, + val nostrRepository: at.torch.compose.repository.NostrRepository, val scope: CoroutineScope, ): ViewModel() { @@ -33,8 +31,8 @@ class NavigationViewModel( fun factory( activeWallet: StateFlow, - initialNavigationUIState: NavigationUIState, - nostrRepository: NostrRepository, + initialNavigationUIState: at.torch.compose.ui.view.state.NavigationUIState, + nostrRepository: at.torch.compose.repository.NostrRepository, scope: CoroutineScope, ): ViewModelProvider.Factory = viewModelFactory { initializer { @@ -68,19 +66,19 @@ class NavigationViewModel( logger.d("Active Wallet: $activeWallet") if (activeWallet == null) { _navigationUIState.getAndUpdate { - NavigationUIState.StartupPhoenix + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.StartupPhoenix } } else { if (activeWallet.business == null) { _navigationUIState.getAndUpdate { - NavigationUIState.StartupPhoenix + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.StartupPhoenix } } else { val activeUserPublicKey = activeWallet.business.walletManager.keyManager.value?.nostrPublicKey() if (activeUserPublicKey == null) { _navigationUIState.getAndUpdate { - NavigationUIState.Loading(text = "Couldn't get the nostrKey") + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.Loading(text = "Couldn't get the nostrKey") } } else { @@ -93,48 +91,48 @@ class NavigationViewModel( _navigationUIState.getAndUpdate { if (localProfile == null) { logger.i("We need to be on the landing screen so user creates account") - NavigationUIState.Landing + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.Landing } else if (localProfile.unsignedNostrEvent == null) { logger.i("We need to be on the landing screen so user creates account") - NavigationUIState.Landing + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.Landing } else if (localProfile.broadcastNostrEventReceipt != null) { logger.i("We have a broadcast receipt: ${localProfile.profile}") - NavigationUIState.ProfileLoaded( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.ProfileLoaded( publicKey = localProfile.unsignedNostrEvent.pubKey ) } else if (localProfile.unsignedNostrEvent.signedAt != null && localProfile.profile != null) { logger.i("We have successfully synced a profile: ${localProfile.profile}") - NavigationUIState.ProfileLoaded( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.ProfileLoaded( publicKey = localProfile.unsignedNostrEvent.pubKey ) } else if (localProfile.broadcastNostrEventRequest != null) { logger.i("We have a broadcast request: ${localProfile.broadcastNostrEventRequest}") - NavigationUIState.UnannouncedProfile( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnannouncedProfile( broadcastNostrEventRequest = localProfile.broadcastNostrEventRequest ) } else if (localProfile.profile != null) { logger.i("We have a profile that needs to queued for broadcast: ${localProfile.profile}") - NavigationUIState.UnqueuedProfile( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnqueuedProfile( profile = localProfile.profile ) } else if (localProfile.nostrEvent != null) { logger.i("Nostr event with the profile needs to be indexed: ${localProfile.nostrEvent}") - NavigationUIState.UnindexedProfile( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnindexedProfile( nostrEvent = localProfile.nostrEvent ) } else if (localProfile.unsignedNostrEvent.signedAt != null && localProfile.synchronizeNostrEventRequests.isEmpty()) { logger.i("We should request to sync profile: ${localProfile.unsignedNostrEvent}") - NavigationUIState.UnqueuedProfileSynchronization( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnqueuedProfileSynchronization( unsignedNostrEvent = localProfile.unsignedNostrEvent ) } else if (localProfile.unsignedNostrEvent.signedAt != null && localProfile.synchronizeNostrEventRequests.isEmpty()) { logger.i("We should be syncing the profile: ${localProfile.unsignedNostrEvent}") - NavigationUIState.UnsyncedProfile( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnsyncedProfile( unsignedNostrEvent = localProfile.unsignedNostrEvent ) } else { logger.i("We have an unsigned profile: ${localProfile.unsignedNostrEvent}") - NavigationUIState.UnsignedProfile( + _root_ide_package_.at.torch.compose.ui.view.state.NavigationUIState.UnsignedProfile( unsignedNostrEvent = localProfile.unsignedNostrEvent ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NostrEventDetailViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NostrEventDetailViewModel.kt similarity index 69% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NostrEventDetailViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NostrEventDetailViewModel.kt index aebc209a..dd44b2ef 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NostrEventDetailViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NostrEventDetailViewModel.kt @@ -1,10 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.NostrEventDetailUIState +import at.torch.compose.database.model.SynchronizeNostrEventRequest +import at.torch.compose.database.model.types.SynchronizationFilter import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -14,7 +11,6 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import com.vitorpamplona.quartz.nip01Core.core.HexKey -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent import com.vitorpamplona.quartz.nip18Reposts.RepostEvent import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent @@ -27,14 +23,14 @@ import kotlinx.coroutines.launch class NostrEventDetailViewModel( val activeUserPublicKey: HexKey, val nostrEventId: HexKey, - initialNostrEventDetailUIState: NostrEventDetailUIState, - val nostrRepository: NostrRepository + initialNostrEventDetailUIState: at.torch.compose.ui.view.state.NostrEventDetailUIState, + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { - var nostrEventDetailUIState: NostrEventDetailUIState by mutableStateOf(initialNostrEventDetailUIState) + var nostrEventDetailUIState: at.torch.compose.ui.view.state.NostrEventDetailUIState by mutableStateOf(initialNostrEventDetailUIState) private set fun retryLoad() { - nostrEventDetailUIState = NostrEventDetailUIState.Loading + nostrEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loading loadNostrFeed() } @@ -42,11 +38,11 @@ class NostrEventDetailViewModel( viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background nostrRepository.queueSynchronizeNostrEvent( - Relays.eventPublishRelaySet.take(1).map { normalizedRelay -> // TODO: Sync from all relays instead of 1 - SynchronizeNostrEventRequest( + _root_ide_package_.at.torch.compose.nostr.Relays.eventPublishRelaySet.take(1).map { normalizedRelay -> // TODO: Sync from all relays instead of 1 + _root_ide_package_.ac.cord.compose.database.model.SynchronizeNostrEventRequest( purpose = "detail", synchronizationFilters = arrayOf( - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( TextNoteEvent.KIND, RepostEvent.KIND, @@ -75,11 +71,11 @@ class NostrEventDetailViewModel( nostrEventId ).collectLatest { localNostrEvent -> nostrEventDetailUIState = if (localNostrEvent != null) { - NostrEventDetailUIState.Loaded( + _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loaded( localNostrEvent = localNostrEvent ) } else { - NostrEventDetailUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Error } } } @@ -91,8 +87,8 @@ class NostrEventDetailViewModel( fun factory( nostrEventId: HexKey, activeUserPublicKey: HexKey, - initialNostrEventDetailUIState: NostrEventDetailUIState = NostrEventDetailUIState.Loading, - nostrRepository: NostrRepository, + initialNostrEventDetailUIState: at.torch.compose.ui.view.state.NostrEventDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.NostrEventDetailUIState.Loading, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { NostrEventDetailViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NotaryViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NotaryViewModel.kt similarity index 88% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NotaryViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NotaryViewModel.kt index c7439b76..73494ba9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NotaryViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/NotaryViewModel.kt @@ -1,9 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository +import at.torch.compose.database.model.NostrEvent import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer @@ -15,7 +12,6 @@ import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerSync import com.vitorpamplona.quartz.nip51Lists.encryption.PrivateTagsInContent import fr.acinq.phoenix.data.ActiveWallet -import fr.acinq.phoenix.managers.WalletManager import fr.acinq.phoenix.managers.nostrPrivateKey import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -28,8 +24,8 @@ import kotlin.time.Instant class NotaryViewModel( val activeWalletStateFlow: StateFlow, - val nostrRepository: NostrRepository, - val chatRepository: ChatRepository, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val chatRepository: at.torch.compose.repository.ChatRepository, val scope: CoroutineScope, ): ViewModel() { @@ -39,8 +35,8 @@ class NotaryViewModel( fun factory( activeWalletStateFlow: StateFlow, - nostrRepository: NostrRepository, - chatRepository: ChatRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository, scope: CoroutineScope, ): ViewModelProvider.Factory = viewModelFactory { initializer { @@ -98,7 +94,7 @@ class NotaryViewModel( nostrRepository.publishNostrEvent( unsignedNostrEvent, - NostrEvent( + _root_ide_package_.ac.cord.compose.database.model.NostrEvent( id = event.id, pubKey = event.pubKey, kind = event.kind, @@ -108,7 +104,7 @@ class NotaryViewModel( sig = event.sig, unsignedNostrEventId = unsignedNostrEvent.id ), - relayURLs = Relays.eventPublishRelaySet.map { normalizedRelayUrl -> normalizedRelayUrl.url }, + relayURLs = _root_ide_package_.at.torch.compose.nostr.Relays.eventPublishRelaySet.map { normalizedRelayUrl -> normalizedRelayUrl.url }, activeKeyPair = keyPair ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchResultViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchResultViewModel.kt similarity index 73% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchResultViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchResultViewModel.kt index e57288d8..0352e3e2 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchResultViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchResultViewModel.kt @@ -1,11 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.SearchRepository -import ac.cord.auxiliary.compose.ui.view.state.SearchResultListUIState +import at.torch.compose.database.model.SynchronizeNostrEventRequest +import at.torch.compose.database.model.types.SynchronizationFilter import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -36,19 +32,20 @@ enum class SearchResultType { class SearchResultViewModel( initialSearchResultType: SearchResultType, val searchQuery: String, - val nostrRepository: NostrRepository, - val searchRepository: SearchRepository, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val searchRepository: at.torch.compose.repository.SearchRepository, ): ViewModel() { val logger = Logger.withTag(TAG) var searchResultType: SearchResultType by mutableStateOf(initialSearchResultType) private set - var searchResultListUIState: SearchResultListUIState by mutableStateOf(SearchResultListUIState.Loading) + var searchResultListUIState: at.torch.compose.ui.view.state.SearchResultListUIState by mutableStateOf( + _root_ide_package_.at.torch.compose.ui.view.state.SearchResultListUIState.Loading) private set fun updateSearchResultType (searchResultType: SearchResultType) { - searchResultListUIState = SearchResultListUIState.Loading + searchResultListUIState = _root_ide_package_.at.torch.compose.ui.view.state.SearchResultListUIState.Loading this.searchResultType = searchResultType @@ -59,7 +56,7 @@ class SearchResultViewModel( logger.d("initiateSearchResults") val synchronizationFilter = when (searchResultType) { SearchResultType.Posts -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( TextNoteEvent.KIND, RepostEvent.KIND, @@ -71,7 +68,7 @@ class SearchResultViewModel( ) } SearchResultType.Profiles -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( MetadataEvent.KIND, ), @@ -80,7 +77,7 @@ class SearchResultViewModel( ) } SearchResultType.Articles -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( LongTextNoteEvent.KIND, ), @@ -89,7 +86,7 @@ class SearchResultViewModel( ) } SearchResultType.Photos -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( PictureEvent.KIND, ), @@ -99,7 +96,7 @@ class SearchResultViewModel( ) } SearchResultType.Videos -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( VideoNormalEvent.KIND, ), @@ -109,7 +106,7 @@ class SearchResultViewModel( ) } SearchResultType.Shorts -> { - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( kinds = arrayOf( VideoShortEvent.KIND, ), @@ -125,7 +122,7 @@ class SearchResultViewModel( loadSearchResultFeed(synchronizationFilter) } - private fun saveSearchQuery(synchronizationFilter: SynchronizationFilter) { + private fun saveSearchQuery(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter) { logger.d("saveSearchQuery: $searchQuery") viewModelScope.launch(Dispatchers.IO) { nostrRepository.saveSearchQuery( @@ -137,13 +134,13 @@ class SearchResultViewModel( } } - private fun scheduleSearch(synchronizationFilter: SynchronizationFilter) { + private fun scheduleSearch(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter) { logger.d("scheduleSearch: $searchQuery") viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background searchRepository.submitSearch( - Relays.eventFinderRelaySet.take(1).map { normalizedRelay -> // TODO: Search all relays instead of the first - SynchronizeNostrEventRequest( + _root_ide_package_.at.torch.compose.nostr.Relays.eventFinderRelaySet.take(1).map { normalizedRelay -> // TODO: Search all relays instead of the first + _root_ide_package_.ac.cord.compose.database.model.SynchronizeNostrEventRequest( purpose = "search", synchronizationFilters = arrayOf( synchronizationFilter @@ -156,12 +153,12 @@ class SearchResultViewModel( } } - private fun loadSearchResultFeed(synchronizationFilter: SynchronizationFilter) { + private fun loadSearchResultFeed(synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter) { logger.d("loadSearchResultFeed: $searchQuery") viewModelScope.launch(Dispatchers.IO) { // This is something not taking into consideration the results we are actually looking for... nostrRepository.observeNostrFeed(synchronizationFilter).distinctUntilChanged().collect { localNostrEvents -> - searchResultListUIState = SearchResultListUIState.Loaded( + searchResultListUIState = _root_ide_package_.at.torch.compose.ui.view.state.SearchResultListUIState.Loaded( localNostrEvents = localNostrEvents ) } @@ -174,8 +171,8 @@ class SearchResultViewModel( fun factory( initialSearchResultType: SearchResultType = SearchResultType.Posts, searchQuery: String, - nostrRepository: NostrRepository, - searchRepository: SearchRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, + searchRepository: at.torch.compose.repository.SearchRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { SearchResultViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchViewModel.kt similarity index 67% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchViewModel.kt index 4cf91c9d..eb21e245 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SearchViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SearchViewModel.kt @@ -1,10 +1,5 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.RecentSearch -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.SearchRepository -import ac.cord.auxiliary.compose.ui.view.state.SearchUIState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf @@ -20,22 +15,22 @@ import kotlinx.coroutines.IO import kotlinx.coroutines.launch class SearchViewModel( - initialSearchUIState: SearchUIState, - val nostrRepository: NostrRepository, - val searchRepository: SearchRepository, + initialSearchUIState: at.torch.compose.ui.view.state.SearchUIState, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val searchRepository: at.torch.compose.repository.SearchRepository, ): ViewModel() { val logger = Logger.withTag(TAG) - var searchUIState: SearchUIState by mutableStateOf(initialSearchUIState) + var searchUIState: at.torch.compose.ui.view.state.SearchUIState by mutableStateOf(initialSearchUIState) private set - var searchableProfiles = mutableStateListOf() + var searchableProfiles = mutableStateListOf() private set - var filteredProfiles = mutableStateListOf() + var filteredProfiles = mutableStateListOf() private set - var recentSearches = mutableStateListOf() + var recentSearches = mutableStateListOf() private set init { @@ -70,7 +65,7 @@ class SearchViewModel( } } - fun removeRecentSearch(recentSearch: RecentSearch) { + fun removeRecentSearch(recentSearch: at.torch.compose.database.model.RecentSearch) { viewModelScope.launch(Dispatchers.IO) { nostrRepository.removeRecentSearch(recentSearch) recentSearches.remove(recentSearch) @@ -81,9 +76,9 @@ class SearchViewModel( const val TAG = "SearchViewModel" fun factory( - initialSearchUIState: SearchUIState = SearchUIState.Prompt, - nostrRepository: NostrRepository, - searchRepository: SearchRepository, + initialSearchUIState: at.torch.compose.ui.view.state.SearchUIState = _root_ide_package_.at.torch.compose.ui.view.state.SearchUIState.Prompt, + nostrRepository: at.torch.compose.repository.NostrRepository, + searchRepository: at.torch.compose.repository.SearchRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { SearchViewModel( diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SignInToProfileViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SignInToProfileViewModel.kt similarity index 75% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SignInToProfileViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SignInToProfileViewModel.kt index f587c52f..006d03c4 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SignInToProfileViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SignInToProfileViewModel.kt @@ -1,8 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.view.state.SignInToProfileUIState -import ac.cord.auxiliary.compose.ui.view.state.form.SignInToProfileFormState +import at.torch.compose.ui.view.state.form.SignInToProfileFormState import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel @@ -20,16 +18,16 @@ import kotlinx.coroutines.IO import kotlinx.coroutines.launch class SignInToProfileViewModel( - initialWriteNewNoteUIState: SignInToProfileUIState, - val signInToProfileFormState: SignInToProfileFormState = SignInToProfileFormState(), - val nostrRepository: NostrRepository + initialWriteNewNoteUIState: at.torch.compose.ui.view.state.SignInToProfileUIState, + val signInToProfileFormState: at.torch.compose.ui.view.state.form.SignInToProfileFormState = _root_ide_package_.ac.cord.compose.ui.view.state.form.SignInToProfileFormState(), + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { companion object { private const val TAG = "SignInToProfileViewModel" fun factory( - initialWriteNewNoteUIState: SignInToProfileUIState, - nostrRepository: NostrRepository + initialWriteNewNoteUIState: at.torch.compose.ui.view.state.SignInToProfileUIState, + nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModelProvider.Factory = viewModelFactory { initializer { SignInToProfileViewModel( @@ -44,7 +42,7 @@ class SignInToProfileViewModel( val isActionPending: MutableState = mutableStateOf(false) - var signInToProfileUIState: MutableState = mutableStateOf( + var signInToProfileUIState: MutableState = mutableStateOf( initialWriteNewNoteUIState ) @@ -81,7 +79,7 @@ class SignInToProfileViewModel( } else -> { // TODO: Might want to give reasons for the error. - signInToProfileUIState.value = SignInToProfileUIState.Error + signInToProfileUIState.value = _root_ide_package_.at.torch.compose.ui.view.state.SignInToProfileUIState.Error } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletStartupViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletStartupViewModel.kt similarity index 83% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletStartupViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletStartupViewModel.kt index ff342034..2f4237dc 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletStartupViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletStartupViewModel.kt @@ -1,10 +1,9 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.extensions.getShowIntroFlow -import ac.cord.auxiliary.compose.extensions.platformStartupLogic -import ac.cord.auxiliary.compose.extensions.schedulePlatformLogic +import at.torch.compose.extensions.getShowIntroFlow +import at.torch.compose.extensions.platformStartupLogic +import at.torch.compose.extensions.schedulePlatformLogic import androidx.compose.runtime.mutableStateOf -import androidx.datastore.preferences.core.Preferences import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope @@ -15,7 +14,6 @@ import fr.acinq.phoenix.PhoenixBusiness import fr.acinq.phoenix.PhoenixGlobal import fr.acinq.phoenix.data.StartBusinessResult import fr.acinq.phoenix.data.WalletId -import fr.acinq.phoenix.utils.preferences.GlobalPrefs import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -52,11 +50,12 @@ class SovereignWalletStartupViewModel( }) { state.value = StartupViewState.StartingBusiness(walletId) - val startResult: StartBusinessResult = platformStartupLogic( - words - ) + val startResult: StartBusinessResult = + _root_ide_package_.ac.cord.compose.extensions.platformStartupLogic( + words + ) - schedulePlatformLogic( + _root_ide_package_.ac.cord.compose.extensions.schedulePlatformLogic( phoenixGlobal = phoenixGlobal, ) when (startResult) { @@ -73,7 +72,7 @@ class SovereignWalletStartupViewModel( } fun getShowIntroFlow(): Flow { - return getShowIntroFlow(phoenixGlobal) + return _root_ide_package_.ac.cord.compose.extensions.getShowIntroFlow(phoenixGlobal) } companion object { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletViewModel.kt similarity index 93% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletViewModel.kt index ac167d87..33061a3d 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SovereignWalletViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SovereignWalletViewModel.kt @@ -1,8 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.extensions.getGlobalPrefs -import ac.cord.auxiliary.compose.ui.composable.widgets.wallet.WalletAvatars -import ac.cord.auxiliary.compose.ui.view.state.SovereignWalletUIState +import at.torch.compose.extensions.getGlobalPrefs import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -12,10 +10,7 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import co.touchlab.kermit.Logger -import fr.acinq.bitcoin.MnemonicCode -import fr.acinq.lightning.crypto.LocalKeyManager import fr.acinq.lightning.logging.error -import fr.acinq.lightning.utils.toByteVector import fr.acinq.phoenix.PhoenixBusiness import fr.acinq.phoenix.PhoenixGlobal import fr.acinq.phoenix.data.ActiveWallet @@ -25,7 +20,6 @@ import fr.acinq.phoenix.data.ListWalletState import fr.acinq.phoenix.data.UserWallet import fr.acinq.phoenix.data.WalletId import fr.acinq.phoenix.managers.DataStoreManager -import fr.acinq.phoenix.managers.NodeParamsManager import fr.acinq.phoenix.utils.preferences.GlobalPrefs import fr.acinq.phoenix.utils.preferences.UserWalletMetadata import kotlinx.coroutines.CoroutineExceptionHandler @@ -33,7 +27,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.IO -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -42,7 +35,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlin.String -import kotlin.plus sealed class WritingSeedState { data object Init : WritingSeedState() @@ -91,16 +83,17 @@ class SovereignWalletViewModel( val exchangeRates = phoenixGlobal.currencyManager.ratesFlow .stateIn(viewModelScope, started = SharingStarted.Lazily, initialValue = emptyList()) - var walletUIState: SovereignWalletUIState by mutableStateOf(SovereignWalletUIState.Loading) + var walletUIState: at.torch.compose.ui.view.state.SovereignWalletUIState by mutableStateOf( + _root_ide_package_.at.torch.compose.ui.view.state.SovereignWalletUIState.Loading) private set fun retryLoad() { - walletUIState = SovereignWalletUIState.Loading + walletUIState = _root_ide_package_.at.torch.compose.ui.view.state.SovereignWalletUIState.Loading } fun loadSovereignData(walletId: WalletId) { - walletUIState = SovereignWalletUIState.Success( + walletUIState = _root_ide_package_.at.torch.compose.ui.view.state.SovereignWalletUIState.Success( publicKey = walletId.nodeIdHash, balanceInSatoshis = 0 // TODO: Get balance... ) @@ -163,7 +156,7 @@ class SovereignWalletViewModel( phoenixGlobal = phoenixGlobal, walletId = walletId, name = null, - avatar = WalletAvatars.list.random(), + avatar = _root_ide_package_.at.torch.compose.ui.composable.widgets.wallet.WalletAvatars.list.random(), isHidden = false ) } @@ -218,7 +211,7 @@ class SovereignWalletViewModel( } fun getGlobalPrefs(): GlobalPrefs { - return getGlobalPrefs( + return _root_ide_package_.ac.cord.compose.extensions.getGlobalPrefs( phoenixGlobal ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SynchronizationViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt similarity index 88% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SynchronizationViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt index 581e243c..b58782cb 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/SynchronizationViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt @@ -1,18 +1,11 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.network.dto.toRelayDTO -import ac.cord.auxiliary.compose.network.relays.RelayPool.Companion.PUBLISH_TIMEOUT -import ac.cord.auxiliary.compose.network.relays.RelaysSocketManager -import ac.cord.auxiliary.compose.network.sockets.NostrIncomingMessage -import ac.cord.auxiliary.compose.network.sockets.NostrSocketClientFactory -import ac.cord.auxiliary.compose.repository.CachingImportRepository -import ac.cord.auxiliary.compose.repository.ChatRepository -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.repository.RelayRepository -import androidx.compose.runtime.key +import at.torch.compose.database.model.BroadcastNostrEventRequest +import at.torch.compose.database.model.SynchronizeNostrEventRequest +import at.torch.compose.database.model.types.SynchronizationFilter +import at.torch.compose.network.relays.RelaysSocketManager +import at.torch.compose.network.sockets.NostrSocketClientFactory +import at.torch.compose.network.dto.toRelayDTO import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer @@ -27,7 +20,6 @@ import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip77Negentropy.NegCloseCmd import com.vitorpamplona.quartz.nip77Negentropy.NegOpenCmd import fr.acinq.phoenix.data.ActiveWallet -import fr.acinq.phoenix.managers.WalletManager import fr.acinq.phoenix.managers.nostrPrivateKey import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -45,16 +37,16 @@ import kotlin.time.Duration.Companion.milliseconds class SynchronizationViewModel( val activeWalletStateFlow: StateFlow, - val nostrRepository: NostrRepository, - val chatRepository: ChatRepository, - val relayRepository: RelayRepository, + val nostrRepository: at.torch.compose.repository.NostrRepository, + val chatRepository: at.torch.compose.repository.ChatRepository, + val relayRepository: at.torch.compose.repository.RelayRepository, val scope: CoroutineScope, ): ViewModel() { - val relaysSocketManager = RelaysSocketManager( + val relaysSocketManager = _root_ide_package_.ac.cord.compose.network.relays.RelaysSocketManager( activeWalletStateFlow = activeWalletStateFlow, - nostrSocketClientFactory = NostrSocketClientFactory, - cachingImportRepository = CachingImportRepository.NO_OP_CACHING_IMPORT_REPOSITORY, + nostrSocketClientFactory = _root_ide_package_.ac.cord.compose.network.sockets.NostrSocketClientFactory, + cachingImportRepository = _root_ide_package_.at.torch.compose.repository.CachingImportRepository.Companion.NO_OP_CACHING_IMPORT_REPOSITORY, relayRepository = relayRepository, ) @@ -65,9 +57,9 @@ class SynchronizationViewModel( fun factory( activeWalletStateFlow: StateFlow, - nostrRepository: NostrRepository, - chatRepository: ChatRepository, - relayRepository: RelayRepository, + nostrRepository: at.torch.compose.repository.NostrRepository, + chatRepository: at.torch.compose.repository.ChatRepository, + relayRepository: at.torch.compose.repository.RelayRepository, scope: CoroutineScope, ): ViewModelProvider.Factory = viewModelFactory { initializer { @@ -136,7 +128,7 @@ class SynchronizationViewModel( synchronizeNostrEventRequest.relayURL ).collect { nostrIncomingMessage -> when (nostrIncomingMessage) { - is NostrIncomingMessage.EventMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EventMessage -> { scope.launch(Dispatchers.IO) { logger.d("Import message: $nostrIncomingMessage") nostrIncomingMessage.nostrEvent?.let { @@ -150,7 +142,7 @@ class SynchronizationViewModel( } } } - is NostrIncomingMessage.EventsMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EventsMessage -> { logger.d("Import messages: $nostrIncomingMessage") nostrIncomingMessage.nostrEvents.forEach { nostrEvent -> @@ -163,7 +155,7 @@ class SynchronizationViewModel( ) } } - is NostrIncomingMessage.EoseMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EoseMessage -> { logger.d("Sync request has been successfully processed (${synchronizeNostrEventRequest.relayURL}): $nostrIncomingMessage") val closeCommand = CloseCmd( subId = synchronizeNostrEventRequest.id, @@ -251,7 +243,7 @@ class SynchronizationViewModel( negentropySynchronizeRequest.relayURL ).collect { nostrIncomingMessage -> when (nostrIncomingMessage) { - is NostrIncomingMessage.EventMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EventMessage -> { scope.launch(Dispatchers.IO) { logger.d("Import message: $nostrIncomingMessage") nostrIncomingMessage.nostrEvent?.let { @@ -265,7 +257,7 @@ class SynchronizationViewModel( } } } - is NostrIncomingMessage.EventsMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EventsMessage -> { logger.d("Import messages: $nostrIncomingMessage") nostrIncomingMessage.nostrEvents.forEach { nostrEvent -> @@ -278,7 +270,7 @@ class SynchronizationViewModel( ) } } - is NostrIncomingMessage.EoseMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.EoseMessage -> { logger.d("Sync request has been successfully processed (${negentropySynchronizeRequest.relayURL}): $nostrIncomingMessage") relaysSocketManager.closeNegentropySync( @@ -288,7 +280,7 @@ class SynchronizationViewModel( return@collect } - is NostrIncomingMessage.NegentropyError -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.NegentropyError -> { logger.d("Negentropy Error (need to synchronize like normal): ${nostrIncomingMessage.negentropyReason}") // TODO: Don't schedule a sync when on mobile internet. @@ -299,7 +291,7 @@ class SynchronizationViewModel( ) return@collect } - is NostrIncomingMessage.NegentropyMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.NegentropyMessage -> { logger.d("NegentropyMessage: ${nostrIncomingMessage.negentropyMessage}") val result = negentropy.reconcile( @@ -314,11 +306,12 @@ class SynchronizationViewModel( // Schedule a sync from this relay... nostrRepository.queueSynchronizeNostrEvent( listOf( - SynchronizeNostrEventRequest( + _root_ide_package_.ac.cord.compose.database.model.SynchronizeNostrEventRequest( purpose = negentropySynchronizeRequest.purpose, synchronizationFilters = arrayOf( - SynchronizationFilter( - ids = result.needIds.map { it.toHexString() }.toTypedArray() + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( + ids = result.needIds.map { it.toHexString() } + .toTypedArray() ) ), relayURL = negentropySynchronizeRequest.relayURL, @@ -329,7 +322,7 @@ class SynchronizationViewModel( } val eventIds = events.map { it.id } val broadcastNostrEventRequests = result.sendIds.filter { it.toHexString() in eventIds }.map { sendId -> - BroadcastNostrEventRequest( + _root_ide_package_.ac.cord.compose.database.model.BroadcastNostrEventRequest( nostrEventId = sendId.toHexString(), relayURL = negentropySynchronizeRequest.relayURL ) @@ -347,7 +340,7 @@ class SynchronizationViewModel( return@collect } - is NostrIncomingMessage.NoticeMessage -> { + is at.torch.compose.network.sockets.NostrIncomingMessage.NoticeMessage -> { logger.d("Notice message ${negentropySynchronizeRequest.relayURL}: $nostrIncomingMessage") if (nostrIncomingMessage.subscriptionId?.contains("negentropy disabled") == true) { nostrRepository.queueSynchronizeNostrEvent( @@ -394,7 +387,7 @@ class SynchronizationViewModel( scope.launch(Dispatchers.IO) { relaysSocketManager.publishEvent( localBroadcastNostrEventRequest.nostrEvent - ).timeout(PUBLISH_TIMEOUT.milliseconds).catch { + ).timeout(_root_ide_package_.at.torch.compose.network.relays.RelayPool.Companion.PUBLISH_TIMEOUT.milliseconds).catch { // Timeout... }.collect { nostrPublishResult -> if (nostrPublishResult.error != null) { @@ -421,7 +414,7 @@ class SynchronizationViewModel( setOf( localBroadcastNostrEventRequest.broadcastNostrEventRequest.relayURL.toRelayDTO() ) - ).timeout(PUBLISH_TIMEOUT.milliseconds).catch { + ).timeout(_root_ide_package_.at.torch.compose.network.relays.RelayPool.Companion.PUBLISH_TIMEOUT.milliseconds).catch { // Timeout... }.collect { nostrPublishResult -> if (nostrPublishResult.error != null) { diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt similarity index 82% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt index d6c0a2d2..372deef5 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/UnqueuedProfileSynchronizationViewModel.kt @@ -1,9 +1,7 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest -import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter -import ac.cord.auxiliary.compose.nostr.Relays -import ac.cord.auxiliary.compose.repository.NostrRepository +import at.torch.compose.database.model.SynchronizeNostrEventRequest +import at.torch.compose.database.model.types.SynchronizationFilter import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel @@ -28,7 +26,7 @@ import kotlinx.coroutines.launch class UnqueuedProfileSynchronizationViewModel( val unsignedNostrEventId: Long, val profilePublicKey: String, - val nostrRepository: NostrRepository + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { companion object { private const val TAG = "UnqueuedProfileSynchronizationViewModel" @@ -36,7 +34,7 @@ class UnqueuedProfileSynchronizationViewModel( fun factory( unsignedNostrEventId: Long, profilePublicKey: String, - nostrRepository: NostrRepository + nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModelProvider.Factory = viewModelFactory { initializer { UnqueuedProfileSynchronizationViewModel( @@ -59,11 +57,11 @@ class UnqueuedProfileSynchronizationViewModel( delay(2_000) nostrRepository.queueSynchronizeNostrEvent( - Relays.eventPublishRelaySet.map { normalizedRelayUrl -> - SynchronizeNostrEventRequest( + _root_ide_package_.at.torch.compose.nostr.Relays.eventPublishRelaySet.map { normalizedRelayUrl -> + _root_ide_package_.ac.cord.compose.database.model.SynchronizeNostrEventRequest( purpose = "sign-in", synchronizationFilters = arrayOf( - SynchronizationFilter( + _root_ide_package_.ac.cord.compose.database.model.types.SynchronizationFilter( authors = arrayOf(profilePublicKey), kinds = arrayOf( MetadataEvent.KIND, diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/WriteNewNoteViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/WriteNewNoteViewModel.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/WriteNewNoteViewModel.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/WriteNewNoteViewModel.kt index 8870a38a..9e3e844b 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/WriteNewNoteViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/WriteNewNoteViewModel.kt @@ -1,19 +1,12 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing -import ac.cord.auxiliary.compose.repository.NostrRepository -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentParser -import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentSegment -import ac.cord.auxiliary.compose.ui.view.state.WriteNewNoteUIState import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory -import ac.cord.auxiliary.compose.ui.view.state.form.WriteNewNoteFormState +import at.torch.compose.ui.view.state.form.WriteNewNoteFormState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.setValue @@ -21,7 +14,6 @@ import androidx.compose.ui.text.TextRange import androidx.lifecycle.viewModelScope import co.touchlab.kermit.Logger import com.vitorpamplona.quartz.nip01Core.core.HexKey -import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.nip19Bech32.entities.NProfile import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -33,9 +25,9 @@ class WriteNewNoteViewModel( val replyToNostrEventId: HexKey?, val quotedNostrEventId: HexKey?, - initialWriteNewNoteUIState: WriteNewNoteUIState, - val writeNewNoteFormState: WriteNewNoteFormState = WriteNewNoteFormState(), - val nostrRepository: NostrRepository + initialWriteNewNoteUIState: at.torch.compose.ui.view.state.WriteNewNoteUIState, + val writeNewNoteFormState: at.torch.compose.ui.view.state.form.WriteNewNoteFormState = _root_ide_package_.ac.cord.compose.ui.view.state.form.WriteNewNoteFormState(), + val nostrRepository: at.torch.compose.repository.NostrRepository ): ViewModel() { companion object { private const val TAG = "WriteNewNoteViewModel" @@ -44,8 +36,8 @@ class WriteNewNoteViewModel( activeUserPublicKey: HexKey, replyToNostrEventId: HexKey?, quotedNostrEventId: HexKey?, - initialWriteNewNoteUIState: WriteNewNoteUIState, - nostrRepository: NostrRepository, + initialWriteNewNoteUIState: at.torch.compose.ui.view.state.WriteNewNoteUIState, + nostrRepository: at.torch.compose.repository.NostrRepository, ): ViewModelProvider.Factory = viewModelFactory { initializer { WriteNewNoteViewModel( @@ -63,13 +55,13 @@ class WriteNewNoteViewModel( val isActionPending: MutableState = mutableStateOf(false) - var writeNewNoteUIState: WriteNewNoteUIState by mutableStateOf(initialWriteNewNoteUIState) + var writeNewNoteUIState: at.torch.compose.ui.view.state.WriteNewNoteUIState by mutableStateOf(initialWriteNewNoteUIState) private set - var mentionableProfiles = mutableStateListOf() + var mentionableProfiles = mutableStateListOf() private set - var mentionedProfiles = mutableStateListOf() + var mentionedProfiles = mutableStateListOf() private set var atSymbolRange = mutableStateOf(null) @@ -87,7 +79,7 @@ class WriteNewNoteViewModel( } } - fun addProfileToMentionedProfiles(profile: Profile) { + fun addProfileToMentionedProfiles(profile: at.torch.compose.database.model.Profile) { atSymbolRange.value?.let { range -> mentionedProfiles.add(profile) writeNewNoteFormState.textField.textFieldState.edit { @@ -130,27 +122,27 @@ class WriteNewNoteViewModel( activePublicKey ).collect { profileWithFollowing -> writeNewNoteUIState = if (profileWithFollowing != null) { - WriteNewNoteUIState.InputPrompt( + _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.InputPrompt( localProfile = profileWithFollowing, inReplyToNostrEvent = nostrEventBeingRepliedTo, quotedNostrEvent = nostrEventBeingQuoted ) } else { - WriteNewNoteUIState.Error + _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.Error } } } } fun confirmNote( - localProfile: LocalProfileWithFollowing, - inReplyToNostrEvent: LocalNostrEvent?, - quotedNostrEvent: LocalNostrEvent? + localProfile: at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing, + inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent?, + quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? ) { validateInput().let { isInputValid -> if (isInputValid) { writeNewNoteUIState = - WriteNewNoteUIState.ConfirmNote( + _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.ConfirmNote( localProfile = localProfile, inReplyToNostrEvent = inReplyToNostrEvent, quotedNostrEvent = quotedNostrEvent, @@ -174,16 +166,16 @@ class WriteNewNoteViewModel( fun createNewNote( activeUserPublicKey: HexKey, onNostrEventPublished: () -> Unit, - inReplyToNostrEvent: LocalNostrEvent? = null, - quotedNostrEvent: LocalNostrEvent? = null, + inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, + quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, ) { logger.d { "createAccount" } isActionPending.value = true viewModelScope.launch(Dispatchers.IO) { - val mentionedPublicKeys = ContentParser.parse( + val mentionedPublicKeys = _root_ide_package_.at.torch.compose.ui.composable.widgets.content.ContentParser.parse( writeNewNoteFormState.textField.textFieldState.text.toString(), - ).filterIsInstance().map { it.pubkey } + ).filterIsInstance().map { it.pubkey } nostrRepository.createNewTextNote( publicKey = activeUserPublicKey, @@ -192,7 +184,7 @@ class WriteNewNoteViewModel( inReplyToNostrEvent = inReplyToNostrEvent, quotedNostrEvent = quotedNostrEvent, onError = { - writeNewNoteUIState = WriteNewNoteUIState.Error + writeNewNoteUIState = _root_ide_package_.at.torch.compose.ui.view.state.WriteNewNoteUIState.Error }, onSuccess = onNostrEventPublished ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt similarity index 56% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt index 60ad9125..5cc6c344 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailMessageListUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatMessage +package at.torch.compose.ui.view.state sealed interface ChatRoomDetailMessageListUIState { data class Loaded( - val chatMessageList: List + val chatMessageList: List ): ChatRoomDetailMessageListUIState data object Error: ChatRoomDetailMessageListUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailUIState.kt similarity index 53% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailUIState.kt index 4d26b3bd..75b0955d 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomDetailUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomDetailUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom +package at.torch.compose.ui.view.state sealed interface ChatRoomDetailUIState { data class Loaded( - val localChatRoom: LocalChatRoom + val localChatRoom: at.torch.compose.database.model.intermdiate.LocalChatRoom ): ChatRoomDetailUIState data object Error: ChatRoomDetailUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomListUIState.kt similarity index 51% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomListUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomListUIState.kt index 14942d9f..e1140f1c 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/ChatRoomListUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/ChatRoomListUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom +package at.torch.compose.ui.view.state sealed interface ChatRoomListUIState { data class Loaded( - val chatRoomList: List + val chatRoomList: List ): ChatRoomListUIState data object Error: ChatRoomListUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/CreateProfileUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/CreateProfileUIState.kt similarity index 72% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/CreateProfileUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/CreateProfileUIState.kt index 56cd44b5..afba94e9 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/CreateProfileUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/CreateProfileUIState.kt @@ -1,6 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.Profile +package at.torch.compose.ui.view.state abstract class CreateProfileUIState { data object Error: CreateProfileUIState() @@ -15,6 +13,6 @@ abstract class CreateProfileUIState { ) : CreateProfileUIState() data class ProfileReady( - val profile: Profile + val profile: at.torch.compose.database.model.Profile ) : CreateProfileUIState() } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FeedListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FeedListUIState.kt new file mode 100755 index 00000000..13d0c279 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FeedListUIState.kt @@ -0,0 +1,11 @@ +package at.torch.compose.ui.view.state + +sealed interface FeedListUIState { + data class Loaded( + val localNostrEvents: List + ): FeedListUIState + + data object Error: FeedListUIState + data object Loading: FeedListUIState +} + diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowersListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowersListUIState.kt similarity index 56% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowersListUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowersListUIState.kt index bb181e81..0c56c37f 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowersListUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowersListUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.Profile +package at.torch.compose.ui.view.state sealed interface FollowersListUIState { data class Loaded( - val followers: List + val followers: List ): FollowersListUIState data object Error: FollowersListUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowingListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowingListUIState.kt similarity index 56% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowingListUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowingListUIState.kt index 0cf775b0..e3fd6c76 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/FollowingListUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/FollowingListUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.Profile +package at.torch.compose.ui.view.state sealed interface FollowingListUIState { data class Loaded( - val following: List + val following: List ): FollowingListUIState data object Error: FollowingListUIState diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/HomeScreenUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/HomeScreenUIState.kt new file mode 100755 index 00000000..52c0941c --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/HomeScreenUIState.kt @@ -0,0 +1,12 @@ +package at.torch.compose.ui.view.state + + +sealed interface HomeScreenUIState { + data class Loaded( + val profileWithFollowing: at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing + ): HomeScreenUIState + + data object Error: HomeScreenUIState + data object Loading: HomeScreenUIState +} + diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/MetadataEventDetailUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/MetadataEventDetailUIState.kt similarity index 52% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/MetadataEventDetailUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/MetadataEventDetailUIState.kt index 456dfb88..893d4527 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/MetadataEventDetailUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/MetadataEventDetailUIState.kt @@ -1,13 +1,11 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.Connection +package at.torch.compose.ui.view.state sealed interface MetadataEventDetailUIState { data class Loaded( val isActiveUser: Boolean, - val followingActiveUserConnection: Connection?, - val followedByActiveUserConnection: Connection?, + val followingActiveUserConnection: at.torch.compose.database.model.Connection?, + val followedByActiveUserConnection: at.torch.compose.database.model.Connection?, ): MetadataEventDetailUIState data object Error: MetadataEventDetailUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NavigationUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NavigationUIState.kt similarity index 55% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NavigationUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NavigationUIState.kt index acb0ff6e..af4e8f8f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NavigationUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NavigationUIState.kt @@ -1,9 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest -import ac.cord.auxiliary.compose.database.model.NostrEvent -import ac.cord.auxiliary.compose.database.model.Profile -import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent +package at.torch.compose.ui.view.state abstract class NavigationUIState { data object Error: NavigationUIState() @@ -16,28 +11,28 @@ abstract class NavigationUIState { data object Landing: NavigationUIState() data class UnsignedProfile( - val unsignedNostrEvent: UnsignedNostrEvent, + val unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, ) : NavigationUIState() data class UnsyncedProfile( - val unsignedNostrEvent: UnsignedNostrEvent, + val unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, ) : NavigationUIState() data class UnqueuedProfileSynchronization( - val unsignedNostrEvent: UnsignedNostrEvent, + val unsignedNostrEvent: at.torch.compose.database.model.UnsignedNostrEvent, ) : NavigationUIState() data class UnindexedProfile( - val nostrEvent: NostrEvent, + val nostrEvent: at.torch.compose.database.model.NostrEvent, ) : NavigationUIState() data class UnqueuedProfile( - val profile: Profile, + val profile: at.torch.compose.database.model.Profile, ) : NavigationUIState() data class UnannouncedProfile( - val broadcastNostrEventRequest: BroadcastNostrEventRequest, + val broadcastNostrEventRequest: at.torch.compose.database.model.BroadcastNostrEventRequest, ) : NavigationUIState() diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NostrEventDetailUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NostrEventDetailUIState.kt similarity index 59% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NostrEventDetailUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NostrEventDetailUIState.kt index d745628a..8728a72d 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/NostrEventDetailUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/NostrEventDetailUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent +package at.torch.compose.ui.view.state sealed interface NostrEventDetailUIState { data class Loaded( - val localNostrEvent: LocalNostrEvent + val localNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent ): NostrEventDetailUIState data object Error: NostrEventDetailUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchResultListUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchResultListUIState.kt similarity index 52% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchResultListUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchResultListUIState.kt index 7806d34d..e321a28f 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchResultListUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchResultListUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent +package at.torch.compose.ui.view.state sealed interface SearchResultListUIState { data class Loaded( - val localNostrEvents: List + val localNostrEvents: List ): SearchResultListUIState data object Error: SearchResultListUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchUIState.kt similarity index 53% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchUIState.kt index 48e42ed9..04a32035 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SearchUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SearchUIState.kt @@ -1,10 +1,8 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent +package at.torch.compose.ui.view.state sealed interface SearchUIState { data class Loaded( - val localNostrEvents: List + val localNostrEvents: List ): SearchUIState data object Error: SearchUIState diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SignInToProfileUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SignInToProfileUIState.kt similarity index 90% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SignInToProfileUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SignInToProfileUIState.kt index c73d1afb..7983fcee 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SignInToProfileUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SignInToProfileUIState.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state +package at.torch.compose.ui.view.state import com.vitorpamplona.quartz.nip01Core.core.HexKey diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SovereignWalletUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SovereignWalletUIState.kt similarity index 78% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SovereignWalletUIState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SovereignWalletUIState.kt index c4f488e5..3bf5020f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/SovereignWalletUIState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/SovereignWalletUIState.kt @@ -1,6 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state - -import fr.acinq.phoenix.PhoenixBusiness +package at.torch.compose.ui.view.state sealed interface SovereignWalletUIState { data object Uninitialized: SovereignWalletUIState diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/WriteNewNoteUIState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/WriteNewNoteUIState.kt new file mode 100644 index 00000000..f5a1ee39 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/WriteNewNoteUIState.kt @@ -0,0 +1,24 @@ +package at.torch.compose.ui.view.state + +import com.vitorpamplona.quartz.nip01Core.core.HexKey + +abstract class WriteNewNoteUIState { + data object Loading: WriteNewNoteUIState() + + data object Error: WriteNewNoteUIState() + + data class InputPrompt( + val localProfile: at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing, + val inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, + val quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, + val replayToId: HexKey? = null, + ): WriteNewNoteUIState() + + data class ConfirmNote( + val localProfile: at.torch.compose.database.model.intermdiate.LocalProfileWithFollowing, + val inReplyToNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, + val quotedNostrEvent: at.torch.compose.database.model.intermdiate.LocalNostrEvent? = null, + val text: String, + ) : WriteNewNoteUIState() + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/CreateProfileFormState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/CreateProfileFormState.kt similarity index 70% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/CreateProfileFormState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/CreateProfileFormState.kt index 238b24cc..e890e374 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/CreateProfileFormState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/CreateProfileFormState.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state.form +package at.torch.compose.ui.view.state.form data class CreateProfileFormState( val nameField: TextField = TextField(), diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/SignInToProfileFormState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/SignInToProfileFormState.kt similarity index 60% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/SignInToProfileFormState.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/SignInToProfileFormState.kt index 5aa5e7d3..abfc7779 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/SignInToProfileFormState.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/SignInToProfileFormState.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state.form +package at.torch.compose.ui.view.state.form data class SignInToProfileFormState( val textField: TextField = TextField(), diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/TextField.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/TextField.kt similarity index 85% rename from composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/TextField.kt rename to composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/TextField.kt index a3d586c5..d88d0742 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/state/form/TextField.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/TextField.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.view.state.form +package at.torch.compose.ui.view.state.form import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.runtime.MutableState diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/WriteNewNoteFormState.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/WriteNewNoteFormState.kt new file mode 100644 index 00000000..35ebf2c5 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/state/form/WriteNewNoteFormState.kt @@ -0,0 +1,5 @@ +package at.torch.compose.ui.view.state.form + +data class WriteNewNoteFormState( + val textField: TextField = TextField(), +) \ No newline at end of file diff --git a/composeApp/src/commonTest/kotlin/ac/auxiliary/compose/ComposeAppCommonTest.kt b/composeApp/src/commonTest/kotlin/at/auxiliary/compose/ComposeAppCommonTest.kt similarity index 83% rename from composeApp/src/commonTest/kotlin/ac/auxiliary/compose/ComposeAppCommonTest.kt rename to composeApp/src/commonTest/kotlin/at/auxiliary/compose/ComposeAppCommonTest.kt index b83025ad..b0a53f74 100644 --- a/composeApp/src/commonTest/kotlin/ac/auxiliary/compose/ComposeAppCommonTest.kt +++ b/composeApp/src/commonTest/kotlin/at/auxiliary/compose/ComposeAppCommonTest.kt @@ -1,4 +1,4 @@ -package ac.auxiliary.compose +package at.auxiliary.compose import kotlin.test.Test import kotlin.test.assertEquals diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.ios.kt b/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.ios.kt deleted file mode 100644 index b52de0a8..00000000 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/PlatformContext.ios.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ac.cord.auxiliary.compose - -actual class PlatformContext \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/AppVersion.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/AppVersion.ios.kt similarity index 92% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/AppVersion.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/AppVersion.ios.kt index 76ee41cb..f33e7d24 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/AppVersion.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/AppVersion.ios.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose +package at.torch.compose import platform.Foundation.NSBundle diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/MainViewController.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/MainViewController.kt similarity index 59% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/MainViewController.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/MainViewController.kt index 7b39aaf5..ffdd314d 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/MainViewController.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/MainViewController.kt @@ -1,15 +1,19 @@ -package ac.cord.auxiliary.compose +package at.torch.compose import androidx.compose.ui.window.ComposeUIViewController import androidx.navigation.compose.rememberNavController +import fr.acinq.phoenix.PhoenixGlobal fun MainViewController() = ComposeUIViewController { val navController = rememberNavController() - AuxApp( + TorchApp( navController = navController, - auxGlobal = AuxGlobal( + torchGlobal = TorchGlobal( platformContext = PlatformContext() + ), + phoenixGlobal = PhoenixGlobal( + ctx = fr.acinq.phoenix.utils.PlatformContext() ) ) } \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/Platform.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/Platform.ios.kt similarity index 63% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/Platform.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/Platform.ios.kt index f142eaa6..8ef251b0 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/Platform.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/Platform.ios.kt @@ -1,6 +1,7 @@ -package ac.cord.auxiliary.compose +package at.torch.compose import platform.UIKit.UIDevice +import kotlin.native.Platform class IOSPlatform: Platform { override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion diff --git a/composeApp/src/iosMain/kotlin/at/torch/compose/PlatformContext.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/PlatformContext.ios.kt new file mode 100644 index 00000000..1dd7c12d --- /dev/null +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/PlatformContext.ios.kt @@ -0,0 +1,3 @@ +package at.torch.compose + +actual class PlatformContext \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.ios.kt similarity index 72% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.ios.kt index 4e3be082..feb1fa12 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/database/builder/PlatformDatabaseBuilder.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/database/builder/PlatformDatabaseBuilder.ios.kt @@ -1,18 +1,18 @@ -package ac.cord.auxiliary.compose.database.builder +package at.torch.compose.database.builder -import ac.cord.auxiliary.compose.PlatformContext -import ac.auxiliary.compose.database.AuxDatabase -import androidx.room.Room -import androidx.room.RoomDatabase +import androidx.room3.Room +import androidx.room3.RoomDatabase +import at.torch.compose.PlatformContext +import at.torch.compose.database.TorchDatabase import kotlinx.cinterop.ExperimentalForeignApi import platform.Foundation.NSDocumentDirectory import platform.Foundation.NSFileManager import platform.Foundation.NSUserDomainMask actual object PlatformDatabaseBuilder { - actual fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder { + actual fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder { val dbFilePath = documentDirectory() + "/aux.db" - return Room.databaseBuilder( + return Room.databaseBuilder( name = dbFilePath, ) } @@ -29,7 +29,7 @@ actual object PlatformDatabaseBuilder { return requireNotNull(documentDirectory?.path) } - actual fun getInMemoryDatabaseBuilder(platform: PlatformContext): RoomDatabase.Builder { + actual fun getInMemoryDatabaseBuilder(platform: PlatformContext): RoomDatabase.Builder { return Room.inMemoryDatabaseBuilder() } diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/extensions/Phoenix.ios.kt similarity index 96% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/extensions/Phoenix.ios.kt index 1629cf13..19e09497 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/extensions/Phoenix.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/extensions/Phoenix.ios.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.extensions +package at.torch.compose.extensions import co.touchlab.kermit.Logger import fr.acinq.bitcoin.Chain diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/ui/theme/Theme.ios.kt similarity index 88% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/ui/theme/Theme.ios.kt index 79e272fe..94f6f69d 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/theme/Theme.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/ui/theme/Theme.ios.kt @@ -1,4 +1,4 @@ -package ac.cord.auxiliary.compose.ui.theme +package at.torch.compose.ui.theme import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable diff --git a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.ios.kt b/composeApp/src/iosMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.ios.kt similarity index 98% rename from composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.ios.kt rename to composeApp/src/iosMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.ios.kt index da93306d..52752e66 100644 --- a/composeApp/src/iosMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/NavigationViewModel.ios.kt +++ b/composeApp/src/iosMain/kotlin/at/torch/compose/ui/view/model/NavigationViewModel.ios.kt @@ -1,6 +1,6 @@ -package ac.cord.auxiliary.compose.ui.view.model +package at.torch.compose.ui.view.model -import ac.cord.auxiliary.compose.AppVersion +import at.torch.compose.AppVersion import co.touchlab.kermit.Logger import fr.acinq.bitcoin.Chain import fr.acinq.bitcoin.MnemonicCode diff --git a/settings.gradle.kts b/settings.gradle.kts index dc57eea3..ed402d6b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,4 @@ -rootProject.name = "Aux" +rootProject.name = "Torch" enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement {