kopia lustrzana https://github.com/ryukoposting/Signal-Android
Respect proper media upload requirements for stories.
rodzic
92201dcd90
commit
ba7319e215
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
Ładowanie…
Reference in New Issue