diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt index 876005bed0..93029889b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt @@ -5,9 +5,11 @@ import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.concurrent.SignalExecutors +import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.conversation.ConversationMessage import org.thoughtcrime.securesms.database.DatabaseObserver import org.thoughtcrime.securesms.database.MessageTable +import org.thoughtcrime.securesms.database.NoSuchMessageException import org.thoughtcrime.securesms.database.RxDatabaseObserver import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId @@ -24,6 +26,10 @@ import org.thoughtcrime.securesms.sms.MessageSender class StoriesLandingRepository(context: Context) { + companion object { + private val TAG = Log.tag(StoriesLandingRepository::class) + } + private val context = context.applicationContext fun resend(story: MessageRecord): Completable { @@ -66,8 +72,13 @@ class StoriesLandingRepository(context: Context) { .sortedBy { it.messageSentTimestamp } .reversed() .take(if (recipient.isMyStory) 2 else 1) - .map { - SignalDatabase.messages.getMessageRecord(it.messageId) + .mapNotNull { + try { + SignalDatabase.messages.getMessageRecord(it.messageId) + } catch (e: NoSuchMessageException) { + Log.w(TAG, "Failed to find message record ${it.messageId} sent at ${it.messageSentTimestamp} for story.", e) + null + } } var sendingCount: Long = 0 @@ -88,7 +99,11 @@ class StoriesLandingRepository(context: Context) { } } - createStoriesLandingItemData(recipient, messages, sendingCount, failureCount) + if (messages.isNotEmpty()) { + createStoriesLandingItemData(recipient, messages, sendingCount, failureCount) + } else { + Observable.empty() + } } if (observables.isEmpty()) {