From a251dd4ffb3145e65d87b27b27efc33e15f67285 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Sat, 24 Feb 2024 19:05:17 -0600 Subject: [PATCH] feat: limit comment depth to 4 --- .../dantotsu/media/comments/CommentItem.kt | 22 ++++++++++++++++++- .../media/comments/CommentsActivity.kt | 20 ++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt index 03f61c18..2c7fe6bf 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt @@ -40,6 +40,7 @@ class CommentItem(val comment: Comment, ) : BindableItem() { var binding: ItemCommentsBinding? = null val adapter = GroupieAdapter() + private var subCommentIds: MutableList = mutableListOf() val repliesSection = Section() var isEditing = false private var isReplying = false @@ -77,6 +78,7 @@ class CommentItem(val comment: Comment, viewBinding.commentTotalReplies.setOnClickListener { if (repliesVisible) { repliesSection.clear() + removeSubCommentIds() viewBinding.commentTotalReplies.text = "View ${comment.replyCount} repl${if (comment.replyCount == 1) "y" else "ies"}" repliesVisible = false } else { @@ -168,7 +170,7 @@ class CommentItem(val comment: Comment, viewBinding.commentUserAvatar comment.profilePictureUrl?.let { viewBinding.commentUserAvatar.loadImage(it) } viewBinding.commentUserName.text = comment.username - val levelColor = getAvatarColor(comment.upvotes - comment.downvotes, backgroundColor) + val levelColor = getAvatarColor(comment.totalVotes, backgroundColor) viewBinding.commentUserName.setTextColor(levelColor.first) viewBinding.commentUserLevel.text = "Lv. ${levelColor.second}" viewBinding.commentUserLevel.setTextColor(levelColor.first) @@ -193,9 +195,27 @@ class CommentItem(val comment: Comment, binding?.commentEdit?.text = if (isEditing) currActivity()!!.getString(R.string.cancel) else currActivity()!!.getString(R.string.edit) this.isEditing = isEditing } + + fun registerSubComment(id: Int) { + subCommentIds.add(id) + } + + private fun removeSubCommentIds(){ + subCommentIds.forEach { id -> + val parentComments = parentSection.groups as? List ?: emptyList() + val commentToRemove = parentComments.find { it.comment.commentId == id } + commentToRemove?.let { + it.removeSubCommentIds() + parentSection.remove(it) + } + } + subCommentIds.clear() + } + fun test(isEditing: Boolean){ this.isEditing = isEditing } + private fun setVoteButtons(viewBinding: ItemCommentsBinding) { when (comment.userVoteType) { 1 -> { diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentsActivity.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentsActivity.kt index 68ca901c..c4df12f5 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentsActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentsActivity.kt @@ -171,6 +171,7 @@ class CommentsActivity : AppCompatActivity() { } } + //adds additional comments to the section private suspend fun updateUIWithComment(comment: Comment) { withContext(Dispatchers.Main) { section.add( @@ -220,6 +221,12 @@ class CommentsActivity : AppCompatActivity() { NONE, EDIT, REPLY } + /** + * Loads and displays the comments + * Called when the activity is created + * Or when the user refreshes the comments + */ + private suspend fun loadAndDisplayComments() { binding.commentsProgressBar.visibility = View.VISIBLE binding.commentsList.visibility = View.GONE @@ -336,6 +343,11 @@ class CommentsActivity : AppCompatActivity() { binding.commentReplyToContainer.visibility = View.GONE } } + + /** + * Callback from the comment item to view the replies to the comment + * @param comment the comment to view the replies of + */ fun viewReplyCallback(comment: CommentItem) { lifecycleScope.launch { val replies = withContext(Dispatchers.IO) { @@ -345,7 +357,7 @@ class CommentsActivity : AppCompatActivity() { replies?.comments?.forEach { val depth = if (comment.commentDepth + 1 > comment.MAX_DEPTH) comment.commentDepth else comment.commentDepth + 1 val section = if (comment.commentDepth + 1 > comment.MAX_DEPTH) comment.parentSection else comment.repliesSection - + if (depth >= comment.MAX_DEPTH) comment.registerSubComment(it.commentId) val newCommentItem = CommentItem( it, buildMarkwon(), @@ -439,6 +451,11 @@ class CommentsActivity : AppCompatActivity() { item.notifyChanged() } + /** + * Handles the new user-added comment + * @param commentText the text of the comment + */ + private suspend fun handleNewComment(commentText: String) { val success = withContext(Dispatchers.IO) { CommentsAPI.comment( @@ -452,6 +469,7 @@ class CommentsActivity : AppCompatActivity() { if (commentWithInteraction == null) return@let val section = if (commentWithInteraction!!.commentDepth + 1 > commentWithInteraction!!.MAX_DEPTH) commentWithInteraction?.parentSection else commentWithInteraction?.repliesSection val depth = if (commentWithInteraction!!.commentDepth + 1 > commentWithInteraction!!.MAX_DEPTH) commentWithInteraction!!.commentDepth else commentWithInteraction!!.commentDepth + 1 + if (depth >= commentWithInteraction!!.MAX_DEPTH) commentWithInteraction!!.registerSubComment(it.commentId) section?.add( if (commentWithInteraction!!.commentDepth + 1 > commentWithInteraction!!.MAX_DEPTH) 0 else section.itemCount, CommentItem(