From e96015bcbcda87bd374cb94ac5cc3c53ff35714b Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 1 Jul 2024 15:07:18 -0300 Subject: [PATCH] Parse base64 inside the wordIdentifier function --- .../amethyst/commons/richtext/RichTextParser.kt | 16 ++++++++-------- .../commons/richtext/RichTextParserSegments.kt | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParser.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParser.kt index 44e51df8f..663d1bc6c 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParser.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParser.kt @@ -127,15 +127,13 @@ class RichTextParser { ): RichTextViewerState { val urlSet = parseValidUrls(content) - val base64Images = parseBase64Images(content) - val imagesForPager = urlSet.mapNotNull { fullUrl -> parseMediaUrl(fullUrl, tags, content, callbackUri) }.associateBy { it.url } val imageList = imagesForPager.values.toList() val emojiMap = Nip30CustomEmoji.createEmojiMap(tags) - val segments = findTextSegments(content, imagesForPager.keys, urlSet, emojiMap, tags, base64Images) + val segments = findTextSegments(content, imagesForPager.keys, urlSet, emojiMap, tags) return RichTextViewerState( urlSet.toImmutableSet(), @@ -143,7 +141,6 @@ class RichTextParser { imageList.toImmutableList(), emojiMap.toImmutableMap(), segments, - base64Images.toImmutableSet(), ) } @@ -153,7 +150,6 @@ class RichTextParser { urls: Set, emojis: Map, tags: ImmutableListOfLists, - base64Images: Set, ): ImmutableList { val lines = content.split('\n') val paragraphSegments = ArrayList(lines.size) @@ -165,7 +161,7 @@ class RichTextParser { val wordList = paragraph.trimEnd().split(' ') val segments = ArrayList(wordList.size) wordList.forEach { word -> - val wordSegment = wordIdentifier(word, images, urls, emojis, tags, base64Images) + val wordSegment = wordIdentifier(word, images, urls, emojis, tags) if (wordSegment !is RegularTextSegment) { isDirty = true } @@ -219,11 +215,15 @@ class RichTextParser { urls: Set, emojis: Map, tags: ImmutableListOfLists, - base64Images: Set, ): Segment { if (word.isEmpty()) return RegularTextSegment(word) - if (base64Images.contains(word)) return Base64Segment(word) + if (word.startsWith("data:image")) { + val base64Images = parseBase64Images(word) + if (base64Images.isNotEmpty()) { + return Base64Segment(word) + } + } if (images.contains(word)) return ImageSegment(word) diff --git a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt index e4a38683f..faa1fc462 100644 --- a/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/richtext/RichTextParserSegments.kt @@ -32,7 +32,6 @@ data class RichTextViewerState( val imageList: ImmutableList, val customEmoji: ImmutableMap, val paragraphs: ImmutableList, - val base64Images: ImmutableSet, ) @Immutable