This commit is contained in:
andrew 2023-08-22 14:12:11 +09:30
parent 621c74c1d6
commit 58b5815a09
1 changed files with 17 additions and 20 deletions

View File

@ -19,9 +19,11 @@ import org.session.libsession.messaging.messages.ExpirationConfiguration
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate
import org.session.libsession.messaging.sending_receiving.MessageSender import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.snode.SnodeAPI import org.session.libsession.snode.SnodeAPI
import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.utilities.guava.Optional
import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.GroupDatabase
import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.database.Storage
import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.database.ThreadDatabase
@ -66,9 +68,8 @@ class ExpirationSettingsViewModel(
val expirationType = expirationConfig?.expiryMode val expirationType = expirationConfig?.expiryMode
val recipient = threadDb.getRecipientForThreadId(threadId) val recipient = threadDb.getRecipientForThreadId(threadId)
_recipient.value = recipient _recipient.value = recipient
val groupInfo = if (recipient?.isClosedGroupRecipient == true) { val groupInfo = recipient?.takeIf { it.isClosedGroupRecipient }
groupDb.getGroup(recipient.address.toGroupString()).orNull() ?.run { address.toGroupString().let(groupDb::getGroup).orNull() }
} else null
_uiState.update { currentUiState -> _uiState.update { currentUiState ->
currentUiState.copy( currentUiState.copy(
isSelfAdmin = groupInfo == null || groupInfo.admins.any{ it.serialize() == textSecurePreferences.getLocalNumber() }, isSelfAdmin = groupInfo == null || groupInfo.admins.any{ it.serialize() == textSecurePreferences.getLocalNumber() },
@ -96,15 +97,9 @@ class ExpirationSettingsViewModel(
} }
}.onEach { options -> }.onEach { options ->
val enabled = _uiState.value.isSelfAdmin || recipient.value?.isClosedGroupRecipient == true val enabled = _uiState.value.isSelfAdmin || recipient.value?.isClosedGroupRecipient == true
_expirationTimerOptions.value = if (ExpirationConfiguration.isNewConfigEnabled && (recipient.value?.isLocalNumber == true || recipient.value?.isClosedGroupRecipient == true)) { _expirationTimerOptions.value = options.let {
options.map { if (ExpirationConfiguration.isNewConfigEnabled && recipient.value?.run { isLocalNumber || isClosedGroupRecipient } == true) it.drop(1) else it
it.copy(enabled = enabled) }.map { it.copy(enabled = enabled) }
}
} else {
options.slice(1 until options.size).map {
it.copy(enabled = enabled)
}
}
}.launchIn(viewModelScope) }.launchIn(viewModelScope)
} }
@ -155,15 +150,17 @@ class ExpirationSettingsViewModel(
fun getDeleteOptions(): List<ExpirationRadioOption> { fun getDeleteOptions(): List<ExpirationRadioOption> {
if (!uiState.value.showExpirationTypeSelector) return emptyList() if (!uiState.value.showExpirationTypeSelector) return emptyList()
val recipient = recipient.value val recipient = recipient.value ?: return emptyList()
return if (ExpirationConfiguration.isNewConfigEnabled) { return if (ExpirationConfiguration.isNewConfigEnabled) when {
if (recipient?.isContactRecipient == true && !recipient.isLocalNumber) contactRecipientOptions() recipient.isLocalNumber -> noteToSelfOptions()
else if (recipient?.isLocalNumber == true) noteToSelfOptions() recipient.isContactRecipient -> contactRecipientOptions()
else if (recipient?.isClosedGroupRecipient == true) closedGroupRecipientOptions() recipient.isClosedGroupRecipient -> closedGroupRecipientOptions()
else emptyList() else -> emptyList()
} else if (recipient?.isContactRecipient == true && !recipient.isLocalNumber) oldConfigContactRecipientOptions() } else when {
else oldConfigDefaultOptions() recipient.isContactRecipient && !recipient.isLocalNumber -> oldConfigContactRecipientOptions()
else -> oldConfigDefaultOptions()
}
} }
private fun oldConfigDefaultOptions() = listOf( private fun oldConfigDefaultOptions() = listOf(