Pass needed parameters during every call to repository

Signed-off-by: Tim Krüger <t@timkrueger.me>
This commit is contained in:
Tim Krüger 2022-05-10 15:06:27 +02:00
parent 577357011e
commit 6a27dc7dba
No known key found for this signature in database
GPG Key ID: FECE3A7222C52A4E
2 changed files with 33 additions and 26 deletions

View File

@ -18,8 +18,6 @@ import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class SharedItemsRepository { class SharedItemsRepository {
var parameters: Parameters? = null
@Inject @Inject
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@ -27,23 +25,27 @@ class SharedItemsRepository {
sharedApplication!!.componentApplication.inject(this) sharedApplication!!.componentApplication.inject(this)
} }
fun media(type: SharedItemType): Observable<SharedMediaItems>? { fun media(parameters: Parameters, type: SharedItemType): Observable<SharedMediaItems>? {
return media(type, null) return media(parameters, type, null)
} }
fun media(type: SharedItemType, lastKnownMessageId: Int?): Observable<SharedMediaItems>? { fun media(parameters: Parameters, type: SharedItemType, lastKnownMessageId: Int?): Observable<SharedMediaItems>? {
val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken) val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken)
return ncApi.getSharedItems( return ncApi.getSharedItems(
credentials, credentials,
ApiUtils.getUrlForChatSharedItems(1, parameters!!.baseUrl, parameters!!.roomToken), ApiUtils.getUrlForChatSharedItems(1, parameters.baseUrl, parameters.roomToken),
type.toString().lowercase(Locale.ROOT), type.toString().lowercase(Locale.ROOT),
lastKnownMessageId, lastKnownMessageId,
BATCH_SIZE BATCH_SIZE
).map { map(it, type) } ).map { map(it, type, parameters) }
} }
private fun map(response: Response<ChatShareOverall>, type: SharedItemType): SharedMediaItems { private fun map(
response: Response<ChatShareOverall>,
type: SharedItemType,
parameters: Parameters
): SharedMediaItems {
var chatLastGiven: Int? = null var chatLastGiven: Int? = null
val items = mutableMapOf<String, SharedItem>() val items = mutableMapOf<String, SharedItem>()
@ -70,8 +72,8 @@ class SharedItemsRepository {
fileParameters["link"]!!, fileParameters["link"]!!,
fileParameters["mimetype"]!!, fileParameters["mimetype"]!!,
previewAvailable, previewAvailable,
previewLink(fileParameters["id"]), previewLink(fileParameters["id"], parameters.baseUrl),
parameters!!.userEntity parameters.userEntity
) )
} else { } else {
Log.w(TAG, "location and deckcard are not yet supported") Log.w(TAG, "location and deckcard are not yet supported")
@ -87,16 +89,16 @@ class SharedItemsRepository {
sortedMutableItems, sortedMutableItems,
chatLastGiven, chatLastGiven,
moreItemsExisting, moreItemsExisting,
authHeader() authHeader(parameters.userName, parameters.userToken)
) )
} }
fun availableTypes(): Observable<Set<SharedItemType>> { fun availableTypes(parameters: Parameters): Observable<Set<SharedItemType>> {
val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken) val credentials = ApiUtils.getCredentials(parameters.userName, parameters.userToken)
return ncApi.getSharedItemsOverview( return ncApi.getSharedItemsOverview(
credentials, credentials,
ApiUtils.getUrlForChatSharedItemsOverview(1, parameters!!.baseUrl, parameters!!.roomToken), ApiUtils.getUrlForChatSharedItemsOverview(1, parameters.baseUrl, parameters.roomToken),
1 1
).map { ).map {
val types = mutableSetOf<SharedItemType>() val types = mutableSetOf<SharedItemType>()
@ -115,13 +117,13 @@ class SharedItemsRepository {
} }
} }
fun authHeader(): Map<String, String> { private fun authHeader(userName: String, userToken: String): Map<String, String> {
return mapOf(Pair("Authorization", ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken))) 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( return ApiUtils.getUrlForFilePreviewWithFileId(
parameters!!.baseUrl, baseUrl,
fileId, fileId,
sharedApplication!!.resources.getDimensionPixelSize(R.dimen.maximum_file_preview_size) sharedApplication!!.resources.getDimensionPixelSize(R.dimen.maximum_file_preview_size)
) )

View File

@ -14,7 +14,11 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers 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() { ViewModel() {
private val _sharedItemType: MutableLiveData<Set<SharedItemType>> by lazy { private val _sharedItemType: MutableLiveData<Set<SharedItemType>> by lazy {
@ -39,14 +43,15 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat
val currentSharedItems = sharedItems.value!! val currentSharedItems = sharedItems.value!!
if (currentSharedItems.moreItemsExisting) { 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()) ?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(observer(currentSharedItems.type, false)) ?.subscribe(observer(currentSharedItems.type, false))
} }
} }
fun loadItems(type: SharedItemType) { fun loadItems(type: SharedItemType) {
repository.media(type)?.subscribeOn(Schedulers.io()) repository.media(repositoryParameters, type)?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread()) ?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(observer(type, true)) ?.subscribe(observer(type, true))
} }
@ -78,7 +83,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat
oldItems + newSharedItems!!.items, oldItems + newSharedItems!!.items,
newSharedItems!!.lastSeenId, newSharedItems!!.lastSeenId,
newSharedItems!!.moreItemsExisting, newSharedItems!!.moreItemsExisting,
repository.authHeader() newSharedItems!!.authHeader
) )
} }
} }
@ -86,7 +91,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat
} }
private fun availableTypes() { private fun availableTypes() {
repository.availableTypes().subscribeOn(Schedulers.io()) repository.availableTypes(repositoryParameters).subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread()) ?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<Set<SharedItemType>> { ?.subscribe(object : Observer<Set<SharedItemType>> {
@ -116,7 +121,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat
if (modelClass.isAssignableFrom(SharedItemsViewModel::class.java)) { if (modelClass.isAssignableFrom(SharedItemsViewModel::class.java)) {
val repository = SharedItemsRepository() val repository = SharedItemsRepository()
repository.parameters = SharedItemsRepository.Parameters( val repositoryParameters = SharedItemsRepository.Parameters(
userEntity.userId, userEntity.userId,
userEntity.token, userEntity.token,
userEntity.baseUrl, userEntity.baseUrl,
@ -124,7 +129,7 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository, privat
roomToken roomToken
) )
return SharedItemsViewModel(repository, initialType) as T return SharedItemsViewModel(repository, initialType, repositoryParameters) as T
} }
throw IllegalArgumentException("Unknown ViewModel class") throw IllegalArgumentException("Unknown ViewModel class")