diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index c81d78d5ae..b7a08bf341 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -37,6 +37,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.json.JSONArray; import org.json.JSONException; import org.signal.core.util.CursorUtil; +import org.signal.core.util.SetUtil; import org.signal.core.util.SqlUtil; import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; @@ -59,7 +60,6 @@ import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.FileUtils; import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.MediaUtil; -import org.signal.core.util.SetUtil; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.video.EncryptedMediaDataSource; import org.whispersystems.signalservice.internal.util.JsonUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index e2d782e774..39acff3129 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -88,10 +88,13 @@ class MediaSelectionRepository(context: Context) { throw IllegalStateException("No selected media!") } + val isSendingToStories = singleContact?.isStory == true || contacts.any { it.isStory } + val sentMediaQuality = if (isSendingToStories) SentMediaQuality.STANDARD else quality + return Maybe.create { emitter -> val trimmedBody: String = if (isViewOnce) "" else getTruncatedBody(message?.toString()?.trim()) ?: "" val trimmedMentions: List = if (isViewOnce) emptyList() else mentions - val modelsToTransform: Map = buildModelsToTransform(selectedMedia, stateMap, quality) + val modelsToTransform: Map = buildModelsToTransform(selectedMedia, stateMap, sentMediaQuality) val oldToNewMediaMap: Map = MediaRepository.transformMediaSync(context, selectedMedia, modelsToTransform) val updatedMedia = oldToNewMediaMap.values.toList() @@ -128,7 +131,7 @@ class MediaSelectionRepository(context: Context) { ) } - val clippedVideosForStories: List = if (singleContact?.isStory == true || contacts.any { it.isStory }) { + val clippedVideosForStories: List = if (isSendingToStories) { updatedMedia.filter { Stories.MediaTransform.getSendRequirements(it) == Stories.MediaTransform.SendRequirements.REQUIRES_CLIP }.map { media -> @@ -136,20 +139,12 @@ class MediaSelectionRepository(context: Context) { }.flatten() } else emptyList() - val lowResImagesForStories: List = if (singleContact?.isStory == true || contacts.any { it.isStory }) { - updatedMedia.filter { - Stories.MediaTransform.hasHighQualityTransform(it) - }.map { - Media.stripTransform(it) - } - } else emptyList() - uploadRepository.applyMediaUpdates(oldToNewMediaMap, singleRecipient) uploadRepository.updateCaptions(updatedMedia) uploadRepository.updateDisplayOrder(updatedMedia) uploadRepository.getPreUploadResults { uploadResults -> if (contacts.isNotEmpty()) { - sendMessages(contacts, splitBody, uploadResults, trimmedMentions, isViewOnce, clippedVideosForStories + lowResImagesForStories) + sendMessages(contacts, splitBody, uploadResults, trimmedMentions, isViewOnce, clippedVideosForStories) uploadRepository.deleteAbandonedAttachments() emitter.onComplete() } else if (uploadResults.isNotEmpty()) { @@ -338,7 +333,7 @@ class MediaSelectionRepository(context: Context) { } if (nonStoryMessages.isNotEmpty()) { - Log.d(TAG, "Sending ${nonStoryMessages.size} non-story preupload messages") + Log.d(TAG, "Sending ${nonStoryMessages.size} preupload messages to chats") MessageSender.sendMediaBroadcast( context, nonStoryMessages, @@ -355,7 +350,7 @@ class MediaSelectionRepository(context: Context) { } if (storyClipMessages.isNotEmpty()) { - Log.d(TAG, "Sending ${storyClipMessages.size} clip messages to stories") + Log.d(TAG, "Sending ${storyClipMessages.size} video clip messages to stories") MessageSender.sendStories(context, storyClipMessages, null, null) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index f685269610..7028fb6d63 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -88,7 +88,6 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -152,6 +151,7 @@ public class MessageSender { try { database.beginTransaction(); + for (OutgoingSecureMediaMessage message : messages) { long allocatedThreadId = threadDatabase.getOrCreateValidThreadId(message.getRecipient(), -1L, message.getDistributionType()); Recipient recipient = message.getRecipient(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt index e28bf5f893..1a027747c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -186,20 +186,12 @@ object Stories { @JvmStatic @WorkerThread fun canPreUploadMedia(media: Media): Boolean { - return if (MediaUtil.isVideo(media.mimeType)) { - getSendRequirements(media) != SendRequirements.REQUIRES_CLIP - } else { - !hasHighQualityTransform(media) + return when { + MediaUtil.isVideo(media.mimeType) -> getSendRequirements(media) != SendRequirements.REQUIRES_CLIP + else -> true } } - /** - * Checkst to see if the given media has the "High Quality" toggled in its transform properties. - */ - fun hasHighQualityTransform(media: Media): Boolean { - return MediaUtil.isImageType(media.mimeType) && media.transformProperties.map { it.sentMediaQuality == SentMediaQuality.HIGH.code }.orElse(false) - } - @JvmStatic @WorkerThread fun getSendRequirements(media: Media): SendRequirements {