mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 10:20:25 +01:00
Change batch identity check timing behavior.
This commit is contained in:
committed by
Greyson Parrelli
parent
dc04c8ed98
commit
c2b5407911
@@ -40,7 +40,8 @@ class MediaSelectionViewModel(
|
||||
initialMessage: CharSequence?,
|
||||
val isReply: Boolean,
|
||||
isStory: Boolean,
|
||||
private val repository: MediaSelectionRepository
|
||||
private val repository: MediaSelectionRepository,
|
||||
private val identityChangesSince: Long = System.currentTimeMillis()
|
||||
) : ViewModel() {
|
||||
|
||||
private val selectedMediaSubject: Subject<List<Media>> = BehaviorSubject.create()
|
||||
@@ -308,7 +309,7 @@ class MediaSelectionViewModel(
|
||||
fun send(
|
||||
selectedContacts: List<ContactSearchKey.RecipientSearchKey> = emptyList()
|
||||
): Maybe<MediaSendActivityResult> {
|
||||
return UntrustedRecords.checkForBadIdentityRecords(selectedContacts.toSet()).andThen(
|
||||
return UntrustedRecords.checkForBadIdentityRecords(selectedContacts.toSet(), identityChangesSince).andThen(
|
||||
repository.send(
|
||||
store.state.selectedMedia,
|
||||
store.state.editorStateMap,
|
||||
|
||||
@@ -14,23 +14,23 @@ import java.util.concurrent.TimeUnit
|
||||
|
||||
object UntrustedRecords {
|
||||
|
||||
fun checkForBadIdentityRecords(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>): Completable {
|
||||
fun checkForBadIdentityRecords(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>, changedSince: Long): Completable {
|
||||
return Completable.fromAction {
|
||||
val untrustedRecords: List<IdentityRecord> = checkForBadIdentityRecordsSync(contactSearchKeys)
|
||||
val untrustedRecords: List<IdentityRecord> = checkForBadIdentityRecordsSync(contactSearchKeys, changedSince)
|
||||
if (untrustedRecords.isNotEmpty()) {
|
||||
throw UntrustedRecordsException(untrustedRecords, contactSearchKeys)
|
||||
}
|
||||
}.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun checkForBadIdentityRecords(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>, consumer: Consumer<List<IdentityRecord>>) {
|
||||
fun checkForBadIdentityRecords(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>, changedSince: Long, consumer: Consumer<List<IdentityRecord>>) {
|
||||
SignalExecutors.BOUNDED.execute {
|
||||
consumer.accept(checkForBadIdentityRecordsSync(contactSearchKeys))
|
||||
consumer.accept(checkForBadIdentityRecordsSync(contactSearchKeys, changedSince))
|
||||
}
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private fun checkForBadIdentityRecordsSync(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>): List<IdentityRecord> {
|
||||
private fun checkForBadIdentityRecordsSync(contactSearchKeys: Set<ContactSearchKey.RecipientSearchKey>, changedSince: Long): List<IdentityRecord> {
|
||||
val recipients: List<Recipient> = contactSearchKeys
|
||||
.map { Recipient.resolved(it.recipientId) }
|
||||
.map { recipient ->
|
||||
@@ -42,7 +42,13 @@ object UntrustedRecords {
|
||||
}
|
||||
.flatten()
|
||||
|
||||
return ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecords(recipients).getUntrustedRecords(TimeUnit.SECONDS.toMillis(30))
|
||||
val calculatedUntrustedWindow = System.currentTimeMillis() - changedSince
|
||||
return ApplicationDependencies
|
||||
.getProtocolStore()
|
||||
.aci()
|
||||
.identities()
|
||||
.getIdentityRecords(recipients)
|
||||
.getUntrustedRecords(calculatedUntrustedWindow.coerceIn(TimeUnit.SECONDS.toMillis(5)..TimeUnit.HOURS.toMillis(1)))
|
||||
}
|
||||
|
||||
class UntrustedRecordsException(val untrustedRecords: List<IdentityRecord>, val destinations: Set<ContactSearchKey.RecipientSearchKey>) : Throwable()
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.mediasend.v2.text.send.TextStoryPostSendReposi
|
||||
import org.thoughtcrime.securesms.mediasend.v2.text.send.TextStoryPostSendResult
|
||||
import org.thoughtcrime.securesms.util.livedata.Store
|
||||
|
||||
class TextStoryPostCreationViewModel(private val repository: TextStoryPostSendRepository) : ViewModel() {
|
||||
class TextStoryPostCreationViewModel(private val repository: TextStoryPostSendRepository, private val identityChangesSince: Long = System.currentTimeMillis()) : ViewModel() {
|
||||
|
||||
private val store = Store(TextStoryPostCreationState())
|
||||
private val textFontSubject: Subject<TextFont> = BehaviorSubject.create()
|
||||
@@ -123,7 +123,8 @@ class TextStoryPostCreationViewModel(private val repository: TextStoryPostSendRe
|
||||
return repository.send(
|
||||
contacts,
|
||||
store.state,
|
||||
linkPreview
|
||||
linkPreview,
|
||||
identityChangesSince
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -38,9 +38,9 @@ class TextStoryPostSendRepository {
|
||||
}.subscribeOn(Schedulers.computation())
|
||||
}
|
||||
|
||||
fun send(contactSearchKey: Set<ContactSearchKey>, textStoryPostCreationState: TextStoryPostCreationState, linkPreview: LinkPreview?): Single<TextStoryPostSendResult> {
|
||||
fun send(contactSearchKey: Set<ContactSearchKey>, textStoryPostCreationState: TextStoryPostCreationState, linkPreview: LinkPreview?, identityChangesSince: Long): Single<TextStoryPostSendResult> {
|
||||
return UntrustedRecords
|
||||
.checkForBadIdentityRecords(contactSearchKey.filterIsInstance(ContactSearchKey.RecipientSearchKey::class.java).toSet())
|
||||
.checkForBadIdentityRecords(contactSearchKey.filterIsInstance(ContactSearchKey.RecipientSearchKey::class.java).toSet(), identityChangesSince)
|
||||
.toSingleDefault<TextStoryPostSendResult>(TextStoryPostSendResult.Success)
|
||||
.onErrorReturn {
|
||||
if (it is UntrustedRecords.UntrustedRecordsException) {
|
||||
|
||||
Reference in New Issue
Block a user