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 kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ru.forbion.f7cloud.core.auth.AppPasswordRevoker
import ru.forbion.f7cloud.core.auth.AuthSession
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.mobile.OfficeWebViewPool
@@ -29,9 +32,16 @@ class MainViewModel(app: Application) : AndroidViewModel(app) {
}
fun logout() {
// Best-effort ревокация app password на сервере ДО очистки локальной сессии.
// Best-effort ревокация app password + снятие устройства с push ДО очистки локальной сессии.
_session.value?.let { current ->
viewModelScope.launch { runCatching { AppPasswordRevoker.revoke(current) } }
viewModelScope.launch {
runCatching {
withContext(Dispatchers.IO) {
F7PushRegistrar.unregisterBlocking(getApplication(), current)
}
}
}
}
OfficeWarmup.clear()
OfficeWebViewPool.dispose()