From bd7f1669e9d0366d8b4ce60148b2afb05227bace Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Wed, 29 Nov 2023 19:27:19 +0200 Subject: [PATCH] Add separate property for caption --- .../timeline/list/TimelineViewHolder.kt | 4 ++-- .../post/create/CreatePostDialogFragment.kt | 2 +- .../data_source/BaseTimelineDataSource.kt | 4 ++++ .../core/mapping/MediaPostContentMapping.kt | 22 +++++++++++-------- .../core/mapping/TextPostContentMapping.kt | 11 ++++++---- .../futo/circles/core/model/PostContent.kt | 7 ++++-- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt index 02c0c5c03..fe56949e6 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt @@ -86,7 +86,7 @@ class TextMediaPostViewHolder( private fun bindTextPost(content: TextContent) { binding.tvTextContent.apply { - setText(content.message, TextView.BufferType.SPANNABLE) + setText(content.messageSpanned, TextView.BufferType.SPANNABLE) visible() } binding.vMediaContent.lMedia.gone() @@ -101,7 +101,7 @@ class TextMediaPostViewHolder( private fun bindMediaCaption(content: MediaContent) { binding.tvTextContent.apply { - val caption = content.caption + val caption = content.captionSpanned setIsVisible(caption != null) caption?.let { setText(it, TextView.BufferType.SPANNABLE) } } diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt index 845be5b72..37b629d3a 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt @@ -66,7 +66,7 @@ class CreatePostDialogFragment : PostContentType.IMAGE_CONTENT, PostContentType.VIDEO_CONTENT -> binding.vPostPreview.setMediaFromExistingPost(it as MediaContent) - else -> binding.vPostPreview.setText((it as TextContent).message.toString()) + else -> binding.vPostPreview.setText((it as TextContent).message) } } } diff --git a/core/src/main/java/org/futo/circles/core/feature/timeline/data_source/BaseTimelineDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/timeline/data_source/BaseTimelineDataSource.kt index 79975d7b5..b10208ac0 100644 --- a/core/src/main/java/org/futo/circles/core/feature/timeline/data_source/BaseTimelineDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/timeline/data_source/BaseTimelineDataSource.kt @@ -4,6 +4,10 @@ import android.content.Context import androidx.lifecycle.MutableLiveData import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.runBlocking import org.futo.circles.core.extensions.getOrThrow import org.futo.circles.core.feature.timeline.builder.BaseTimelineBuilder import org.futo.circles.core.feature.timeline.builder.MultiTimelineBuilder diff --git a/core/src/main/java/org/futo/circles/core/mapping/MediaPostContentMapping.kt b/core/src/main/java/org/futo/circles/core/mapping/MediaPostContentMapping.kt index 36b694c50..ff8565f3e 100644 --- a/core/src/main/java/org/futo/circles/core/mapping/MediaPostContentMapping.kt +++ b/core/src/main/java/org/futo/circles/core/mapping/MediaPostContentMapping.kt @@ -16,18 +16,22 @@ import org.matrix.android.sdk.api.session.room.model.message.getFileName import org.matrix.android.sdk.api.session.room.model.message.getFileUrl import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent -fun TimelineEvent.toMediaContent(mediaType: MediaType, markwon: Markwon): MediaContent = MediaContent( - type = if (mediaType == MediaType.Image) PostContentType.IMAGE_CONTENT else PostContentType.VIDEO_CONTENT, - caption = getCaption(markwon), - mediaFileData = toMediaFileData(mediaType), - thumbnailFileData = toThumbnailFileData(mediaType), - thumbHash = getThumbHash(mediaType) -) +fun TimelineEvent.toMediaContent(mediaType: MediaType, markwon: Markwon): MediaContent { + val caption = getCaption() + return MediaContent( + type = if (mediaType == MediaType.Image) PostContentType.IMAGE_CONTENT else PostContentType.VIDEO_CONTENT, + caption = caption, + captionSpanned = caption?.let { markwon.toMarkdown(caption) }, + mediaFileData = toMediaFileData(mediaType), + thumbnailFileData = toThumbnailFileData(mediaType), + thumbHash = getThumbHash(mediaType) + ) +} -private fun TimelineEvent.getCaption(markwon: Markwon): CharSequence? { +private fun TimelineEvent.getCaption(): String? { val lastContent = annotations?.editSummary?.latestEdit?.getClearContent() ?: root.getClearContent() - return lastContent?.get(MediaCaptionFieldKey)?.toString()?.let { markwon.toMarkdown(it) } + return lastContent?.get(MediaCaptionFieldKey)?.toString() } private fun TimelineEvent.getThumbHash(mediaType: MediaType) = when (mediaType) { diff --git a/core/src/main/java/org/futo/circles/core/mapping/TextPostContentMapping.kt b/core/src/main/java/org/futo/circles/core/mapping/TextPostContentMapping.kt index 95634a367..e7811a563 100644 --- a/core/src/main/java/org/futo/circles/core/mapping/TextPostContentMapping.kt +++ b/core/src/main/java/org/futo/circles/core/mapping/TextPostContentMapping.kt @@ -5,9 +5,12 @@ import org.futo.circles.core.model.TextContent import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.getTextEditableContent -fun TimelineEvent.toTextContent(markwon: Markwon): TextContent = TextContent( - message = markwon.toMarkdown(getTextEditableContent(false)) - -) +fun TimelineEvent.toTextContent(markwon: Markwon): TextContent { + val text = getTextEditableContent(false) + return TextContent( + message = text, + messageSpanned = markwon.toMarkdown(text) + ) +} diff --git a/core/src/main/java/org/futo/circles/core/model/PostContent.kt b/core/src/main/java/org/futo/circles/core/model/PostContent.kt index 8db795efd..ffd7521ac 100644 --- a/core/src/main/java/org/futo/circles/core/model/PostContent.kt +++ b/core/src/main/java/org/futo/circles/core/model/PostContent.kt @@ -1,5 +1,6 @@ package org.futo.circles.core.model +import android.text.Spanned import android.util.Size import org.matrix.android.sdk.api.session.room.model.message.MessageType @@ -18,12 +19,14 @@ sealed class PostContent(open val type: PostContentType) { } data class TextContent( - val message: CharSequence + val message: String, + val messageSpanned: Spanned ) : PostContent(PostContentType.TEXT_CONTENT) data class MediaContent( override val type: PostContentType, - val caption: CharSequence?, + val caption: String?, + val captionSpanned: Spanned?, val mediaFileData: MediaFileData, val thumbnailFileData: MediaFileData?, val thumbHash: String? -- GitLab