From 515159f18c3a4c73e858cfceaed987ef5c502064 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 2 Jun 2023 21:29:12 -0400 Subject: [PATCH] Ignores unloaded notes in the MultiComposeSet renderer. --- .../amethyst/ui/note/MultiSetCompose.kt | 139 +++++++++--------- .../amethyst/ui/note/PollNote.kt | 3 +- .../amethyst/ui/note/ReactionsRow.kt | 4 +- .../amethyst/ui/note/ZapNoteCompose.kt | 12 +- 4 files changed, 79 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MultiSetCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MultiSetCompose.kt index f7ee1e528..94d70c962 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MultiSetCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MultiSetCompose.kt @@ -63,92 +63,85 @@ import kotlinx.coroutines.launch fun MultiSetCompose(multiSetCard: MultiSetCard, routeForLastRead: String, accountViewModel: AccountViewModel, nav: (String) -> Unit) { val baseNote = remember { multiSetCard.note } - val noteState by baseNote.live().metadata.observeAsState() - val note = remember(noteState) { noteState?.note } ?: return - var popupExpanded by remember { mutableStateOf(false) } val scope = rememberCoroutineScope() - if (note.event == null) { - BlankNote(Modifier, false) + var isNew by remember { mutableStateOf(false) } + + LaunchedEffect(key1 = multiSetCard.createdAt()) { + launch(Dispatchers.IO) { + val newIsNew = multiSetCard.maxCreatedAt > NotificationCache.load(routeForLastRead) + + NotificationCache.markAsRead(routeForLastRead, multiSetCard.maxCreatedAt) + + if (newIsNew != isNew) { + isNew = newIsNew + } + } + } + + val primaryColor = MaterialTheme.colors.newItemBackgroundColor + val defaultBackgroundColor = MaterialTheme.colors.background + + val backgroundColor = if (isNew) { + primaryColor.compositeOver(defaultBackgroundColor) } else { - var isNew by remember { mutableStateOf(false) } + defaultBackgroundColor + } - LaunchedEffect(key1 = multiSetCard.createdAt()) { - scope.launch(Dispatchers.IO) { - val newIsNew = multiSetCard.maxCreatedAt > NotificationCache.load(routeForLastRead) - - NotificationCache.markAsRead(routeForLastRead, multiSetCard.maxCreatedAt) - - if (newIsNew != isNew) { - isNew = newIsNew + val columnModifier = Modifier + .background(backgroundColor) + .padding( + start = 12.dp, + end = 12.dp, + top = 10.dp + ) + .combinedClickable( + onClick = { + scope.launch { + routeFor(baseNote, accountViewModel.userProfile())?.let { nav(it) } } - } + }, + onLongClick = { popupExpanded = true } + ) + .fillMaxWidth() + + val zapEvents by remember { derivedStateOf { multiSetCard.zapEvents } } + val boostEvents by remember { derivedStateOf { multiSetCard.boostEvents } } + val likeEvents by remember { derivedStateOf { multiSetCard.likeEvents } } + + val hasZapEvents by remember { derivedStateOf { multiSetCard.zapEvents.isNotEmpty() } } + val hasBoostEvents by remember { derivedStateOf { multiSetCard.boostEvents.isNotEmpty() } } + val hasLikeEvents by remember { derivedStateOf { multiSetCard.likeEvents.isNotEmpty() } } + + Column(modifier = columnModifier) { + if (hasZapEvents) { + RenderZapGallery(zapEvents, backgroundColor, nav, accountViewModel) } - val primaryColor = MaterialTheme.colors.newItemBackgroundColor - val defaultBackgroundColor = MaterialTheme.colors.background - - val backgroundColor = if (isNew) { - primaryColor.compositeOver(defaultBackgroundColor) - } else { - defaultBackgroundColor + if (hasBoostEvents) { + RenderBoostGallery(boostEvents, backgroundColor, nav, accountViewModel) } - val columnModifier = Modifier - .background(backgroundColor) - .padding( - start = 12.dp, - end = 12.dp, - top = 10.dp + if (hasLikeEvents) { + RenderLikeGallery(likeEvents, backgroundColor, nav, accountViewModel) + } + + Row(Modifier.fillMaxWidth()) { + Spacer(modifier = Modifier.width(65.dp)) + + NoteCompose( + baseNote = baseNote, + routeForLastRead = null, + modifier = Modifier.padding(top = 5.dp), + isBoostedNote = true, + parentBackgroundColor = backgroundColor, + accountViewModel = accountViewModel, + nav = nav ) - .combinedClickable( - onClick = { - scope.launch { - routeFor(baseNote, accountViewModel.userProfile())?.let { nav(it) } - } - }, - onLongClick = { popupExpanded = true } - ) - .fillMaxWidth() - val zapEvents by remember { derivedStateOf { multiSetCard.zapEvents } } - val boostEvents by remember { derivedStateOf { multiSetCard.boostEvents } } - val likeEvents by remember { derivedStateOf { multiSetCard.likeEvents } } - - val hasZapEvents by remember { derivedStateOf { multiSetCard.zapEvents.isNotEmpty() } } - val hasBoostEvents by remember { derivedStateOf { multiSetCard.boostEvents.isNotEmpty() } } - val hasLikeEvents by remember { derivedStateOf { multiSetCard.likeEvents.isNotEmpty() } } - - Column(modifier = columnModifier) { - if (hasZapEvents) { - RenderZapGallery(zapEvents, backgroundColor, nav, accountViewModel) - } - - if (hasBoostEvents) { - RenderBoostGallery(boostEvents, backgroundColor, nav, accountViewModel) - } - - if (hasLikeEvents) { - RenderLikeGallery(likeEvents, backgroundColor, nav, accountViewModel) - } - - Row(Modifier.fillMaxWidth()) { - Spacer(modifier = Modifier.width(65.dp)) - - NoteCompose( - baseNote = baseNote, - routeForLastRead = null, - modifier = Modifier.padding(top = 5.dp), - isBoostedNote = true, - parentBackgroundColor = backgroundColor, - accountViewModel = accountViewModel, - nav = nav - ) - - NoteDropDownMenu(note, popupExpanded, { popupExpanded = false }, accountViewModel) - } + NoteDropDownMenu(baseNote, popupExpanded, { popupExpanded = false }, accountViewModel) } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt index d50b0121d..f33f2ea12 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt @@ -91,10 +91,9 @@ private fun WatchZapsAndUpdateTallies( pollViewModel: PollNoteViewModel ) { val zapsState by baseNote.live().zaps.observeAsState() - val scope = rememberCoroutineScope() LaunchedEffect(key1 = zapsState) { - scope.launch(Dispatchers.IO) { + launch(Dispatchers.Default) { pollViewModel.refreshTallies() } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt index 0a7d2d61f..652c2a85c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt @@ -520,7 +520,7 @@ private fun ZapIcon( val zapsState by baseNote.live().zaps.observeAsState() LaunchedEffect(key1 = zapsState) { - launch(Dispatchers.IO) { + launch(Dispatchers.Default) { zapsState?.note?.let { if (!wasZappedByLoggedInUser) { val newWasZapped = accountViewModel.calculateIfNoteWasZappedByAccount(it) @@ -561,7 +561,7 @@ private fun ZapAmountText( var zapAmountTxt by remember { mutableStateOf("") } LaunchedEffect(key1 = zapsState) { - launch(Dispatchers.IO) { + launch(Dispatchers.Default) { zapsState?.note?.let { val newZapAmount = showAmount(accountViewModel.calculateZapAmount(it)) if (newZapAmount != zapAmountTxt) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ZapNoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ZapNoteCompose.kt index 1a12fd9b1..c86754153 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ZapNoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ZapNoteCompose.kt @@ -153,10 +153,18 @@ fun UserActionOptions( val coroutineScope = rememberCoroutineScope() val accountState by accountViewModel.accountLiveData.observeAsState() - val isHidden = remember(accountState) { accountState?.account?.isHidden(baseAuthor) } ?: return + val isHidden by remember(accountState) { + derivedStateOf { + accountState?.account?.isHidden(baseAuthor) ?: false + } + } val userState by accountViewModel.account.userProfile().live().follows.observeAsState() - val isFollowing = remember(userState) { userState?.user?.isFollowingCached(baseAuthor) } ?: return + val isFollowing by remember(userState) { + derivedStateOf { + userState?.user?.isFollowingCached(baseAuthor) ?: false + } + } if (isHidden) { ShowUserButton {