forked from melod1n/fast-messenger
temp
This commit is contained in:
@@ -28,7 +28,7 @@ import dev.meloda.fast.datastore.UserSettings
|
||||
import dev.meloda.fast.domain.LoadUserByIdUseCase
|
||||
import dev.meloda.fast.domain.OAuthUseCase
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import dev.meloda.fast.model.database.AccountEntity
|
||||
import dev.meloda.fast.model.AccountDto
|
||||
import dev.meloda.fast.network.OAuthErrorDomain
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -236,7 +236,7 @@ class LoginViewModel(
|
||||
|
||||
// TODO: 30-Mar-25, Danil Nikolaev: get fast's app token
|
||||
|
||||
val currentAccount = AccountEntity(
|
||||
val currentAccount = AccountDto(
|
||||
userId = userId,
|
||||
accessToken = accessToken,
|
||||
fastToken = null,
|
||||
@@ -251,7 +251,7 @@ class LoginViewModel(
|
||||
UserConfig.exchangeToken = account.exchangeToken
|
||||
}
|
||||
|
||||
accountsRepository.storeAccounts(listOf(currentAccount))
|
||||
accountsRepository.storeAccounts(listOf(currentAccount.mapToEntity()))
|
||||
|
||||
startLongPoll()
|
||||
|
||||
|
||||
@@ -9,12 +9,14 @@ import androidx.lifecycle.viewModelScope
|
||||
import coil.ImageLoader
|
||||
import coil.request.ImageRequest
|
||||
import com.conena.nanokt.collections.indexOfFirstOrNull
|
||||
import dev.meloda.fast.common.NetworkStateListener
|
||||
import dev.meloda.fast.common.VkConstants
|
||||
import dev.meloda.fast.common.extensions.createTimerFlow
|
||||
import dev.meloda.fast.common.extensions.findWithIndex
|
||||
import dev.meloda.fast.common.extensions.listenValue
|
||||
import dev.meloda.fast.common.extensions.setValue
|
||||
import dev.meloda.fast.common.extensions.updateValue
|
||||
import dev.meloda.fast.common.model.NetworkState
|
||||
import dev.meloda.fast.convos.model.ConvoDialog
|
||||
import dev.meloda.fast.convos.model.ConvoIntent
|
||||
import dev.meloda.fast.convos.model.ConvoNavigationIntent
|
||||
@@ -31,6 +33,7 @@ import dev.meloda.fast.domain.LongPollEventsHandler
|
||||
import dev.meloda.fast.domain.MessagesUseCase
|
||||
import dev.meloda.fast.domain.util.asPresentation
|
||||
import dev.meloda.fast.domain.util.extractAvatar
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import dev.meloda.fast.model.ConvosFilter
|
||||
import dev.meloda.fast.model.InteractionType
|
||||
import dev.meloda.fast.model.LongPollParsedEvent
|
||||
@@ -54,7 +57,9 @@ class ConvosViewModel(
|
||||
private val userSettings: UserSettings,
|
||||
private val imageLoader: ImageLoader,
|
||||
private val applicationContext: Context,
|
||||
private val loadConvosByIdUseCase: LoadConvosByIdUseCase
|
||||
private val loadConvosByIdUseCase: LoadConvosByIdUseCase,
|
||||
private val networkStateListener: NetworkStateListener,
|
||||
private val logger: FastLogger
|
||||
) : ViewModel() {
|
||||
|
||||
private val screenState = MutableStateFlow(ConvosScreenState.EMPTY)
|
||||
@@ -87,6 +92,16 @@ class ConvosViewModel(
|
||||
userSettings.useContactNames.listenValue(viewModelScope) {
|
||||
syncUiConvos()
|
||||
}
|
||||
|
||||
networkStateListener.networkStateFlow.listenValue { state ->
|
||||
logger.debug(this@ConvosViewModel::class, "network state changed: $state")
|
||||
|
||||
if (state == NetworkState.CONNECTED) {
|
||||
if (screenState.value.error != null) {
|
||||
onRefresh()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun handleIntent(intent: ConvoIntent) {
|
||||
@@ -193,12 +208,12 @@ class ConvosViewModel(
|
||||
loadConvos()
|
||||
}
|
||||
|
||||
private fun onErrorConsumed() {
|
||||
private fun clearError() {
|
||||
screenState.updateValue { copy(error = null) }
|
||||
}
|
||||
|
||||
private fun onRefresh() {
|
||||
onErrorConsumed()
|
||||
clearError()
|
||||
loadConvos(offset = 0)
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ private fun Scope.createConvosViewModel(filter: ConvosFilter): ConvosViewModel {
|
||||
userSettings = get(),
|
||||
imageLoader = get(),
|
||||
applicationContext = get(),
|
||||
loadConvosByIdUseCase = get()
|
||||
loadConvosByIdUseCase = get(),
|
||||
networkStateListener = get(),
|
||||
logger = get()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -56,11 +56,13 @@ import dev.chrisbanes.haze.hazeEffect
|
||||
import dev.chrisbanes.haze.hazeSource
|
||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||
import dev.meloda.fast.common.model.NetworkState
|
||||
import dev.meloda.fast.convos.model.ConvoIntent
|
||||
import dev.meloda.fast.convos.model.ConvosScreenState
|
||||
import dev.meloda.fast.convos.navigation.ConvoGraph
|
||||
import dev.meloda.fast.datastore.AppSettings
|
||||
import dev.meloda.fast.ui.R
|
||||
import dev.meloda.fast.ui.common.LocalNetworkState
|
||||
import dev.meloda.fast.ui.components.FullScreenContainedLoader
|
||||
import dev.meloda.fast.ui.components.NoItemsView
|
||||
import dev.meloda.fast.ui.components.SegmentedButtonItem
|
||||
@@ -156,6 +158,8 @@ fun ConvosScreen(
|
||||
animationSpec = tween(durationMillis = 50)
|
||||
)
|
||||
|
||||
val networkState = LocalNetworkState.current
|
||||
|
||||
Scaffold(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentWindowInsets = WindowInsets.statusBars,
|
||||
@@ -166,6 +170,7 @@ fun ConvosScreen(
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = when {
|
||||
networkState == NetworkState.DISCONNECTED -> R.string.title_no_network
|
||||
screenState.isLoading -> R.string.title_loading
|
||||
isArchive -> R.string.title_archive
|
||||
else -> R.string.title_convos
|
||||
|
||||
@@ -26,6 +26,7 @@ import dev.meloda.fast.datastore.UserSettings
|
||||
import dev.meloda.fast.domain.GetCurrentAccountUseCase
|
||||
import dev.meloda.fast.domain.LoadUserByIdUseCase
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import dev.meloda.fast.model.AccountDto
|
||||
import dev.meloda.fast.model.database.AccountEntity
|
||||
import dev.meloda.fast.settings.model.HapticType
|
||||
import dev.meloda.fast.settings.model.SettingsDialog
|
||||
@@ -149,13 +150,14 @@ class SettingsViewModel(
|
||||
UserConfig.currentUserId = user.id
|
||||
|
||||
val account = getCurrentAccountUseCase()
|
||||
?.mapToDto()
|
||||
?.copy(
|
||||
userId = user.id,
|
||||
accessToken = accessToken,
|
||||
fastToken = null,
|
||||
exchangeToken = exchangeToken,
|
||||
trustedHash = trustedHash
|
||||
) ?: AccountEntity(
|
||||
) ?: AccountDto(
|
||||
userId = user.id,
|
||||
accessToken = accessToken,
|
||||
fastToken = null,
|
||||
@@ -163,7 +165,7 @@ class SettingsViewModel(
|
||||
exchangeToken = exchangeToken
|
||||
)
|
||||
|
||||
accountsRepository.storeAccounts(listOf(account))
|
||||
accountsRepository.storeAccounts(listOf(account.mapToEntity()))
|
||||
|
||||
screenEffect.tryEmit(
|
||||
SettingsEffect.Navigate(SettingsNavigationIntent.Restart)
|
||||
|
||||
Reference in New Issue
Block a user