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)
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<SharedMediaItems>? {
return media(type, null)
fun media(parameters: Parameters, type: SharedItemType): Observable<SharedMediaItems>? {
return media(parameters, type, null)
}
fun media(type: SharedItemType, lastKnownMessageId: Int?): Observable<SharedMediaItems>? {
val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken)
fun media(parameters: Parameters, type: SharedItemType, lastKnownMessageId: Int?): Observable<SharedMediaItems>? {
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<ChatShareOverall>, type: SharedItemType): SharedMediaItems {
private fun map(
response: Response<ChatShareOverall>,
type: SharedItemType,
parameters: Parameters
): SharedMediaItems {
var chatLastGiven: Int? = null
val items = mutableMapOf<String, SharedItem>()
@ -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<Set<SharedItemType>> {
val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken)
fun availableTypes(parameters: Parameters): Observable<Set<SharedItemType>> {
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<SharedItemType>()
@ -115,13 +117,13 @@ class SharedItemsRepository {
}
}
fun authHeader(): Map<String, String> {
return mapOf(Pair("Authorization", ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken)))
private fun authHeader(userName: String, userToken: String): Map<String, String> {
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)
)

View File

@ -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<Set<SharedItemType>> 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<Set<SharedItemType>> {
@ -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")