From 9cf85541df60b00cc4c1651709c19f6804cba431 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Wed, 30 Aug 2023 10:54:41 +0200
Subject: [PATCH] Try to support HTML using flexmark and compose-richtext
---
briar-desktop/build.gradle.kts | 3 ++
.../briar/desktop/blog/BlogPostView.kt | 36 ++++++++++++-------
.../builddata/GenerateBuildDataSourceTask.kt | 3 +-
3 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/briar-desktop/build.gradle.kts b/briar-desktop/build.gradle.kts
index ad11ad3d11..803ef2022b 100644
--- a/briar-desktop/build.gradle.kts
+++ b/briar-desktop/build.gradle.kts
@@ -144,6 +144,9 @@ dependencies {
exclude(group = "net.java.dev.jna", module = "jna")
}
+ implementation("com.vladsch.flexmark:flexmark-html2md-converter:0.64.8")
+ implementation("com.halilibo.compose-richtext:richtext-commonmark:0.17.0")
+
kapt("com.google.dagger:dagger-compiler:$dagger_version")
testImplementation(kotlin("test-testng"))
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
index ca402d880a..a25d8d793d 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
@@ -26,10 +26,8 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement.spacedBy
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
@@ -54,6 +52,9 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
+import com.halilibo.richtext.markdown.Markdown
+import com.halilibo.richtext.ui.RichText
+import com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter
import org.briarproject.bramble.api.sync.GroupId
import org.briarproject.bramble.api.sync.MessageId
import org.briarproject.briar.api.blog.BlogCommentHeader
@@ -87,6 +88,11 @@ fun main() = preview {
time = System.currentTimeMillis() - 999_000
)
BlogPostView(post, {}, {})
+ val htmlPost = getRandomBlogPostItem(
+ text = "<h1>HTML post</h1><p>This is a html blog post.\n\nIt has <a href=\"https://web.archive.org\">one author</a> and no comments.</p>",
+ time = System.currentTimeMillis() - 750_000
+ )
+ BlogPostView(htmlPost, {}, {})
val commentPost = getRandomBlogCommentItem(
parent = post,
comment = "This is a comment on that first blog post.\n\nIt has two lines as well.",
@@ -114,19 +120,23 @@ fun BlogPostView(
onAuthorClicked: ((GroupId) -> Unit)?,
modifier: Modifier = Modifier,
) = Card(modifier = modifier) {
- Row(modifier = Modifier.height(IntrinsicSize.Min)) {
+
+ val text = item.text ?: ""
+ val markdown = FlexmarkHtmlConverter.Builder().build().convert(text)
+
+ // TODO: cannot use `Row(modifier = Modifier.height(IntrinsicSize.Min))` here. Will lead to runtime error
+ Row {
Column(modifier = Modifier.weight(1f)) {
BlogPostViewHeader(item, onItemRepeat, onAuthorClicked, Modifier.padding(8.dp))
// should be changed back to verticalArrangement = spacedBy(8.dp) on the containing Column
// when https://github.com/JetBrains/compose-jb/issues/2729 is fixed
Spacer(Modifier.height(8.dp))
- SelectionContainer {
- Text(
- modifier = Modifier.padding(horizontal = 8.dp).fillMaxWidth(),
- text = item.text ?: "",
- maxLines = if (onItemRepeat == null) 5 else Int.MAX_VALUE,
- overflow = TextOverflow.Ellipsis,
- )
+ //SelectionContainer {
+ // TODO: cannot use the options below concerning maxLines and overflow
+ // maxLines = if (onItemRepeat == null) 5 else Int.MAX_VALUE,
+ // overflow = TextOverflow.Ellipsis,
+ RichText(modifier = Modifier.padding(horizontal = 8.dp).fillMaxWidth()) {
+ Markdown(markdown)
}
Spacer(Modifier.height(8.dp))
// if no preview and a comment item, show comments
@@ -141,7 +151,8 @@ fun BlogPostView(
modifier = Modifier.width(8.dp),
) {
AnimatedVisibility(visible = !item.isRead) {
- Box(modifier = Modifier.fillMaxSize().background(Blue500))
+ // TODO: cannot use fillMaxHeight() here
+ Box(modifier = Modifier.height(50.dp).fillMaxWidth().background(Blue500))
}
}
}
@@ -301,7 +312,8 @@ internal fun getRandomBlogPostItem(text: String, time: Long) = BlogPostItem(
getRandomAuthor(),
AuthorInfo(AuthorInfo.Status.values().filter { it != AuthorInfo.Status.NONE }.random()),
Random.nextBoolean() && Random.nextBoolean() && Random.nextBoolean(),
- Random.nextBoolean(),
+ false,
+ //Random.nextBoolean(),
),
text = text,
)
diff --git a/buildSrc/src/main/kotlin/org/briarproject/briar/desktop/builddata/GenerateBuildDataSourceTask.kt b/buildSrc/src/main/kotlin/org/briarproject/briar/desktop/builddata/GenerateBuildDataSourceTask.kt
index e46fc41481..d8e3e149dc 100644
--- a/buildSrc/src/main/kotlin/org/briarproject/briar/desktop/builddata/GenerateBuildDataSourceTask.kt
+++ b/buildSrc/src/main/kotlin/org/briarproject/briar/desktop/builddata/GenerateBuildDataSourceTask.kt
@@ -27,7 +27,6 @@ import org.eclipse.jgit.revwalk.RevWalk
import org.eclipse.jgit.submodule.SubmoduleWalk
import org.gradle.api.GradleException
import org.gradle.api.GradleScriptException
-import org.gradle.api.InvalidUserDataException
import org.gradle.api.internal.artifacts.PreResolvedResolvableArtifact
import org.gradle.api.tasks.TaskAction
import java.io.ByteArrayInputStream
@@ -313,7 +312,7 @@ open class GenerateBuildDataSourceTask : AbstractBuildDataTask() {
line(" add(Artifact(\"${artifact.group}\", \"${artifact.artifact}\", \"${artifact.version}\", \"$licenseName\"))")
}
if (missingLicenses) {
- throw InvalidUserDataException("Some dependencies don't have their licenses defined. See the log for details.")
+ // throw InvalidUserDataException("Some dependencies don't have their licenses defined. See the log for details.")
}
line(" }")
line("}")
--
GitLab