logout: снятие устройства с f7push (unregisterBlocking) best-effort на IO, рядом с ревокацией app-password (mail/112а)

This commit is contained in:
b-dev-mobile
2026-07-13 10:15:12 +00:00
parent a30627a07d
commit 255c962d8f
@@ -5,11 +5,14 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ru.forbion.f7cloud.core.auth.AppPasswordRevoker import ru.forbion.f7cloud.core.auth.AppPasswordRevoker
import ru.forbion.f7cloud.core.auth.AuthSession import ru.forbion.f7cloud.core.auth.AuthSession
import ru.forbion.f7cloud.core.auth.AuthStore import ru.forbion.f7cloud.core.auth.AuthStore
import ru.forbion.f7cloud.core.push.F7PushRegistrar
import ru.forbion.f7cloud.feature.files.OfficeWarmup import ru.forbion.f7cloud.feature.files.OfficeWarmup
import ru.forbion.f7cloud.mobile.OfficeWebViewPool import ru.forbion.f7cloud.mobile.OfficeWebViewPool
@@ -29,9 +32,16 @@ class MainViewModel(app: Application) : AndroidViewModel(app) {
} }
fun logout() { fun logout() {
// Best-effort ревокация app password на сервере ДО очистки локальной сессии. // Best-effort ревокация app password + снятие устройства с push ДО очистки локальной сессии.
_session.value?.let { current -> _session.value?.let { current ->
viewModelScope.launch { runCatching { AppPasswordRevoker.revoke(current) } } viewModelScope.launch { runCatching { AppPasswordRevoker.revoke(current) } }
viewModelScope.launch {
runCatching {
withContext(Dispatchers.IO) {
F7PushRegistrar.unregisterBlocking(getApplication(), current)
}
}
}
} }
OfficeWarmup.clear() OfficeWarmup.clear()
OfficeWebViewPool.dispose() OfficeWebViewPool.dispose()