mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-30 06:13:54 +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
|
@Singleton
|
||||||
class CategoryClient
|
class CategoryClient
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
private val categoryInterface: CategoryInterface,
|
private val categoryInterface: CategoryInterface,
|
||||||
) : ContinuationClient<MwQueryResponse, CategoryItem>() {
|
) : ContinuationClient<MwQueryResponse, CategoryItem>() {
|
||||||
/**
|
/**
|
||||||
* Searches for categories containing the specified string.
|
* Searches for categories containing the specified string.
|
||||||
*
|
*
|
||||||
* @param filter The string to be searched
|
* @param filter The string to be searched
|
||||||
* @param itemLimit How many results are returned
|
* @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
|
* @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
|
* @return
|
||||||
*/
|
*/
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun searchCategories(
|
fun searchCategories(
|
||||||
filter: String?,
|
filter: String?,
|
||||||
itemLimit: Int,
|
itemLimit: Int,
|
||||||
offset: Int = 0,
|
offset: Int = 0,
|
||||||
): Single<List<CategoryItem>> = responseMapper(categoryInterface.searchCategories(filter, itemLimit, offset))
|
): Single<List<CategoryItem>> = responseMapper(categoryInterface.searchCategories(filter, itemLimit, offset))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for categories starting with the specified string.
|
* Searches for categories starting with the specified string.
|
||||||
*
|
*
|
||||||
* @param prefix The prefix to be searched
|
* @param prefix The prefix to be searched
|
||||||
* @param itemLimit How many results are returned
|
* @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
|
* @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
|
* @return
|
||||||
*/
|
*/
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun searchCategoriesForPrefix(
|
fun searchCategoriesForPrefix(
|
||||||
prefix: String?,
|
prefix: String?,
|
||||||
itemLimit: Int,
|
itemLimit: Int,
|
||||||
offset: Int = 0,
|
offset: Int = 0,
|
||||||
): Single<List<CategoryItem>> =
|
): Single<List<CategoryItem>> =
|
||||||
responseMapper(
|
responseMapper(
|
||||||
categoryInterface.searchCategoriesForPrefix(prefix, itemLimit, offset),
|
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(
|
fun resetSubCategoryContinuation(category: String) {
|
||||||
networkResult: Single<MwQueryResponse>,
|
resetContinuation(SUB_CATEGORY_CONTINUATION_PREFIX, category)
|
||||||
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 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