mirror of
https://github.com/nextcloud/talk-android
synced 2025-08-02 01:26:39 +01:00
New network components
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
b338c336b8
commit
de74755492
@ -53,9 +53,10 @@ import com.nextcloud.talk.newarch.data.model.ErrorModel
|
||||
import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler
|
||||
import com.nextcloud.talk.newarch.domain.usecases.GetNotificationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.local.models.toUser
|
||||
import com.nextcloud.talk.newarch.utils.Images
|
||||
import com.nextcloud.talk.newarch.utils.MagicJson
|
||||
import com.nextcloud.talk.newarch.utils.ComponentsWithEmptyCookieJar
|
||||
import com.nextcloud.talk.newarch.utils.NetworkComponents
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.NotificationUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||
@ -73,7 +74,7 @@ class MessageNotificationWorker(
|
||||
workerParams: WorkerParameters
|
||||
) : CoroutineWorker(context, workerParams), KoinComponent {
|
||||
val appPreferences: AppPreferences by inject()
|
||||
private val componentsWithEmptyCookieJar: ComponentsWithEmptyCookieJar by inject()
|
||||
private val networkComponents: NetworkComponents by inject()
|
||||
private val apiErrorHandler: ApiErrorHandler by inject()
|
||||
|
||||
override suspend fun doWork(): Result = coroutineScope {
|
||||
@ -107,7 +108,7 @@ class MessageNotificationWorker(
|
||||
}
|
||||
|
||||
private fun showNotificationWithObjectData(coroutineScope: CoroutineScope, decryptedPushMessage: DecryptedPushMessage, signatureVerification: SignatureVerification, intent: Intent) {
|
||||
val nextcloudTalkRepository = componentsWithEmptyCookieJar.getRepository()
|
||||
val nextcloudTalkRepository = networkComponents.getRepository(false, signatureVerification.userEntity!!.toUser())
|
||||
val getNotificationUseCase = GetNotificationUseCase(nextcloudTalkRepository, apiErrorHandler)
|
||||
getNotificationUseCase.invoke(coroutineScope, parametersOf(signatureVerification.userEntity, decryptedPushMessage.notificationId.toString()), object : UseCaseResponse<NotificationOverall> {
|
||||
override suspend fun onSuccess(result: NotificationOverall) {
|
||||
@ -304,7 +305,7 @@ class MessageNotificationWorker(
|
||||
target, null, CircleCropTransformation()
|
||||
)
|
||||
|
||||
componentsWithEmptyCookieJar.getImageLoader().load(request)
|
||||
networkComponents.getImageLoader(signatureVerification.userEntity!!.toUser()).load(request)
|
||||
} else {
|
||||
notificationBuilder.setStyle(getStyle(decryptedPushMessage, conversationType, person.build(), style))
|
||||
NotificationManagerCompat.from(applicationContext).notify(notificationId, notificationBuilder.build())
|
||||
|
@ -46,7 +46,7 @@ import com.nextcloud.talk.newarch.domain.repository.online.NextcloudTalkReposito
|
||||
import com.nextcloud.talk.newarch.utils.NetworkUtils
|
||||
import com.nextcloud.talk.newarch.utils.NetworkUtils.GetProxyRunnable
|
||||
import com.nextcloud.talk.newarch.utils.NetworkUtils.MagicAuthenticator
|
||||
import com.nextcloud.talk.newarch.utils.ComponentsWithEmptyCookieJar
|
||||
import com.nextcloud.talk.newarch.utils.NetworkComponents
|
||||
import com.nextcloud.talk.utils.LoggingUtils
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||
import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder
|
||||
@ -93,8 +93,8 @@ val NetworkModule = module {
|
||||
|
||||
}
|
||||
|
||||
fun createComponentsWithEmptyCookieJar(okHttpClient: OkHttpClient, retrofit: Retrofit, androidApplication: Application): ComponentsWithEmptyCookieJar {
|
||||
return ComponentsWithEmptyCookieJar(okHttpClient, retrofit, androidApplication)
|
||||
fun createComponentsWithEmptyCookieJar(okHttpClient: OkHttpClient, retrofit: Retrofit, androidApplication: Application): NetworkComponents {
|
||||
return NetworkComponents(okHttpClient, retrofit, androidApplication)
|
||||
}
|
||||
|
||||
fun createCookieManager(): CookieManager {
|
||||
|
@ -41,7 +41,8 @@ import com.nextcloud.talk.newarch.domain.usecases.GetConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.GetParticipantsForCallUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.utils.ComponentsWithEmptyCookieJar
|
||||
import com.nextcloud.talk.newarch.local.models.toUser
|
||||
import com.nextcloud.talk.newarch.utils.NetworkComponents
|
||||
import com.nextcloud.talk.newarch.utils.Images
|
||||
import com.nextcloud.talk.newarch.utils.MagicJson
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
@ -73,8 +74,7 @@ class CallService : Service(), KoinComponent, CoroutineScope {
|
||||
val appPreferences: AppPreferences by inject()
|
||||
val usersRepository: UsersRepository by inject()
|
||||
val conversationsRepository: ConversationsRepository by inject()
|
||||
val retrofit: Retrofit by inject()
|
||||
val componentsWithEmptyCookieJar: ComponentsWithEmptyCookieJar by inject()
|
||||
val networkComponents: NetworkComponents by inject()
|
||||
val apiErrorHandler: ApiErrorHandler by inject()
|
||||
val eventBus: EventBus by inject()
|
||||
|
||||
@ -206,7 +206,7 @@ class CallService : Service(), KoinComponent, CoroutineScope {
|
||||
}
|
||||
|
||||
val avatarUrl = ApiUtils.getUrlForAvatarWithName(signatureVerification.userEntity!!.baseUrl, conversation.name, R.dimen.avatar_size)
|
||||
val imageLoader = componentsWithEmptyCookieJar.getImageLoader()
|
||||
val imageLoader = networkComponents.getImageLoader(signatureVerification.userEntity!!.toUser())
|
||||
|
||||
val request = Images().getRequestForUrl(
|
||||
imageLoader, applicationContext, avatarUrl, signatureVerification.userEntity,
|
||||
@ -250,7 +250,7 @@ class CallService : Service(), KoinComponent, CoroutineScope {
|
||||
|
||||
private fun checkIsConversationActive(user: UserNgEntity, conversationToken: String, activeNotificationArgument: String) {
|
||||
if (activeNotificationArgument == activeNotification) {
|
||||
val getParticipantsForCallUseCase = GetParticipantsForCallUseCase(componentsWithEmptyCookieJar.getRepository(), apiErrorHandler)
|
||||
val getParticipantsForCallUseCase = GetParticipantsForCallUseCase(networkComponents.getRepository(false, user.toUser()), apiErrorHandler)
|
||||
getParticipantsForCallUseCase.invoke(this, parametersOf(user, conversationToken), object : UseCaseResponse<ParticipantsOverall> {
|
||||
override suspend fun onSuccess(result: ParticipantsOverall) {
|
||||
val participants = result.ocs.data
|
||||
@ -284,9 +284,9 @@ 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)
|
||||
val getConversationUseCase = GetConversationUseCase(networkComponents.getRepository(false, user.toUser()), apiErrorHandler)
|
||||
runBlocking {
|
||||
getConversationUseCase.invoke(this, parametersOf(user, conversationToken), object : UseCaseResponse<ConversationOverall> {
|
||||
override suspend fun onSuccess(result: ConversationOverall) {
|
||||
|
@ -31,32 +31,69 @@ import coil.decode.SvgDecoder
|
||||
import com.nextcloud.talk.newarch.data.repository.online.NextcloudTalkRepositoryImpl
|
||||
import com.nextcloud.talk.newarch.data.source.remote.ApiService
|
||||
import com.nextcloud.talk.newarch.domain.repository.online.NextcloudTalkRepository
|
||||
import com.nextcloud.talk.newarch.local.models.User
|
||||
import okhttp3.JavaNetCookieJar
|
||||
import okhttp3.OkHttpClient
|
||||
import org.koin.core.KoinComponent
|
||||
import retrofit2.Retrofit
|
||||
import java.net.CookieManager
|
||||
|
||||
class ComponentsWithEmptyCookieJar(
|
||||
class NetworkComponents(
|
||||
private val okHttpClient: OkHttpClient,
|
||||
private val retrofit: Retrofit,
|
||||
private val androidApplication: Application
|
||||
) : KoinComponent {
|
||||
fun getRepository(): NextcloudTalkRepository {
|
||||
return NextcloudTalkRepositoryImpl(retrofit.newBuilder().client(getOkHttpClient())
|
||||
val usersSingleOperationRepositoryMap : MutableMap<Long, NextcloudTalkRepository> = mutableMapOf()
|
||||
val usersMultipleOperationsRepositoryMap : MutableMap<Long, NextcloudTalkRepository> = mutableMapOf()
|
||||
val usersSingleOperationOkHttpMap: MutableMap<Long, OkHttpClient> = mutableMapOf()
|
||||
val usersMultipleOperationOkHttpMap: MutableMap<Long, OkHttpClient> = mutableMapOf()
|
||||
|
||||
fun getRepository(singleOperation: Boolean, user: User): NextcloudTalkRepository {
|
||||
val mappedNextcloudTalkRepository = if (singleOperation) {
|
||||
usersSingleOperationRepositoryMap[user.id]
|
||||
} else {
|
||||
usersMultipleOperationsRepositoryMap[user.id]
|
||||
}
|
||||
|
||||
if (mappedNextcloudTalkRepository != null) {
|
||||
return mappedNextcloudTalkRepository
|
||||
}
|
||||
|
||||
return NextcloudTalkRepositoryImpl(retrofit.newBuilder().client(getOkHttpClient(singleOperation, user))
|
||||
.build().create(ApiService::class.java))
|
||||
}
|
||||
|
||||
fun getOkHttpClient(): OkHttpClient {
|
||||
return okHttpClient.newBuilder().cookieJar(JavaNetCookieJar(CookieManager())).build()
|
||||
fun getOkHttpClient(singleOperation: Boolean, user: User): OkHttpClient {
|
||||
val mappedOkHttpClient = if (singleOperation) {
|
||||
usersSingleOperationOkHttpMap[user.id]
|
||||
} else {
|
||||
usersMultipleOperationOkHttpMap[user.id]
|
||||
}
|
||||
|
||||
if (mappedOkHttpClient != null) {
|
||||
return mappedOkHttpClient
|
||||
}
|
||||
|
||||
val okHttpClientBuilder = okHttpClient.newBuilder().cookieJar(JavaNetCookieJar(CookieManager()))
|
||||
val dispatcher = okHttpClient.dispatcher()
|
||||
if (singleOperation) {
|
||||
dispatcher.maxRequests = 1
|
||||
} else {
|
||||
dispatcher.maxRequests = 100
|
||||
}
|
||||
|
||||
okHttpClientBuilder.dispatcher(dispatcher)
|
||||
|
||||
|
||||
return okHttpClientBuilder.build()
|
||||
}
|
||||
|
||||
fun getImageLoader(): ImageLoader {
|
||||
fun getImageLoader(user: User): ImageLoader {
|
||||
return ImageLoader(androidApplication) {
|
||||
availableMemoryPercentage(0.5)
|
||||
bitmapPoolPercentage(0.5)
|
||||
crossfade(false)
|
||||
okHttpClient(getOkHttpClient())
|
||||
okHttpClient(getOkHttpClient(false, user))
|
||||
componentRegistry {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
add(ImageDecoderDecoder())
|
Loading…
Reference in New Issue
Block a user