diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt index aa2921dce..74a104ae4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt @@ -1,21 +1,23 @@ package com.vitorpamplona.amethyst.ui.dal import com.vitorpamplona.amethyst.model.Account -import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note object ChannelFeedFilter : AdditiveFeedFilter() { lateinit var account: Account - lateinit var channel: Channel + var channelId: String? = null - fun loadMessagesBetween(accountLoggedIn: Account, channelId: String) { - account = accountLoggedIn - channel = LocalCache.getOrCreateChannel(channelId) + fun loadMessagesBetween(accountLoggedIn: Account, channelId: String?) { + this.account = accountLoggedIn + this.channelId = channelId } // returns the last Note of each user. override fun feed(): List { + val processingChannel = channelId ?: return emptyList() + val channel = LocalCache.getOrCreateChannel(processingChannel) + return channel.notes .values .filter { account.isAcceptable(it) } @@ -24,6 +26,9 @@ object ChannelFeedFilter : AdditiveFeedFilter() { } override fun applyFilter(collection: Set): Set { + val processingChannel = channelId ?: return emptySet() + val channel = LocalCache.getOrCreateChannel(processingChannel) + return collection .filter { it.idHex in channel.notes.keys && account.isAcceptable(it) } .toSet() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt index f96c68681..3cdb265f7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomFeedFilter.kt @@ -3,21 +3,22 @@ package com.vitorpamplona.amethyst.ui.dal import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.model.User object ChatroomFeedFilter : AdditiveFeedFilter() { var account: Account? = null - var withUser: User? = null + var withUser: String? = null fun loadMessagesBetween(accountIn: Account, userId: String) { account = accountIn - withUser = LocalCache.checkGetOrCreateUser(userId) + withUser = userId } // returns the last Note of each user. override fun feed(): List { + val processingUser = withUser ?: return emptyList() + val myAccount = account - val myUser = withUser + val myUser = LocalCache.checkGetOrCreateUser(processingUser) if (myAccount == null || myUser == null) return emptyList() @@ -32,8 +33,10 @@ object ChatroomFeedFilter : AdditiveFeedFilter() { } override fun applyFilter(collection: Set): Set { + val processingUser = withUser ?: return emptySet() + val myAccount = account - val myUser = withUser + val myUser = LocalCache.checkGetOrCreateUser(processingUser) if (myAccount == null || myUser == null) return emptySet() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index b1c4d1307..f5a9d90d4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -190,16 +190,19 @@ fun NoteComposeInner( var popupExpanded by remember { mutableStateOf(false) } var showHiddenNote by remember { mutableStateOf(false) } - var isAcceptable by remember { mutableStateOf(true) } - var canPreview by remember { mutableStateOf(true) } + var isAcceptableAndCanPreview by remember { mutableStateOf(Pair(true, true)) } LaunchedEffect(key1 = noteReportsState) { withContext(Dispatchers.IO) { - canPreview = note?.author === loggedIn || + val newCanPreview = note?.author === loggedIn || (note?.author?.let { loggedIn.isFollowingCached(it) } ?: true) || !noteForReports.hasAnyReports() - isAcceptable = account.isAcceptable(noteForReports) + val newIsAcceptable = account.isAcceptable(noteForReports) + + if (newIsAcceptable != isAcceptableAndCanPreview.first && newCanPreview != isAcceptableAndCanPreview.second) { + isAcceptableAndCanPreview = Pair(newIsAcceptable, newCanPreview) + } } } @@ -214,7 +217,7 @@ fun NoteComposeInner( ), isBoostedNote ) - } else if (!isAcceptable && !showHiddenNote) { + } else if (!isAcceptableAndCanPreview.first && !showHiddenNote) { if (!account.isHidden(noteForReports.author!!)) { HiddenNote( account.getRelevantReports(noteForReports), @@ -340,18 +343,18 @@ fun NoteComposeInner( } is PrivateDmEvent -> { - RenderPrivateMessage(note, makeItShort, canPreview, backgroundColor, accountViewModel, navController) + RenderPrivateMessage(note, makeItShort, isAcceptableAndCanPreview.second, backgroundColor, accountViewModel, navController) } is HighlightEvent -> { - RenderHighlight(note, makeItShort, canPreview, backgroundColor, accountViewModel, navController) + RenderHighlight(note, makeItShort, isAcceptableAndCanPreview.second, backgroundColor, accountViewModel, navController) } is PollNoteEvent -> { RenderPoll( note, makeItShort, - canPreview, + isAcceptableAndCanPreview.second, backgroundColor, accountViewModel, navController @@ -362,7 +365,7 @@ fun NoteComposeInner( RenderTextEvent( note, makeItShort, - canPreview, + isAcceptableAndCanPreview.second, backgroundColor, accountViewModel, navController