Change to conversation change

This commit is contained in:
Mario Danic 2019-12-21 21:54:37 +01:00
parent ed4c82de48
commit 5b3a0b693e
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
6 changed files with 30 additions and 30 deletions

View File

@ -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.repository.online.NextcloudTalkRepository
import com.nextcloud.talk.newarch.domain.usecases.* import com.nextcloud.talk.newarch.domain.usecases.*
import com.nextcloud.talk.newarch.features.chat.ChatViewModelFactory 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 import org.koin.dsl.module
val ConversationsModule = module { val ConversationsModule = module {
@ -58,6 +58,6 @@ fun createExitConversationUseCase(nextcloudTalkRepository: NextcloudTalkReposito
return ExitConversationUseCase(nextcloudTalkRepository, apiErrorHandler) return ExitConversationUseCase(nextcloudTalkRepository, apiErrorHandler)
} }
fun createChatViewModelFactory(application: Application, joinConversationUseCase: JoinConversationUseCase, exitConversationUseCase: ExitConversationUseCase, conversationsRepository: ConversationsRepository, messagesRepository: MessagesRepository, conversationsManager: ConversationsManager): ChatViewModelFactory { fun createChatViewModelFactory(application: Application, joinConversationUseCase: JoinConversationUseCase, exitConversationUseCase: ExitConversationUseCase, conversationsRepository: ConversationsRepository, messagesRepository: MessagesRepository, conversationService: ConversationService): ChatViewModelFactory {
return ChatViewModelFactory(application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationsManager) return ChatViewModelFactory(application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationService)
} }

View File

@ -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.repository.offline.UsersRepository
import com.nextcloud.talk.newarch.domain.usecases.GetConversationUseCase import com.nextcloud.talk.newarch.domain.usecases.GetConversationUseCase
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase 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 okhttp3.OkHttpClient
import org.koin.dsl.module import org.koin.dsl.module
import java.net.CookieManager import java.net.CookieManager
@ -33,6 +33,6 @@ val ManagementModule = module {
single { createConversationsManager(get(), get(), get(), get(), get(), get()) } single { createConversationsManager(get(), get(), get(), get(), get(), get()) }
} }
fun createConversationsManager(usersRepository: UsersRepository, cookieManager: CookieManager, okHttpClient: OkHttpClient, conversationsRepository: ConversationsRepository, getConversationUseCase: GetConversationUseCase, joinConversationUseCase: JoinConversationUseCase): ConversationsManager { fun createConversationsManager(usersRepository: UsersRepository, cookieManager: CookieManager, okHttpClient: OkHttpClient, conversationsRepository: ConversationsRepository, getConversationUseCase: GetConversationUseCase, joinConversationUseCase: JoinConversationUseCase): ConversationService {
return ConversationsManager(usersRepository, cookieManager, okHttpClient, conversationsRepository, joinConversationUseCase, getConversationUseCase) return ConversationService(usersRepository, cookieManager, okHttpClient, conversationsRepository, joinConversationUseCase, getConversationUseCase)
} }

View File

