From cb1b660eff91cb3d3b951d0986a32e1987847052 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Tue, 12 Mar 2024 17:26:46 +0200 Subject: [PATCH] Implement removing media file --- .../feature/timeline/TimelineViewModel.kt | 2 +- .../preview/TimelineMediaPreviewViewModel.kt | 6 ++--- core/build.gradle | 2 +- .../timeline/post/PostOptionsDataSource.kt | 24 +++++++++++++++---- .../feature/gallery/grid/GalleryViewModel.kt | 2 +- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt index 6bd22369e..9f75a896c 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt @@ -66,7 +66,7 @@ class TimelineViewModel @Inject constructor( } fun removeMessage(roomId: String, eventId: String) { - postOptionsDataSource.removeMessage(roomId, eventId) + launchBg { postOptionsDataSource.removeMessage(roomId, eventId) } } fun ignoreSender(senderId: String) { diff --git a/app/src/main/java/org/futo/circles/feature/timeline/preview/TimelineMediaPreviewViewModel.kt b/app/src/main/java/org/futo/circles/feature/timeline/preview/TimelineMediaPreviewViewModel.kt index 45adc4e27..5a96f1da8 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/preview/TimelineMediaPreviewViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/preview/TimelineMediaPreviewViewModel.kt @@ -6,9 +6,9 @@ import dagger.hilt.android.lifecycle.HiltViewModel import org.futo.circles.core.base.SingleEventLiveData import org.futo.circles.core.extensions.getOrThrow import org.futo.circles.core.extensions.launchBg -import org.futo.circles.core.model.ShareableContent -import org.futo.circles.core.feature.timeline.post.PostOptionsDataSource import org.futo.circles.core.feature.timeline.post.PostContentDataSource +import org.futo.circles.core.feature.timeline.post.PostOptionsDataSource +import org.futo.circles.core.model.ShareableContent import javax.inject.Inject @HiltViewModel @@ -35,7 +35,7 @@ class TimelineMediaPreviewViewModel @Inject constructor( } fun removeImage() { - postOptionsDataSource.removeMessage(roomId, eventId) + launchBg { postOptionsDataSource.removeMessage(roomId, eventId) } } fun save() { diff --git a/core/build.gradle b/core/build.gradle index d9ca5b19b..302e0e1ea 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -76,7 +76,7 @@ dependencies { kapt "com.google.dagger:hilt-compiler:$rootProject.ext.hilt_version" //Matrix - api('org.futo.gitlab.circles:matrix-android-sdk:v1.6.10.24@aar') { + api('org.futo.gitlab.circles:matrix-android-sdk:v1.6.10.27@aar') { transitive = true } diff --git a/core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt index bae01ac4f..d2ab6c0ed 100644 --- a/core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt @@ -3,17 +3,23 @@ package org.futo.circles.core.feature.timeline.post import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import org.futo.circles.core.extensions.createResult +import org.futo.circles.core.extensions.getPostContentType import org.futo.circles.core.extensions.onBG +import org.futo.circles.core.mapping.toMediaContent import org.futo.circles.core.model.MediaContent import org.futo.circles.core.model.MediaFileData import org.futo.circles.core.model.MediaShareable +import org.futo.circles.core.model.MediaType import org.futo.circles.core.model.PostContent +import org.futo.circles.core.model.PostContentType.IMAGE_CONTENT +import org.futo.circles.core.model.PostContentType.VIDEO_CONTENT import org.futo.circles.core.model.ShareableContent import org.futo.circles.core.model.TextContent import org.futo.circles.core.model.TextShareable import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.FileUtils.downloadEncryptedFileToContentUri import org.futo.circles.core.utils.FileUtils.saveMediaFileToDevice +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.room.getTimelineEvent import javax.inject.Inject @@ -24,10 +30,18 @@ class PostOptionsDataSource @Inject constructor( private val session = MatrixSessionProvider.currentSession - fun removeMessage(roomId: String, eventId: String) { - val roomForMessage = session?.getRoom(roomId) - roomForMessage?.getTimelineEvent(eventId) - ?.let { roomForMessage.sendService().redactEvent(it.root, null) } + suspend fun removeMessage(roomId: String, eventId: String) { + val roomForMessage = session?.getRoom(roomId) ?: return + val event = roomForMessage.getTimelineEvent(eventId) ?: return + roomForMessage.sendService().redactEvent(event.root, null) + + val eventType = event.getPostContentType() + val mediaEvent = when (eventType) { + IMAGE_CONTENT -> event.toMediaContent(MediaType.Image) + VIDEO_CONTENT -> event.toMediaContent(MediaType.Video) + else -> return + } + tryOrNull { session.mediaService().deleteMediaFile(mediaEvent.mediaFileData.fileUrl) } } fun sendReaction(roomId: String, eventId: String, emoji: String) { @@ -44,7 +58,7 @@ class PostOptionsDataSource @Inject constructor( suspend fun getShareableContent(content: PostContent): ShareableContent? = onBG { when (content) { is MediaContent -> getShareableMediaContent(content.mediaFileData) - is TextContent -> TextShareable(content.message.toString()) + is TextContent -> TextShareable(content.message) else -> throw IllegalArgumentException("Not shareable post content") } } diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/gallery/grid/GalleryViewModel.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/gallery/grid/GalleryViewModel.kt index f557aa3fd..179a0c189 100644 --- a/gallery/src/main/java/org/futo/circles/gallery/feature/gallery/grid/GalleryViewModel.kt +++ b/gallery/src/main/java/org/futo/circles/gallery/feature/gallery/grid/GalleryViewModel.kt @@ -61,7 +61,7 @@ class GalleryViewModel @Inject constructor( fun removeImage(position: Int) { val eventId = galleryItemsLiveData.value?.getOrNull(position)?.id ?: return - postOptionsDataSource.removeMessage(roomId, eventId) + launchBg { postOptionsDataSource.removeMessage(roomId, eventId) } } fun save(position: Int) { -- GitLab