diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3b38769b8..ab56094df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,13 +59,13 @@ All functions in `MangaParser` class are documented. Pay attention to some pecul - `sortOrders` set should not be empty. If your source is not support sorting, specify one most relevance value. - If you cannot obtain direct links to pages images inside `getPages` method, it is ok to use an intermediate url as `Page.url` and fetch a direct link at `getPageUrl` function. -- `getFaviconUrl` function is deprecated, but Kotatsu application before v4 still use it, so it is recommended to - override it too. - You can use _asserts_ to check some optional fields. For example. `Manga.author` field is not required, but if your source provide such information, add `assert(it != null)`. This will not have any effect on production but help to find issues during unit testing. - If your source website (or it's api) uses pages for pagination instead of offset you should extend `PagedMangaParser` instead of `MangaParser`. +- Your parser may also implement the `Interceptor` interface for additional manipulation of all network requests and/or + responses, including image loading. ## Development process @@ -87,4 +87,4 @@ It is recommended to run unit tests before submitting a PR. ## Help -If you need a help or have some questions, ask a community in our [Discord server](https://discord.gg/NNJ5RgVBC5). \ No newline at end of file +If you need a help or have some questions, ask a community in our [Discord server](https://discord.gg/NNJ5RgVBC5). diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt index 435976f16..a99d6d64c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt @@ -112,15 +112,6 @@ abstract class MangaParser @InternalParsersApi constructor( */ abstract suspend fun getTags(): Set - /** - * Returns direct link to the website favicon - */ - @Deprecated( - message = "Use parseFavicons() to get multiple favicons with different size", - replaceWith = ReplaceWith("parseFavicons()"), - ) - open fun getFaviconUrl() = "https://${domain}/favicon.ico" - /** * Parse favicons from the main page of the source`s website */ diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt index a01f96bee..dddfc47d6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt @@ -26,10 +26,6 @@ internal class AnibelParser(context: MangaLoaderContext) : MangaParser(context, SortOrder.NEWEST, ) - override fun getFaviconUrl(): String { - return "https://cdn.${domain}/favicons/favicon.png" - } - override suspend fun getList( offset: Int, query: String?, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BatoToParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BatoToParser.kt index f162a6804..afbcfbb23 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BatoToParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BatoToParser.kt @@ -158,8 +158,6 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( throw ParseException("Cannot find gernes list", scripts[0].baseUri()) } - override fun getFaviconUrl(): String = "https://styles.amarkcdn.com/img/batoto/favicon.ico?v0" - private suspend fun search(page: Int, query: String): List { val url = buildString { append("https://") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt index 9bdea84f4..889aa81cf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt @@ -21,10 +21,6 @@ internal class CloneMangaParser(context: MangaLoaderContext) : PagedMangaParser( override val configKeyDomain = ConfigKey.Domain("manga.clone-army.org", null) - override fun getFaviconUrl(): String { - return "https://pbs.twimg.com/profile_images/458758466346029056/Ys93EANp_400x400.png" - } - override suspend fun getListPage( page: Int, query: String?, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt index 6341dcd72..823cd37b1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt @@ -205,10 +205,6 @@ internal class NudeMoonParser( } } - override fun getFaviconUrl(): String { - return "https://${domain}/favicon.jpg" - } - private fun getSortKey(sortOrder: SortOrder) = when (sortOrder) { SortOrder.POPULARITY -> "views" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/MintMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/MintMangaParser.kt index ddbbdd3b1..3cc040af0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/MintMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/MintMangaParser.kt @@ -15,7 +15,4 @@ internal class MintMangaParser( arrayOf("mintmanga.live", "mintmanga.com"), ) - override fun getFaviconUrl(): String { - return "https://resmm.rmr.rocks/static/apple-touch-icon-8fff291039c140493adb0c7ba81065ad.png" - } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/ReadmangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/ReadmangaParser.kt index f4fe90d48..9ac27e9a5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/ReadmangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/ReadmangaParser.kt @@ -15,7 +15,4 @@ internal class ReadmangaParser( arrayOf("readmanga.io", "readmanga.live", "readmanga.me"), ) - override fun getFaviconUrl(): String { - return "https://resrm.rmr.rocks/static/apple-touch-icon-3162037c9df9f28dca0f9a4092cb0f65.png" - } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/SelfMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/SelfMangaParser.kt index 912958086..44fc703b9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/SelfMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/SelfMangaParser.kt @@ -12,7 +12,4 @@ internal class SelfMangaParser( override val configKeyDomain = ConfigKey.Domain("selfmanga.live", null) - override fun getFaviconUrl(): String { - return "https://ressm.rmr.rocks/static/apple-touch-icon-a769ea533d811b73ac3eedde658bb1d3.png" - } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt index ae2e4110a..3cc261968 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt @@ -182,6 +182,5 @@ abstract class Madara5Parser @InternalParsersApi constructor( @MangaSourceParser("MANGAOWLS", "BeautyManga", "en") class BeautyManga(context: MangaLoaderContext) : Madara5Parser(context, MangaSource.MANGAOWLS, "beautymanga.com") { - override fun getFaviconUrl() = "http://${domain}/frontend/images/favico.png" } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index ad7a6b59e..5e8b95e9c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -316,7 +316,7 @@ internal abstract class MadaraParser( override val datePattern = "dd MMMM HH:mm" } - @MangaSourceParser("HachiManga", "HACHIMANGA", "ja") + @MangaSourceParser("HACHIMANGA", "HachiManga", "ja") class HachiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HACHIMANGA, "hachimanga.com") { @@ -340,17 +340,11 @@ internal abstract class MadaraParser( @MangaSourceParser("AQUAMANGA", "AquaManga", "en") class AquaManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AQUAMANGA, "aquamanga.com") { - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/uploads/2021/03/cropped-cropped-favicon-1-32x32.png" - } } @MangaSourceParser("MANGALEK", "MangaLek", "ar") class MangaLek(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGALEK, "mangalek.com") { - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/logo192.png" - } } @MangaSourceParser("HARIMANGA", "HariManga", "en") @@ -384,9 +378,6 @@ internal abstract class MadaraParser( @MangaSourceParser("MANHWAKOOL", "Manhwa Kool", "en") class ManhwaKool(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHWAKOOL, "manhwakool.com") { override val datePattern: String = "MM/dd" - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/uploads/2021/10/cropped-logo-kool-32x32.jpeg" - } } @MangaSourceParser("TOPMANHUA", "Top Manhua", "en") @@ -403,9 +394,6 @@ internal abstract class MadaraParser( override val isNsfwSource = true - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/uploads/cropped-sky-tv-1-32x32.png" - } } @MangaSourceParser("BAKAMAN", "BakaMan", "th") @@ -461,9 +449,6 @@ internal abstract class MadaraParser( override val isNsfwSource = true - override fun getFaviconUrl(): String { - return "https://cdn.$domain/wp-content/uploads/2019/01/cropped-cropped-pcround-32x32.png" - } } @MangaSourceParser("CAT_300", "Cat300", "th") @@ -483,17 +468,11 @@ internal abstract class MadaraParser( override val datePattern = "MM/dd/yyyy" - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/uploads/2017/10/lgoo-treemanga-2-1.jpg" - } } @MangaSourceParser("MANGACV", "Manga Cv", "en") class MangaCv(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACV, "mangacv.com") { - override fun getFaviconUrl(): String { - return "https://$domain/wp-content/uploads/2020/10/cropped-mangaCV-32x32.png" - } } @MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt index ff78aab41..25404f35c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt @@ -43,6 +43,4 @@ internal class MangalinkParser(context: MangaLoaderContext) : ) } - override fun getFaviconUrl(): String = - "https://cdn.${domain}/wp-content/uploads/2020/05/cropped-mangalink-180x180.jpg" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangasOriginesParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangasOriginesParser.kt index af1c3801a..f2cf3cab1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangasOriginesParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangasOriginesParser.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaState import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import java.util.* @@ -19,10 +18,6 @@ internal class MangasOriginesParser(context: MangaLoaderContext) : override val tagPrefix = "catalogues-genre/" - override fun getFaviconUrl(): String { - return "https://${domain}/wp-content/uploads/2020/11/Mangas-150x150.png" - } - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { val root = body.selectFirstOrThrow(".site-content") val postContent = root.selectFirstOrThrow(".post-content") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt index b48770b08..cea3be896 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaState import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import java.util.* @@ -20,10 +19,6 @@ internal class PrismaScansParser(context: MangaLoaderContext) : override val tagPrefix = "manga-genre/" override val datePattern = "MMM dd, yyyy" - override fun getFaviconUrl(): String { - return "https://${domain}/wp-content/uploads/2022/07/cropped-branca-1-192x192.png" - } - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { val root = body.selectFirstOrThrow(".site-content") val postContent = root.selectFirstOrThrow(".post-content") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt index b161995f5..d613607d1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt @@ -83,6 +83,4 @@ internal class ReaperScansParser(context: MangaLoaderContext) : } } - override fun getFaviconUrl(): String = - "https://wuz.${domain}/wp-content/uploads/2022/03/20063242/cropped-ms-icon-310x310-2-192x192.png" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt index 4a9a65cb8..661f33c65 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaState import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import java.util.* @@ -48,8 +47,4 @@ internal class TatakaeScansParser(context: MangaLoaderContext) : else -> null } - override fun getFaviconUrl(): String { - return "https://${domain}/wp-content/uploads/2022/07/cropped-favicon-180x180.png" - } - }