From ae9a7c6090347c04e3fdbf6206115a198add5885 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 17 Sep 2024 10:16:18 +0300 Subject: [PATCH] Introduce MangaListFilterCapabilities class --- .../koitharu/kotatsu/parsers/MangaParser.kt | 23 +++++++++++++++++++ .../model/MangaListFilterCapabilities.kt | 21 +++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaListFilterCapabilities.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt index a7cc961b..3f395d55 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt @@ -2,6 +2,8 @@ package org.koitharu.kotatsu.parsers import androidx.annotation.CallSuper import androidx.annotation.VisibleForTesting +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope import okhttp3.Headers import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.* @@ -301,6 +303,27 @@ abstract class MangaParser @InternalParsersApi constructor( */ abstract suspend fun getAvailableTags(): Set + open suspend fun getListFilterCapabilities(): MangaListFilterCapabilities = coroutineScope { + val tagsDeferred = async { getAvailableTags() } + val localesDeferred = async { getAvailableLocales() } + MangaListFilterCapabilities( + availableSortOrders = availableSortOrders, + availableTags = tagsDeferred.await(), + availableStates = availableStates, + availableContentRating = availableContentRating, + availableContentTypes = availableContentTypes, + availableDemographics = availableDemographics, + availableLocales = localesDeferred.await(), + isMultipleTagsSupported = isMultipleTagsSupported, + isTagsExclusionSupported = isTagsExclusionSupported, + isSearchSupported = isSearchSupported, + searchSupportedWithMultipleFilters = searchSupportedWithMultipleFilters, + isSearchYearSupported = isSearchYearSupported, + isSearchYearRangeSupported = isSearchYearRangeSupported, + isSearchOriginalLanguages = isSearchOriginalLanguages, + ) + } + /** * Fetch available locales for multilingual sources */ diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaListFilterCapabilities.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaListFilterCapabilities.kt new file mode 100644 index 00000000..669f5856 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaListFilterCapabilities.kt @@ -0,0 +1,21 @@ +package org.koitharu.kotatsu.parsers.model + +import org.koitharu.kotatsu.parsers.InternalParsersApi +import java.util.* + +data class MangaListFilterCapabilities @InternalParsersApi constructor( + val availableSortOrders: Set, + val availableTags: Set, + val availableStates: Set, + val availableContentRating: Set, + val availableContentTypes: Set, + val availableDemographics: Set, + val availableLocales: Set, + val isMultipleTagsSupported: Boolean, + val isTagsExclusionSupported: Boolean, + val isSearchSupported: Boolean, + val searchSupportedWithMultipleFilters: Boolean, + val isSearchYearSupported: Boolean, + val isSearchYearRangeSupported: Boolean, + val isSearchOriginalLanguages: Boolean, +)