diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderPresenter.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderPresenter.kt index 737fd0c43..2948e4660 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderPresenter.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderPresenter.kt @@ -143,7 +143,8 @@ class ReaderPresenter( publishedAt = post.date.relativeDurationString(), isBookmarked = post.bookmarked, feed = feed, - postMode = RssContent + postMode = RssContent, + postImage = post.imageUrl ) } } diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderState.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderState.kt index bf8c76b4a..dfbd9cdcb 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderState.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ReaderState.kt @@ -28,11 +28,11 @@ internal data class ReaderState( val isBookmarked: Boolean?, val feed: Feed?, val postMode: PostMode, + val postImage: String? ) { val hasContent: Boolean - get() = - content != null && feed != null && !publishedAt.isNullOrBlank() && !title.isNullOrBlank() + get() = content != null && feed != null && !publishedAt.isNullOrBlank() companion object { @@ -45,6 +45,7 @@ internal data class ReaderState( isBookmarked = null, feed = null, postMode = PostMode.Idle, + postImage = null ) } diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderHTML.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderHTML.kt index afd230e7f..77f5eaa88 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderHTML.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderHTML.kt @@ -25,7 +25,10 @@ internal fun readerHTML( publishedAt: String, content: String, colors: ReaderHTMLColors, + featuredImage: String?, ): String { + val hasImgTags = content.contains("""]*>""".toRegex()) + // language=HTML return """ @@ -43,11 +46,19 @@ internal fun readerHTML(

$title

-
-
$feedName
-
$publishedAt
-
+ ${feedSection( + feedName = feedName, + feedHomePageLink = feedHomePageLink, + publishedAt = publishedAt, + hasTitle = title.isNotBlank() + )} $content + ${if (!hasImgTags && !featuredImage.isNullOrBlank()) { + featuredImage(featuredImage) + } else { + // no-op + "" + }} @@ -57,6 +68,35 @@ internal fun readerHTML( .trimIndent() } +private fun featuredImage(image: String): String { + return """ + featured_image + """ + .trimIndent() +} + +private fun feedSection( + feedName: String, + feedHomePageLink: String, + publishedAt: String, + hasTitle: Boolean, +): String { + return buildString { + if (hasTitle) { + appendLine("
") + } + + appendLine( + """ +
$feedName
+
$publishedAt
+
+ """ + .trimIndent() + ) + } +} + private object ReaderJs { // language=JS diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderScreen.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderScreen.kt index 18431927e..649a97e1f 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderScreen.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/reader/ui/ReaderScreen.kt @@ -223,7 +223,8 @@ internal fun ReaderScreen(presenter: ReaderPresenter, modifier: Modifier = Modif linkColor = linkColor, dividerColor = dividerColor, codeBackgroundColor = codeBackgroundColor - ) + ), + featuredImage = state.postImage ) } val webViewState = rememberWebViewStateWithHTMLData(htmlTemplate)