Skip to content

Commit

Permalink
Adding ability to lock / unlock posts. #1182
Browse files Browse the repository at this point in the history
  • Loading branch information
dessalines committed Jan 21, 2024
1 parent 4a9ffba commit 1e5c108
Show file tree
Hide file tree
Showing 11 changed files with 146 additions and 0 deletions.
15 changes: 15 additions & 0 deletions app/src/main/java/com/jerboa/model/PersonProfileViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,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 lockPostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var blockCommunityRes: ApiState<BlockCommunityResponse> by mutableStateOf(ApiState.Empty)
private var blockPersonRes: ApiState<BlockPersonResponse> by mutableStateOf(ApiState.Empty)

Expand Down Expand Up @@ -180,6 +181,20 @@ class PersonProfileViewModel(personArg: Either<PersonId, String>, savedMode: Boo
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
lockPostRes = ApiState.Loading
lockPostRes = API.getInstance().lockPost(form).toApiState()
when (val lockPost = lockPostRes) {
is ApiState.Success -> {
updatePost(lockPost.data.post_view)
}

else -> {}
}
}
}

fun blockCommunity(
form: BlockCommunity,
ctx: Context,
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/com/jerboa/model/PostViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,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 lockPostRes: ApiState<PostResponse> by mutableStateOf(ApiState.Empty)
private var blockPersonRes: ApiState<BlockPersonResponse> by mutableStateOf(ApiState.Empty)

val unExpandedComments = mutableStateListOf<Int>()
Expand Down Expand Up @@ -214,6 +215,20 @@ class PostViewModel(val id: Either<PostId, CommentId>) : ViewModel() {
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
lockPostRes = ApiState.Loading
lockPostRes = API.getInstance().lockPost(form).toApiState()
when (val lockPost = lockPostRes) {
is ApiState.Success -> {
updatePost(lockPost.data.post_view)
}

else -> {}
}
}
}

fun blockPerson(
form: BlockPerson,
ctx: Context,
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/jerboa/model/PostsViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.CreatePostLike
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPosts
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPostsResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PaginationCursor
import it.vercruysse.lemmyapi.v0x19.datatypes.PostView
Expand Down Expand Up @@ -197,4 +198,12 @@ open class PostsViewModel(protected val accountRepository: AccountRepository) :
}
}
}

