From 23298dd0f52f0b59e5f378eb84f1f3a63b79ab61 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 5 Aug 2022 23:03:46 +0530 Subject: [PATCH] all: introduce and migrate to `ExtendedPostDetails` --- android/build.gradle.kts | 2 ++ .../claw/android/viewmodel/ClawViewModel.kt | 15 +++++++---- .../viewmodel/PostDetailsRepository.kt | 25 +++++++++++++++++++ .../claw/common/comments/CommentEntry.kt | 12 +++++---- .../claw/common/comments/Comments.kt | 10 ++++---- .../claw/model/ExtendedPostDetails.kt | 11 ++++++++ 6 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/PostDetailsRepository.kt create mode 100644 model/src/main/kotlin/dev/msfjarvis/claw/model/ExtendedPostDetails.kt diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 2ff53eaa..1480aadd 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -42,6 +42,8 @@ dependencies { implementation(projects.api) implementation(projects.common) implementation(projects.database) + implementation(projects.metadataExtractor) + implementation(projects.model) implementation(libs.accompanist.swiperefresh) implementation(libs.accompanist.sysuicontroller) implementation(libs.androidx.activity.compose) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt index 6f9a737c..fb90623c 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt @@ -22,7 +22,8 @@ class ClawViewModel @Inject constructor( private val api: LobstersApi, - private val repository: SavedPostsRepository, + private val savedPostsRepository: SavedPostsRepository, + private val postDetailsRepository: PostDetailsRepository, ) : ViewModel() { private var hottestPostsPagingSource: LobstersPagingSource? = null private var newestPostsPagingSource: LobstersPagingSource? = null @@ -42,7 +43,7 @@ constructor( get() = newestPostsPager.flow private val savedPostsFlow - get() = repository.savedPosts + get() = savedPostsRepository.savedPosts val savedPosts get() = savedPostsFlow.map(::mapSavedPosts) @@ -60,15 +61,19 @@ constructor( viewModelScope.launch(Dispatchers.IO) { val saved = isPostSaved(post) if (saved) { - repository.removePost(post) + savedPostsRepository.removePost(post) } else { - repository.savePost(post) + savedPostsRepository.savePost(post) } } } suspend fun getPostComments(postId: String) = - withContext(Dispatchers.IO) { api.getPostDetails(postId) } + withContext(Dispatchers.IO) { + val details = api.getPostDetails(postId) + val extendedDetails = postDetailsRepository.getExtendedDetails(details) + extendedDetails + } suspend fun getUserProfile(username: String) = withContext(Dispatchers.IO) { api.getUser(username) } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/PostDetailsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/PostDetailsRepository.kt new file mode 100644 index 00000000..d4e50b57 --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/PostDetailsRepository.kt @@ -0,0 +1,25 @@ +package dev.msfjarvis.claw.android.viewmodel + +import dev.msfjarvis.claw.metadata.MetadataExtractor +import dev.msfjarvis.claw.model.ExtendedPostDetails +import dev.msfjarvis.claw.model.LobstersPostDetails +import javax.inject.Inject + +class PostDetailsRepository +@Inject +constructor( + private val metadataExtractor: MetadataExtractor, +) { + suspend fun getExtendedDetails(details: LobstersPostDetails): ExtendedPostDetails { + val metadata = metadataExtractor.getExtractedMetadata(details.url) + return ExtendedPostDetails( + title = details.title, + linkMetadata = metadata, + description = details.description, + submitter = details.submitter, + tags = details.tags, + comments = details.comments, + commentsUrl = details.commentsUrl, + ) + } +} diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt index 89642d30..38bf66c0 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt @@ -33,11 +33,11 @@ import dev.msfjarvis.claw.common.posts.TagRow import dev.msfjarvis.claw.common.res.ClawIcons import dev.msfjarvis.claw.common.ui.ThemedRichText import dev.msfjarvis.claw.model.Comment -import dev.msfjarvis.claw.model.LobstersPostDetails +import dev.msfjarvis.claw.model.ExtendedPostDetails @Composable fun CommentsHeader( - postDetails: LobstersPostDetails, + postDetails: ExtendedPostDetails, postActions: PostActions, ) { val htmlConverter = LocalHTMLConverter.current @@ -52,11 +52,13 @@ fun CommentsHeader( TagRow(tags = postDetails.tags) Spacer(Modifier.height(4.dp)) - if (postDetails.url.isNotBlank()) { + if (postDetails.linkMetadata.url.isNotBlank()) { PostLink( - link = postDetails.url, + link = postDetails.linkMetadata.url, modifier = - Modifier.clickable { postActions.viewPost(postDetails.url, postDetails.commentsUrl) }, + Modifier.clickable { + postActions.viewPost(postDetails.linkMetadata.url, postDetails.commentsUrl) + }, ) Spacer(Modifier.height(4.dp)) } diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt index f7f0b9dd..dd733feb 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt @@ -21,11 +21,11 @@ import dev.msfjarvis.claw.common.NetworkState 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.LobstersPostDetails +import dev.msfjarvis.claw.model.ExtendedPostDetails @Composable private fun CommentsPageInternal( - details: LobstersPostDetails, + details: ExtendedPostDetails, postActions: PostActions, modifier: Modifier = Modifier, ) { @@ -33,7 +33,7 @@ private fun CommentsPageInternal( LazyColumn(modifier = modifier, contentPadding = PaddingValues(bottom = 24.dp)) { item { CommentsHeader(postDetails = details, postActions = postActions) } - if (details.commentCount > 0) { + if (details.comments.isNotEmpty()) { item { Text( text = "Comments", @@ -67,7 +67,7 @@ private fun CommentsPageInternal( @Composable fun CommentsPage( postId: String, - getDetails: suspend (String) -> LobstersPostDetails, + getDetails: suspend (String) -> ExtendedPostDetails, postActions: PostActions, modifier: Modifier = Modifier, ) { @@ -79,7 +79,7 @@ fun CommentsPage( when (postDetails) { is NetworkState.Success<*> -> { CommentsPageInternal( - (postDetails as NetworkState.Success).data, + (postDetails as NetworkState.Success).data, postActions, modifier.fillMaxSize(), ) diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/ExtendedPostDetails.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/ExtendedPostDetails.kt new file mode 100644 index 00000000..b100f21e --- /dev/null +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/ExtendedPostDetails.kt @@ -0,0 +1,11 @@ +package dev.msfjarvis.claw.model + +class ExtendedPostDetails( + val title: String, + val linkMetadata: LinkMetadata, + val description: String, + val submitter: User, + val tags: List, + val comments: List, + val commentsUrl: String, +)