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 LocalUserVoteDisplayMode for saving, and displaying votes. #1529

Merged
merged 5 commits into from
Jun 7, 2024
Merged
Changes from 4 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
10 changes: 0 additions & 10 deletions app/src/main/java/com/jerboa/datatypes/Others.kt
Original file line number Diff line number Diff line change
@@ -181,16 +181,6 @@ data class PostFeatureData(
val featured: Boolean,
)

// TODO this should be got rid of after https://github.com/LemmyNet/lemmy/issues/4449
enum class VoteDisplayMode {
Full,
ScoreAndDownvote,
ScoreAndUpvotePercentage,
UpvotePercentage,
Score,
HideAll,
}

/**
* Says which type of users can view which bottom app bar tabs.
*/
25 changes: 18 additions & 7 deletions app/src/main/java/com/jerboa/feat/Voting.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.jerboa.feat

import com.jerboa.datatypes.VoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode

enum class VoteType(val value: Int) {
Upvote(1),
@@ -32,7 +32,7 @@ data class InstantScores(
)
}

fun scoreOrPctStr(voteDisplayMode: VoteDisplayMode): String? {
fun scoreOrPctStr(voteDisplayMode: LocalUserVoteDisplayMode): String? {
return scoreOrPctStr(
score = score,
upvotes = upvotes,
@@ -63,11 +63,22 @@ private fun scoreOrPctStr(
score: Long,
upvotes: Long,
downvotes: Long,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
): String? {
return when (voteDisplayMode) {
VoteDisplayMode.UpvotePercentage -> formatPercent(upvotePercent(upvotes, downvotes))
VoteDisplayMode.HideAll -> null
else -> score.toString()
return if (voteDisplayMode.upvote_percentage) {
formatPercent(upvotePercent(upvotes, downvotes))
} else if (!(voteDisplayMode.score && voteDisplayMode.upvotes && voteDisplayMode.downvotes)) {
null
} else {
score.toString()
}
}

fun LocalUserVoteDisplayMode.Companion.default() =
LocalUserVoteDisplayMode(
local_user_id = -1,
upvotes = true,
downvotes = true,
score = false,
upvote_percentage = false,
)
30 changes: 13 additions & 17 deletions app/src/main/java/com/jerboa/model/SiteViewModel.kt
Original file line number Diff line number Diff line change
@@ -15,10 +15,10 @@ import com.jerboa.api.API
import com.jerboa.api.ApiState
import com.jerboa.api.DEFAULT_INSTANCE
import com.jerboa.api.toApiState
import com.jerboa.datatypes.VoteDisplayMode
import com.jerboa.db.entity.AnonAccount
import com.jerboa.db.entity.isAnon
import com.jerboa.db.repository.AccountRepository
import com.jerboa.feat.default
import com.jerboa.jerboaApplication
import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityFollowerView
import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityId
@@ -27,6 +27,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.GetReportCountResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.GetSiteResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.GetUnreadCountResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.GetUnreadRegistrationApplicationCountResponse
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
import it.vercruysse.lemmyapi.v0x19.datatypes.SaveUserSettings
import kotlinx.coroutines.Job
@@ -39,7 +40,9 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode
var siteRes: ApiState<GetSiteResponse> by mutableStateOf(ApiState.Empty)

private var unreadCountRes: ApiState<GetUnreadCountResponse> by mutableStateOf(ApiState.Empty)
private var unreadAppCountRes: ApiState<GetUnreadRegistrationApplicationCountResponse> by mutableStateOf(ApiState.Empty)
private var unreadAppCountRes: ApiState<GetUnreadRegistrationApplicationCountResponse> by mutableStateOf(
ApiState.Empty,
)
private var unreadReportCountRes: ApiState<GetReportCountResponse> by mutableStateOf(ApiState.Empty)

val unreadCount by derivedStateOf { getUnreadCountTotal() }
@@ -166,7 +169,10 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode
return when (val res = unreadReportCountRes) {
is ApiState.Success -> {
val unreads = res.data
unreads.post_reports + unreads.comment_reports + (unreads.private_message_reports ?: 0)
unreads.post_reports + unreads.comment_reports + (
unreads.private_message_reports
?: 0
)
}

else -> null
@@ -218,23 +224,13 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode
}
}

// TODO this should probably be persisted rather than waited for
// For the current default, just use FullScores
fun voteDisplayMode(): VoteDisplayMode {
val defaultMode = VoteDisplayMode.ScoreAndUpvotePercentage
// For the current default, just use Upvotes / Downvotes
fun voteDisplayMode(): LocalUserVoteDisplayMode {
return when (val res = siteRes) {
is ApiState.Success ->
res.data.my_user?.let { mui ->
if (mui.local_user_view.local_user.show_scores) {
defaultMode
} else {
VoteDisplayMode.HideAll
}
} ?: run {
defaultMode
}
res.data.my_user?.local_user_view?.local_user_vote_display_mode ?: LocalUserVoteDisplayMode.default()
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one should be okay, because the default in your API is null.


else -> defaultMode
else -> LocalUserVoteDisplayMode.default()
}
}

Original file line number Diff line number Diff line change
@@ -50,7 +50,6 @@ import com.jerboa.border
import com.jerboa.buildCommentsTree
import com.jerboa.calculateCommentOffset
import com.jerboa.datatypes.BanFromCommunityData
import com.jerboa.datatypes.VoteDisplayMode
import com.jerboa.datatypes.getContent
import com.jerboa.datatypes.sampleCommentView
import com.jerboa.datatypes.sampleCommunity
@@ -66,6 +65,7 @@ import com.jerboa.feat.SwipeToActionType
import com.jerboa.feat.VoteType
import com.jerboa.feat.amMod
import com.jerboa.feat.canMod
import com.jerboa.feat.default
import com.jerboa.feat.isReadyAndIfNotShowSimplifiedInfoToast
import com.jerboa.isPostCreator
import com.jerboa.ui.components.common.ActionBarButton
@@ -87,6 +87,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.Comment
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentId
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView
import it.vercruysse.lemmyapi.v0x19.datatypes.Community
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.Person
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
@@ -103,7 +104,7 @@ fun CommentNodeHeader(
onClick: () -> Unit,
onLongClick: () -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
CommentOrPostNodeHeader(
creator = commentView.creator,
@@ -135,7 +136,7 @@ fun CommentNodeHeaderPreview() {
downvotes = 2,
myVote = 26,
),
voteDisplayMode = VoteDisplayMode.Full,
voteDisplayMode = LocalUserVoteDisplayMode.default(),
onPersonClick = {},
onClick = {},
onLongClick = {},
@@ -221,7 +222,7 @@ fun LazyListScope.commentNodeItem(
enableDownVotes: Boolean,
showAvatar: Boolean,
blurNSFW: BlurNSFW,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
swipeToActionPreset: SwipeToActionPreset,
) {
val commentView = node.commentView
@@ -531,7 +532,7 @@ fun LazyListScope.missingCommentNodeItem(
enableDownVotes: Boolean,
showAvatar: Boolean,
blurNSFW: BlurNSFW,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
swipeToActionPreset: SwipeToActionPreset,
) {
val commentId = node.missingCommentView.commentId
@@ -925,7 +926,7 @@ fun CommentNodesPreview() {
showAvatar = true,
blurNSFW = BlurNSFW.NSFW,
account = AnonAccount,
voteDisplayMode = VoteDisplayMode.Full,
voteDisplayMode = LocalUserVoteDisplayMode.default(),
swipeToActionPreset = SwipeToActionPreset.TwoSides,
)
}
Original file line number Diff line number Diff line change
@@ -12,13 +12,13 @@ import com.jerboa.CommentNode
import com.jerboa.CommentNodeData
import com.jerboa.MissingCommentNode
import com.jerboa.datatypes.BanFromCommunityData
import com.jerboa.datatypes.VoteDisplayMode
import com.jerboa.db.entity.Account
import com.jerboa.feat.BlurNSFW
import com.jerboa.feat.SwipeToActionPreset
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentId
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView
import it.vercruysse.lemmyapi.v0x19.datatypes.Community
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.Person
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView
@@ -66,7 +66,7 @@ fun CommentNodes(
enableDownVotes: Boolean,
showAvatar: Boolean,
blurNSFW: BlurNSFW,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
swipeToActionPreset: SwipeToActionPreset,
) {
LazyColumn(state = listState) {
@@ -159,7 +159,7 @@ fun LazyListScope.commentNodeItems(
enableDownVotes: Boolean,
showAvatar: Boolean,
blurNSFW: BlurNSFW,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
swipeToActionPreset: SwipeToActionPreset,
) {
nodes.forEach { node ->
Original file line number Diff line number Diff line change
@@ -27,13 +27,13 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.jerboa.R
import com.jerboa.datatypes.VoteDisplayMode
import com.jerboa.datatypes.samplePersonMentionView
import com.jerboa.db.entity.Account
import com.jerboa.feat.BlurNSFW
import com.jerboa.feat.InstantScores
import com.jerboa.feat.VoteType
import com.jerboa.feat.canMod
import com.jerboa.feat.default
import com.jerboa.ui.components.comment.CommentBody
import com.jerboa.ui.components.comment.PostAndCommunityContextHeader
import com.jerboa.ui.components.common.ActionBarButton
@@ -44,6 +44,7 @@ import com.jerboa.ui.theme.SMALL_PADDING
import com.jerboa.ui.theme.XXL_PADDING
import com.jerboa.ui.theme.muted
import it.vercruysse.lemmyapi.v0x19.datatypes.Community
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.Person
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonMentionView
@@ -58,7 +59,7 @@ fun CommentMentionNodeHeader(
onClick: () -> Unit,
onLongClick: () -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
CommentOrPostNodeHeader(
creator = personMentionView.creator,
@@ -88,7 +89,7 @@ fun CommentMentionNodeHeaderPreview() {
upvotes = 21,
downvotes = 2,
),
voteDisplayMode = VoteDisplayMode.Full,
voteDisplayMode = LocalUserVoteDisplayMode.default(),
onPersonClick = {},
onClick = {},
onLongClick = {},
@@ -260,7 +261,7 @@ fun CommentMentionNode(
showAvatar: Boolean,
blurNSFW: BlurNSFW,
enableDownvotes: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
// These are necessary for instant comment voting
var instantScores by
Original file line number Diff line number Diff line change
@@ -15,11 +15,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.Preview
import com.jerboa.R
import com.jerboa.datatypes.VoteDisplayMode
import com.jerboa.datatypes.getContent
import com.jerboa.datatypes.sampleCommentView
import com.jerboa.db.entity.Account
import com.jerboa.feat.InstantScores
import com.jerboa.feat.default
import com.jerboa.ui.components.comment.CommentNodeHeader
import com.jerboa.ui.components.comment.mentionnode.CommentMentionNodeHeader
import com.jerboa.ui.components.comment.replynode.CommentReplyNodeHeader
@@ -29,6 +29,7 @@ import com.jerboa.ui.theme.LARGE_PADDING
import com.jerboa.ui.theme.MEDIUM_PADDING
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentReplyView
import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView
import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId
import it.vercruysse.lemmyapi.v0x19.datatypes.PersonMentionView
import it.vercruysse.lemmyapi.v0x19.datatypes.PostView
@@ -38,7 +39,7 @@ fun RepliedComment(
commentView: CommentView,
onPersonClick: (personId: PersonId) -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
Column(modifier = Modifier.padding(MEDIUM_PADDING)) {
CommentNodeHeader(
@@ -68,7 +69,7 @@ fun RepliedCommentReply(
commentReplyView: CommentReplyView,
onPersonClick: (personId: PersonId) -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
Column(modifier = Modifier.padding(MEDIUM_PADDING)) {
CommentReplyNodeHeader(
@@ -96,7 +97,7 @@ fun RepliedMentionReply(
personMentionView: PersonMentionView,
onPersonClick: (personId: PersonId) -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
Column(modifier = Modifier.padding(MEDIUM_PADDING)) {
CommentMentionNodeHeader(
@@ -126,7 +127,7 @@ fun RepliedCommentPreview() {
commentView = sampleCommentView,
onPersonClick = {},
showAvatar = true,
VoteDisplayMode.Full,
voteDisplayMode = LocalUserVoteDisplayMode.default(),
)
}

@@ -135,7 +136,7 @@ fun RepliedPost(
postView: PostView,
onPersonClick: (personId: PersonId) -> Unit,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
Column(modifier = Modifier.padding(MEDIUM_PADDING)) {
PostNodeHeader(
@@ -166,7 +167,7 @@ fun CommentReply(
account: Account,
modifier: Modifier = Modifier,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
val scrollState = rememberScrollState()

@@ -198,7 +199,7 @@ fun CommentReplyReply(
account: Account,
modifier: Modifier = Modifier,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
val scrollState = rememberScrollState()

@@ -230,7 +231,7 @@ fun MentionReply(
account: Account,
modifier: Modifier = Modifier,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
val scrollState = rememberScrollState()

@@ -262,7 +263,7 @@ fun PostReply(
account: Account,
modifier: Modifier = Modifier,
showAvatar: Boolean,
voteDisplayMode: VoteDisplayMode,
voteDisplayMode: LocalUserVoteDisplayMode,
) {
val scrollState = rememberScrollState()

Loading