mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-27 23:49:40 +01:00
Change to conversation change
This commit is contained in:
parent
ed4c82de48
commit
5b3a0b693e
@ -7,7 +7,7 @@ import com.nextcloud.talk.newarch.domain.repository.offline.MessagesRepository
|
||||
import com.nextcloud.talk.newarch.domain.repository.online.NextcloudTalkRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.*
|
||||
import com.nextcloud.talk.newarch.features.chat.ChatViewModelFactory
|
||||
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
||||
import com.nextcloud.talk.newarch.utils.ConversationService
|
||||
import org.koin.dsl.module
|
||||
|
||||
val ConversationsModule = module {
|
||||
@ -58,6 +58,6 @@ fun createExitConversationUseCase(nextcloudTalkRepository: NextcloudTalkReposito
|
||||
return ExitConversationUseCase(nextcloudTalkRepository, apiErrorHandler)
|
||||
}
|
||||
|
||||
fun createChatViewModelFactory(application: Application, joinConversationUseCase: JoinConversationUseCase, exitConversationUseCase: ExitConversationUseCase, conversationsRepository: ConversationsRepository, messagesRepository: MessagesRepository, conversationsManager: ConversationsManager): ChatViewModelFactory {
|
||||
return ChatViewModelFactory(application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationsManager)
|
||||
fun createChatViewModelFactory(application: Application, joinConversationUseCase: JoinConversationUseCase, exitConversationUseCase: ExitConversationUseCase, conversationsRepository: ConversationsRepository, messagesRepository: MessagesRepository, conversationService: ConversationService): ChatViewModelFactory {
|
||||
return ChatViewModelFactory(application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationService)
|
||||
}
|
@ -24,7 +24,7 @@ import com.nextcloud.talk.newarch.domain.repository.offline.ConversationsReposit
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.GetConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase
|
||||
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
||||
import com.nextcloud.talk.newarch.utils.ConversationService
|
||||
import okhttp3.OkHttpClient
|
||||
import org.koin.dsl.module
|
||||
import java.net.CookieManager
|
||||
@ -33,6 +33,6 @@ val ManagementModule = module {
|
||||
single { createConversationsManager(get(), get(), get(), get(), get(), get()) }
|
||||
}
|
||||
|
||||
fun createConversationsManager(usersRepository: UsersRepository, cookieManager: CookieManager, okHttpClient: OkHttpClient, conversationsRepository: ConversationsRepository, getConversationUseCase: GetConversationUseCase, joinConversationUseCase: JoinConversationUseCase): ConversationsManager {
|
||||
return ConversationsManager(usersRepository, cookieManager, okHttpClient, conversationsRepository, joinConversationUseCase, getConversationUseCase)
|
||||
fun createConversationsManager(usersRepository: UsersRepository, cookieManager: CookieManager, okHttpClient: OkHttpClient, conversationsRepository: ConversationsRepository, getConversationUseCase: GetConversationUseCase, joinConversationUseCase: JoinConversationUseCase): ConversationService {
|
||||
return ConversationService(usersRepository, cookieManager, okHttpClient, conversationsRepository, joinConversationUseCase, getConversationUseCase)
|
||||
}
|
@ -11,8 +11,8 @@ import com.nextcloud.talk.newarch.domain.repository.offline.MessagesRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.ExitConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
||||
import com.nextcloud.talk.newarch.utils.ConversationsManagerInterface
|
||||
import com.nextcloud.talk.newarch.utils.ConversationService
|
||||
import com.nextcloud.talk.newarch.utils.ConversationServiceInterface
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class ChatViewModel constructor(application: Application,
|
||||
@ -20,7 +20,7 @@ class ChatViewModel constructor(application: Application,
|
||||
private val exitConversationUseCase: ExitConversationUseCase,
|
||||
private val conversationsRepository: ConversationsRepository,
|
||||
private val messagesRepository: MessagesRepository,
|
||||
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application), ConversationsManagerInterface {
|
||||
private val conversationService: ConversationService) : BaseViewModel<ChatView>(application), ConversationServiceInterface {
|
||||
lateinit var user: UserNgEntity
|
||||
val conversation: MutableLiveData<Conversation?> = MutableLiveData()
|
||||
var initConversation: Conversation? = null
|
||||
@ -37,7 +37,7 @@ class ChatViewModel constructor(application: Application,
|
||||
this@ChatViewModel.user = user
|
||||
this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken)
|
||||
this@ChatViewModel.conversationPassword = conversationPassword
|
||||
conversationsManager.getConversation(conversationToken, this@ChatViewModel)
|
||||
conversationService.getConversation(conversationToken, this@ChatViewModel)
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,18 +45,18 @@ class ChatViewModel constructor(application: Application,
|
||||
|
||||
}
|
||||
|
||||
override suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationsManagerInterface.OperationStatus) {
|
||||
if (operationStatus == ConversationsManagerInterface.OperationStatus.STATUS_OK) {
|
||||
override suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationServiceInterface.OperationStatus) {
|
||||
if (operationStatus == ConversationServiceInterface.OperationStatus.STATUS_OK) {
|
||||
if (userNgEntity.id == user.id && conversation!!.token == initConversation?.token) {
|
||||
this.conversation.value = conversationsRepository.getConversationForUserWithToken(user.id!!, conversation.token!!)
|
||||
conversation.token?.let { conversationToken ->
|
||||
conversationsManager.joinConversation(conversationToken, conversationPassword, this)
|
||||
conversationService.joinConversation(conversationToken, conversationPassword, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationsManagerInterface.OperationStatus) {
|
||||
override suspend fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationServiceInterface.OperationStatus) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import com.nextcloud.talk.newarch.domain.repository.offline.ConversationsReposit
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.MessagesRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.ExitConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase
|
||||
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
||||
import com.nextcloud.talk.newarch.utils.ConversationService
|
||||
|
||||
class ChatViewModelFactory constructor(
|
||||
private val application: Application,
|
||||
@ -15,12 +15,12 @@ class ChatViewModelFactory constructor(
|
||||
private val exitConversationUseCase: ExitConversationUseCase,
|
||||
private val conversationsRepository: ConversationsRepository,
|
||||
private val messagesRepository: MessagesRepository,
|
||||
private val conversationsManager: ConversationsManager
|
||||
private val conversationService: ConversationService
|
||||
) : ViewModelProvider.Factory {
|
||||
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||
return ChatViewModel(
|
||||
application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationsManager
|
||||
application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationService
|
||||
) as T
|
||||
}
|
||||
}
|
||||
|
@ -37,12 +37,12 @@ import org.koin.core.KoinComponent
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import java.net.CookieManager
|
||||
|
||||
class ConversationsManager constructor(usersRepository: UsersRepository,
|
||||
cookieManager: CookieManager,
|
||||
okHttpClient: OkHttpClient,
|
||||
private val conversationsRepository: ConversationsRepository,
|
||||
private val joinConversationUseCase: JoinConversationUseCase,
|
||||
private val getConversationUseCase: GetConversationUseCase) : KoinComponent {
|
||||
class ConversationService constructor(usersRepository: UsersRepository,
|
||||
cookieManager: CookieManager,
|
||||
okHttpClient: OkHttpClient,
|
||||
private val conversationsRepository: ConversationsRepository,
|
||||
private val joinConversationUseCase: JoinConversationUseCase,
|
||||
private val getConversationUseCase: GetConversationUseCase) : KoinComponent {
|
||||
private val applicationScope = CoroutineScope(Dispatchers.Default)
|
||||
private val previousUser: UserNgEntity? = null
|
||||
private val currentUserLiveData: LiveData<UserNgEntity> = usersRepository.getActiveUserLiveData()
|
||||
@ -58,7 +58,7 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getConversation(conversationToken: String, conversationsManagerInterface: ConversationsManagerInterface) {
|
||||
suspend fun getConversation(conversationToken: String, conversationServiceInterface: ConversationServiceInterface) {
|
||||
val currentUser = currentUserLiveData.value
|
||||
getConversationUseCase.invoke(applicationScope, parametersOf(
|
||||
currentUser,
|
||||
@ -68,19 +68,19 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
|
||||
override suspend fun onSuccess(result: RoomOverall) {
|
||||
currentUser?.let {
|
||||
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
||||
conversationsManagerInterface.gotConversationInfoForUser(it, result.ocs.data, ConversationsManagerInterface.OperationStatus.STATUS_OK)
|
||||
conversationServiceInterface.gotConversationInfoForUser(it, result.ocs.data, ConversationServiceInterface.OperationStatus.STATUS_OK)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onError(errorModel: ErrorModel?) {
|
||||
currentUser?.let {
|
||||
conversationsManagerInterface.gotConversationInfoForUser(it, null, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
|
||||
conversationServiceInterface.gotConversationInfoForUser(it, null, ConversationServiceInterface.OperationStatus.STATUS_FAILED)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
suspend fun joinConversation(conversationToken: String, conversationPassword: String?, conversationsManagerInterface: ConversationsManagerInterface) {
|
||||
suspend fun joinConversation(conversationToken: String, conversationPassword: String?, conversationServiceInterface: ConversationServiceInterface) {
|
||||
val currentUser = currentUserLiveData.value
|
||||
joinConversationUseCase.invoke(applicationScope, parametersOf(
|
||||
currentUser,
|
||||
@ -92,13 +92,13 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
|
||||
currentUser?.let {
|
||||
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
||||
currentConversation = conversationsRepository.getConversationForUserWithToken(it.id!!, result.ocs!!.data!!.token!!)
|
||||
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_OK)
|
||||
conversationServiceInterface.joinedConversationForUser(it, currentConversation, ConversationServiceInterface.OperationStatus.STATUS_OK)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onError(errorModel: ErrorModel?) {
|
||||
currentUser?.let {
|
||||
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
|
||||
conversationServiceInterface.joinedConversationForUser(it, currentConversation, ConversationServiceInterface.OperationStatus.STATUS_FAILED)
|
||||
}
|
||||
}
|
||||
})
|
@ -23,7 +23,7 @@ package com.nextcloud.talk.newarch.utils
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
|
||||
interface ConversationsManagerInterface {
|
||||
interface ConversationServiceInterface {
|
||||
enum class OperationStatus {
|
||||
STATUS_OK,
|
||||
STATUS_FAILED
|
Loading…
Reference in New Issue
Block a user