Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding post hiding. #1517

Merged
merged 4 commits into from
May 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions app/src/main/java/com/jerboa/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,21 @@ fun findAndUpdatePostCreator(
return newPosts
}

fun findAndUpdatePostHidden(
posts: List<PostView>,
form: HidePost,
): List<PostView> {
val newPosts = posts.toMutableList()
newPosts.replaceAll {
if (form.post_ids.contains(it.post.id)) {
it.copy(hidden = form.hide)
} else {
it
}
}
return newPosts
}

fun findAndUpdatePostCreatorBannedFromCommunity(
posts: List<PostView>,
banData: BanFromCommunityData,
Expand Down
34 changes: 34 additions & 0 deletions app/src/main/java/com/jerboa/model/PersonProfileViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jerboa.model

import android.content.Context
import android.widget.Toast
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf
Expand All @@ -11,6 +12,7 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import arrow.core.Either
import com.jerboa.JerboaAppState
import com.jerboa.R
import com.jerboa.api.API
import com.jerboa.api.ApiState
import com.jerboa.api.toApiState
Expand All @@ -21,6 +23,7 @@ import com.jerboa.findAndUpdateCommentCreatorBannedFromCommunity
import com.jerboa.findAndUpdatePost
import com.jerboa.findAndUpdatePostCreator
import com.jerboa.findAndUpdatePostCreatorBannedFromCommunity
import com.jerboa.findAndUpdatePostHidden
import com.jerboa.getDeduplicateMerge
import com.jerboa.showBlockCommunityToast
import com.jerboa.showBlockPersonToast
Expand All @@ -35,6 +38,7 @@ class PersonProfileViewModel(personArg: Either<PersonId, String>, savedMode: Boo
private var likePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var savePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var deletePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var hidePostRes: ApiState<(Unit)> by mutableStateOf(ApiState.Empty)
private var lockPostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var featurePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var blockCommunityRes: ApiState<BlockCommunityResponse> by mutableStateOf(ApiState.Empty)
Expand Down Expand Up @@ -189,6 +193,24 @@ class PersonProfileViewModel(personArg: Either<PersonId, String>, savedMode: Boo
}
}

fun hidePost(
form: HidePost,
ctx: Context,
) {
viewModelScope.launch {
hidePostRes = ApiState.Loading
hidePostRes = API.getInstance().hidePost(form).toApiState()
val msg = if (form.hide) R.string.post_hidden else R.string.post_unhidden
when (hidePostRes) {
is ApiState.Success -> {
updatePostHidden(form)
Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show()
}
else -> {}
}
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
lockPostRes = ApiState.Loading
Expand Down Expand Up @@ -312,6 +334,18 @@ class PersonProfileViewModel(personArg: Either<PersonId, String>, savedMode: Boo
}
}

fun updatePostHidden(form: HidePost) {
when (val existing = personDetailsRes) {
is ApiState.Success -> {
val newPosts = findAndUpdatePostHidden(existing.data.posts, form)
val newRes = ApiState.Success(existing.data.copy(posts = newPosts))
personDetailsRes = newRes
}

else -> {}
}
}

fun updateBanned(personView: PersonView) {
when (val existing = personDetailsRes) {
is ApiState.Success -> {
Expand Down
34 changes: 34 additions & 0 deletions app/src/main/java/com/jerboa/model/PostViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jerboa.model

import android.content.Context
import android.widget.Toast
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
Expand All @@ -10,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import arrow.core.Either
import com.jerboa.R
import com.jerboa.api.API
import com.jerboa.api.ApiState
import com.jerboa.api.toApiState
Expand All @@ -36,6 +38,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.GetComments
import it.vercruysse.lemmyapi.v0x19.datatypes.GetCommentsResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPost
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPostResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
import it.vercruysse.lemmyapi.v0x19.datatypes.PostId
Expand Down Expand Up @@ -64,6 +67,7 @@ class PostViewModel(val id: Either<PostId, CommentId>) : ViewModel() {
private var likePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var savePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var deletePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var hidePostRes: ApiState<(Unit)> by mutableStateOf(ApiState.Empty)
private var lockPostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var featurePostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var blockPersonRes: ApiState<BlockPersonResponse> by mutableStateOf(ApiState.Empty)
Expand Down Expand Up @@ -259,6 +263,24 @@ class PostViewModel(val id: Either<PostId, CommentId>) : ViewModel() {
}
}

fun hidePost(
form: HidePost,
ctx: Context,
) {
viewModelScope.launch {
hidePostRes = ApiState.Loading
hidePostRes = API.getInstance().hidePost(form).toApiState()
val msg = if (form.hide) R.string.post_hidden else R.string.post_unhidden
when (hidePostRes) {
is ApiState.Success -> {
updatePostHidden(form.hide)
Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show()
}
else -> {}
}
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
lockPostRes = ApiState.Loading
Expand Down Expand Up @@ -340,6 +362,18 @@ class PostViewModel(val id: Either<PostId, CommentId>) : ViewModel() {
}
}

fun updatePostHidden(hidden: Boolean) {
when (val existing = postRes) {
is ApiState.Success -> {
val newPostView = existing.data.post_view.copy(hidden = hidden)
val newRes = ApiState.Success(existing.data.copy(post_view = newPostView))
postRes = newRes
}

else -> {}
}
}

fun updateBanned(personView: PersonView) {
when (val existing = postRes) {
is ApiState.Success -> {
Expand Down
30 changes: 30 additions & 0 deletions app/src/main/java/com/jerboa/model/PostsViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.jerboa.model

import android.content.Context
import android.util.Log
import android.widget.Toast
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf
Expand All @@ -9,6 +11,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.asFlow
import androidx.lifecycle.viewModelScope
import com.jerboa.JerboaAppState
import com.jerboa.R
import com.jerboa.api.API
import com.jerboa.api.ApiState
import com.jerboa.api.toApiState
Expand All @@ -18,6 +21,7 @@ import com.jerboa.db.repository.AccountRepository
import com.jerboa.findAndUpdatePost
import com.jerboa.findAndUpdatePostCreator
import com.jerboa.findAndUpdatePostCreatorBannedFromCommunity
import com.jerboa.findAndUpdatePostHidden
import com.jerboa.mergePosts
import com.jerboa.toEnumSafe
import it.vercruysse.lemmyapi.dto.ListingType
Expand All @@ -27,6 +31,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPosts
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPostsResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PaginationCursor
Expand Down Expand Up @@ -136,6 +141,18 @@ open class PostsViewModel(protected val accountRepository: AccountRepository) :
}
}

private fun updatePostHidden(form: HidePost) {
when (val existing = postsRes) {
is ApiState.Success -> {
val newPosts = findAndUpdatePostHidden(existing.data.posts, form)
val newRes = ApiState.Success(existing.data.copy(posts = newPosts))
postsRes = newRes
}

else -> {}
}
}

fun updateBanned(personView: PersonView) {
when (val existing = postsRes) {
is ApiState.Success -> {
Expand Down Expand Up @@ -228,6 +245,19 @@ open class PostsViewModel(protected val accountRepository: AccountRepository) :
}
}

fun hidePost(
form: HidePost,
ctx: Context,
) {
viewModelScope.launch {
val msg = if (form.hide) R.string.post_hidden else R.string.post_unhidden
API.getInstance().hidePost(form).onSuccess {
updatePostHidden(form)
Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show()
}
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
API.getInstance().lockPost(form).onSuccess {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.CreatePostLike
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost
import it.vercruysse.lemmyapi.v0x19.datatypes.FollowCommunity
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
Expand Down Expand Up @@ -342,6 +343,24 @@ fun CommunityActivity(
)
}
},
onHidePostClick = { postView ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
accountViewModel,
) {
communityViewModel.hidePost(
HidePost(
post_ids = listOf(postView.post.id),
hide = !postView.hidden,
),
ctx,
)
}
},
onReportClick = { postView ->
appState.toPostReport(id = postView.post.id)
},
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/com/jerboa/ui/components/home/HomeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import com.jerboa.ui.components.remove.post.PostRemoveReturn
import it.vercruysse.lemmyapi.v0x19.datatypes.CreatePostLike
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
Expand Down Expand Up @@ -355,6 +356,23 @@ fun MainPostListingsContent(
)
}
},
onHidePostClick = { postView ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
) {
homeViewModel.hidePost(
HidePost(
post_ids = listOf(postView.post.id),
hide = !postView.hidden,
),
ctx,
)
}
},
onReportClick = { postView ->
appState.toPostReport(id = postView.post.id)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.DistinguishComment
import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPersonDetails
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
Expand Down Expand Up @@ -573,6 +574,23 @@ fun UserTabs(
)
}
},
onHidePostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
loginAsToast = true,
) {
personProfileViewModel.hidePost(
HidePost(
post_ids = listOf(pv.post.id),
hide = !pv.hidden,
),
ctx,
)
}
},
onReportClick = { pv ->
appState.toPostReport(id = pv.post.id)
},
Expand Down
19 changes: 19 additions & 0 deletions app/src/main/java/com/jerboa/ui/components/post/PostActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.DeleteComment
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.DistinguishComment
import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost
import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
import it.vercruysse.lemmyapi.v0x19.datatypes.PostId
Expand Down Expand Up @@ -395,6 +396,24 @@ fun PostActivity(
)
}
},
onHidePostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
accountViewModel,
) {
postViewModel.hidePost(
HidePost(
post_ids = listOf(pv.post.id),
hide = !pv.hidden,
),
ctx,
)
}
},
onReportClick = { pv ->
appState.toPostReport(id = pv.post.id)
},
Expand Down
Loading