mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-19 18:55:05 +01:00
Fix migrations
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
01ff371f35
commit
d05a0a90fb
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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<UserEntity> = userUtils.users as List<UserEntity>
|
||||
var userNg: UserNgEntity
|
||||
val newUsers = mutableListOf<UserNgEntity>()
|
||||
var newUser: User
|
||||
val newUsers = mutableListOf<User>()
|
||||
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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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<LoginEntryView>(application) {
|
||||
val state: MutableLiveData<LoginEntryStateWrapper> = 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<UserProfileOverall> {
|
||||
user!!.username = loginData.username!!
|
||||
user!!.baseUrl = loginData.serverUrl!!
|
||||
user!!.token = loginData.token
|
||||
getProfileUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity()), object : UseCaseResponse<UserProfileOverall> {
|
||||
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<CapabilitiesOverall> {
|
||||
getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(user!!.baseUrl), object : UseCaseResponse<CapabilitiesOverall> {
|
||||
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<SignalingSettingsOverall> {
|
||||
getSignalingSettingsUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity()), object : UseCaseResponse<SignalingSettingsOverall> {
|
||||
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<PushRegistrationOverall> {
|
||||
registerPushWithServerUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity(), options), object : UseCaseResponse<PushRegistrationOverall> {
|
||||
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<Any> {
|
||||
registerPushWithProxyUseCase.invoke(viewModelScope, parametersOf(user!!.toUserEntity(), options), object : UseCaseResponse<Any> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
)
|
||||
}
|
||||
|
@ -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<Conversation>()
|
||||
@ -99,7 +99,7 @@ class ConversationsListViewModel constructor(
|
||||
object : UseCaseResponse<GenericOverall> {
|
||||
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<GenericOverall> {
|
||||
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<GenericOverall> {
|
||||
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
|
||||
)
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ abstract class UsersDao {
|
||||
val users = getUsers()
|
||||
for (user in users) {
|
||||
user.status = UserStatus.ACTIVE
|
||||
updateUser(user)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -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!!
|
||||
}
|
@ -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 {
|
||||
|
@ -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<ConversationOverall> {
|
||||
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)
|
||||
|
@ -71,7 +71,7 @@ class GlobalService constructor(usersRepository: UsersRepository,
|
||||
object : UseCaseResponse<ConversationOverall> {
|
||||
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<ConversationOverall> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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"
|
||||
|
||||
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user