fun lockPost(form: LockPost) {
viewModelScope.launch {
API.getInstance().lockPost(form).onSuccess {
updatePost(it.post_view)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityId
import it.vercruysse.lemmyapi.v0x19.datatypes.CreatePostLike
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.FollowCommunity
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PostView
import it.vercruysse.lemmyapi.v0x19.datatypes.SavePost
Expand Down Expand Up @@ -333,6 +334,23 @@ fun CommunityActivity(
onRemoveClick = { pv ->
appState.toPostRemove(post = pv.post)
},
onLockPostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
accountViewModel,
) {
communityViewModel.lockPost(
LockPost(
post_id = pv.post.id,
locked = !pv.post.locked,
),
)
}
},
onCommunityClick = { community ->
appState.toCommunity(id = community.id)
},
Expand Down
17 changes: 17 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 @@ -65,6 +65,7 @@ import com.jerboa.ui.components.post.edit.PostEditReturn
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.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PostView
import it.vercruysse.lemmyapi.v0x19.datatypes.SavePost
Expand Down Expand Up @@ -343,6 +344,22 @@ fun MainPostListingsContent(
onRemoveClick = { pv ->
appState.toPostRemove(post = pv.post)
},
onLockPostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
) {
homeViewModel.lockPost(
LockPost(
post_id = pv.post.id,
locked = !pv.post.locked,
),
)
}
},
onCommunityClick = { community ->
appState.toCommunity(id = community.id)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.CreatePostLike
import it.vercruysse.lemmyapi.v0x19.datatypes.DeleteComment
import it.vercruysse.lemmyapi.v0x19.datatypes.DeletePost
import it.vercruysse.lemmyapi.v0x19.datatypes.GetPersonDetails
import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost
import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
import it.vercruysse.lemmyapi.v0x19.datatypes.PostView
Expand Down Expand Up @@ -544,6 +545,22 @@ fun UserTabs(
onRemoveClick = { pv ->
appState.toPostRemove(post = pv.post)
},
onLockPostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
loginAsToast = true,
) {
personProfileViewModel.lockPost(
LockPost(
post_id = pv.post.id,
locked = !pv.post.locked,
),
)
}
},
onCommunityClick = { community ->
appState.toCommunity(id = community.id)
},
Expand Down
17 changes: 17 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 @@ -395,6 +395,23 @@ fun PostActivity(
onRemoveClick = { pv ->
appState.toPostRemove(post = pv.post)
},
onLockPostClick = { pv ->
account.doIfReadyElseDisplayInfo(
appState,
ctx,
snackbarHostState,
scope,
siteViewModel,
accountViewModel,
) {
postViewModel.lockPost(
LockPost(
post_id = pv.post.id,
locked = !pv.post.locked,
),
)
}
},
onPersonClick = appState::toProfile,
showReply = true, // Do nothing
fullBody = true,
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/java/com/jerboa/ui/components/post/PostListing.kt
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,7 @@ fun PostFooterLine(
onDeletePostClick: (postView: PostView) -> Unit,
onReportClick: (postView: PostView) -> Unit,
onRemoveClick: (postView: PostView) -> Unit,
onLockPostClick: (postView: PostView) -> Unit,
onCommunityClick: (community: Community) -> Unit,
onPersonClick: (personId: Int) -> Unit,
onViewSourceClick: () -> Unit,
Expand Down Expand Up @@ -589,6 +590,7 @@ fun PostFooterLine(
onDeletePostClick = onDeletePostClick,
onReportClick = onReportClick,
onRemoveClick = onRemoveClick,
onLockPostClick = onLockPostClick,
onViewSourceClick = onViewSourceClick,
isCreator = account.id == postView.creator.id,
canMod = canMod,
Expand Down Expand Up @@ -782,6 +784,7 @@ fun PostFooterLinePreview() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onCommunityClick = {},
onPersonClick = {},
onViewSourceClick = {},
Expand Down Expand Up @@ -814,6 +817,7 @@ fun PreviewPostListingCard() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onPersonClick = {},
fullBody = false,
account = AnonAccount,
Expand Down Expand Up @@ -849,6 +853,7 @@ fun PreviewLinkPostListing() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onPersonClick = {},
fullBody = false,
account = AnonAccount,
Expand Down Expand Up @@ -884,6 +889,7 @@ fun PreviewImagePostListingCard() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onPersonClick = {},
fullBody = false,
account = AnonAccount,
Expand Down Expand Up @@ -919,6 +925,7 @@ fun PreviewImagePostListingSmallCard() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onPersonClick = {},
fullBody = false,
account = AnonAccount,
Expand Down Expand Up @@ -954,6 +961,7 @@ fun PreviewLinkNoThumbnailPostListing() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onPersonClick = {},
fullBody = false,
account = AnonAccount,
Expand Down Expand Up @@ -987,6 +995,7 @@ fun PostListing(
onDeletePostClick: (postView: PostView) -> Unit,
onReportClick: (postView: PostView) -> Unit,
onRemoveClick: (postView: PostView) -> Unit,
onLockPostClick: (postView: PostView) -> Unit,
onPersonClick: (personId: Int) -> Unit,
showReply: Boolean = false,
showCommunityName: Boolean = true,
Expand Down Expand Up @@ -1049,6 +1058,7 @@ fun PostListing(
onDeletePostClick = onDeletePostClick,
onReportClick = onReportClick,
onRemoveClick = onRemoveClick,
onLockPostClick = onLockPostClick,
onPersonClick = onPersonClick,
onViewSourceClick = {
viewSource = !viewSource
Expand Down Expand Up @@ -1101,6 +1111,7 @@ fun PostListing(
onDeletePostClick = onDeletePostClick,
onReportClick = onReportClick,
onRemoveClick = onRemoveClick,
onLockPostClick = onLockPostClick,
onPersonClick = onPersonClick,
onViewSourceClick = {
viewSource = !viewSource
Expand Down Expand Up @@ -1496,6 +1507,7 @@ fun PostListingCard(
onDeletePostClick: (postView: PostView) -> Unit,
onReportClick: (postView: PostView) -> Unit,
onRemoveClick: (postView: PostView) -> Unit,
onLockPostClick: (postView: PostView) -> Unit,
onPersonClick: (personId: Int) -> Unit,
onViewSourceClick: () -> Unit,
viewSource: Boolean,
Expand Down Expand Up @@ -1572,6 +1584,7 @@ fun PostListingCard(
onDeletePostClick = onDeletePostClick,
onReportClick = onReportClick,
onRemoveClick = onRemoveClick,
onLockPostClick = onLockPostClick,
onCommunityClick = onCommunityClick,
onPersonClick = onPersonClick,
onViewSourceClick = onViewSourceClick,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ fun PostListings(
onDeletePostClick: (postView: PostView) -> Unit,
onReportClick: (postView: PostView) -> Unit,
onRemoveClick: (postView: PostView) -> Unit,
onLockPostClick: (postView: PostView) -> Unit,
onCommunityClick: (community: Community) -> Unit,
onPersonClick: (personId: Int) -> Unit,
loadMorePosts: () -> Unit,
Expand Down Expand Up @@ -105,6 +106,7 @@ fun PostListings(
onDeletePostClick = onDeletePostClick,
onReportClick = onReportClick,
onRemoveClick = onRemoveClick,
onLockPostClick = onLockPostClick,
onPersonClick = onPersonClick,
showCommunityName = showCommunityName,
fullBody = false,
Expand Down Expand Up @@ -170,6 +172,7 @@ fun PreviewPostListings() {
onDeletePostClick = {},
onReportClick = {},
onRemoveClick = {},
onLockPostClick = {},
onCommunityClick = {},
onPersonClick = {},
loadMorePosts = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.jerboa.ui.components.post.composables
import android.widget.Toast
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Block
import androidx.compose.material.icons.outlined.CommentsDisabled
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.CopyAll
import androidx.compose.material.icons.outlined.Delete
Expand All @@ -12,6 +13,7 @@ import androidx.compose.material.icons.outlined.Flag
import androidx.compose.material.icons.outlined.Forum
import androidx.compose.material.icons.outlined.Gavel
import androidx.compose.material.icons.outlined.Link
import androidx.compose.material.icons.outlined.LockOpen
import androidx.compose.material.icons.outlined.Person
import androidx.compose.material.icons.outlined.Restore
import androidx.compose.material.icons.outlined.Share
Expand Down Expand Up @@ -56,6 +58,7 @@ fun PostOptionsDropdown(
onDeletePostClick: (PostView) -> Unit,
onReportClick: (PostView) -> Unit,
onRemoveClick: (PostView) -> Unit,
onLockPostClick: (PostView) -> Unit,
onViewSourceClick: () -> Unit,
isCreator: Boolean,
canMod: Boolean,
Expand Down Expand Up @@ -404,6 +407,23 @@ fun PostOptionsDropdown(

if (canMod) {
Divider()

val (lockText, lockIcon) =
if (postView.post.locked) {
Pair(stringResource(R.string.unlock_post), Icons.Outlined.LockOpen)
} else {
Pair(stringResource(R.string.lock_post), Icons.Outlined.CommentsDisabled)
}

PopupMenuItem(
text = lockText,
icon = lockIcon,
onClick = {
onDismissRequest()
onLockPostClick(postView)
},
)

val (removeText, removeIcon) =
if (postView.post.removed) {
Pair(stringResource(R.string.restore_post), Icons.Outlined.Restore)
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -412,5 +412,7 @@
<string name="restore_comment">Restore Comment</string>
<string name="remove_post">Remove Post</string>
<string name="restore_post">Restore Post</string>
<string name="lock_post">Lock Post</string>
<string name="unlock_post">Unlock Post</string>
<string name="type_your_reason">Type your reason</string>
</resources>

0 comments on commit 1e5c108

Please sign in to comment.