diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index e77824158..3a27d79d5 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -149,7 +149,7 @@ class MainActivity : BaseActivity(), ActionBarProvider { extras.putParcelable(BundleKeys.KEY_USER_ENTITY, it) withContext(Dispatchers.Main) { ConductorRemapping.remapChatController( - router!!, it.id, + router!!, it.id!!, intent.getStringExtra(BundleKeys.KEY_CONVERSATION_TOKEN)!!, extras, false) } } diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt index 2f4cfb6b1..c60ca7055 100644 --- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt +++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt @@ -52,8 +52,10 @@ import com.nextcloud.talk.newarch.features.account.di.module.AccountModule import com.nextcloud.talk.newarch.features.contactsflow.di.module.ContactsFlowModule import com.nextcloud.talk.newarch.features.conversationslist.di.module.ConversationsListModule import com.nextcloud.talk.newarch.local.dao.UsersDao +import com.nextcloud.talk.newarch.local.models.User import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.other.UserStatus.* +import com.nextcloud.talk.newarch.local.models.toUserEntity import com.nextcloud.talk.newarch.services.shortcuts.ShortcutService import com.nextcloud.talk.utils.ClosedInterfaceImpl import com.nextcloud.talk.utils.DisplayUtils @@ -192,44 +194,49 @@ class NextcloudTalkApplication : Application(), LifecycleObserver, Configuration if (!appPreferences.migrationToRoomFinished) { GlobalScope.launch { val users: List = userUtils.users as List - var userNg: UserNgEntity - val newUsers = mutableListOf() + var newUser: User + val newUsers = mutableListOf() for (user in users) { - userNg = UserNgEntity(user.id, user.userId, user.username, user.baseUrl) - userNg.token = user.token - userNg.displayName = user.displayName + newUser = User(userId = user.userId, username = user.username, baseUrl = user.baseUrl) + newUser.token = user.token + newUser.displayName = user.displayName try { - userNg.pushConfiguration = + newUser.pushConfiguration = LoganSquare.parse(user.pushConfigurationState, PushConfiguration::class.java) } catch (e: Exception) { // no push } if (user.capabilities != null) { - userNg.capabilities = LoganSquare.parse(user.capabilities, Capabilities::class.java) + newUser.capabilities = LoganSquare.parse(user.capabilities, Capabilities::class.java) } - userNg.clientCertificate = user.clientCertificate + newUser.clientCertificate = user.clientCertificate try { val external = LoganSquare.parse(user.externalSignalingServer, ExternalSignalingServer::class.java) val signalingSettings = SignalingSettings() signalingSettings.externalSignalingServer = external.externalSignalingServer signalingSettings.externalSignalingTicket = external.externalSignalingTicket - userNg.signalingSettings = signalingSettings + newUser.signalingSettings = signalingSettings } catch (e: Exception) { // no external signaling } if (user.current) { - userNg.status = ACTIVE + newUser.status = ACTIVE } else { if (user.scheduledForDeletion) { - userNg.status = PENDING_DELETE + newUser.status = PENDING_DELETE } else { - userNg.status = DORMANT + newUser.status = DORMANT } } - newUsers.add(userNg) + newUsers.add(newUser) } - usersDao.saveUsers(*newUsers.toTypedArray()) + + val userEntities = newUsers.map { + it.toUserEntity() + } + + usersDao.saveUsers(*userEntities.toTypedArray()) dataStore.delete() appPreferences.migrationToRoomFinished = true } diff --git a/app/src/main/java/com/nextcloud/talk/jobs/MessageNotificationWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/MessageNotificationWorker.kt index 6aa6dc087..07434f025 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/MessageNotificationWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/MessageNotificationWorker.kt @@ -248,7 +248,7 @@ class MessageNotificationWorker( var notificationId = decryptedPushMessage.timestamp.toInt() val notificationInfoBundle = Bundle() - notificationInfoBundle.putLong(BundleKeys.KEY_INTERNAL_USER_ID, signatureVerification.userEntity!!.id) + notificationInfoBundle.putLong(BundleKeys.KEY_INTERNAL_USER_ID, signatureVerification.userEntity!!.id!!) notificationInfoBundle.putString(BundleKeys.KEY_CONVERSATION_TOKEN, decryptedPushMessage.id) notificationInfoBundle.putLong(BundleKeys.KEY_NOTIFICATION_ID, decryptedPushMessage.notificationId!!) notificationBuilder.extras = notificationInfoBundle diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/account/loginentry/LoginEntryViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/account/loginentry/LoginEntryViewModel.kt index e840f782d..c9336d290 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/account/loginentry/LoginEntryViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/account/loginentry/LoginEntryViewModel.kt @@ -23,6 +23,7 @@ package com.nextcloud.talk.newarch.features.account.loginentry import android.app.Application +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.nextcloud.talk.models.LoginData @@ -38,7 +39,10 @@ import com.nextcloud.talk.newarch.data.model.ErrorModel import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository import com.nextcloud.talk.newarch.domain.usecases.* import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse -import com.nextcloud.talk.newarch.local.models.UserNgEntity +import com.nextcloud.talk.newarch.local.models.User +import com.nextcloud.talk.newarch.local.models.other.UserStatus +import com.nextcloud.talk.newarch.local.models.toUser +import com.nextcloud.talk.newarch.local.models.toUserEntity import com.nextcloud.talk.utils.PushUtils import com.nextcloud.talk.utils.preferences.AppPreferences import kotlinx.coroutines.Dispatchers @@ -59,7 +63,7 @@ class LoginEntryViewModel constructor( BaseViewModel(application) { val state: MutableLiveData = MutableLiveData(LoginEntryStateWrapper(LoginEntryState.PENDING_CHECK, null)) - private var user = UserNgEntity(-1, "-1", "", "") + private var user: User? = null private var updatingUser = false fun parseData(prefix: String, separator: String, data: String?) { @@ -116,25 +120,26 @@ class LoginEntryViewModel constructor( val userIfExists = usersRepository.getUserWithUsernameAndServer(loginData.username!!, loginData.serverUrl!!) if (userIfExists != null) { updatingUser = true - user = userIfExists - user.token = loginData.token - usersRepository.updateUser(user) + user = userIfExists.toUser() + user!!.token = loginData.token + usersRepository.updateUser(user!!.toUserEntity()) // complicated - we need to unregister, etc, etc, but not yet state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.ACCOUNT_UPDATED)) } else { + user = User(null, "", "", "") getProfile(loginData) } } private fun getProfile(loginData: LoginData) { - user.username = loginData.username!! - user.baseUrl = loginData.serverUrl!! - user.token = loginData.token - getProfileUseCase.invoke(viewModelScope, parametersOf(user), object : UseCaseResponse { + user!!.username = loginData.username!! + user!!.baseUrl = loginData.serverUrl!! + user!!.token = loginData.token + getProfileUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity()), object : UseCaseResponse { override suspend fun onSuccess(result: UserProfileOverall) { result.ocs.data.userId?.let { userId -> - user.displayName = result.ocs.data.displayName - user.userId = userId + user!!.displayName = result.ocs.data.displayName + user!!.userId = userId getCapabilities() } ?: run { state.postValue(LoginEntryStateWrapper(LoginEntryState.FAILED, LoginEntryStateClarification.PROFILE_FETCH_FAILED)) @@ -148,9 +153,9 @@ class LoginEntryViewModel constructor( } private fun getCapabilities() { - getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(user.baseUrl), object : UseCaseResponse { + getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(user!!.baseUrl), object : UseCaseResponse { override suspend fun onSuccess(result: CapabilitiesOverall) { - user.capabilities = result.ocs.data.capabilities + user!!.capabilities = result.ocs.data.capabilities getSignalingSettings() } @@ -161,16 +166,17 @@ class LoginEntryViewModel constructor( } private fun getSignalingSettings() { - getSignalingSettingsUseCase.invoke(viewModelScope, parametersOf(user), object : UseCaseResponse { + getSignalingSettingsUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity()), object : UseCaseResponse { override suspend fun onSuccess(result: SignalingSettingsOverall) { - user.signalingSettings = result.ocs.signalingSettings + user!!.signalingSettings = result.ocs.signalingSettings val pushConfiguration = PushConfiguration() val pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PENDING, 0) pushConfiguration.pushConfigurationStateWrapper = pushConfigurationStateWrapper - user.pushConfiguration = pushConfiguration + user!!.pushConfiguration = pushConfiguration withContext(Dispatchers.IO) { - usersRepository.insertUser(user) - setAdjustedUserAsActive() + user!!.id = usersRepository.insertUser(user!!.toUserEntity()) + usersRepository.setUserAsActiveWithId(user!!.id!!) + user!!.status = UserStatus.ACTIVE registerForPush() } } @@ -185,8 +191,8 @@ class LoginEntryViewModel constructor( private suspend fun registerForPush() = withContext(Dispatchers.IO) { val token = appPreferences.pushToken if (!token.isNullOrBlank()) { - user.pushConfiguration?.pushToken = token - usersRepository.updateUser(user) + user!!.pushConfiguration!!.pushToken = token + usersRepository.updateUser(user!!.toUserEntity()) registerForPushWithServer(token) } else { state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_MISSING_TOKEN)) @@ -195,63 +201,53 @@ class LoginEntryViewModel constructor( private fun registerForPushWithServer(token: String) { val options = PushUtils(usersRepository).getMapForPushRegistrationWithServer(context, token) - registerPushWithServerUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse { + registerPushWithServerUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity(), options), object : UseCaseResponse { override suspend fun onSuccess(result: PushRegistrationOverall) { - user.pushConfiguration?.deviceIdentifier = result.ocs.data.deviceIdentifier - user.pushConfiguration?.deviceIdentifierSignature = result.ocs.data.signature - user.pushConfiguration?.userPublicKey = result.ocs.data.publicKey - user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.SERVER_REGISTRATION_DONE, null) - usersRepository.updateUser(user) + user!!.pushConfiguration!!.deviceIdentifier = result.ocs.data.deviceIdentifier + user!!.pushConfiguration!!.deviceIdentifierSignature = result.ocs.data.signature + user!!.pushConfiguration!!.userPublicKey = result.ocs.data.publicKey + user!!.pushConfiguration!!.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.SERVER_REGISTRATION_DONE, null) + usersRepository.updateUser(user!!.toUserEntity()) registerForPushWithProxy() } override suspend fun onError(errorModel: ErrorModel?) { - user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_SERVER_REGISTRATION - user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code - usersRepository.updateUser(user) + user!!.pushConfiguration!!.pushConfigurationStateWrapper!!.pushConfigurationState = PushConfigurationState.FAILED_WITH_SERVER_REGISTRATION + user!!.pushConfiguration!!.pushConfigurationStateWrapper!!.reason = errorModel?.code + usersRepository.updateUser(user!!.toUserEntity()) state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_SERVER_FAILED)) } }) } private suspend fun registerForPushWithProxy() { - val options = PushUtils(usersRepository).getMapForPushRegistrationWithServer(user) + val options = PushUtils(usersRepository).getMapForPushRegistrationWithServer(user!!.toUserEntity()) if (options != null) { - registerPushWithProxyUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse { + registerPushWithProxyUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity(), options), object : UseCaseResponse { override suspend fun onSuccess(result: Any) { - user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PROXY_REGISTRATION_DONE, null) + user!!.pushConfiguration!!.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PROXY_REGISTRATION_DONE, null) withContext(Dispatchers.IO) { - usersRepository.updateUser(user) + usersRepository.updateUser(user!!.toUserEntity()) state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, if (!updatingUser) LoginEntryStateClarification.ACCOUNT_CREATED else LoginEntryStateClarification.ACCOUNT_UPDATED)) } } override suspend fun onError(errorModel: ErrorModel?) { - user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION - user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code + user!!.pushConfiguration!!.pushConfigurationStateWrapper!!.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION + user!!.pushConfiguration!!.pushConfigurationStateWrapper!!.reason = errorModel?.code withContext(Dispatchers.IO) { - usersRepository.updateUser(user) - setAdjustedUserAsActive() + usersRepository.updateUser(user!!.toUserEntity()) state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED)) } } }) } else { - user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION + user!!.pushConfiguration!!.pushConfigurationStateWrapper!!.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION withContext(Dispatchers.IO) { - usersRepository.updateUser(user) + usersRepository.updateUser(user!!.toUserEntity()) state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED)) } } } - - private suspend fun setAdjustedUserAsActive() = withContext(Dispatchers.IO) { - if (user.id == -1L) { - val adjustedUser = usersRepository.getUserWithUsernameAndServer(user.username, user.baseUrl) - adjustedUser?.id?.let { - usersRepository.setUserAsActiveWithId(it) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatViewModel.kt index f7dfffddd..91b780603 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatViewModel.kt @@ -57,7 +57,7 @@ class ChatViewModel constructor(application: Application, fun init(user: UserNgEntity, conversationToken: String, conversationPassword: String?) { viewModelScope.launch { this@ChatViewModel.user = user - this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id, conversationToken) + this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken) this@ChatViewModel.conversationPassword = conversationPassword globalService.getConversation(conversationToken, this@ChatViewModel) } @@ -70,7 +70,7 @@ class ChatViewModel constructor(application: Application, override suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: GlobalServiceInterface.OperationStatus) { if (operationStatus == GlobalServiceInterface.OperationStatus.STATUS_OK) { 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 -> globalService.joinConversation(conversationToken, conversationPassword, this) } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt index 1b7dea91a..98224cffb 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt @@ -162,7 +162,7 @@ class ConversationsListView : BaseView() { bundle.putString(BundleKeys.KEY_ROOM_ID, conversation.conversationId) bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION, Parcels.wrap(conversation)) ConductorRemapping.remapChatController( - router, user.id, conversation.token!!, + router, user.id!!, conversation.token!!, bundle, false ) } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt index 3ef96f4c4..2c3e993d6 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt @@ -78,7 +78,7 @@ class ConversationsListViewModel constructor( filterLiveData.value = null Transformations.switchMap(filterLiveData) { filter -> if (user != null) { - conversationsRepository.getConversationsForUser(user.id, filter) + conversationsRepository.getConversationsForUser(user.id!!, filter) } else { liveData { listOf() @@ -99,7 +99,7 @@ class ConversationsListViewModel constructor( object : UseCaseResponse { override suspend fun onSuccess(result: GenericOverall) { conversationsRepository.deleteConversation( - globalService.currentUserLiveData.value!!.id, conversation + globalService.currentUserLiveData.value!!.id!!, conversation .conversationId!! ) } @@ -128,7 +128,7 @@ class ConversationsListViewModel constructor( object : UseCaseResponse { override suspend fun onSuccess(result: GenericOverall) { conversationsRepository.deleteConversation( - globalService.currentUserLiveData.value!!.id, conversation + globalService.currentUserLiveData.value!!.id!!, conversation .conversationId!! ) } @@ -159,7 +159,7 @@ class ConversationsListViewModel constructor( object : UseCaseResponse { override suspend fun onSuccess(result: GenericOverall) { conversationsRepository.setFavoriteValueForConversation( - globalService.currentUserLiveData.value!!.id, + globalService.currentUserLiveData.value!!.id!!, conversation.conversationId!!, favorite ) } @@ -202,7 +202,7 @@ class ConversationsListViewModel constructor( } conversationsRepository.saveConversationsForUser( - internalUserId, + internalUserId!!, mutableList, true) messageData = "" conversationsLoadingLock.unlock() @@ -223,7 +223,7 @@ class ConversationsListViewModel constructor( value: Boolean ) { conversationsRepository.setChangingValueForConversation( - globalService.currentUserLiveData.value!!.id, conversation + globalService.currentUserLiveData.value!!.id!!, conversation .conversationId!!, value ) } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt index 720486032..09e15a712 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt @@ -80,6 +80,7 @@ abstract class UsersDao { val users = getUsers() for (user in users) { user.status = UserStatus.ACTIVE + updateUser(user) return true } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/models/User.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/models/User.kt new file mode 100644 index 000000000..964b3f5f8 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/models/User.kt @@ -0,0 +1,44 @@ +package com.nextcloud.talk.newarch.local.models + +import android.os.Parcelable +import com.nextcloud.talk.models.json.capabilities.Capabilities +import com.nextcloud.talk.models.json.push.PushConfiguration +import com.nextcloud.talk.models.json.signaling.settings.SignalingSettings +import com.nextcloud.talk.newarch.local.models.other.UserStatus +import kotlinx.android.parcel.Parcelize +import kotlinx.serialization.Serializable + +@Parcelize +@Serializable +data class User( + var id: Long? = null, + var userId: String, + var username: String, + var baseUrl: String, + var token: String? = null, + var displayName: String? = null, + var pushConfiguration: PushConfiguration? = null, + var capabilities: Capabilities? = null, + var clientCertificate: String? = null, + var signalingSettings: SignalingSettings? = null, + var status: UserStatus? = null +): Parcelable + +fun User.toUserEntity() : UserNgEntity { + var userNgEntity: UserNgEntity? = null + this.id?.let { + userNgEntity = UserNgEntity(it, userId, username, baseUrl) + }?: run { + userNgEntity = UserNgEntity(userId = this.userId, username = this.username, baseUrl = this.baseUrl) + } + + userNgEntity!!.token = this.token + userNgEntity!!.displayName = this.displayName + userNgEntity!!.pushConfiguration = this.pushConfiguration + userNgEntity!!.capabilities = this.capabilities + userNgEntity!!.clientCertificate = this.clientCertificate + userNgEntity!!.signalingSettings = this.signalingSettings + userNgEntity!!.status = status + + return userNgEntity!! +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt index 549950645..05d0750ab 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt @@ -39,7 +39,7 @@ import java.util.* @Serializable @Entity(tableName = "users") data class UserNgEntity( - @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long, + @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0, @ColumnInfo(name = "user_id") var userId: String, @ColumnInfo(name = "username") var username: String, @ColumnInfo(name = "base_url") var baseUrl: String, @@ -86,6 +86,10 @@ data class UserNgEntity( } } +fun UserNgEntity.toUser() : User { + return User(this.id, this.userId, this.username, this.baseUrl, this.token, this.displayName, this.pushConfiguration, this.capabilities, this.clientCertificate, this.signalingSettings, this.status) +} + fun UserNgEntity.getCredentials(): String = ApiUtils.getCredentials(username, token) fun UserNgEntity.hasSpreedFeatureCapability(capabilityName: String): Boolean { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/services/CallService.kt b/app/src/main/java/com/nextcloud/talk/newarch/services/CallService.kt index 44db2f3ff..77a264856 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/services/CallService.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/services/CallService.kt @@ -284,14 +284,14 @@ class CallService : Service(), KoinComponent, CoroutineScope { } private suspend fun getConversationForTokenAndUser(user: UserNgEntity, conversationToken: String): Conversation? { - var conversation = conversationsRepository.getConversationForUserWithToken(user.id, conversationToken) + var conversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken) if (conversation == null) { val getConversationUseCase = GetConversationUseCase(componentsWithEmptyCookieJar.getRepository(), apiErrorHandler) runBlocking { getConversationUseCase.invoke(this, parametersOf(user, conversationToken), object : UseCaseResponse { override suspend fun onSuccess(result: ConversationOverall) { val internalConversation = result.ocs.data - conversationsRepository.saveConversationsForUser(user.id, listOf(internalConversation), false) + conversationsRepository.saveConversationsForUser(user.id!!, listOf(internalConversation), false) conversation = result.ocs.data } @@ -309,7 +309,7 @@ class CallService : Service(), KoinComponent, CoroutineScope { endIncomingConversation(true) activeNotification = generatedNotificationId val notification = builder.build() - notification.extras.putLong(BundleKeys.KEY_INTERNAL_USER_ID, user.id) + notification.extras.putLong(BundleKeys.KEY_INTERNAL_USER_ID, user.id!!) notification.extras.putLong(BundleKeys.KEY_NOTIFICATION_ID, internalNotificationId) notification.flags = notification.flags or Notification.FLAG_INSISTENT startForeground(generatedNotificationId.hashCode(), notification) diff --git a/app/src/main/java/com/nextcloud/talk/newarch/services/GlobalService.kt b/app/src/main/java/com/nextcloud/talk/newarch/services/GlobalService.kt index d5b055b88..17bf8fc1e 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/services/GlobalService.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/services/GlobalService.kt @@ -71,7 +71,7 @@ class GlobalService constructor(usersRepository: UsersRepository, object : UseCaseResponse { override suspend fun onSuccess(result: ConversationOverall) { currentUser?.let { - conversationsRepository.saveConversationsForUser(it.id, listOf(result.ocs.data), false) + conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data), false) globalServiceInterface.gotConversationInfoForUser(it, result.ocs.data, GlobalServiceInterface.OperationStatus.STATUS_OK) } } @@ -94,8 +94,8 @@ class GlobalService constructor(usersRepository: UsersRepository, object : UseCaseResponse { override suspend fun onSuccess(result: ConversationOverall) { currentUser?.let { - conversationsRepository.saveConversationsForUser(it.id, listOf(result.ocs.data), false) - currentConversation = conversationsRepository.getConversationForUserWithToken(it.id, result.ocs!!.data!!.token!!) + conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data), false) + currentConversation = conversationsRepository.getConversationForUserWithToken(it.id!!, result.ocs!!.data!!.token!!) globalServiceInterface.joinedConversationForUser(it, currentConversation, GlobalServiceInterface.OperationStatus.STATUS_OK) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/services/shortcuts/ShortcutService.kt b/app/src/main/java/com/nextcloud/talk/newarch/services/shortcuts/ShortcutService.kt index b88f6b0d6..f0109a7c9 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/services/shortcuts/ShortcutService.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/services/shortcuts/ShortcutService.kt @@ -61,7 +61,7 @@ class ShortcutService constructor(private var context: Context, currentUser = user var internalUserId: Long = -1 currentUser?.let { - internalUserId = it.id + internalUserId = it.id!! } conversationsRepository.getShortcutTargetConversations(internalUserId) } diff --git a/build.gradle b/build.gradle index cc56c745a..9c90e56ba 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0-beta01' + classpath 'com.android.tools.build:gradle:4.1.0-alpha01' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}" classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa307b2a4..b9b0c9399 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Feb 26 11:00:50 CET 2020 +#Mon Mar 09 13:35:59 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip