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 6bd22369eb7934e1475fc7ae517b92a6fd298a94..9f75a896c98b095fef1f644d5e8982379e0129e3 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 45adc4e271b7429adeb11d8f5602db6884b37b9c..5a96f1da8cdb0da1c791fccc5339d9a52f0bc811 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 d9ca5b19b72d3849e37969693540c6eb27489e04..302e0e1ead660fac2a2da95a75a45d1ab2b2d9d6 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 bae01ac4ff9df0f3008f1c5b4fd69a330a1c4bb0..d2ab6c0ed69e154e996b208e6d62e29916ebfbb3 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 f557aa3fd097d73d20d4bb3d39df54a0614e41d0..179a0c1894c00c40772323dfe03bfd5bc0b7da54 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) {