diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt index 65115b46f..ec488ae18 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt @@ -95,6 +95,8 @@ class MangaDex(delegate: HttpSource, val context: Context) : private fun dataSaver() = sourcePreferences.getBoolean(getDataSaverPreferenceKey(mdLang.lang), false) private fun usePort443Only() = sourcePreferences.getBoolean(getStandardHttpsPreferenceKey(mdLang.lang), false) + private fun blockedGroups() = sourcePreferences.getString(getBlockedGroupsPrefKey(mdLang.lang), "").orEmpty() + private fun blockedUploaders() = sourcePreferences.getString(getBlockedGroupsPrefKey(mdLang.lang), "").orEmpty() private val mangadexService by lazy { MangaDexService(client) @@ -187,11 +189,11 @@ class MangaDex(delegate: HttpSource, val context: Context) : } override fun fetchChapterList(manga: SManga): Observable> { - return mangaHandler.fetchChapterListObservable(manga) + return mangaHandler.fetchChapterListObservable(manga, blockedGroups(), blockedUploaders()) } override suspend fun getChapterList(manga: MangaInfo): List { - return mangaHandler.getChapterList(manga) + return mangaHandler.getChapterList(manga, blockedGroups(), blockedUploaders()) } override fun fetchPageList(chapter: SChapter): Observable> { @@ -316,5 +318,17 @@ class MangaDex(delegate: HttpSource, val context: Context) : fun getStandardHttpsPreferenceKey(dexLang: String): String { return "${standardHttpsPortPref}_$dexLang" } + + private const val blockedGroupsPref = "blockedGroups" + + fun getBlockedGroupsPrefKey(dexLang: String): String { + return "${blockedGroupsPref}_$dexLang" + } + + private const val blockedUploaderPref = "blockedUploader" + + fun getBlockedUploaderPrefKey(dexLang: String): String { + return "${blockedUploaderPref}_$dexLang" + } } } diff --git a/app/src/main/java/exh/md/handlers/MangaHandler.kt b/app/src/main/java/exh/md/handlers/MangaHandler.kt index fe7002d00..85b57427b 100644 --- a/app/src/main/java/exh/md/handlers/MangaHandler.kt +++ b/app/src/main/java/exh/md/handlers/MangaHandler.kt @@ -50,14 +50,20 @@ class MangaHandler( } } - fun fetchChapterListObservable(manga: SManga): Observable> = runAsObservable { - getChapterList(manga.toMangaInfo()).map { it.toSChapter() } + fun fetchChapterListObservable(manga: SManga, blockedGroups: String, blockedUploaders: String): Observable> = runAsObservable { + getChapterList(manga.toMangaInfo(), blockedGroups, blockedUploaders).map { it.toSChapter() } } - suspend fun getChapterList(manga: MangaInfo): List { + suspend fun getChapterList(manga: MangaInfo, blockedGroups: String, blockedUploaders: String): List { return withIOContext { val results = mdListCall { - service.viewChapters(MdUtil.getMangaId(manga.key), lang, it) + service.viewChapters( + MdUtil.getMangaId(manga.key), + lang, + it, + blockedGroups, + blockedUploaders + ) } val groupMap = getGroupMap(results) diff --git a/app/src/main/java/exh/md/service/MangaDexService.kt b/app/src/main/java/exh/md/service/MangaDexService.kt index 2ec8b193a..791910853 100644 --- a/app/src/main/java/exh/md/service/MangaDexService.kt +++ b/app/src/main/java/exh/md/service/MangaDexService.kt @@ -17,6 +17,8 @@ import exh.md.dto.StatisticsDto import exh.md.utils.MdApi import exh.md.utils.MdConstants import exh.md.utils.MdUtil +import exh.util.dropEmpty +import exh.util.trimAll import okhttp3.CacheControl import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl @@ -106,10 +108,14 @@ class MangaDexService( ).await().parseAs(MdUtil.jsonParser) } + private fun String.splitString() = replace("\n", "").split(',').trimAll().dropEmpty() + suspend fun viewChapters( id: String, translatedLanguage: String, offset: Int, + blockedGroups: String, + blockedUploaders: String ): ChapterListDto { val url = MdApi.manga.toHttpUrl() .newBuilder() @@ -126,6 +132,12 @@ class MangaDexService( addQueryParameter("contentRating[]", "pornographic") addQueryParameter("translatedLanguage[]", translatedLanguage) addQueryParameter("offset", offset.toString()) + blockedGroups.splitString().forEach { + addQueryParameter("excludedGroups[]", it) + } + blockedUploaders.splitString().forEach { + addQueryParameter("excludedUploaders[]", it) + } } .build() .toString()