From 3fc802f837159467d1e1ce1ac10e2cab0ccf7fa7 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Sat, 27 Dec 2025 01:43:39 +0600 Subject: [PATCH] Remember descriptionAnnotator across composition Closes #2510 Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com> (cherry picked from commit 906d6f3cdbd6f7168d9cdea0c3eb8f9c663a09c2) --- .../manga/components/MangaInfoHeader.kt | 65 ++++++++++--------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt index fa50bc44d..dd2774013 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt @@ -605,44 +605,47 @@ private fun ColumnScope.MangaContentInfo( } } -private fun descriptionAnnotator(loadImages: Boolean, linkStyle: SpanStyle) = markdownAnnotator( - annotate = { content, child -> - if (!loadImages && child.type == MarkdownElementTypes.IMAGE) { - val inlineLink = child.findChildOfType(MarkdownElementTypes.INLINE_LINK) +@Composable +private fun descriptionAnnotator(loadImages: Boolean, linkStyle: SpanStyle) = remember(loadImages, linkStyle) { + markdownAnnotator( + annotate = { content, child -> + if (!loadImages && child.type == MarkdownElementTypes.IMAGE) { + val inlineLink = child.findChildOfType(MarkdownElementTypes.INLINE_LINK) - val url = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_DESTINATION) - ?.getUnescapedTextInNode(content) - ?: inlineLink?.findChildOfType(MarkdownElementTypes.AUTOLINK) - ?.findChildOfType(MarkdownTokenTypes.AUTOLINK) + val url = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_DESTINATION) ?.getUnescapedTextInNode(content) - ?: return@markdownAnnotator false + ?: inlineLink?.findChildOfType(MarkdownElementTypes.AUTOLINK) + ?.findChildOfType(MarkdownTokenTypes.AUTOLINK) + ?.getUnescapedTextInNode(content) + ?: return@markdownAnnotator false - val textNode = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TITLE) - ?: inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TEXT) - val altText = textNode?.findChildOfType(MarkdownTokenTypes.TEXT) - ?.getUnescapedTextInNode(content).orEmpty() + val textNode = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TITLE) + ?: inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TEXT) + val altText = textNode?.findChildOfType(MarkdownTokenTypes.TEXT) + ?.getUnescapedTextInNode(content).orEmpty() - withLink(LinkAnnotation.Url(url = url)) { - pushStyle(linkStyle) - appendInlineContent(MARKDOWN_INLINE_IMAGE_TAG) - append(altText) - pop() + withLink(LinkAnnotation.Url(url = url)) { + pushStyle(linkStyle) + appendInlineContent(MARKDOWN_INLINE_IMAGE_TAG) + append(altText) + pop() + } + + return@markdownAnnotator true } - return@markdownAnnotator true - } + if (child.type in DISALLOWED_MARKDOWN_TYPES) { + append(content.substring(child.startOffset, child.endOffset)) + return@markdownAnnotator true + } - if (child.type in DISALLOWED_MARKDOWN_TYPES) { - append(content.substring(child.startOffset, child.endOffset)) - return@markdownAnnotator true - } - - false - }, - config = markdownAnnotatorConfig( - eolAsNewLine = true, - ), -) + false + }, + config = markdownAnnotatorConfig( + eolAsNewLine = true, + ), + ) +} @Composable private fun MangaSummary(