refactor: migrate to HTMLText

This commit is contained in:
Harsh Shandilya 2023-06-09 19:57:53 +05:30
parent 2d23ceee83
commit 2dc8eae861
No known key found for this signature in database
6 changed files with 7 additions and 30 deletions

View file

@ -18,7 +18,6 @@ import androidx.core.view.WindowCompat
import com.deliveryhero.whetstone.Whetstone import com.deliveryhero.whetstone.Whetstone
import com.deliveryhero.whetstone.activity.ContributesActivityInjector import com.deliveryhero.whetstone.activity.ContributesActivityInjector
import dev.msfjarvis.claw.android.ui.LobstersApp import dev.msfjarvis.claw.android.ui.LobstersApp
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import javax.inject.Inject import javax.inject.Inject
@ -26,7 +25,6 @@ import javax.inject.Inject
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
@Inject lateinit var urlLauncher: UrlLauncher @Inject lateinit var urlLauncher: UrlLauncher
@Inject lateinit var htmlConverter: HTMLConverter
private var webUri: String? = null private var webUri: String? = null
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@ -40,7 +38,6 @@ class MainActivity : ComponentActivity() {
LobstersApp( LobstersApp(
urlLauncher = urlLauncher, urlLauncher = urlLauncher,
htmlConverter = htmlConverter,
windowSizeClass = windowSizeClass, windowSizeClass = windowSizeClass,
setWebUri = { url -> webUri = url }, setWebUri = { url -> webUri = url },
) )

View file

@ -64,7 +64,6 @@ import dev.msfjarvis.claw.android.ui.navigation.Destinations
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.common.comments.CommentsPage import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.theme.LobstersTheme import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.ui.decorations.ClawAppBar import dev.msfjarvis.claw.common.ui.decorations.ClawAppBar
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
@ -77,7 +76,6 @@ import kotlinx.coroutines.launch
@Composable @Composable
fun LobstersApp( fun LobstersApp(
urlLauncher: UrlLauncher, urlLauncher: UrlLauncher,
htmlConverter: HTMLConverter,
windowSizeClass: WindowSizeClass, windowSizeClass: WindowSizeClass,
setWebUri: (String?) -> Unit, setWebUri: (String?) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@ -238,7 +236,6 @@ fun LobstersApp(
CommentsPage( CommentsPage(
postId = postId, postId = postId,
postActions = postActions, postActions = postActions,
htmlConverter = htmlConverter,
getSeenComments = viewModel::getSeenComments, getSeenComments = viewModel::getSeenComments,
markSeenComments = viewModel::markSeenComments, markSeenComments = viewModel::markSeenComments,
) )

View file

@ -41,8 +41,8 @@ import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.posts.PostTitle import dev.msfjarvis.claw.common.posts.PostTitle
import dev.msfjarvis.claw.common.posts.Submitter import dev.msfjarvis.claw.common.posts.Submitter
import dev.msfjarvis.claw.common.posts.TagRow import dev.msfjarvis.claw.common.posts.TagRow
import dev.msfjarvis.claw.common.ui.HTMLText
import dev.msfjarvis.claw.common.ui.NetworkImage import dev.msfjarvis.claw.common.ui.NetworkImage
import dev.msfjarvis.claw.common.ui.ThemedRichText
import dev.msfjarvis.claw.model.LinkMetadata import dev.msfjarvis.claw.model.LinkMetadata
import dev.msfjarvis.claw.model.LobstersPostDetails import dev.msfjarvis.claw.model.LobstersPostDetails
import java.time.Instant import java.time.Instant
@ -53,7 +53,6 @@ import kotlinx.collections.immutable.toImmutableList
internal fun CommentsHeader( internal fun CommentsHeader(
postDetails: LobstersPostDetails, postDetails: LobstersPostDetails,
postActions: PostActions, postActions: PostActions,
htmlConverter: HTMLConverter,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val uriHandler = LocalUriHandler.current val uriHandler = LocalUriHandler.current
@ -84,7 +83,7 @@ internal fun CommentsHeader(
} }
if (postDetails.description.isNotBlank()) { if (postDetails.description.isNotBlank()) {
ThemedRichText(htmlConverter.convertHTMLToMarkdown(postDetails.description)) HTMLText(postDetails.description)
Spacer(Modifier.height(4.dp)) Spacer(Modifier.height(4.dp))
} }
Submitter( Submitter(
@ -134,7 +133,6 @@ private val CommentEntryPadding = 16f.dp
@Composable @Composable
internal fun CommentEntry( internal fun CommentEntry(
commentNode: CommentNode, commentNode: CommentNode,
htmlConverter: HTMLConverter,
toggleExpanded: (CommentNode) -> Unit, toggleExpanded: (CommentNode) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
@ -169,10 +167,7 @@ internal fun CommentEntry(
Modifier.clickable { uriHandler.openUri("https://lobste.rs/u/${comment.user.username}") }, Modifier.clickable { uriHandler.openUri("https://lobste.rs/u/${comment.user.username}") },
) )
if (commentNode.isExpanded) { if (commentNode.isExpanded) {
ThemedRichText( HTMLText(text = comment.comment, modifier = Modifier.padding(top = 8.dp))
text = htmlConverter.convertHTMLToMarkdown(comment.comment),
modifier = Modifier.padding(top = 8.dp)
)
} }
} }
} }

View file

@ -68,13 +68,11 @@ internal fun findTopMostParent(node: CommentNode): CommentNode {
internal fun LazyListScope.nodes( internal fun LazyListScope.nodes(
nodes: List<CommentNode>, nodes: List<CommentNode>,
htmlConverter: HTMLConverter,
toggleExpanded: (CommentNode) -> Unit, toggleExpanded: (CommentNode) -> Unit,
) { ) {
nodes.forEach { node -> nodes.forEach { node ->
node( node(
node = node, node = node,
htmlConverter = htmlConverter,
toggleExpanded = toggleExpanded, toggleExpanded = toggleExpanded,
) )
} }
@ -82,7 +80,6 @@ internal fun LazyListScope.nodes(
private fun LazyListScope.node( private fun LazyListScope.node(
node: CommentNode, node: CommentNode,
htmlConverter: HTMLConverter,
toggleExpanded: (CommentNode) -> Unit, toggleExpanded: (CommentNode) -> Unit,
) { ) {
// Skip the node if neither the node nor its parent is expanded // Skip the node if neither the node nor its parent is expanded
@ -92,7 +89,6 @@ private fun LazyListScope.node(
item { item {
CommentEntry( CommentEntry(
commentNode = node, commentNode = node,
htmlConverter = htmlConverter,
toggleExpanded = toggleExpanded, toggleExpanded = toggleExpanded,
) )
Divider() Divider()
@ -100,7 +96,6 @@ private fun LazyListScope.node(
if (node.children.isNotEmpty()) { if (node.children.isNotEmpty()) {
nodes( nodes(
node.children, node.children,
htmlConverter = htmlConverter,
toggleExpanded = toggleExpanded, toggleExpanded = toggleExpanded,
) )
} }

View file

@ -41,7 +41,6 @@ import dev.msfjarvis.claw.model.LobstersPostDetails
private fun CommentsPageInternal( private fun CommentsPageInternal(
details: LobstersPostDetails, details: LobstersPostDetails,
postActions: PostActions, postActions: PostActions,
htmlConverter: HTMLConverter,
commentState: PostComments?, commentState: PostComments?,
markSeenComments: (String, List<Comment>) -> Unit, markSeenComments: (String, List<Comment>) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@ -55,7 +54,6 @@ private fun CommentsPageInternal(
CommentsHeader( CommentsHeader(
postDetails = details, postDetails = details,
postActions = postActions, postActions = postActions,
htmlConverter = htmlConverter,
) )
} }
@ -70,7 +68,6 @@ private fun CommentsPageInternal(
nodes( nodes(
nodes = commentNodes, nodes = commentNodes,
htmlConverter = htmlConverter,
toggleExpanded = { node -> toggleExpanded = { node ->
val newNode = setExpanded(node, !node.isExpanded) val newNode = setExpanded(node, !node.isExpanded)
val parent = findTopMostParent(newNode) val parent = findTopMostParent(newNode)
@ -102,7 +99,6 @@ private fun CommentsPageInternal(
fun CommentsPage( fun CommentsPage(
postId: String, postId: String,
postActions: PostActions, postActions: PostActions,
htmlConverter: HTMLConverter,
getSeenComments: suspend (String) -> PostComments?, getSeenComments: suspend (String) -> PostComments?,
markSeenComments: (String, List<Comment>) -> Unit, markSeenComments: (String, List<Comment>) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@ -123,7 +119,6 @@ fun CommentsPage(
CommentsPageInternal( CommentsPageInternal(
details = (postDetails as Success<LobstersPostDetails>).data, details = (postDetails as Success<LobstersPostDetails>).data,
postActions = postActions, postActions = postActions,
htmlConverter = htmlConverter,
commentState = commentState, commentState = commentState,
markSeenComments = markSeenComments, markSeenComments = markSeenComments,
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),

View file

@ -29,10 +29,10 @@ import dev.msfjarvis.claw.common.NetworkState
import dev.msfjarvis.claw.common.NetworkState.Error import dev.msfjarvis.claw.common.NetworkState.Error
import dev.msfjarvis.claw.common.NetworkState.Loading import dev.msfjarvis.claw.common.NetworkState.Loading
import dev.msfjarvis.claw.common.NetworkState.Success import dev.msfjarvis.claw.common.NetworkState.Success
import dev.msfjarvis.claw.common.ui.HTMLText
import dev.msfjarvis.claw.common.ui.NetworkError import dev.msfjarvis.claw.common.ui.NetworkError
import dev.msfjarvis.claw.common.ui.NetworkImage import dev.msfjarvis.claw.common.ui.NetworkImage
import dev.msfjarvis.claw.common.ui.ProgressBar import dev.msfjarvis.claw.common.ui.ProgressBar
import dev.msfjarvis.claw.common.ui.ThemedRichText
import dev.msfjarvis.claw.model.User import dev.msfjarvis.claw.model.User
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@ -99,12 +99,10 @@ private fun UserProfileInternal(
text = user.username, text = user.username,
style = MaterialTheme.typography.displaySmall, style = MaterialTheme.typography.displaySmall,
) )
ThemedRichText( HTMLText(text = user.about)
text = user.about,
)
user.invitedBy?.let { invitedBy -> user.invitedBy?.let { invitedBy ->
ThemedRichText( HTMLText(
text = "Invited by [${invitedBy}](https://lobste.rs/u/${user.invitedBy})", text = """Invited by <a href="https://lobste.rs/u/${invitedBy}">${invitedBy}</a>""",
) )
} }
} }