Add missing GV2 state update on conversation open.

This commit is contained in:
Cody Henthorne 2023-10-02 14:49:52 -04:00
parent 913605a065
commit e9fbce4e28
2 changed files with 24 additions and 0 deletions

View file

@ -631,6 +631,8 @@ class ConversationFragment :
).addTo(disposables)
}
conversationGroupViewModel.updateGroupStateIfNeeded()
ConversationUtil.refreshRecipientShortcuts()
if (SignalStore.rateLimit().needsRecaptcha()) {

View file

@ -17,10 +17,14 @@ import org.signal.core.util.concurrent.subscribeWithSubject
import org.thoughtcrime.securesms.conversation.v2.ConversationRecipientRepository
import org.thoughtcrime.securesms.database.GroupTable
import org.thoughtcrime.securesms.database.model.GroupRecord
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason
import org.thoughtcrime.securesms.groups.v2.GroupBlockJoinRequestResult
import org.thoughtcrime.securesms.groups.v2.GroupManagementRepository
import org.thoughtcrime.securesms.jobs.ForceUpdateGroupV2Job
import org.thoughtcrime.securesms.jobs.GroupV2UpdateSelfProfileKeyJob
import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob
import org.thoughtcrime.securesms.profiles.spoofing.ReviewUtil
import org.thoughtcrime.securesms.recipients.Recipient
@ -132,6 +136,24 @@ class ConversationGroupViewModel(
.observeOn(AndroidSchedulers.mainThread())
}
fun updateGroupStateIfNeeded() {
recipientRepository
.conversationRecipient
.firstOrError()
.onErrorComplete()
.filter { it.isPushV2Group && !it.isBlocked }
.subscribe {
val groupId = it.requireGroupId().requireV2()
ApplicationDependencies.getJobManager()
.startChain(RequestGroupV2InfoJob(groupId))
.then(GroupV2UpdateSelfProfileKeyJob.withoutLimits(groupId))
.enqueue()
ForceUpdateGroupV2Job.enqueueIfNecessary(groupId)
}
.addTo(disposables)
}
class Factory(private val threadId: Long, private val recipientRepository: ConversationRecipientRepository) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return modelClass.cast(ConversationGroupViewModel(threadId, recipientRepository = recipientRepository)) as T