From 6a27dc7dba57705046f93e13c17f69a2da42fa61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Tue, 10 May 2022 15:06:27 +0200 Subject: [PATCH] Pass needed parameters during every call to repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../repositories/SharedItemsRepository.kt | 40 ++++++++++--------- .../talk/viewmodels/SharedItemsViewModel.kt | 19 +++++---- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt b/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt index 6e496002f..531937df5 100644 --- a/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt @@ -18,8 +18,6 @@ import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class) class SharedItemsRepository { - var parameters: Parameters? = null - @Inject lateinit var ncApi: NcApi @@ -27,23 +25,27 @@ class SharedItemsRepository { sharedApplication!!.componentApplication.inject(this) } - fun media(type: SharedItemType): Observable? { - return media(type, null) + fun media(parameters: Parameters, type: SharedItemType): Observable? { + return media(parameters, type, null) } - fun media(type: SharedItemType, lastKnownMessageId: Int?): Observable? { - val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken) + fun media(parameters: Parameters, type: SharedItemType, lastKnownMessageId: Int?): Observable? { + val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken) return ncApi.getSharedItems( credentials, - ApiUtils.getUrlForChatSharedItems(1, parameters!!.baseUrl, parameters!!.roomToken), + ApiUtils.getUrlForChatSharedItems(1, parameters.baseUrl, parameters.roomToken), type.toString().lowercase(Locale.ROOT), lastKnownMessageId, BATCH_SIZE - ).map { map(it, type) } + ).map { map(it, type, parameters) } } - private fun map(response: Response, type: SharedItemType): SharedMediaItems { + private fun map( + response: Response, + type: SharedItemType, + parameters: Parameters + ): SharedMediaItems { var chatLastGiven: Int? = null val items = mutableMapOf() @@ -70,8 +72,8 @@ class SharedItemsRepository { fileParameters["link"]!!, fileParameters["mimetype"]!!, previewAvailable, - previewLink(fileParameters["id"]), - parameters!!.userEntity + previewLink(fileParameters["id"], parameters.baseUrl), + parameters.userEntity ) } else { Log.w(TAG, "location and deckcard are not yet supported") @@ -87,16 +89,16 @@ class SharedItemsRepository { sortedMutableItems, chatLastGiven, moreItemsExisting, - authHeader() + authHeader(parameters.userName, parameters.userToken) ) } - fun availableTypes(): Observable> { - val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken) + fun availableTypes(parameters: Parameters): Observable> { + val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken) return ncApi.getSharedItemsOverview( credentials, - ApiUtils.getUrlForChatSharedItemsOverview(1, parameters!!.baseUrl, parameters!!.roomToken), + ApiUtils.getUrlForChatSharedItemsOverview(1, parameters.baseUrl, parameters.roomToken), 1 ).map { val types = mutableSetOf() @@ -115,13 +117,13 @@ class SharedItemsRepository { } } - fun authHeader(): Map { - return mapOf(Pair("Authorization", ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken))) + private fun authHeader(userName: String, userToken: String): Map { + return mapOf(Pair("Authorization", ApiUtils.getCredentials(userName, userToken))) } - private fun previewLink(fileId: String?): String { + private fun previewLink(fileId: String?, baseUrl: String): String { return ApiUtils.getUrlForFilePreviewWithFileId( - parameters!!.baseUrl, + baseUrl, fileId, sharedApplication!!.resources.getDimensionPixelSize(R.dimen.maximum_file_preview_size) ) diff --git a/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt b/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt index 1d5c80b2c..25d912dc1 100644 --- a/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt @@ -14,7 +14,11 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers -class SharedItemsViewModel(private val repository: SharedItemsRepository, private val initialType: SharedItemType) : +class SharedItemsViewModel( + private val repository: SharedItemsRepository, + private val initialType: SharedItemType, + private val repositoryParameters: SharedItemsRepository.Parameters +) : ViewModel() { private val _sharedItemType: MutableLiveData> by lazy { @@ -39,14 +43,15 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat val currentSharedItems = sharedItems.value!! if (currentSharedItems.moreItemsExisting) { - repository.media(currentSharedItems.type, currentSharedItems.lastSeenId)?.subscribeOn(Schedulers.io()) + repository.media(repositoryParameters, currentSharedItems.type, currentSharedItems.lastSeenId) + ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(observer(currentSharedItems.type, false)) } } fun loadItems(type: SharedItemType) { - repository.media(type)?.subscribeOn(Schedulers.io()) + repository.media(repositoryParameters, type)?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(observer(type, true)) } @@ -78,7 +83,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat oldItems + newSharedItems!!.items, newSharedItems!!.lastSeenId, newSharedItems!!.moreItemsExisting, - repository.authHeader() + newSharedItems!!.authHeader ) } } @@ -86,7 +91,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat } private fun availableTypes() { - repository.availableTypes().subscribeOn(Schedulers.io()) + repository.availableTypes(repositoryParameters).subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer> { @@ -116,7 +121,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat if (modelClass.isAssignableFrom(SharedItemsViewModel::class.java)) { val repository = SharedItemsRepository() - repository.parameters = SharedItemsRepository.Parameters( + val repositoryParameters = SharedItemsRepository.Parameters( userEntity.userId, userEntity.token, userEntity.baseUrl, @@ -124,7 +129,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat roomToken ) - return SharedItemsViewModel(repository, initialType) as T + return SharedItemsViewModel(repository, initialType, repositoryParameters) as T } throw IllegalArgumentException("Unknown ViewModel class")