mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 05:43:55 +01:00
Null values are treated as "not hidden".
This commit is contained in:
parent
e78447d406
commit
75c1717c89
1 changed files with 113 additions and 114 deletions
|
|
@ -16,124 +16,123 @@ const val CATEGORY_NEEDING_CATEGORIES = "needing categories"
|
|||
*/
|
||||
@Singleton
|
||||
class CategoryClient
|
||||
@Inject
|
||||
constructor(
|
||||
private val categoryInterface: CategoryInterface,
|
||||
) : ContinuationClient<MwQueryResponse, CategoryItem>() {
|
||||
/**
|
||||
* Searches for categories containing the specified string.
|
||||
*
|
||||
* @param filter The string to be searched
|
||||
* @param itemLimit How many results are returned
|
||||
* @param offset Starts returning items from the nth result. If offset is 9, the response starts with the 9th item of the search result
|
||||
* @return
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun searchCategories(
|
||||
filter: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> = responseMapper(categoryInterface.searchCategories(filter, itemLimit, offset))
|
||||
@Inject
|
||||
constructor(
|
||||
private val categoryInterface: CategoryInterface,
|
||||
) : ContinuationClient<MwQueryResponse, CategoryItem>() {
|
||||
/**
|
||||
* Searches for categories containing the specified string.
|
||||
*
|
||||
* @param filter The string to be searched
|
||||
* @param itemLimit How many results are returned
|
||||
* @param offset Starts returning items from the nth result. If offset is 9, the response starts with the 9th item of the search result
|
||||
* @return
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun searchCategories(
|
||||
filter: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> = responseMapper(categoryInterface.searchCategories(filter, itemLimit, offset))
|
||||
|
||||
/**
|
||||
* Searches for categories starting with the specified string.
|
||||
*
|
||||
* @param prefix The prefix to be searched
|
||||
* @param itemLimit How many results are returned
|
||||
* @param offset Starts returning items from the nth result. If offset is 9, the response starts with the 9th item of the search result
|
||||
* @return
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun searchCategoriesForPrefix(
|
||||
prefix: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> =
|
||||
responseMapper(
|
||||
categoryInterface.searchCategoriesForPrefix(prefix, itemLimit, offset),
|
||||
/**
|
||||
* Searches for categories starting with the specified string.
|
||||
*
|
||||
* @param prefix The prefix to be searched
|
||||
* @param itemLimit How many results are returned
|
||||
* @param offset Starts returning items from the nth result. If offset is 9, the response starts with the 9th item of the search result
|
||||
* @return
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun searchCategoriesForPrefix(
|
||||
prefix: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> =
|
||||
responseMapper(
|
||||
categoryInterface.searchCategoriesForPrefix(prefix, itemLimit, offset),
|
||||
)
|
||||
|
||||
/**
|
||||
* Fetches categories starting and ending with a specified name.
|
||||
*
|
||||
* @param startingCategoryName Name of the category to start
|
||||
* @param endingCategoryName Name of the category to end
|
||||
* @param itemLimit How many categories to return
|
||||
* @param offset offset
|
||||
* @return MwQueryResponse
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun getCategoriesByName(
|
||||
startingCategoryName: String?,
|
||||
endingCategoryName: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> =
|
||||
responseMapper(
|
||||
categoryInterface.getCategoriesByName(
|
||||
startingCategoryName,
|
||||
endingCategoryName,
|
||||
itemLimit,
|
||||
offset,
|
||||
),
|
||||
)
|
||||
|
||||
/**
|
||||
* The method takes categoryName as input and returns a List of Subcategories
|
||||
* It uses the generator query API to get the subcategories in a category, 500 at a time.
|
||||
*
|
||||
* @param categoryName Category name as defined on commons
|
||||
* @return Observable emitting the categories returned. If our search yielded "Category:Test", "Test" is emitted.
|
||||
*/
|
||||
fun getSubCategoryList(categoryName: String): Single<List<CategoryItem>> =
|
||||
continuationRequest(SUB_CATEGORY_CONTINUATION_PREFIX, categoryName) {
|
||||
categoryInterface.getSubCategoryList(
|
||||
categoryName,
|
||||
it,
|
||||
)
|
||||
|
||||
/**
|
||||
* Fetches categories starting and ending with a specified name.
|
||||
*
|
||||
* @param startingCategoryName Name of the category to start
|
||||
* @param endingCategoryName Name of the category to end
|
||||
* @param itemLimit How many categories to return
|
||||
* @param offset offset
|
||||
* @return MwQueryResponse
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun getCategoriesByName(
|
||||
startingCategoryName: String?,
|
||||
endingCategoryName: String?,
|
||||
itemLimit: Int,
|
||||
offset: Int = 0,
|
||||
): Single<List<CategoryItem>> =
|
||||
responseMapper(
|
||||
categoryInterface.getCategoriesByName(
|
||||
startingCategoryName,
|
||||
endingCategoryName,
|
||||
itemLimit,
|
||||
offset,
|
||||
),
|
||||
)
|
||||
|
||||
/**
|
||||
* The method takes categoryName as input and returns a List of Subcategories
|
||||
* It uses the generator query API to get the subcategories in a category, 500 at a time.
|
||||
*
|
||||
* @param categoryName Category name as defined on commons
|
||||
* @return Observable emitting the categories returned. If our search yielded "Category:Test", "Test" is emitted.
|
||||
*/
|
||||
fun getSubCategoryList(categoryName: String): Single<List<CategoryItem>> =
|
||||
continuationRequest(SUB_CATEGORY_CONTINUATION_PREFIX, categoryName) {
|
||||
categoryInterface.getSubCategoryList(
|
||||
categoryName,
|
||||
it,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* The method takes categoryName as input and returns a List of parent categories
|
||||
* It uses the generator query API to get the parent categories of a category, 500 at a time.
|
||||
*
|
||||
* @param categoryName Category name as defined on commons
|
||||
* @return
|
||||
*/
|
||||
fun getParentCategoryList(categoryName: String): Single<List<CategoryItem>> =
|
||||
continuationRequest(PARENT_CATEGORY_CONTINUATION_PREFIX, categoryName) {
|
||||
categoryInterface.getParentCategoryList(categoryName, it)
|
||||
}
|
||||
|
||||
fun resetSubCategoryContinuation(category: String) {
|
||||
resetContinuation(SUB_CATEGORY_CONTINUATION_PREFIX, category)
|
||||
}
|
||||
|
||||
fun resetParentCategoryContinuation(category: String) {
|
||||
resetContinuation(PARENT_CATEGORY_CONTINUATION_PREFIX, category)
|
||||
/**
|
||||
* The method takes categoryName as input and returns a List of parent categories
|
||||
* It uses the generator query API to get the parent categories of a category, 500 at a time.
|
||||
*
|
||||
* @param categoryName Category name as defined on commons
|
||||
* @return
|
||||
*/
|
||||
fun getParentCategoryList(categoryName: String): Single<List<CategoryItem>> =
|
||||
continuationRequest(PARENT_CATEGORY_CONTINUATION_PREFIX, categoryName) {
|
||||
categoryInterface.getParentCategoryList(categoryName, it)
|
||||
}
|
||||
|
||||
override fun responseMapper(
|
||||
networkResult: Single<MwQueryResponse>,
|
||||
key: String?,
|
||||
): Single<List<CategoryItem>> =
|
||||
networkResult
|
||||
.map {
|
||||
handleContinuationResponse(it.continuation(), key)
|
||||
it.query()?.pages() ?: emptyList()
|
||||
}.map {
|
||||
it
|
||||
.filter { page ->
|
||||
// Null check is not redundant because some values could be null
|
||||
// for mocks when running unit tests
|
||||
page.categoryInfo()?.isHidden != true
|
||||
}.map {
|
||||
CategoryItem(
|
||||
it.title().replace(CATEGORY_PREFIX, ""),
|
||||
it.description().toString(),
|
||||
it.thumbUrl().toString(),
|
||||
false,
|
||||
)
|
||||
}
|
||||
}
|
||||
fun resetSubCategoryContinuation(category: String) {
|
||||
resetContinuation(SUB_CATEGORY_CONTINUATION_PREFIX, category)
|
||||
}
|
||||
|
||||
fun resetParentCategoryContinuation(category: String) {
|
||||
resetContinuation(PARENT_CATEGORY_CONTINUATION_PREFIX, category)
|
||||
}
|
||||
|
||||
override fun responseMapper(
|
||||
networkResult: Single<MwQueryResponse>,
|
||||
key: String?,
|
||||
): Single<List<CategoryItem>> =
|
||||
networkResult
|
||||
.map {
|
||||
handleContinuationResponse(it.continuation(), key)
|
||||
it.query()?.pages() ?: emptyList()
|
||||
}.map {
|
||||
it
|
||||
.filter { page ->
|
||||
// Null values are treated as "not hidden" for unit test mocks
|
||||
!(page.categoryInfo()?.isHidden ?: false)
|
||||
}.map {
|
||||
CategoryItem(
|
||||
it.title().replace(CATEGORY_PREFIX, ""),
|
||||
it.description().toString(),
|
||||
it.thumbUrl().toString(),
|
||||
false,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue