Respect proper media upload requirements for stories.

fork-5.53.8
Alex Hart 2022-08-01 11:00:57 -03:00 zatwierdzone przez Greyson Parrelli
rodzic 92201dcd90
commit ba7319e215
4 zmienionych plików z 13 dodań i 26 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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<MediaSendActivityResult> { emitter ->
val trimmedBody: String = if (isViewOnce) "" else getTruncatedBody(message?.toString()?.trim()) ?: ""
val trimmedMentions: List<Mention> = if (isViewOnce) emptyList() else mentions
val modelsToTransform: Map<Media, MediaTransform> = buildModelsToTransform(selectedMedia, stateMap, quality)
val modelsToTransform: Map<Media, MediaTransform> = buildModelsToTransform(selectedMedia, stateMap, sentMediaQuality)
val oldToNewMediaMap: Map<Media, Media> = MediaRepository.transformMediaSync(context, selectedMedia, modelsToTransform)
val updatedMedia = oldToNewMediaMap.values.toList()
@ -128,7 +131,7 @@ class MediaSelectionRepository(context: Context) {
)
}
val clippedVideosForStories: List<Media> = if (singleContact?.isStory == true || contacts.any { it.isStory }) {
val clippedVideosForStories: List<Media> = 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<Media> = 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)
}
}

Wyświetl plik

@ -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();

Wyświetl plik

@ -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 {