From b78633f9a7e61efb45bfa04a0e21fa890c23e829 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 15 Jul 2022 16:28:49 -0300 Subject: [PATCH] Fix several issues with stories. --- .../mediasend/v2/MediaSelectionRepository.kt | 11 +++++- .../thoughtcrime/securesms/stories/Stories.kt | 6 +-- .../securesms/stories/StorySlateView.kt | 38 ++++--------------- .../viewer/page/StoryViewerPageFragment.kt | 3 +- 4 files changed, 20 insertions(+), 38 deletions(-) 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 bee88d241..10e5fffb2 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 @@ -43,6 +43,7 @@ import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.util.MessageUtil import java.util.Collections +import java.util.Optional import java.util.concurrent.TimeUnit private val TAG = Log.tag(MediaSelectionRepository::class.java) @@ -237,7 +238,7 @@ class MediaSelectionRepository(context: Context) { val storyPreUploadMessages: MutableMap> = mutableMapOf() val storyClipMessages: MutableList = ArrayList() val distributionListPreUploadSentTimestamps: MutableMap = mutableMapOf() - val distributionListStoryClipsSentTimestamps: MutableMap = mutableMapOf() + val distributionListStoryClipsSentTimestamps: MutableMap = mutableMapOf() for (contact in contacts) { val recipient = Recipient.resolved(contact.recipientId) @@ -304,7 +305,7 @@ class MediaSelectionRepository(context: Context) { recipient, body, listOf(MediaUploadRepository.asAttachment(context, it)), - if (recipient.isDistributionList) distributionListStoryClipsSentTimestamps.getOrPut(it) { System.currentTimeMillis() } else System.currentTimeMillis(), + if (recipient.isDistributionList) distributionListStoryClipsSentTimestamps.getOrPut(it.asKey()) { System.currentTimeMillis() } else System.currentTimeMillis(), -1, TimeUnit.SECONDS.toMillis(recipient.expiresInSeconds.toLong()), isViewOnce, @@ -357,4 +358,10 @@ class MediaSelectionRepository(context: Context) { MessageSender.sendStories(context, storyClipMessages, null, null) } } + + private fun Media.asKey(): MediaKey { + return MediaKey(this, this.transformProperties) + } + + data class MediaKey(val media: Media, val mediaTransform: Optional) } 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 0ef3cbac2..2615e51a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -123,10 +123,8 @@ object Stories { @WorkerThread private fun enqueueAttachmentsFromStoryForDownloadSync(record: MmsMessageRecord, ignoreAutoDownloadConstraints: Boolean) { SignalDatabase.attachments.getAttachmentsForMessage(record.id).filterNot { it.isSticker }.forEach { - if (it.transferState == AttachmentDatabase.TRANSFER_PROGRESS_PENDING) { - val job = AttachmentDownloadJob(record.id, it.attachmentId, ignoreAutoDownloadConstraints) - ApplicationDependencies.getJobManager().add(job) - } + val job = AttachmentDownloadJob(record.id, it.attachmentId, ignoreAutoDownloadConstraints) + ApplicationDependencies.getJobManager().add(job) } if (record.hasLinkPreview()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StorySlateView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StorySlateView.kt index 56f5208c2..f1749b912 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StorySlateView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StorySlateView.kt @@ -57,19 +57,15 @@ class StorySlateView @JvmOverloads constructor( callback?.onStateChanged(State.HIDDEN, postId) } - if (this.state.isValidTransitionTo(state)) { - when (state) { - State.LOADING -> moveToProgressState(State.LOADING) - State.ERROR -> moveToErrorState() - State.RETRY -> moveToProgressState(State.RETRY) - State.NOT_FOUND -> moveToNotFoundState() - State.HIDDEN -> moveToHiddenState() - } - - callback?.onStateChanged(state, postId) - } else { - Log.d(TAG, "Invalid state transfer: ${this.state} -> $state") + when (state) { + State.LOADING -> moveToProgressState(State.LOADING) + State.ERROR -> moveToErrorState() + State.RETRY -> moveToProgressState(State.RETRY) + State.NOT_FOUND -> moveToNotFoundState() + State.HIDDEN -> moveToHiddenState() } + + callback?.onStateChanged(state, postId) } fun setBackground(blur: BlurHash?) { @@ -161,24 +157,6 @@ class StorySlateView @JvmOverloads constructor( NOT_FOUND(3, false), HIDDEN(4, false); - fun isValidTransitionTo(newState: State): Boolean { - if (newState in listOf(HIDDEN, NOT_FOUND)) { - return true - } - - if (newState == this) { - return true - } - - return when (this) { - LOADING -> newState == ERROR - ERROR -> newState == RETRY - RETRY -> newState == ERROR - HIDDEN -> newState == LOADING - else -> false - } - } - companion object { fun fromCode(code: Int): State { return values().firstOrNull { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt index 6668a8de7..45d943377 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt @@ -706,10 +706,9 @@ class StoryViewerPageFragment : viewModel.setIsDisplayingSlate(true) } AttachmentDatabase.TRANSFER_PROGRESS_FAILED -> { - storySlate.moveToState(StorySlateView.State.NOT_FOUND, post.id) + storySlate.moveToState(StorySlateView.State.ERROR, post.id) sharedViewModel.setContentIsReady() viewModel.setIsDisplayingSlate(true) - markViewedIfAble() } } }