mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-27 09:36:46 +02:00
Renders relay lists in the feed.
This commit is contained in:
@@ -75,8 +75,11 @@ import com.vitorpamplona.amethyst.ui.note.elements.Reward
|
|||||||
import com.vitorpamplona.amethyst.ui.note.elements.ShowForkInformation
|
import com.vitorpamplona.amethyst.ui.note.elements.ShowForkInformation
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.BadgeDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.BadgeDisplay
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayDMRelayList
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayNIP65RelayList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.DisplayPeopleList
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayPeopleList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.DisplayRelaySet
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayRelaySet
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplaySearchRelayList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.EditState
|
import com.vitorpamplona.amethyst.ui.note.types.EditState
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.FileHeaderDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.FileHeaderDisplay
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.FileStorageHeaderDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.FileStorageHeaderDisplay
|
||||||
@@ -137,6 +140,7 @@ import com.vitorpamplona.amethyst.ui.theme.newItemBackgroundColor
|
|||||||
import com.vitorpamplona.amethyst.ui.theme.normalWithTopMarginNoteModifier
|
import com.vitorpamplona.amethyst.ui.theme.normalWithTopMarginNoteModifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
||||||
import com.vitorpamplona.amethyst.ui.theme.replyModifier
|
import com.vitorpamplona.amethyst.ui.theme.replyModifier
|
||||||
|
import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.AppDefinitionEvent
|
import com.vitorpamplona.quartz.events.AppDefinitionEvent
|
||||||
import com.vitorpamplona.quartz.events.AudioHeaderEvent
|
import com.vitorpamplona.quartz.events.AudioHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.AudioTrackEvent
|
import com.vitorpamplona.quartz.events.AudioTrackEvent
|
||||||
@@ -147,6 +151,7 @@ import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
|||||||
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
||||||
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
||||||
import com.vitorpamplona.quartz.events.ChatMessageEvent
|
import com.vitorpamplona.quartz.events.ChatMessageEvent
|
||||||
|
import com.vitorpamplona.quartz.events.ChatMessageRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.ClassifiedsEvent
|
import com.vitorpamplona.quartz.events.ClassifiedsEvent
|
||||||
import com.vitorpamplona.quartz.events.CommunityDefinitionEvent
|
import com.vitorpamplona.quartz.events.CommunityDefinitionEvent
|
||||||
import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent
|
import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent
|
||||||
@@ -173,6 +178,7 @@ import com.vitorpamplona.quartz.events.ReactionEvent
|
|||||||
import com.vitorpamplona.quartz.events.RelaySetEvent
|
import com.vitorpamplona.quartz.events.RelaySetEvent
|
||||||
import com.vitorpamplona.quartz.events.ReportEvent
|
import com.vitorpamplona.quartz.events.ReportEvent
|
||||||
import com.vitorpamplona.quartz.events.RepostEvent
|
import com.vitorpamplona.quartz.events.RepostEvent
|
||||||
|
import com.vitorpamplona.quartz.events.SearchRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.TextNoteEvent
|
import com.vitorpamplona.quartz.events.TextNoteEvent
|
||||||
import com.vitorpamplona.quartz.events.TextNoteModificationEvent
|
import com.vitorpamplona.quartz.events.TextNoteModificationEvent
|
||||||
import com.vitorpamplona.quartz.events.VideoEvent
|
import com.vitorpamplona.quartz.events.VideoEvent
|
||||||
@@ -604,6 +610,9 @@ private fun RenderNoteRow(
|
|||||||
is FhirResourceEvent -> RenderFhirResource(baseNote, accountViewModel, nav)
|
is FhirResourceEvent -> RenderFhirResource(baseNote, accountViewModel, nav)
|
||||||
is PeopleListEvent -> DisplayPeopleList(baseNote, backgroundColor, accountViewModel, nav)
|
is PeopleListEvent -> DisplayPeopleList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
is RelaySetEvent -> DisplayRelaySet(baseNote, backgroundColor, accountViewModel, nav)
|
is RelaySetEvent -> DisplayRelaySet(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
|
is ChatMessageRelayListEvent -> DisplayDMRelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
|
is AdvertisedRelayListEvent -> DisplayNIP65RelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
|
is SearchRelayListEvent -> DisplaySearchRelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
is PinListEvent -> RenderPinListEvent(baseNote, backgroundColor, accountViewModel, nav)
|
is PinListEvent -> RenderPinListEvent(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
is EmojiPackEvent -> RenderEmojiPack(baseNote, true, backgroundColor, accountViewModel)
|
is EmojiPackEvent -> RenderEmojiPack(baseNote, true, backgroundColor, accountViewModel)
|
||||||
is LiveActivitiesEvent -> RenderLiveActivityEvent(baseNote, accountViewModel, nav)
|
is LiveActivitiesEvent -> RenderLiveActivityEvent(baseNote, accountViewModel, nav)
|
||||||
|
@@ -43,6 +43,7 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.Note
|
import com.vitorpamplona.amethyst.model.Note
|
||||||
import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView
|
import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView
|
||||||
import com.vitorpamplona.amethyst.ui.components.ShowMoreButton
|
import com.vitorpamplona.amethyst.ui.components.ShowMoreButton
|
||||||
@@ -50,8 +51,14 @@ import com.vitorpamplona.amethyst.ui.note.AddRelayButton
|
|||||||
import com.vitorpamplona.amethyst.ui.note.RemoveRelayButton
|
import com.vitorpamplona.amethyst.ui.note.RemoveRelayButton
|
||||||
import com.vitorpamplona.amethyst.ui.note.getGradient
|
import com.vitorpamplona.amethyst.ui.note.getGradient
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache
|
import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache
|
||||||
|
import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent
|
||||||
|
import com.vitorpamplona.quartz.events.ChatMessageRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.RelaySetEvent
|
import com.vitorpamplona.quartz.events.RelaySetEvent
|
||||||
|
import com.vitorpamplona.quartz.events.SearchRelayListEvent
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -70,6 +77,119 @@ fun DisplayRelaySet(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisplayRelaySet(
|
||||||
|
relays,
|
||||||
|
noteEvent.firstTagFor("title", "name") ?: "#${noteEvent.dTag()}",
|
||||||
|
noteEvent.description(),
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DisplayNIP65RelayList(
|
||||||
|
baseNote: Note,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
|
val noteEvent = baseNote.event as? AdvertisedRelayListEvent ?: return
|
||||||
|
|
||||||
|
val writeRelays by
|
||||||
|
remember(baseNote) {
|
||||||
|
mutableStateOf(
|
||||||
|
noteEvent.writeRelays().map { RelayBriefInfoCache.RelayBriefInfo(it) }.toImmutableList(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val readRelays by
|
||||||
|
remember(baseNote) {
|
||||||
|
mutableStateOf(
|
||||||
|
noteEvent.readRelays()?.map { RelayBriefInfoCache.RelayBriefInfo(it) }?.toImmutableList() ?: persistentListOf(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayRelaySet(
|
||||||
|
writeRelays,
|
||||||
|
stringRes(id = R.string.public_home_section),
|
||||||
|
null,
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
|
||||||
|
DisplayRelaySet(
|
||||||
|
readRelays,
|
||||||
|
stringRes(id = R.string.public_notif_section),
|
||||||
|
null,
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DisplayDMRelayList(
|
||||||
|
baseNote: Note,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
|
val noteEvent = baseNote.event as? ChatMessageRelayListEvent ?: return
|
||||||
|
|
||||||
|
val relays by
|
||||||
|
remember(baseNote) {
|
||||||
|
mutableStateOf(
|
||||||
|
noteEvent.relays().map { RelayBriefInfoCache.RelayBriefInfo(it) }.toImmutableList(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayRelaySet(
|
||||||
|
relays,
|
||||||
|
stringRes(id = R.string.dm_relays_title),
|
||||||
|
null,
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DisplaySearchRelayList(
|
||||||
|
baseNote: Note,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
|
val noteEvent = baseNote.event as? SearchRelayListEvent ?: return
|
||||||
|
|
||||||
|
val relays by
|
||||||
|
remember(baseNote) {
|
||||||
|
mutableStateOf(
|
||||||
|
noteEvent.relays().map { RelayBriefInfoCache.RelayBriefInfo(it) }.toImmutableList(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayRelaySet(
|
||||||
|
relays,
|
||||||
|
stringRes(id = R.string.search_relays_title),
|
||||||
|
null,
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DisplayRelaySet(
|
||||||
|
relays: ImmutableList<RelayBriefInfoCache.RelayBriefInfo>,
|
||||||
|
relayListName: String,
|
||||||
|
relayDescription: String?,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
var expanded by remember { mutableStateOf(false) }
|
var expanded by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
val toMembersShow =
|
val toMembersShow =
|
||||||
@@ -79,10 +199,6 @@ fun DisplayRelaySet(
|
|||||||
relays.take(3)
|
relays.take(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
val relayListName by remember { derivedStateOf { "#${noteEvent.dTag()}" } }
|
|
||||||
|
|
||||||
val relayDescription by remember { derivedStateOf { noteEvent.description() } }
|
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = relayListName,
|
text = relayListName,
|
||||||
fontWeight = FontWeight.Bold,
|
fontWeight = FontWeight.Bold,
|
||||||
@@ -156,11 +272,19 @@ private fun RelayOptionsAction(
|
|||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
nav: (String) -> Unit,
|
nav: (String) -> Unit,
|
||||||
) {
|
) {
|
||||||
val userStateRelayInfo by accountViewModel.account.userProfile().live().relayInfo.observeAsState()
|
val userStateRelayInfo by accountViewModel.account
|
||||||
|
.userProfile()
|
||||||
|
.live()
|
||||||
|
.relayInfo
|
||||||
|
.observeAsState()
|
||||||
val isCurrentlyOnTheUsersList by
|
val isCurrentlyOnTheUsersList by
|
||||||
remember(userStateRelayInfo) {
|
remember(userStateRelayInfo) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
userStateRelayInfo?.user?.latestContactList?.relays()?.none { it.key == relay } == true
|
userStateRelayInfo
|
||||||
|
?.user
|
||||||
|
?.latestContactList
|
||||||
|
?.relays()
|
||||||
|
?.none { it.key == relay } == true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -111,8 +111,11 @@ import com.vitorpamplona.amethyst.ui.note.showAmount
|
|||||||
import com.vitorpamplona.amethyst.ui.note.types.AudioHeader
|
import com.vitorpamplona.amethyst.ui.note.types.AudioHeader
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.AudioTrackHeader
|
import com.vitorpamplona.amethyst.ui.note.types.AudioTrackHeader
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.BadgeDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.BadgeDisplay
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayDMRelayList
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayNIP65RelayList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.DisplayPeopleList
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayPeopleList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.DisplayRelaySet
|
import com.vitorpamplona.amethyst.ui.note.types.DisplayRelaySet
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.types.DisplaySearchRelayList
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.EditState
|
import com.vitorpamplona.amethyst.ui.note.types.EditState
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.FileHeaderDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.FileHeaderDisplay
|
||||||
import com.vitorpamplona.amethyst.ui.note.types.FileStorageHeaderDisplay
|
import com.vitorpamplona.amethyst.ui.note.types.FileStorageHeaderDisplay
|
||||||
@@ -147,6 +150,7 @@ import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn
|
|||||||
import com.vitorpamplona.amethyst.ui.theme.lessImportantLink
|
import com.vitorpamplona.amethyst.ui.theme.lessImportantLink
|
||||||
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
||||||
import com.vitorpamplona.amethyst.ui.theme.selectedNote
|
import com.vitorpamplona.amethyst.ui.theme.selectedNote
|
||||||
|
import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.AppDefinitionEvent
|
import com.vitorpamplona.quartz.events.AppDefinitionEvent
|
||||||
import com.vitorpamplona.quartz.events.AudioHeaderEvent
|
import com.vitorpamplona.quartz.events.AudioHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.AudioTrackEvent
|
import com.vitorpamplona.quartz.events.AudioTrackEvent
|
||||||
@@ -154,6 +158,7 @@ import com.vitorpamplona.quartz.events.BadgeDefinitionEvent
|
|||||||
import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
||||||
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
||||||
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
import com.vitorpamplona.quartz.events.ChannelMetadataEvent
|
||||||
|
import com.vitorpamplona.quartz.events.ChatMessageRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.ClassifiedsEvent
|
import com.vitorpamplona.quartz.events.ClassifiedsEvent
|
||||||
import com.vitorpamplona.quartz.events.CommunityDefinitionEvent
|
import com.vitorpamplona.quartz.events.CommunityDefinitionEvent
|
||||||
import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent
|
import com.vitorpamplona.quartz.events.CommunityPostApprovalEvent
|
||||||
@@ -176,6 +181,7 @@ import com.vitorpamplona.quartz.events.PollNoteEvent
|
|||||||
import com.vitorpamplona.quartz.events.PrivateDmEvent
|
import com.vitorpamplona.quartz.events.PrivateDmEvent
|
||||||
import com.vitorpamplona.quartz.events.RelaySetEvent
|
import com.vitorpamplona.quartz.events.RelaySetEvent
|
||||||
import com.vitorpamplona.quartz.events.RepostEvent
|
import com.vitorpamplona.quartz.events.RepostEvent
|
||||||
|
import com.vitorpamplona.quartz.events.SearchRelayListEvent
|
||||||
import com.vitorpamplona.quartz.events.TextNoteModificationEvent
|
import com.vitorpamplona.quartz.events.TextNoteModificationEvent
|
||||||
import com.vitorpamplona.quartz.events.VideoEvent
|
import com.vitorpamplona.quartz.events.VideoEvent
|
||||||
import com.vitorpamplona.quartz.events.WikiNoteEvent
|
import com.vitorpamplona.quartz.events.WikiNoteEvent
|
||||||
@@ -528,6 +534,12 @@ private fun FullBleedNoteCompose(
|
|||||||
accountViewModel,
|
accountViewModel,
|
||||||
nav,
|
nav,
|
||||||
)
|
)
|
||||||
|
} else if (noteEvent is ChatMessageRelayListEvent) {
|
||||||
|
DisplayDMRelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
|
} else if (noteEvent is AdvertisedRelayListEvent) {
|
||||||
|
DisplayNIP65RelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
|
} else if (noteEvent is SearchRelayListEvent) {
|
||||||
|
DisplaySearchRelayList(baseNote, backgroundColor, accountViewModel, nav)
|
||||||
} else if (noteEvent is FhirResourceEvent) {
|
} else if (noteEvent is FhirResourceEvent) {
|
||||||
RenderFhirResource(baseNote, accountViewModel, nav)
|
RenderFhirResource(baseNote, accountViewModel, nav)
|
||||||
} else if (noteEvent is GitRepositoryEvent) {
|
} else if (noteEvent is GitRepositoryEvent) {
|
||||||
|
Reference in New Issue
Block a user