Dominaezzz' review: remove withContext usage

This commit is contained in:
Benoit Marty 2021-03-31 23:16:32 +02:00
parent 6a91c2b355
commit fe80b7bd6a

View File

@ -17,24 +17,22 @@
package org.matrix.android.sdk.internal.session.terms package org.matrix.android.sdk.internal.session.terms
import dagger.Lazy import dagger.Lazy
import kotlinx.coroutines.withContext import okhttp3.OkHttpClient
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataTypes
import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.terms.GetTermsResponse import org.matrix.android.sdk.api.session.terms.GetTermsResponse
import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.terms.TermsService
import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate
import org.matrix.android.sdk.internal.network.NetworkConstants import org.matrix.android.sdk.internal.network.NetworkConstants
import org.matrix.android.sdk.internal.network.RetrofitFactory import org.matrix.android.sdk.internal.network.RetrofitFactory
import org.matrix.android.sdk.internal.network.executeRequest
import org.matrix.android.sdk.internal.session.identity.IdentityAuthAPI import org.matrix.android.sdk.internal.session.identity.IdentityAuthAPI
import org.matrix.android.sdk.internal.session.identity.IdentityRegisterTask import org.matrix.android.sdk.internal.session.identity.IdentityRegisterTask
import org.matrix.android.sdk.internal.session.openid.GetOpenIdTokenTask import org.matrix.android.sdk.internal.session.openid.GetOpenIdTokenTask
import org.matrix.android.sdk.internal.session.sync.model.accountdata.AcceptedTermsContent import org.matrix.android.sdk.internal.session.sync.model.accountdata.AcceptedTermsContent
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataTypes
import org.matrix.android.sdk.internal.session.user.accountdata.AccountDataDataSource import org.matrix.android.sdk.internal.session.user.accountdata.AccountDataDataSource
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.ensureTrailingSlash import org.matrix.android.sdk.internal.util.ensureTrailingSlash
import okhttp3.OkHttpClient
import org.matrix.android.sdk.internal.network.executeRequest
import javax.inject.Inject import javax.inject.Inject
internal class DefaultTermsService @Inject constructor( internal class DefaultTermsService @Inject constructor(
@ -45,43 +43,39 @@ internal class DefaultTermsService @Inject constructor(
private val retrofitFactory: RetrofitFactory, private val retrofitFactory: RetrofitFactory,
private val getOpenIdTokenTask: GetOpenIdTokenTask, private val getOpenIdTokenTask: GetOpenIdTokenTask,
private val identityRegisterTask: IdentityRegisterTask, private val identityRegisterTask: IdentityRegisterTask,
private val updateUserAccountDataTask: UpdateUserAccountDataTask, private val updateUserAccountDataTask: UpdateUserAccountDataTask
private val coroutineDispatchers: MatrixCoroutineDispatchers
) : TermsService { ) : TermsService {
override suspend fun getTerms(serviceType: TermsService.ServiceType, override suspend fun getTerms(serviceType: TermsService.ServiceType,
baseUrl: String): GetTermsResponse { baseUrl: String): GetTermsResponse {
return withContext(coroutineDispatchers.io) { val url = buildUrl(baseUrl, serviceType)
val url = buildUrl(baseUrl, serviceType) val termsResponse = executeRequest(null) {
val termsResponse = executeRequest(null) { termsAPI.getTerms("${url}terms")
termsAPI.getTerms("${url}terms")
}
GetTermsResponse(termsResponse, getAlreadyAcceptedTermUrlsFromAccountData())
} }
return GetTermsResponse(termsResponse, getAlreadyAcceptedTermUrlsFromAccountData())
} }
override suspend fun agreeToTerms(serviceType: TermsService.ServiceType, override suspend fun agreeToTerms(serviceType: TermsService.ServiceType,
baseUrl: String, baseUrl: String,
agreedUrls: List<String>, agreedUrls: List<String>,
token: String?) { token: String?) {
withContext(coroutineDispatchers.io) { val url = buildUrl(baseUrl, serviceType)
val url = buildUrl(baseUrl, serviceType) val tokenToUse = token?.takeIf { it.isNotEmpty() } ?: getToken(baseUrl)
val tokenToUse = token?.takeIf { it.isNotEmpty() } ?: getToken(baseUrl)
executeRequest(null) { executeRequest(null) {
termsAPI.agreeToTerms("${url}terms", AcceptTermsBody(agreedUrls), "Bearer $tokenToUse") termsAPI.agreeToTerms("${url}terms", AcceptTermsBody(agreedUrls), "Bearer $tokenToUse")
}
// client SHOULD update this account data section adding any the URLs
// of any additional documents that the user agreed to this list.
// Get current m.accepted_terms append new ones and update account data
val listOfAcceptedTerms = getAlreadyAcceptedTermUrlsFromAccountData()
val newList = listOfAcceptedTerms.toMutableSet().apply { addAll(agreedUrls) }.toList()
updateUserAccountDataTask.execute(UpdateUserAccountDataTask.AcceptedTermsParams(
acceptedTermsContent = AcceptedTermsContent(newList)
))
} }
// client SHOULD update this account data section adding any the URLs
// of any additional documents that the user agreed to this list.
// Get current m.accepted_terms append new ones and update account data
val listOfAcceptedTerms = getAlreadyAcceptedTermUrlsFromAccountData()
val newList = listOfAcceptedTerms.toMutableSet().apply { addAll(agreedUrls) }.toList()
updateUserAccountDataTask.execute(UpdateUserAccountDataTask.AcceptedTermsParams(
acceptedTermsContent = AcceptedTermsContent(newList)
))
} }
private suspend fun getToken(url: String): String { private suspend fun getToken(url: String): String {
@ -97,7 +91,7 @@ internal class DefaultTermsService @Inject constructor(
private fun buildUrl(baseUrl: String, serviceType: TermsService.ServiceType): String { private fun buildUrl(baseUrl: String, serviceType: TermsService.ServiceType): String {
val servicePath = when (serviceType) { val servicePath = when (serviceType) {
TermsService.ServiceType.IntegrationManager -> NetworkConstants.URI_INTEGRATION_MANAGER_PATH TermsService.ServiceType.IntegrationManager -> NetworkConstants.URI_INTEGRATION_MANAGER_PATH
TermsService.ServiceType.IdentityService -> NetworkConstants.URI_IDENTITY_PATH_V2 TermsService.ServiceType.IdentityService -> NetworkConstants.URI_IDENTITY_PATH_V2
} }
return "${baseUrl.ensureTrailingSlash()}$servicePath" return "${baseUrl.ensureTrailingSlash()}$servicePath"
} }