@ -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.ExitConversationUseCase
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase
import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.newarch.utils.ConversationsManager import com.nextcloud.talk.newarch.utils.ConversationService
import com.nextcloud.talk.newarch.utils.ConversationsManagerInterface import com.nextcloud.talk.newarch.utils.ConversationServiceInterface
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class ChatViewModel constructor(application: Application, class ChatViewModel constructor(application: Application,
@ -20,7 +20,7 @@ class ChatViewModel constructor(application: Application,
private val exitConversationUseCase: ExitConversationUseCase, private val exitConversationUseCase: ExitConversationUseCase,
private val conversationsRepository: ConversationsRepository, private val conversationsRepository: ConversationsRepository,
private val messagesRepository: MessagesRepository, private val messagesRepository: MessagesRepository,
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application), ConversationsManagerInterface { private val conversationService: ConversationService) : BaseViewModel<ChatView>(application), ConversationServiceInterface {
lateinit var user: UserNgEntity lateinit var user: UserNgEntity
val conversation: MutableLiveData<Conversation?> = MutableLiveData() val conversation: MutableLiveData<Conversation?> = MutableLiveData()
var initConversation: Conversation? = null var initConversation: Conversation? = null
@ -37,7 +37,7 @@ class ChatViewModel constructor(application: Application,
this@ChatViewModel.user = user this@ChatViewModel.user = user
this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken) this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken)
this@ChatViewModel.conversationPassword = conversationPassword 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) { override suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationServiceInterface.OperationStatus) {
if (operationStatus == ConversationsManagerInterface.OperationStatus.STATUS_OK) { if (operationStatus == ConversationServiceInterface.OperationStatus.STATUS_OK) {
if (userNgEntity.id == user.id && conversation!!.token == initConversation?.token) { if (userNgEntity.id == user.id && conversation!!.token == initConversation?.token) {
this.conversation.value = conversationsRepository.getConversationForUserWithToken(user.id!!, conversation.token!!) this.conversation.value = conversationsRepository.getConversationForUserWithToken(user.id!!, conversation.token!!)
conversation.token?.let { conversationToken -> 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. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
} }

View File

@ -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.repository.offline.MessagesRepository
import com.nextcloud.talk.newarch.domain.usecases.ExitConversationUseCase import com.nextcloud.talk.newarch.domain.usecases.ExitConversationUseCase
import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase 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( class ChatViewModelFactory constructor(
private val application: Application, private val application: Application,
@ -15,12 +15,12 @@ class ChatViewModelFactory constructor(
private val exitConversationUseCase: ExitConversationUseCase, private val exitConversationUseCase: ExitConversationUseCase,
private val conversationsRepository: ConversationsRepository, private val conversationsRepository: ConversationsRepository,
private val messagesRepository: MessagesRepository, private val messagesRepository: MessagesRepository,
private val conversationsManager: ConversationsManager private val conversationService: ConversationService
) : ViewModelProvider.Factory { ) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T { override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return ChatViewModel( return ChatViewModel(
application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationsManager application, joinConversationUseCase, exitConversationUseCase, conversationsRepository, messagesRepository, conversationService
) as T ) as T
} }
} }

View File

@ -37,7 +37,7 @@ import org.koin.core.KoinComponent
import org.koin.core.parameter.parametersOf import org.koin.core.parameter.parametersOf
import java.net.CookieManager import java.net.CookieManager
class ConversationsManager constructor(usersRepository: UsersRepository, class ConversationService constructor(usersRepository: UsersRepository,
cookieManager: CookieManager, cookieManager: CookieManager,
okHttpClient: OkHttpClient, okHttpClient: OkHttpClient,
private val conversationsRepository: ConversationsRepository, private val conversationsRepository: ConversationsRepository,
@ -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 val currentUser = currentUserLiveData.value
getConversationUseCase.invoke(applicationScope, parametersOf( getConversationUseCase.invoke(applicationScope, parametersOf(
currentUser, currentUser,
@ -68,19 +68,19 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
override suspend fun onSuccess(result: RoomOverall) { override suspend fun onSuccess(result: RoomOverall) {
currentUser?.let { currentUser?.let {
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data)) 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?) { override suspend fun onError(errorModel: ErrorModel?) {
currentUser?.let { 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 val currentUser = currentUserLiveData.value
joinConversationUseCase.invoke(applicationScope, parametersOf( joinConversationUseCase.invoke(applicationScope, parametersOf(
currentUser, currentUser,
@ -92,13 +92,13 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
currentUser?.let { currentUser?.let {
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data)) conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
currentConversation = conversationsRepository.getConversationForUserWithToken(it.id!!, result.ocs!!.data!!.token!!) 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?) { override suspend fun onError(errorModel: ErrorModel?) {
currentUser?.let { currentUser?.let {
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_FAILED) conversationServiceInterface.joinedConversationForUser(it, currentConversation, ConversationServiceInterface.OperationStatus.STATUS_FAILED)
} }
} }
}) })

View File

@ -23,7 +23,7 @@ package com.nextcloud.talk.newarch.utils
import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.UserNgEntity
interface ConversationsManagerInterface { interface ConversationServiceInterface {
enum class OperationStatus { enum class OperationStatus {
STATUS_OK, STATUS_OK,
STATUS_FAILED STATUS_FAILED