feat: load link metadata lazily

This commit is contained in:
Harsh Shandilya 2022-10-16 12:21:19 +05:30
parent 4337a19abc
commit 79aba9a187
No known key found for this signature in database
7 changed files with 50 additions and 61 deletions

View file

@ -23,6 +23,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@ -40,19 +41,26 @@ import dev.msfjarvis.claw.common.res.ClawIcons
import dev.msfjarvis.claw.common.ui.NetworkImage
import dev.msfjarvis.claw.common.ui.ThemedRichText
import dev.msfjarvis.claw.model.Comment
import dev.msfjarvis.claw.model.ExtendedPostDetails
import dev.msfjarvis.claw.model.LinkMetadata
import dev.msfjarvis.claw.model.LobstersPostDetails
import java.time.Instant
import java.time.temporal.TemporalAccessor
@Composable
fun CommentsHeader(
postDetails: ExtendedPostDetails,
postDetails: LobstersPostDetails,
getLinkMetadata: suspend (String) -> LinkMetadata,
postActions: PostActions,
htmlConverter: HTMLConverter,
modifier: Modifier = Modifier,
) {
val uriHandler = LocalUriHandler.current
val linkMetadata by
produceState(
initialValue = LinkMetadata(postDetails.url, null, null),
) {
value = getLinkMetadata(postDetails.url)
}
Surface(color = MaterialTheme.colorScheme.background, modifier = modifier) {
Column(
@ -63,13 +71,11 @@ fun CommentsHeader(
TagRow(tags = postDetails.tags)
Spacer(Modifier.height(4.dp))
if (postDetails.linkMetadata.url.isNotBlank()) {
if (linkMetadata.url.isNotBlank()) {
PostLink(
linkMetadata = postDetails.linkMetadata,
linkMetadata = linkMetadata,
modifier =
Modifier.clickable {
postActions.viewPost(postDetails.linkMetadata.url, postDetails.commentsUrl)
},
Modifier.clickable { postActions.viewPost(linkMetadata.url, postDetails.commentsUrl) },
)
Spacer(Modifier.height(4.dp))
}

View file

@ -24,11 +24,13 @@ import dev.msfjarvis.claw.common.NetworkState.Success
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.ui.NetworkError
import dev.msfjarvis.claw.common.ui.ProgressBar
import dev.msfjarvis.claw.model.ExtendedPostDetails
import dev.msfjarvis.claw.model.LinkMetadata
import dev.msfjarvis.claw.model.LobstersPostDetails
@Composable
private fun CommentsPageInternal(
details: ExtendedPostDetails,
details: LobstersPostDetails,
getLinkMetadata: suspend (String) -> LinkMetadata,
postActions: PostActions,
htmlConverter: HTMLConverter,
modifier: Modifier = Modifier,
@ -38,6 +40,7 @@ private fun CommentsPageInternal(
item {
CommentsHeader(
postDetails = details,
getLinkMetadata = getLinkMetadata,
postActions = postActions,
htmlConverter = htmlConverter,
)
@ -73,11 +76,12 @@ private fun CommentsPageInternal(
}
}
@Suppress("UNCHECKED_CAST")
@Suppress("UNCHECKED_CAST", "LongParameterList")
@Composable
fun CommentsPage(
postId: String,
getDetails: suspend (String) -> ExtendedPostDetails,
getDetails: suspend (String) -> LobstersPostDetails,
getLinkMetadata: suspend (String) -> LinkMetadata,
postActions: PostActions,
htmlConverter: HTMLConverter,
modifier: Modifier = Modifier,
@ -94,7 +98,8 @@ fun CommentsPage(
when (postDetails) {
is Success<*> -> {
CommentsPageInternal(
details = (postDetails as Success<ExtendedPostDetails>).data,
details = (postDetails as Success<LobstersPostDetails>).data,
getLinkMetadata = getLinkMetadata,
postActions = postActions,
htmlConverter = htmlConverter,
modifier = modifier.fillMaxSize(),