Solving some more stability issues
This commit is contained in:
@@ -20,10 +20,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.model
|
package com.vitorpamplona.amethyst.model
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
|
|
||||||
|
@Stable
|
||||||
class UiSettingsFlow(
|
class UiSettingsFlow(
|
||||||
val theme: MutableStateFlow<ThemeType> = MutableStateFlow(ThemeType.SYSTEM),
|
val theme: MutableStateFlow<ThemeType> = MutableStateFlow(ThemeType.SYSTEM),
|
||||||
val preferredLanguage: MutableStateFlow<String?> = MutableStateFlow(null),
|
val preferredLanguage: MutableStateFlow<String?> = MutableStateFlow(null),
|
||||||
|
|||||||
+2
@@ -20,10 +20,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.notifyCommand.model
|
package com.vitorpamplona.amethyst.service.relayClient.notifyCommand.model
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
|
|
||||||
|
@Stable
|
||||||
class NotifyRequestsCache {
|
class NotifyRequestsCache {
|
||||||
val transientPaymentRequestDismissals: MutableStateFlow<Set<NotifyRequest>> = MutableStateFlow(emptySet())
|
val transientPaymentRequestDismissals: MutableStateFlow<Set<NotifyRequest>> = MutableStateFlow(emptySet())
|
||||||
val transientPaymentRequests: MutableStateFlow<Set<NotifyRequest>> = MutableStateFlow(emptySet())
|
val transientPaymentRequests: MutableStateFlow<Set<NotifyRequest>> = MutableStateFlow(emptySet())
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.account
|
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.account
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
import com.vitorpamplona.amethyst.model.LocalCache
|
||||||
@@ -38,6 +39,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.client.auth.IAuthStatus
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
||||||
// This allows multiple screen to be listening to logged-in accounts.
|
// This allows multiple screen to be listening to logged-in accounts.
|
||||||
|
@Stable
|
||||||
class AccountQueryState(
|
class AccountQueryState(
|
||||||
val account: Account,
|
val account: Account,
|
||||||
val feedContentStates: AccountFeedContentStates,
|
val feedContentStates: AccountFeedContentStates,
|
||||||
@@ -47,6 +49,7 @@ class AccountQueryState(
|
|||||||
/**
|
/**
|
||||||
* This assembler loads everything eech account needs.
|
* This assembler loads everything eech account needs.
|
||||||
*/
|
*/
|
||||||
|
@Stable
|
||||||
class AccountFilterAssembler(
|
class AccountFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
cache: LocalCache,
|
cache: LocalCache,
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel
|
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.model.Channel
|
import com.vitorpamplona.amethyst.commons.model.Channel
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.mixChatsLive.ChannelMetadataAndLiveActivityWatcherSubAssembler
|
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.mixChatsLive.ChannelMetadataAndLiveActivityWatcherSubAssembler
|
||||||
@@ -27,10 +28,12 @@ import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.nip28Pu
|
|||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class ChannelFinderQueryState(
|
class ChannelFinderQueryState(
|
||||||
val channel: Channel,
|
val channel: Channel,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class ChannelFinderFilterAssemblyGroup(
|
class ChannelFinderFilterAssemblyGroup(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<ChannelFinderQueryState>() {
|
) : ComposeSubscriptionManager<ChannelFinderQueryState>() {
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.event
|
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.event
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.model.Note
|
import com.vitorpamplona.amethyst.model.Note
|
||||||
@@ -28,11 +29,13 @@ import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.watchers.
|
|||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class EventFinderQueryState(
|
class EventFinderQueryState(
|
||||||
val note: Note,
|
val note: Note,
|
||||||
val account: Account,
|
val account: Account,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class EventFinderFilterAssembler(
|
class EventFinderFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<EventFinderQueryState>() {
|
) : ComposeSubscriptionManager<EventFinderQueryState>() {
|
||||||
|
|||||||
+3
@@ -20,12 +20,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.nwc
|
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.nwc
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class NWCPaymentQueryState(
|
class NWCPaymentQueryState(
|
||||||
val fromServiceHex: HexKey,
|
val fromServiceHex: HexKey,
|
||||||
val toUserHex: HexKey,
|
val toUserHex: HexKey,
|
||||||
@@ -33,6 +35,7 @@ class NWCPaymentQueryState(
|
|||||||
val relay: NormalizedRelayUrl,
|
val relay: NormalizedRelayUrl,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class NWCPaymentFilterAssembler(
|
class NWCPaymentFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<NWCPaymentQueryState>() {
|
) : ComposeSubscriptionManager<NWCPaymentQueryState>() {
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.user
|
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.user
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
import com.vitorpamplona.amethyst.model.LocalCache
|
||||||
@@ -32,11 +33,13 @@ import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
|||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.accessories.RelayOfflineTracker
|
import com.vitorpamplona.quartz.nip01Core.relay.client.accessories.RelayOfflineTracker
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class UserFinderQueryState(
|
class UserFinderQueryState(
|
||||||
val user: User,
|
val user: User,
|
||||||
val account: Account,
|
val account: Account,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class UserFinderFilterAssembler(
|
class UserFinderFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
cache: LocalCache,
|
cache: LocalCache,
|
||||||
|
|||||||
+1
@@ -40,6 +40,7 @@ class SearchQueryState(
|
|||||||
override fun flow(): Flow<String> = searchQuery
|
override fun flow(): Flow<String> = searchQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Stable
|
||||||
class SearchFilterAssembler(
|
class SearchFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
scope: CoroutineScope,
|
scope: CoroutineScope,
|
||||||
|
|||||||
+2
@@ -21,7 +21,9 @@
|
|||||||
package com.vitorpamplona.amethyst.ui.note.creators.zapraiser
|
package com.vitorpamplona.amethyst.ui.note.creators.zapraiser
|
||||||
|
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
|
|
||||||
|
@Stable
|
||||||
interface IZapRaiser {
|
interface IZapRaiser {
|
||||||
val zapRaiserAmount: MutableState<Long?>
|
val zapRaiserAmount: MutableState<Long?>
|
||||||
|
|
||||||
|
|||||||
+2
@@ -21,9 +21,11 @@
|
|||||||
package com.vitorpamplona.amethyst.ui.note.creators.zapsplits
|
package com.vitorpamplona.amethyst.ui.note.creators.zapsplits
|
||||||
|
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import com.vitorpamplona.amethyst.model.User
|
import com.vitorpamplona.amethyst.model.User
|
||||||
|
|
||||||
|
@Stable
|
||||||
interface IZapField {
|
interface IZapField {
|
||||||
val forwardZapTo: MutableState<SplitBuilder<User>>
|
val forwardZapTo: MutableState<SplitBuilder<User>>
|
||||||
val forwardZapToEditting: MutableState<TextFieldValue>
|
val forwardZapToEditting: MutableState<TextFieldValue>
|
||||||
|
|||||||
@@ -20,19 +20,25 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen
|
package com.vitorpamplona.amethyst.ui.screen
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.model.User
|
import com.vitorpamplona.amethyst.model.User
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
|
@Stable
|
||||||
sealed class UserFeedState {
|
sealed class UserFeedState {
|
||||||
|
@Stable
|
||||||
object Loading : UserFeedState()
|
object Loading : UserFeedState()
|
||||||
|
|
||||||
|
@Stable
|
||||||
class Loaded(
|
class Loaded(
|
||||||
val feed: MutableStateFlow<ImmutableList<User>>,
|
val feed: MutableStateFlow<ImmutableList<User>>,
|
||||||
) : UserFeedState()
|
) : UserFeedState()
|
||||||
|
|
||||||
|
@Stable
|
||||||
object Empty : UserFeedState()
|
object Empty : UserFeedState()
|
||||||
|
|
||||||
|
@Stable
|
||||||
class FeedError(
|
class FeedError(
|
||||||
val errorMessage: String,
|
val errorMessage: String,
|
||||||
) : UserFeedState()
|
) : UserFeedState()
|
||||||
|
|||||||
+3
@@ -20,15 +20,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.datasource
|
package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.datasource
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class ChatroomListState(
|
class ChatroomListState(
|
||||||
val account: Account,
|
val account: Account,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class ChatroomListFilterAssembler(
|
class ChatroomListFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<ChatroomListState>() {
|
) : ComposeSubscriptionManager<ChatroomListState>() {
|
||||||
|
|||||||
+2
-1
@@ -54,6 +54,7 @@ import com.vitorpamplona.amethyst.ui.stringRes
|
|||||||
import com.vitorpamplona.amethyst.ui.theme.Size40dp
|
import com.vitorpamplona.amethyst.ui.theme.Size40dp
|
||||||
import com.vitorpamplona.amethyst.ui.theme.TabRowHeight
|
import com.vitorpamplona.amethyst.ui.theme.TabRowHeight
|
||||||
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
@@ -66,7 +67,7 @@ class MessagesTabItem(
|
|||||||
@Composable
|
@Composable
|
||||||
fun MessagesTabHeader(
|
fun MessagesTabHeader(
|
||||||
pagerState: PagerState,
|
pagerState: PagerState,
|
||||||
tabs: List<MessagesTabItem>,
|
tabs: ImmutableList<MessagesTabItem>,
|
||||||
onMarkKnownAsRead: () -> Unit,
|
onMarkKnownAsRead: () -> Unit,
|
||||||
onMarkNewAsRead: () -> Unit,
|
onMarkNewAsRead: () -> Unit,
|
||||||
) {
|
) {
|
||||||
|
|||||||
+2
-1
@@ -42,6 +42,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.datasource.Chat
|
|||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesPager
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesPager
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabHeader
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabHeader
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabItem
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabItem
|
||||||
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MessagesSinglePane(
|
fun MessagesSinglePane(
|
||||||
@@ -60,7 +61,7 @@ fun MessagesSinglePane(
|
|||||||
val tabs by
|
val tabs by
|
||||||
remember(knownFeedContentState) {
|
remember(knownFeedContentState) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
listOf(
|
persistentListOf(
|
||||||
MessagesTabItem(R.string.known, ScrollStateKeys.MESSAGES_KNOWN, knownFeedContentState),
|
MessagesTabItem(R.string.known, ScrollStateKeys.MESSAGES_KNOWN, knownFeedContentState),
|
||||||
MessagesTabItem(R.string.new_requests, ScrollStateKeys.MESSAGES_NEW, newFeedContentState),
|
MessagesTabItem(R.string.new_requests, ScrollStateKeys.MESSAGES_NEW, newFeedContentState),
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-1
@@ -38,6 +38,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.datasource.Chat
|
|||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesPager
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesPager
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabHeader
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabHeader
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabItem
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.feed.MessagesTabItem
|
||||||
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ChatroomList(
|
fun ChatroomList(
|
||||||
@@ -56,7 +57,7 @@ fun ChatroomList(
|
|||||||
val tabs by
|
val tabs by
|
||||||
remember(knownFeedContentState) {
|
remember(knownFeedContentState) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
listOf(
|
persistentListOf(
|
||||||
MessagesTabItem(R.string.known, ScrollStateKeys.MESSAGES_KNOWN, knownFeedContentState),
|
MessagesTabItem(R.string.known, ScrollStateKeys.MESSAGES_KNOWN, knownFeedContentState),
|
||||||
MessagesTabItem(R.string.new_requests, ScrollStateKeys.MESSAGES_NEW, newFeedContentState),
|
MessagesTabItem(R.string.new_requests, ScrollStateKeys.MESSAGES_NEW, newFeedContentState),
|
||||||
)
|
)
|
||||||
|
|||||||
+4
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource
|
package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountFeedContentStates
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountFeedContentStates
|
||||||
@@ -28,12 +29,15 @@ import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
|
||||||
|
@Stable
|
||||||
class HomeQueryState(
|
class HomeQueryState(
|
||||||
val account: Account,
|
val account: Account,
|
||||||
val feedState: AccountFeedContentStates,
|
val feedState: AccountFeedContentStates,
|
||||||
val scope: CoroutineScope,
|
val scope: CoroutineScope,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class HomeFilterAssembler(
|
class HomeFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<HomeQueryState>() {
|
) : ComposeSubscriptionManager<HomeQueryState>() {
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.proxy
|
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.proxy
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
|
|
||||||
|
@Stable
|
||||||
class ProxyRelayListViewModel : BasicRelaySetupInfoModel() {
|
class ProxyRelayListViewModel : BasicRelaySetupInfoModel() {
|
||||||
override fun getRelayList(): List<NormalizedRelayUrl>? =
|
override fun getRelayList(): List<NormalizedRelayUrl>? =
|
||||||
account.proxyRelayList.flow.value
|
account.proxyRelayList.flow.value
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.trusted
|
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.trusted
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
|
|
||||||
|
@Stable
|
||||||
class TrustedRelayListViewModel : BasicRelaySetupInfoModel() {
|
class TrustedRelayListViewModel : BasicRelaySetupInfoModel() {
|
||||||
override fun getRelayList(): List<NormalizedRelayUrl>? =
|
override fun getRelayList(): List<NormalizedRelayUrl>? =
|
||||||
account.trustedRelayList.flow.value
|
account.trustedRelayList.flow.value
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn.threadview.datasources
|
package com.vitorpamplona.amethyst.ui.screen.loggedIn.threadview.datasources
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
import com.vitorpamplona.amethyst.commons.relayClient.composeSubscriptionManagers.ComposeSubscriptionManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.threadview.datasources.subassembies.ThreadEventLoaderSubAssembler
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.threadview.datasources.subassembies.ThreadEventLoaderSubAssembler
|
||||||
@@ -28,11 +29,13 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
|||||||
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
|
||||||
|
|
||||||
// This allows multiple screen to be listening to tags, even the same tag
|
// This allows multiple screen to be listening to tags, even the same tag
|
||||||
|
@Stable
|
||||||
class ThreadQueryState(
|
class ThreadQueryState(
|
||||||
val eventId: HexKey,
|
val eventId: HexKey,
|
||||||
val account: Account,
|
val account: Account,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Stable
|
||||||
class ThreadFilterAssembler(
|
class ThreadFilterAssembler(
|
||||||
client: INostrClient,
|
client: INostrClient,
|
||||||
) : ComposeSubscriptionManager<ThreadQueryState>() {
|
) : ComposeSubscriptionManager<ThreadQueryState>() {
|
||||||
|
|||||||
+2
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.screen.loggedOff.login
|
package com.vitorpamplona.amethyst.ui.screen.loggedOff.login
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -29,6 +30,7 @@ import androidx.lifecycle.ViewModel
|
|||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
||||||
|
|
||||||
|
@Stable
|
||||||
class LoginViewModel : ViewModel() {
|
class LoginViewModel : ViewModel() {
|
||||||
lateinit var accountStateViewModel: AccountStateViewModel
|
lateinit var accountStateViewModel: AccountStateViewModel
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.tor
|
package com.vitorpamplona.amethyst.ui.tor
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
|
|
||||||
|
@Stable
|
||||||
class TorSettingsFlow(
|
class TorSettingsFlow(
|
||||||
val torType: MutableStateFlow<TorType> = MutableStateFlow(TorType.INTERNAL),
|
val torType: MutableStateFlow<TorType> = MutableStateFlow(TorType.INTERNAL),
|
||||||
val externalSocksPort: MutableStateFlow<Int> = MutableStateFlow(9050),
|
val externalSocksPort: MutableStateFlow<Int> = MutableStateFlow(9050),
|
||||||
|
|||||||
+2
@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.commons.viewmodels.thread
|
|||||||
|
|
||||||
import androidx.compose.foundation.interaction.DragInteraction
|
import androidx.compose.foundation.interaction.DragInteraction
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
@@ -45,6 +46,7 @@ import kotlinx.coroutines.flow.onEach
|
|||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.flow.transformLatest
|
import kotlinx.coroutines.flow.transformLatest
|
||||||
|
|
||||||
|
@Stable
|
||||||
abstract class LevelFeedViewModel(
|
abstract class LevelFeedViewModel(
|
||||||
localFilter: FeedFilter<Note>,
|
localFilter: FeedFilter<Note>,
|
||||||
cacheProvider: ICacheProvider,
|
cacheProvider: ICacheProvider,
|
||||||
|
|||||||
+2
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.experimental.interactiveStories
|
package com.vitorpamplona.quartz.experimental.interactiveStories
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.experimental.interactiveStories.tags.StoryOptionTag
|
import com.vitorpamplona.quartz.experimental.interactiveStories.tags.StoryOptionTag
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.BaseAddressableEvent
|
import com.vitorpamplona.quartz.nip01Core.core.BaseAddressableEvent
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
@@ -27,6 +28,7 @@ import com.vitorpamplona.quartz.nip23LongContent.tags.ImageTag
|
|||||||
import com.vitorpamplona.quartz.nip23LongContent.tags.SummaryTag
|
import com.vitorpamplona.quartz.nip23LongContent.tags.SummaryTag
|
||||||
import com.vitorpamplona.quartz.nip23LongContent.tags.TitleTag
|
import com.vitorpamplona.quartz.nip23LongContent.tags.TitleTag
|
||||||
|
|
||||||
|
@Stable
|
||||||
open class InteractiveStoryBaseEvent(
|
open class InteractiveStoryBaseEvent(
|
||||||
id: HexKey,
|
id: HexKey,
|
||||||
pubKey: HexKey,
|
pubKey: HexKey,
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds
|
package com.vitorpamplona.quartz.nip73ExternalIds
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
|
|
||||||
|
@Stable
|
||||||
interface ExternalId {
|
interface ExternalId {
|
||||||
fun toScope(): String
|
fun toScope(): String
|
||||||
|
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.location
|
package com.vitorpamplona.quartz.nip73ExternalIds.location
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class GeohashId(
|
class GeohashId(
|
||||||
val geohash: String,
|
val geohash: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,10 +20,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.movies
|
package com.vitorpamplona.quartz.nip73ExternalIds.movies
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
|
@Stable
|
||||||
class MovieId(
|
class MovieId(
|
||||||
val isan: String,
|
val isan: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.papers
|
package com.vitorpamplona.quartz.nip73ExternalIds.papers
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class PaperId(
|
class PaperId(
|
||||||
val doi: String,
|
val doi: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class PodcastEpisodeId(
|
class PodcastEpisodeId(
|
||||||
val guid: String,
|
val guid: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class PodcastFeedId(
|
class PodcastFeedId(
|
||||||
val guid: String,
|
val guid: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
package com.vitorpamplona.quartz.nip73ExternalIds.podcasts
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class PodcastPublisherId(
|
class PodcastPublisherId(
|
||||||
val guid: String,
|
val guid: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
+2
@@ -20,9 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.topics
|
package com.vitorpamplona.quartz.nip73ExternalIds.topics
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class HashtagId(
|
class HashtagId(
|
||||||
val topic: String,
|
val topic: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
@@ -20,10 +20,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip73ExternalIds.urls
|
package com.vitorpamplona.quartz.nip73ExternalIds.urls
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
import com.vitorpamplona.quartz.nip73ExternalIds.ExternalId
|
||||||
import com.vitorpamplona.quartz.utils.Rfc3986
|
import com.vitorpamplona.quartz.utils.Rfc3986
|
||||||
import com.vitorpamplona.quartz.utils.ensure
|
import com.vitorpamplona.quartz.utils.ensure
|
||||||
|
|
||||||
|
@Stable
|
||||||
class UrlId(
|
class UrlId(
|
||||||
val url: String,
|
val url: String,
|
||||||
val hint: String? = null,
|
val hint: String? = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user