From bf3847eeaa8f2c019f6bbf5d94f112c893b4d9ee Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 22 Feb 2023 18:11:46 -0500 Subject: [PATCH] Putting Follow and Unfollow Buttons into coroutines. --- .../vitorpamplona/amethyst/ui/dal/ChannelFeedFilter.kt | 2 +- .../vitorpamplona/amethyst/ui/navigation/DrawerContent.kt | 4 ++-- .../com/vitorpamplona/amethyst/ui/note/UserCompose.kt | 8 ++++++-- .../com/vitorpamplona/amethyst/ui/note/ZapNoteCompose.kt | 8 ++++++-- .../amethyst/ui/screen/loggedIn/ProfileScreen.kt | 7 +++++-- 5 files changed, 20 insertions(+), 9 deletions(-) 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 e4eb97e10..41a0b076b 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 @@ -20,6 +20,6 @@ object ChannelFeedFilter: FeedFilter() { // returns the last Note of each user. override fun feed(): List { - return channel?.notes?.values?.filter { account.isAcceptable(it) }?.sortedBy { it.event?.createdAt }?.reversed() ?: emptyList() + return channel.notes?.values?.filter { account.isAcceptable(it) }?.sortedBy { it.event?.createdAt }?.reversed() ?: emptyList() } } \ No newline at end of file diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index 63e681606..59dc61190 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -184,11 +184,11 @@ fun ProfileContent(baseAccountUser: User, modifier: Modifier = Modifier, scaffol Text(" @${accountUser.bestUsername()}", color = Color.LightGray) Row(modifier = Modifier.padding(top = 15.dp)) { Row() { - Text("${accountUserFollows.follows?.size ?: "--"}", fontWeight = FontWeight.Bold) + Text("${accountUserFollows.follows.size}", fontWeight = FontWeight.Bold) Text(" Following") } Row(modifier = Modifier.padding(start = 10.dp)) { - Text("${accountUserFollows.followers?.size ?: "--"}", fontWeight = FontWeight.Bold) + Text("${accountUserFollows.followers.size}", fontWeight = FontWeight.Bold) Text(" Followers") } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt index b592d9dcf..7f375afd4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt @@ -13,6 +13,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -28,6 +29,8 @@ import com.vitorpamplona.amethyst.ui.screen.FollowButton import com.vitorpamplona.amethyst.ui.screen.ShowUserButton import com.vitorpamplona.amethyst.ui.screen.UnfollowButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch @Composable fun UserCompose(baseUser: User, accountViewModel: AccountViewModel, navController: NavController) { @@ -38,6 +41,7 @@ fun UserCompose(baseUser: User, accountViewModel: AccountViewModel, navControlle val userFollows = userState?.user ?: return val ctx = LocalContext.current.applicationContext + val coroutineScope = rememberCoroutineScope() Column(modifier = Modifier.clickable( @@ -77,9 +81,9 @@ fun UserCompose(baseUser: User, accountViewModel: AccountViewModel, navControlle account.showUser(baseUser.pubkeyHex) } } else if (userFollows.isFollowing(baseUser)) { - UnfollowButton { account.unfollow(baseUser) } + UnfollowButton { coroutineScope.launch(Dispatchers.IO) { account.unfollow(baseUser) } } } else { - FollowButton { account.follow(baseUser) } + FollowButton { coroutineScope.launch(Dispatchers.IO) { account.follow(baseUser) } } } } } 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 a4d86e30f..1c209f4eb 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 @@ -11,6 +11,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -27,6 +28,8 @@ import com.vitorpamplona.amethyst.ui.screen.ShowUserButton import com.vitorpamplona.amethyst.ui.screen.UnfollowButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch @Composable fun ZapNoteCompose(baseNote: Pair, accountViewModel: AccountViewModel, navController: NavController) { @@ -45,6 +48,7 @@ fun ZapNoteCompose(baseNote: Pair, accountViewModel: AccountViewMode val baseAuthor = noteZapRequest.author val ctx = LocalContext.current.applicationContext + val coroutineScope = rememberCoroutineScope() if (baseAuthor == null) { BlankNote() @@ -104,9 +108,9 @@ fun ZapNoteCompose(baseNote: Pair, accountViewModel: AccountViewMode account.showUser(baseAuthor.pubkeyHex) } } else if (userFollows.isFollowing(baseAuthor)) { - UnfollowButton { account.unfollow(baseAuthor) } + UnfollowButton { coroutineScope.launch(Dispatchers.IO) { account.unfollow(baseAuthor) } } } else { - FollowButton { account.follow(baseAuthor) } + FollowButton { coroutineScope.launch(Dispatchers.IO) { account.follow(baseAuthor) } } } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 34948dcb1..1aacb950e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -65,6 +65,7 @@ import com.vitorpamplona.amethyst.ui.note.UserPicture import com.vitorpamplona.amethyst.ui.note.showAmount import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import nostr.postr.toNsec @@ -251,6 +252,8 @@ private fun ProfileHeader( val accountUserState by account.userProfile().live().follows.observeAsState() val accountUser = accountUserState?.user ?: return + val coroutineScope = rememberCoroutineScope() + Box { DrawBanner(baseUser) @@ -324,9 +327,9 @@ private fun ProfileHeader( account.showUser(baseUser.pubkeyHex) } } else if (accountUser.isFollowing(baseUser)) { - UnfollowButton { account.unfollow(baseUser) } + UnfollowButton { coroutineScope.launch(Dispatchers.IO) { account.unfollow(baseUser) } } } else { - FollowButton { account.follow(baseUser) } + FollowButton { coroutineScope.launch(Dispatchers.IO) { account.follow(baseUser) } } } } }