Optimize imports

This commit is contained in:
Kgothatso Ngako committed 2026-06-20 14:31:44 +02:00
1 parent 94723eca6a
commit 6c2609254d
172 files changed
+516 -501

No files matched your search

@@ -1,12 +1,12 @@
package at.torch.compose
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.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import at.torch.compose.ui.composable.navigation.TorchNavHost
import at.torch.compose.ui.theme.TorchTheme
import fr.acinq.phoenix.PhoenixGlobal
@Composable
@@ -7,7 +7,6 @@ import androidx.room3.immediateTransaction
import androidx.room3.useWriterConnection
import at.torch.compose.database.dao.MarmotKeyPackageBundleDao
import at.torch.compose.database.dao.MarmotKeyPackageDao
import at.torch.compose.database.model.MarmotKeyPackageBundle
import kotlin.time.Instant
val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L)
@@ -1,12 +1,8 @@
package at.torch.compose.database.dao
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.OnConflictStrategy.Companion.IGNORE
import androidx.room3.Upsert
import at.torch.compose.database.model.MarmotKeyPackage
import at.torch.compose.database.model.MarmotKeyPackageBundle
import at.torch.compose.database.model.Mention
@Dao
interface MarmotKeyPackageBundleDao {
@@ -1,11 +1,8 @@
package at.torch.compose.database.dao
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.OnConflictStrategy.Companion.IGNORE
import androidx.room3.Upsert
import at.torch.compose.database.model.MarmotKeyPackage
import at.torch.compose.database.model.Mention
@Dao
interface MarmotKeyPackageDao {
@@ -1,5 +1,7 @@
package at.torch.compose.database.dao
import androidx.room3.Dao
import androidx.room3.Transaction
import at.torch.compose.database.GENESIS_AT
import at.torch.compose.database.model.BroadcastNostrEventReceipt
import at.torch.compose.database.model.BroadcastNostrEventRequest
@@ -19,8 +21,6 @@ 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
import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
@@ -1,5 +1,7 @@
package at.torch.compose.database.dao
import androidx.room3.Dao
import androidx.room3.Transaction
import at.torch.compose.database.GENESIS_AT
import at.torch.compose.database.model.BroadcastNostrEventRequest
import at.torch.compose.database.model.ChatMessageBroadcastNostrEventRequestRelation
@@ -10,8 +12,6 @@ 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.tags.people.PTag
@@ -1,6 +1,5 @@
package at.torch.compose.database.dao
import at.torch.compose.database.GENESIS_AT
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.Query
@@ -1,9 +1,9 @@
package at.torch.compose.database.dao
import at.torch.compose.database.model.Zap
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import at.torch.compose.database.model.Zap
import kotlinx.coroutines.flow.Flow
@Dao
@@ -1,12 +1,12 @@
package at.torch.compose.database.model
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
import androidx.room3.PrimaryKey
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 com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,12 +1,12 @@
package at.torch.compose.database.model
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.PrimaryKey
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 kotlin.time.Clock
import kotlin.time.Instant
@@ -1,10 +1,10 @@
package at.torch.compose.database.model
import at.torch.compose.network.serialization.encodeToJsonString
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import at.torch.compose.network.serialization.encodeToJsonString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.utils.sha256.sha256
import io.ktor.utils.io.core.toByteArray
@@ -27,7 +27,6 @@ import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonArray
import kotlin.String
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,10 +1,10 @@
package at.torch.compose.database.model
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 at.torch.compose.database.model.traits.NostrEventEntity
import at.torch.compose.database.model.traits.TimestampedEntity
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,5 +1,9 @@
package at.torch.compose.database.model
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import at.torch.compose.database.model.traits.BroadcastableEntity
import at.torch.compose.database.model.traits.LocalStoreEntity
import at.torch.compose.database.model.traits.NostrEventEntity
@@ -8,10 +12,6 @@ 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
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,7 +1,5 @@
package at.torch.compose.database.model
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
@@ -1,11 +1,11 @@
package at.torch.compose.database.model
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
import androidx.room3.PrimaryKey
import at.torch.compose.database.model.traits.OptionalNostrEventEntity
import at.torch.compose.database.model.traits.TimestampedEntity
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -5,7 +5,6 @@ import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.Kind
import kotlin.String
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,7 +1,5 @@
package at.torch.compose.database.model.intermdiate
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
@@ -17,6 +15,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room3.Embedded
import androidx.room3.Relation
import at.torch.compose.extensions.toFormattedTimeAndDateString
data class LocalInReplyToNostrEvent(
@Embedded val inReplyToRelation: at.torch.compose.database.model.InReplyToRelation,
@@ -1,8 +1,5 @@
package at.torch.compose.database.model.intermdiate
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
@@ -16,6 +13,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.room3.Embedded
import androidx.room3.Relation
import at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
data class LocalNostrEvent(
@@ -1,9 +1,9 @@
package at.torch.compose.database.model.intermdiate
import at.torch.compose.database.model.Post
import at.torch.compose.database.model.Profile
import androidx.room3.Embedded
import androidx.room3.Relation
import at.torch.compose.database.model.Post
import at.torch.compose.database.model.Profile
data class LocalPost(
@Embedded val post: Post,
@@ -1,11 +1,5 @@
package at.torch.compose.database.model.intermdiate
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
@@ -21,6 +15,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.room3.Embedded
import androidx.room3.Relation
import at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
data class LocalQuotedNostrEvent(
@@ -1,7 +1,5 @@
package at.torch.compose.database.model.intermdiate
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
@@ -17,6 +15,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room3.Embedded
import androidx.room3.Relation
import at.torch.compose.extensions.toFormattedTimeAndDateString
data class LocalRepostedNostrEvent(
@Embedded val repostedRelation: at.torch.compose.database.model.RepostedRelation,
@@ -1,10 +1,6 @@
package at.torch.compose.database.repository
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.marmot.mls.group.MlsGroupState
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.Kind
@@ -1,6 +1,5 @@
package at.torch.compose.database.repository
import at.torch.compose.database.model.MarmotKeyPackageBundle
import at.torch.compose.database.model.UnsignedNostrEvent
import at.torch.compose.nostr.Relays
import co.touchlab.kermit.Logger
@@ -8,7 +7,6 @@ import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageEvent
import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageRelayListEvent
import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageRotationManager.Companion.KEY_PACKAGE_LIFETIME_SECONDS
import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageUtils
import com.vitorpamplona.quartz.marmot.mls.codec.TlsWriter
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519
import com.vitorpamplona.quartz.marmot.mls.crypto.MlsCryptoProvider
import com.vitorpamplona.quartz.marmot.mls.crypto.X25519
@@ -57,8 +55,6 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlin.collections.emptyMap
import kotlin.collections.plus
import kotlin.io.encoding.Base64
import kotlin.time.Clock
import kotlin.time.Instant
@@ -1,6 +1,5 @@
package at.torch.compose.extensions
import at.torch.compose.exceptions.InvalidNostrPrivateKeyException
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip19Bech32.bech32.Bech32
import fr.acinq.bitcoin.PrivateKey
@@ -1,7 +1,5 @@
package at.torch.compose.managers
import at.torch.compose.database.builder.getRoomDatabase
class AuxDatabaseManager(
torchGlobal: at.torch.compose.TorchGlobal
) {
@@ -1,21 +1,6 @@
package at.torch.compose.network.relays
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
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.IO
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.getAndUpdate
import kotlinx.coroutines.flow.timeout
import kotlinx.coroutines.flow.transform
import kotlinx.coroutines.launch
import at.torch.compose.network.dto.toRelayDTO
import at.torch.compose.network.sockets.filterByEventId
import at.torch.compose.network.sockets.filterBySubscriptionId
@@ -27,11 +12,24 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
import com.vitorpamplona.quartz.nip77Negentropy.NegCloseCmd
import com.vitorpamplona.quartz.nip77Negentropy.NegOpenCmd
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.IO
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.getAndUpdate
import kotlinx.coroutines.flow.timeout
import kotlinx.coroutines.flow.transform
import kotlinx.coroutines.flow.transformWhile
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlin.time.Duration.Companion.milliseconds
/**
* As seen in Primal
@@ -1,15 +1,7 @@
package at.torch.compose.network.relays
import co.touchlab.kermit.Logger
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import at.torch.compose.network.dto.mapToRelayDTO
import co.touchlab.kermit.Logger
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
@@ -17,9 +9,17 @@ import com.vitorpamplona.quartz.nip77Negentropy.NegCloseCmd
import com.vitorpamplona.quartz.nip77Negentropy.NegOpenCmd
import fr.acinq.phoenix.data.ActiveWallet
import fr.acinq.phoenix.managers.nostrPublicKey
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
/**
@@ -1,8 +1,5 @@
package at.torch.compose.network.sockets
import at.torch.compose.exceptions.NetworkException
import at.torch.compose.exceptions.NostrNoticeException
sealed class NostrIncomingMessage {
data class EventMessage(
@@ -1,6 +1,5 @@
package at.torch.compose.network.sockets
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
@@ -1,8 +1,8 @@
package at.torch.compose.network.sockets
import kotlin.coroutines.cancellation.CancellationException
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.serialization.json.JsonObject
import kotlin.coroutines.cancellation.CancellationException
interface NostrSocketClient {
val socketUrl: String
@@ -1,6 +1,5 @@
package at.torch.compose.network.sockets
import at.torch.compose.exceptions.NetworkException
import co.touchlab.kermit.Logger
import io.ktor.client.HttpClient
import io.ktor.client.plugins.websocket.webSocketSession
@@ -10,9 +9,6 @@ import io.ktor.websocket.WebSocketSession
import io.ktor.websocket.close
import io.ktor.websocket.readReason
import io.ktor.websocket.readText
import kotlin.coroutines.cancellation.CancellationException
import kotlin.time.Duration.Companion.milliseconds
import kotlin.uuid.Uuid
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
@@ -32,7 +28,10 @@ import okio.Inflater
import okio.InflaterSource
import okio.buffer
import okio.use
import kotlin.coroutines.cancellation.CancellationException
import kotlin.time.Duration.Companion.milliseconds
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
@OptIn(ExperimentalUuidApi::class)
internal class NostrSocketClientImpl(
@@ -1,8 +1,5 @@
package at.torch.compose.repository
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
@@ -1,6 +1,5 @@
package at.torch.compose.repository
import at.torch.compose.network.dto.RelayDTO
import co.touchlab.kermit.Logger
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -1,7 +1,6 @@
package at.torch.compose.ui.composable
import androidx.compose.foundation.layout.Arrangement
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.fillMaxWidth
@@ -30,8 +29,6 @@ import at.torch.compose.repository.ChatRepository
import at.torch.compose.repository.NostrRepository
import at.torch.compose.ui.composable.navigation.routes.Route
import at.torch.compose.ui.view.model.ChatRoomCreationViewModel
import at.torch.compose.ui.view.state.form.TextField
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.phoenix.data.ActiveWallet
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -1,9 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -36,6 +32,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import at.torch.compose.repository.MarmotRepository
import at.torch.compose.ui.view.model.CreateProfileViewModel
import at.torch.compose.ui.view.state.CreateProfileUIState
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,11 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,7 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -51,6 +49,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import at.torch.compose.ui.composable.widgets.feed.ListView
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@@ -1,8 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,7 +1,5 @@
package at.torch.compose.ui.composable
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.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
@@ -27,7 +25,6 @@ import fr.acinq.phoenix.utils.preferences.UserPrefs
import fr.acinq.phoenix.utils.preferences.UserWalletMetadata
import fr.acinq.phoenix.utils.preferences.getByWalletIdOrDefault
import kotlinx.coroutines.flow.first
import kotlin.collections.get
@Composable
fun SovereignWalletStartupScreen(
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -1,15 +1,5 @@
package at.torch.compose.ui.composable
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
@@ -49,6 +39,7 @@ 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 at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import kotlin.time.Clock
@@ -1,24 +1,23 @@
package at.torch.compose.ui.composable.navigation
import androidx.compose.runtime.Composable
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import at.torch.compose.ui.composable.navigation.routes.WriteNewNoteRoute
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
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.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import at.torch.compose.database.repository.DatabaseMarmotRepository
import at.torch.compose.ui.composable.ChatRoomCreationScreen
import at.torch.compose.ui.composable.ChatRoomDetailScreen
import at.torch.compose.ui.composable.HomeScreen
import at.torch.compose.ui.composable.navigation.routes.ChatRoomCreationRoute
import at.torch.compose.ui.composable.navigation.routes.WriteNewNoteRoute
import co.touchlab.kermit.Logger
import fr.acinq.phoenix.PhoenixGlobal
import kotlinx.coroutines.CoroutineExceptionHandler
@@ -23,14 +23,10 @@ import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProvideTextStyle
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable.widgets.content
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
@@ -9,7 +8,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
@@ -1,6 +1,5 @@
package at.torch.compose.ui.composable.widgets.content
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
@@ -1,9 +1,5 @@
package at.torch.compose.ui.composable.widgets.content
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
@@ -1,11 +1,5 @@
package at.torch.compose.ui.composable.widgets.content
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.fillMaxSize
import androidx.compose.foundation.layout.padding
@@ -1,11 +1,5 @@
package at.torch.compose.ui.composable.widgets.detail
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
@@ -50,6 +44,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
@@ -1,13 +1,5 @@
package at.torch.compose.ui.composable.widgets.feed
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
@@ -26,6 +18,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
@@ -1,16 +1,5 @@
package at.torch.compose.ui.composable.widgets.feed
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
@@ -33,6 +22,7 @@ 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 at.torch.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@@ -1,7 +1,5 @@
package at.torch.compose.ui.composable.widgets.profile
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
@@ -16,7 +16,6 @@
package at.torch.compose.ui.composable.widgets.wallet
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
@@ -3,8 +3,8 @@ package at.torch.compose.ui.theme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color
@@ -1,9 +1,5 @@
package com.example.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
val AuxTypography = Typography()
@@ -1,8 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -45,6 +42,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.extensions.toFormattedTimeAndDateString
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
@@ -1,16 +1,16 @@
package at.torch.compose.ui.view.model
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.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.ui.view.state.form.CreateProfileFormState
import androidx.lifecycle.viewModelScope
import at.torch.compose.repository.MarmotRepository
import at.torch.compose.repository.NostrRepository
import at.torch.compose.ui.view.state.CreateProfileUIState
import at.torch.compose.ui.view.state.form.CreateProfileFormState
import co.touchlab.kermit.Logger
import fr.acinq.bitcoin.Chain
import fr.acinq.bitcoin.MnemonicCode
@@ -1,8 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -27,6 +24,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.ui.composable.widgets.feed.ListView
import co.touchlab.kermit.Logger
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
@@ -1,6 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.view.model
import at.torch.compose.database.model.types.SynchronizationFilter
import androidx.compose.foundation.pager.PagerState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -12,16 +11,7 @@ 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.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.nip25Reactions.ReactionEvent
import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
import com.vitorpamplona.quartz.nip65RelayList.AdvertisedRelayListEvent
import com.vitorpamplona.quartz.nip96FileStorage.config.FileServersEvent
import com.vitorpamplona.quartz.nipB7Blossom.BlossomServersEvent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.launch
@@ -1,9 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -28,6 +24,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.ui.composable.widgets.feed.ListView
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
@@ -1,7 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -1,7 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -1,6 +1,5 @@
package at.torch.compose.ui.view.model
import at.torch.compose.database.model.NostrEvent
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.initializer
@@ -1,7 +1,5 @@
package at.torch.compose.ui.view.model
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
@@ -12,14 +10,6 @@ import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
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.nip68Picture.PictureEvent
import com.vitorpamplona.quartz.nip71Video.VideoNormalEvent
import com.vitorpamplona.quartz.nip71Video.VideoShortEvent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -1,13 +1,12 @@
package at.torch.compose.ui.view.model
import at.torch.compose.ui.view.state.form.SignInToProfileFormState
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import androidx.lifecycle.viewModelScope
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip19Bech32.Nip19Parser
import com.vitorpamplona.quartz.nip19Bech32.entities.Entity
@@ -1,8 +1,5 @@
package at.torch.compose.ui.view.model
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.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
@@ -1,6 +1,5 @@
package at.torch.compose.ui.view.model
import at.torch.compose.extensions.getGlobalPrefs
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
@@ -34,7 +33,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import kotlin.String
sealed class WritingSeedState {
data object Init : WritingSeedState()
@@ -1,15 +1,10 @@
package at.torch.compose.ui.view.model
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
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.network.dto.toRelayDTO
import co.touchlab.kermit.Logger
import com.vitorpamplona.negentropy.Negentropy
import com.vitorpamplona.negentropy.storage.StorageVector
@@ -1,14 +1,12 @@
package at.torch.compose.ui.view.model
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
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import androidx.lifecycle.viewModelScope
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent
@@ -1,17 +1,16 @@
package at.torch.compose.ui.view.model
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 at.torch.compose.ui.view.state.form.WriteNewNoteFormState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.text.TextRange
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
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 com.vitorpamplona.quartz.nip19Bech32.entities.NProfile
@@ -2,7 +2,13 @@ package fr.acinq.phoenixd.conf
import fr.acinq.bitcoin.Chain
import fr.acinq.bitcoin.PublicKey
import fr.acinq.lightning.*
import fr.acinq.lightning.CltvExpiryDelta
import fr.acinq.lightning.DefaultSwapInParams
import fr.acinq.lightning.InvoiceDefaultRoutingFees
import fr.acinq.lightning.NodeUri
import fr.acinq.lightning.SwapInParams
import fr.acinq.lightning.TrampolineFees
import fr.acinq.lightning.WalletParams
import fr.acinq.lightning.utils.msat
import fr.acinq.lightning.utils.sat
@@ -22,8 +22,13 @@ import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.navigation.NavController
import fr.acinq.phoenix.controllers.ControllerFactory
import fr.acinq.phoenix.data.*
import fr.acinq.phoenix.utils.preferences.GlobalPrefs
import fr.acinq.phoenix.data.BitcoinUnit
import fr.acinq.phoenix.data.CurrencyUnit
import fr.acinq.phoenix.data.ExchangeRate
import fr.acinq.phoenix.data.FiatCurrency
import fr.acinq.phoenix.data.PreferredFiatCurrencies
import fr.acinq.phoenix.data.UserTheme
import fr.acinq.phoenix.data.WalletId
import fr.acinq.phoenix.utils.preferences.InternalPrefs
import fr.acinq.phoenix.utils.preferences.PreferredBitcoinUnits
import fr.acinq.phoenix.utils.preferences.UserPrefs
@@ -23,18 +23,40 @@ import fr.acinq.lightning.io.TcpSocket
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.lightning.logging.debug
import fr.acinq.lightning.logging.info
import fr.acinq.phoenix.controllers.*
import fr.acinq.phoenix.controllers.config.*
import fr.acinq.phoenix.controllers.CloseChannelsConfigurationController
import fr.acinq.phoenix.controllers.ConfigurationController
import fr.acinq.phoenix.controllers.ContentController
import fr.acinq.phoenix.controllers.ControllerFactory
import fr.acinq.phoenix.controllers.ElectrumConfigurationController
import fr.acinq.phoenix.controllers.HomeController
import fr.acinq.phoenix.controllers.InitializationController
import fr.acinq.phoenix.controllers.ReceiveController
import fr.acinq.phoenix.controllers.RestoreWalletController
import fr.acinq.phoenix.controllers.config.AppCloseChannelsConfigurationController
import fr.acinq.phoenix.controllers.config.AppConfigurationController
import fr.acinq.phoenix.controllers.config.AppElectrumConfigurationController
import fr.acinq.phoenix.controllers.init.AppInitController
import fr.acinq.phoenix.controllers.init.AppRestoreWalletController
import fr.acinq.phoenix.controllers.main.AppContentController
import fr.acinq.phoenix.controllers.main.AppHomeController
import fr.acinq.phoenix.controllers.payments.AppReceiveController
import fr.acinq.phoenix.data.StartupParams
import fr.acinq.phoenix.managers.*
import fr.acinq.phoenix.managers.AppConfigurationManager
import fr.acinq.phoenix.managers.AppConnectionsDaemon
import fr.acinq.phoenix.managers.BalanceManager
import fr.acinq.phoenix.managers.ConnectionsManager
import fr.acinq.phoenix.managers.DataStoreManager
import fr.acinq.phoenix.managers.DatabaseManager
import fr.acinq.phoenix.managers.LnurlManager
import fr.acinq.phoenix.managers.NodeParamsManager
import fr.acinq.phoenix.managers.NotificationsManager
import fr.acinq.phoenix.managers.PaymentsManager
import fr.acinq.phoenix.managers.PeerManager
import fr.acinq.phoenix.managers.SendManager
import fr.acinq.phoenix.managers.WalletManager
import fr.acinq.phoenix.managers.global.CurrencyManager
import fr.acinq.phoenix.managers.global.FeerateManager
import fr.acinq.phoenix.utils.*
import fr.acinq.phoenix.utils.BlockchainExplorer
import fr.acinq.phoenix.utils.logger.PhoenixLoggerConfig
import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
@@ -2,10 +2,13 @@ package fr.acinq.phoenix.controllers
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.lightning.logging.debug
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
abstract class AppController<M : MVI.Model, I : MVI.Intent>(
@@ -1,6 +1,8 @@
package fr.acinq.phoenix.controllers
import fr.acinq.phoenix.controllers.config.*
import fr.acinq.phoenix.controllers.config.CloseChannelsConfiguration
import fr.acinq.phoenix.controllers.config.Configuration
import fr.acinq.phoenix.controllers.config.ElectrumConfiguration
import fr.acinq.phoenix.controllers.init.Initialization
import fr.acinq.phoenix.controllers.init.RestoreWallet
import fr.acinq.phoenix.controllers.main.Content
@@ -1,27 +1,29 @@
package fr.acinq.phoenix.controllers.config
import fr.acinq.bitcoin.ByteVector
import fr.acinq.bitcoin.Chain
import fr.acinq.bitcoin.ByteVector32
import fr.acinq.bitcoin.Chain
import fr.acinq.lightning.blockchain.fee.FeeratePerByte
import fr.acinq.lightning.blockchain.fee.FeeratePerKw
import fr.acinq.lightning.channel.*
import fr.acinq.lightning.channel.states.*
import fr.acinq.lightning.channel.ChannelCommand
import fr.acinq.lightning.channel.states.Aborted
import fr.acinq.lightning.channel.states.ChannelState
import fr.acinq.lightning.channel.states.Closed
import fr.acinq.lightning.channel.states.Closing
import fr.acinq.lightning.channel.states.Normal
import fr.acinq.lightning.channel.states.Offline
import fr.acinq.lightning.channel.states.Syncing
import fr.acinq.lightning.io.WrappedChannelCommand
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.lightning.logging.info
import fr.acinq.phoenix.PhoenixBusiness
import fr.acinq.phoenix.managers.PeerManager
import fr.acinq.phoenix.controllers.AppController
import fr.acinq.phoenix.controllers.config.CloseChannelsConfiguration.Model.ChannelInfoStatus
import fr.acinq.phoenix.managers.AppConfigurationManager
import fr.acinq.phoenix.managers.PeerManager
import fr.acinq.phoenix.managers.phoenixFinalWallet
import fr.acinq.phoenix.utils.Parser
import fr.acinq.phoenix.utils.extensions.localBalance
import fr.acinq.lightning.logging.info
import fr.acinq.phoenix.data.BitcoinUri
import fr.acinq.phoenix.managers.AppConfigurationManager
import fr.acinq.phoenix.managers.phoenixFinalWallet
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
class AppCloseChannelsConfigurationController(
@@ -1,10 +1,9 @@
package fr.acinq.phoenix.controllers.config
import co.touchlab.kermit.Logger
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.phoenix.PhoenixBusiness
import fr.acinq.phoenix.managers.WalletManager
import fr.acinq.phoenix.controllers.AppController
import fr.acinq.phoenix.managers.WalletManager
import kotlinx.coroutines.launch
@@ -1,14 +1,12 @@
package fr.acinq.phoenix.controllers.config
import co.touchlab.kermit.Logger
import fr.acinq.lightning.blockchain.electrum.ElectrumClient
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.phoenix.PhoenixBusiness
import fr.acinq.phoenix.controllers.AppController
import fr.acinq.phoenix.managers.AppConfigurationManager
import fr.acinq.phoenix.managers.AppConnectionsDaemon
import fr.acinq.phoenix.controllers.AppController
import fr.acinq.lightning.logging.LoggerFactory
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
@@ -1,6 +1,5 @@
package fr.acinq.phoenix.controllers.init
import co.touchlab.kermit.Logger
import fr.acinq.bitcoin.MnemonicCode
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.phoenix.PhoenixBusiness
@@ -1,6 +1,5 @@
package fr.acinq.phoenix.controllers.main
import co.touchlab.kermit.Logger
import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.phoenix.PhoenixBusiness
import fr.acinq.phoenix.controllers.AppController
@@ -20,7 +20,17 @@ import fr.acinq.bitcoin.ByteVector32
import fr.acinq.bitcoin.Satoshi
import fr.acinq.bitcoin.TxId
import fr.acinq.lightning.MilliSatoshi
import fr.acinq.lightning.db.*
import fr.acinq.lightning.db.AutomaticLiquidityPurchasePayment
import fr.acinq.lightning.db.Bolt11IncomingPayment
import fr.acinq.lightning.db.ChannelCloseOutgoingPayment
import fr.acinq.lightning.db.LegacyPayToOpenIncomingPayment
import fr.acinq.lightning.db.LegacySwapInIncomingPayment
import fr.acinq.lightning.db.LightningIncomingPayment
import fr.acinq.lightning.db.LightningOutgoingPayment
import fr.acinq.lightning.db.ManualLiquidityPurchasePayment
import fr.acinq.lightning.db.OnChainIncomingPayment
import fr.acinq.lightning.db.SpliceCpfpOutgoingPayment
import fr.acinq.lightning.db.SpliceOutgoingPayment
import fr.acinq.lightning.db.WalletPayment
import fr.acinq.lightning.utils.UUID
import fr.acinq.lightning.utils.msat
@@ -28,8 +38,8 @@ import fr.acinq.lightning.utils.sat
import fr.acinq.lightning.utils.sum
import fr.acinq.lightning.utils.toMilliSatoshi
import fr.acinq.phoenix.data.WalletPaymentMetadata
import kotlin.time.Instant
import kotlin.time.ExperimentalTime
import kotlin.time.Instant
class WalletPaymentCsvWriter(val configuration: Configuration) : CsvWriter() {
@@ -22,7 +22,9 @@ import fr.acinq.bitcoin.Chain
import fr.acinq.bitcoin.Satoshi
import fr.acinq.lightning.payment.Bolt11Invoice
import fr.acinq.lightning.wire.OfferTypes
import io.ktor.http.*
import io.ktor.http.Parameters
import io.ktor.http.formUrlEncode
import io.ktor.http.plus
data class BitcoinUri(
val chain: Chain,
@@ -1,8 +1,5 @@
package fr.acinq.phoenix.data
import fr.acinq.phoenix.controllers.MVI
import fr.acinq.phoenix.controllers.main.Home
import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -20,12 +20,18 @@ import fr.acinq.bitcoin.ByteVector32
import fr.acinq.bitcoin.Satoshi
import fr.acinq.bitcoin.TxId
import fr.acinq.lightning.MilliSatoshi
import fr.acinq.lightning.channel.states.*
import fr.acinq.lightning.channel.states.Aborted
import fr.acinq.lightning.channel.states.ChannelState
import fr.acinq.lightning.channel.states.ChannelStateWithCommitments
import fr.acinq.lightning.channel.states.Closed
import fr.acinq.lightning.channel.states.Closing
import fr.acinq.lightning.channel.states.Normal
import fr.acinq.lightning.channel.states.Syncing
import fr.acinq.lightning.json.JsonSerializers
import fr.acinq.lightning.utils.msat
import fr.acinq.phoenix.managers.PeerManager
import fr.acinq.phoenix.utils.extensions.*
import kotlinx.serialization.encodeToString
import fr.acinq.phoenix.utils.extensions.isTerminated
import fr.acinq.phoenix.utils.extensions.localBalance
/**
* This class exposes a channel's more important information in an easy-to-consume format.
@@ -19,7 +19,13 @@ import fr.acinq.phoenix.utils.converters.AmountFormatter.toPrettyString
import fr.acinq.phoenix.utils.extensions.desc
import org.jetbrains.compose.resources.stringResource
import torch.composeapp.generated.resources.Res
import torch.composeapp.generated.resources.*
import torch.composeapp.generated.resources.paymentdetails_desc_closing_channel
import torch.composeapp.generated.resources.paymentdetails_desc_cpfp
import torch.composeapp.generated.resources.paymentdetails_desc_liquidity_automated
import torch.composeapp.generated.resources.paymentdetails_desc_liquidity_manual
import torch.composeapp.generated.resources.paymentdetails_desc_splice_out
import torch.composeapp.generated.resources.paymentdetails_desc_swapin
import torch.composeapp.generated.resources.paymentdetails_desc_swapout
/**
* Represents a payment & its associated metadata.
@@ -18,15 +18,27 @@ package fr.acinq.phoenix.data.lnurl
import co.touchlab.kermit.Logger
import fr.acinq.bitcoin.Bech32
import fr.acinq.lightning.utils.msat
import fr.acinq.phoenix.utils.Parser
import fr.acinq.lightning.logging.debug
import fr.acinq.lightning.logging.error
import fr.acinq.lightning.logging.info
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.utils.io.charsets.*
import kotlinx.serialization.json.*
import fr.acinq.lightning.utils.msat
import fr.acinq.phoenix.utils.Parser
import io.ktor.client.statement.HttpResponse
import io.ktor.client.statement.bodyAsText
import io.ktor.client.statement.request
import io.ktor.http.URLBuilder
import io.ktor.http.URLProtocol
import io.ktor.http.Url
import io.ktor.http.encodedPath
import io.ktor.http.isSecure
import io.ktor.http.isSuccess
import io.ktor.utils.io.charsets.Charsets
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.doubleOrNull
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.long
import kotlinx.serialization.json.longOrNull
/**
* This class describes the various types of Lnurls supported by phoenix:
@@ -16,13 +16,18 @@
package fr.acinq.phoenix.data.lnurl
import fr.acinq.bitcoin.*
import fr.acinq.bitcoin.ByteVector
import fr.acinq.bitcoin.ByteVector32
import fr.acinq.bitcoin.Crypto
import fr.acinq.bitcoin.DeterministicWallet
import fr.acinq.bitcoin.KeyPath
import fr.acinq.bitcoin.PrivateKey
import fr.acinq.bitcoin.PublicKey
import fr.acinq.bitcoin.crypto.Digest
import fr.acinq.bitcoin.crypto.Pack
import fr.acinq.bitcoin.crypto.hmac
import fr.acinq.lightning.crypto.LocalKeyManager
import fr.acinq.lightning.logging.debug
import io.ktor.http.*
import io.ktor.http.Url
data class LnurlAuth(
override val initialUrl: Url,
@@ -16,7 +16,7 @@
package fr.acinq.phoenix.data.lnurl
import io.ktor.http.*
import io.ktor.http.HttpStatusCode
sealed class LnurlError(override val message: String? = null) : RuntimeException(message) {
val details: String by lazy { "Lnurl error=${message ?: this::class.simpleName ?: "N/A"} in url=" }
@@ -23,8 +23,13 @@ import fr.acinq.lightning.MilliSatoshi
import fr.acinq.lightning.payment.Bolt11Invoice
import fr.acinq.phoenix.data.lnurl.Lnurl.Companion.format
import fr.acinq.phoenix.db.cloud.b64Decode
import io.ktor.http.*
import kotlinx.serialization.json.*
import io.ktor.http.Url
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
sealed class LnurlPay : Lnurl.Qualified {
@@ -17,7 +17,7 @@
package fr.acinq.phoenix.data.lnurl
import fr.acinq.lightning.MilliSatoshi
import io.ktor.http.*
import io.ktor.http.Url
data class LnurlWithdraw(
override val initialUrl: Url,
@@ -2,7 +2,6 @@ package fr.acinq.phoenix.db
import fr.acinq.lightning.utils.UUID
import fr.acinq.phoenix.db.payments.CloudKitInterface
import fr.acinq.phoenix.db.sqldelight.AppDatabase
import fr.acinq.phoenix.db.sqldelight.PaymentsDatabase
/**
@@ -32,7 +32,18 @@ import fr.acinq.lightning.logging.LoggerFactory
import fr.acinq.lightning.logging.error
import fr.acinq.lightning.utils.UUID
import fr.acinq.phoenix.data.ContactInfo
import fr.acinq.phoenix.db.sqldelight.*
import fr.acinq.phoenix.db.sqldelight.ChannelsDatabase
import fr.acinq.phoenix.db.sqldelight.Cloudkit_payments_metadata
import fr.acinq.phoenix.db.sqldelight.Cloudkit_payments_queue
import fr.acinq.phoenix.db.sqldelight.Contacts
import fr.acinq.phoenix.db.sqldelight.Htlc_infos
import fr.acinq.phoenix.db.sqldelight.Link_lightning_outgoing_payment_parts
import fr.acinq.phoenix.db.sqldelight.Local_channels
import fr.acinq.phoenix.db.sqldelight.On_chain_txs
import fr.acinq.phoenix.db.sqldelight.PaymentsDatabase
import fr.acinq.phoenix.db.sqldelight.Payments_incoming
import fr.acinq.phoenix.db.sqldelight.Payments_metadata
import fr.acinq.phoenix.db.sqldelight.Payments_outgoing
import fr.acinq.phoenix.managers.PaymentMetadataQueue
import fr.acinq.phoenix.utils.extensions.toByteArray
Loaded 100 of 172 files, more files were not shown because too many files have changed in this diff. Show more