diff --git a/multisrc/overrides/zeistmanga/AsupanKomik/src/AsupanKomik.kt b/multisrc/overrides/zeistmanga/AsupanKomik/src/AsupanKomik.kt new file mode 100644 index 000000000..c6806b45e --- /dev/null +++ b/multisrc/overrides/zeistmanga/AsupanKomik/src/AsupanKomik.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.id.asupankomik + +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class AsupanKomik : ZeistManga("Asupan Komik", "https://www.asupankomik.my.id", "id") { + override val hasFilters = true +} diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..dd7e62639 Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..ffa77c71e Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..a707f76f9 Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..526bf1bb1 Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..ff868fcf8 Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/asupankomik/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/asupankomik/res/web_hi_res_512.png new file mode 100644 index 000000000..92f1b887c Binary files /dev/null and b/multisrc/overrides/zeistmanga/asupankomik/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/datgarscanlation/src/DatGarScanlation.kt b/multisrc/overrides/zeistmanga/datgarscanlation/src/DatGarScanlation.kt index 9e2857157..1f9e3d960 100644 --- a/multisrc/overrides/zeistmanga/datgarscanlation/src/DatGarScanlation.kt +++ b/multisrc/overrides/zeistmanga/datgarscanlation/src/DatGarScanlation.kt @@ -1,14 +1,17 @@ package eu.kanade.tachiyomi.extension.es.datgarscanlation +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga import org.jsoup.nodes.Document class DatGarScanlation : ZeistManga("DatGarScanlation", "https://datgarscanlation.blogspot.com", "es") { + override val hasFilters = true + private val altChapterFeedRegex = """label\s*=\s*'([^']+)'""".toRegex() private val altScriptSelector = "#latest > script" - override fun getChaptersUrl(doc: Document): String { + override fun getApiUrl(doc: Document): String { var chapterRegex = chapterFeedRegex var script = doc.selectFirst(scriptSelector) @@ -29,4 +32,8 @@ class DatGarScanlation : ZeistManga("DatGarScanlation", "https://datgarscanlatio return url.toString() } + + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) } diff --git a/multisrc/overrides/zeistmanga/hijala/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/hijala/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..2d9fbaa2f Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/hijala/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..ae6ab62ab Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..ad3c717d7 Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..35778b61e Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..dd46669e6 Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/hijala/res/web_hi_res_512.png new file mode 100644 index 000000000..ee65c50dc Binary files /dev/null and b/multisrc/overrides/zeistmanga/hijala/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/hijala/src/Hijala.kt b/multisrc/overrides/zeistmanga/hijala/src/Hijala.kt new file mode 100644 index 000000000..a2920a9e8 --- /dev/null +++ b/multisrc/overrides/zeistmanga/hijala/src/Hijala.kt @@ -0,0 +1,53 @@ +package eu.kanade.tachiyomi.extension.ar.hijala + +import eu.kanade.tachiyomi.multisrc.zeistmanga.Genre +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class Hijala : ZeistManga("Hijala", "https://hijala.blogspot.com", "ar") { + + override val hasFilters = true + + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) + + override fun getGenreList(): List = listOf( + Genre("أكشن", "Action"), + Genre("أثارة", "Thriller"), + Genre("أتشي", "Ecchi"), + Genre("حياة مدرسية", "School Life"), + Genre("تاريخي", "Historical"), + Genre("ألعاب", "Game"), + Genre("خيال علمي", "Sci-Fi"), + Genre("خيال", "Fantasy"), + Genre("خارق للطبيعة", "Supernatural"), + Genre("رومانسي", "Romance"), + Genre("رعب", "Horror"), + Genre("دراما", "Drama"), + Genre("سينين", "Seinen"), + Genre("سحري", "Magic"), + Genre("رياضي", "Sports"), + Genre("شونين", "Shounen"), + Genre("شوجو", "Shoujo"), + Genre("شريحة من الحياة", "Slice of Life"), + Genre("علاجي", "Medical"), + Genre("عسكري", "Military"), + Genre("طبخ", "Cooking"), + Genre("فنون قتال", "Martial Arts"), + Genre("غموض", "Mystery"), + Genre("عوالم متعددة", "Isekai"), + Genre("مانها", "مانها"), + Genre("مأساوي", "Tragedy"), + Genre("كوميديا", "Comedy"), + Genre("مغامرات", "Adventure"), + Genre("مصاص دماء", "مصاص دماء"), + Genre("مانهوا", "مانهوا"), + Genre("موسيقي", "موسيقي"), + Genre("موسيقى", "Music"), + Genre("مغامرات", "مغامرات"), + Genre("نفسي", "نفسي"), + Genre("نفسي", "Psychological"), + Genre("ميكا", "ميكا"), + ) +} diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..4b865898d Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..50cdd8608 Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..1bf4110c8 Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..03558a1d6 Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..1d4191785 Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/klmanhua/res/web_hi_res_512.png new file mode 100644 index 000000000..f3966ae79 Binary files /dev/null and b/multisrc/overrides/zeistmanga/klmanhua/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/klmanhua/src/KLManhua.kt b/multisrc/overrides/zeistmanga/klmanhua/src/KLManhua.kt new file mode 100644 index 000000000..72ebe1616 --- /dev/null +++ b/multisrc/overrides/zeistmanga/klmanhua/src/KLManhua.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.id.klmanhua + +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class KLManhua : ZeistManga("KLManhua", "https://klmanhua.blogspot.com", "id") { + + override val hasFilters = true + + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) + + override val imgSelector = "a[href]" + override val imgSelectorAttr = "href" +} diff --git a/multisrc/overrides/zeistmanga/mangaailand/src/MangaAiLand.kt b/multisrc/overrides/zeistmanga/mangaailand/src/MangaAiLand.kt index 2a277f8fc..f7f73850a 100644 --- a/multisrc/overrides/zeistmanga/mangaailand/src/MangaAiLand.kt +++ b/multisrc/overrides/zeistmanga/mangaailand/src/MangaAiLand.kt @@ -1,22 +1,38 @@ package eu.kanade.tachiyomi.extension.ar.mangaailand +import eu.kanade.tachiyomi.multisrc.zeistmanga.Genre +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga -import org.jsoup.nodes.Document class MangaAiLand : ZeistManga("Manga Ai Land", "https://manga-ai-land.blogspot.com", "ar") { - override val chapterFeedRegex = """([^']+)\?""".toRegex() - override val scriptSelector = "#myUL > script" + override val hasFilters = true + override val imgSelector = "a[href]" override val imgSelectorAttr = "href" - override fun getChaptersUrl(doc: Document): String { - val script = doc.selectFirst(scriptSelector)!!.attr("src") - val feed = chapterFeedRegex - .find(script) - ?.groupValues?.get(1) - ?: throw Exception("Failed to find chapter feed") + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) - return "$baseUrl" + feed + "?alt=json&start-index=2&max-results=999999" - } + override fun getGenreList(): List = listOf( + Genre("تراجيدي", "تراجيدي"), + Genre("تاريخي", "تاريخي"), + Genre("أكشن", "أكشن"), + Genre("خيالي", "خيالي"), + Genre("جيشي", "جيشي"), + Genre("تشويق", "تشويق"), + Genre("سينين", "سينين"), + Genre("سحري", "سحري"), + Genre("دراما", "دراما"), + Genre("عصابات", "عصابات"), + Genre("عسكري", "عسكري"), + Genre("شونين", "شونين"), + Genre("مغامرة", "مغامرة"), + Genre("فنون قتالية", "فنون قتالية"), + Genre("غموض", "غموض"), + Genre("وحوش", "وحوش"), + Genre("نجاة", "نجاة"), + Genre("نفسي", "نفسي"), + ) } diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..49a2e9c7e Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..b754547f7 Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..5da671b41 Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..eacec1472 Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..7a08260e9 Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/muslosnosekai/res/web_hi_res_512.png new file mode 100644 index 000000000..840547ea9 Binary files /dev/null and b/multisrc/overrides/zeistmanga/muslosnosekai/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/muslosnosekai/src/MuslosNoSekai.kt b/multisrc/overrides/zeistmanga/muslosnosekai/src/MuslosNoSekai.kt new file mode 100644 index 000000000..fbee9f9d9 --- /dev/null +++ b/multisrc/overrides/zeistmanga/muslosnosekai/src/MuslosNoSekai.kt @@ -0,0 +1,13 @@ +package eu.kanade.tachiyomi.extension.es.muslosnosekai + +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class MuslosNoSekai : ZeistManga("Muslos No Sekai", "https://muslosnosekai.blogspot.com", "es") { + + override val hasFilters = true + + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) +} diff --git a/multisrc/overrides/zeistmanga/noromax/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/noromax/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..aee4966a6 Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/noromax/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..116f07c22 Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..609866fd1 Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..cef39050e Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..3458036fd Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/noromax/res/web_hi_res_512.png new file mode 100644 index 000000000..a17815079 Binary files /dev/null and b/multisrc/overrides/zeistmanga/noromax/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/noromax/src/Noromax.kt b/multisrc/overrides/zeistmanga/noromax/src/Noromax.kt new file mode 100644 index 000000000..b40c21bbf --- /dev/null +++ b/multisrc/overrides/zeistmanga/noromax/src/Noromax.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.id.noromax + +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class Noromax : ZeistManga("Noromax", "https://www.noromax.xyz", "id") { + + override val hasFilters = true + + override val imgSelector = "a[href]" + override val imgSelectorAttr = "href" +} diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..427b57cfd Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..e760ad172 Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..b86d21882 Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..94d54d825 Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..011058f47 Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/shiyurasub/res/web_hi_res_512.png new file mode 100644 index 000000000..4226983df Binary files /dev/null and b/multisrc/overrides/zeistmanga/shiyurasub/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/shiyurasub/src/ShiyuraSub.kt b/multisrc/overrides/zeistmanga/shiyurasub/src/ShiyuraSub.kt new file mode 100644 index 000000000..082081d0e --- /dev/null +++ b/multisrc/overrides/zeistmanga/shiyurasub/src/ShiyuraSub.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.id.shiyurasub + +import eu.kanade.tachiyomi.multisrc.zeistmanga.Language +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga + +class ShiyuraSub : ZeistManga("ShiyuraSub", "https://shiyurasub.blogspot.com", "id") { + + override val hasFilters = true + + override val imgSelector = "a[href]" + override val imgSelectorAttr = "href" + + override fun getLanguageList(): List = listOf( + Language(intl.all, ""), + ) +} diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..7fbcd7d99 Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..63a7c11d5 Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..ffba37e55 Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..5a27c620b Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..957a335af Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/res/web_hi_res_512.png b/multisrc/overrides/zeistmanga/tooncubus/res/web_hi_res_512.png new file mode 100644 index 000000000..de1f2e308 Binary files /dev/null and b/multisrc/overrides/zeistmanga/tooncubus/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/zeistmanga/tooncubus/src/Tooncubus.kt b/multisrc/overrides/zeistmanga/tooncubus/src/Tooncubus.kt new file mode 100644 index 000000000..b3f78514f --- /dev/null +++ b/multisrc/overrides/zeistmanga/tooncubus/src/Tooncubus.kt @@ -0,0 +1,34 @@ +package eu.kanade.tachiyomi.extension.id.tooncubus + +import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Response +import org.jsoup.nodes.Document + +class Tooncubus : ZeistManga("Tooncubus", "https://www.tooncubus.site", "id") { + + override fun chapterListParse(response: Response): List { + return response.asJsoup().selectFirst("ul.series-chapterlist")!!.select("div.flexch-infoz").map { element -> + SChapter.create().apply { + name = element.select("span")!!.text() + url = element.select("a").attr("href") // The website uses another domain for reading + } + } + } + + override fun pageListRequest(chapter: SChapter) = GET(chapter.url, headers) + + override fun getChapterUrl(chapter: SChapter) = chapter.url + + override fun mangaDetailsParse(document: Document): SManga { + val profileManga = document.selectFirst(".grid.gtc-235fr")!! + return SManga.create().apply { + thumbnail_url = profileManga.selectFirst("img")!!.attr("src") + genre = profileManga.select("div.mt-15 > a[rel=tag]") + .joinToString { it.text() } + } + } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistManga.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistManga.kt index 7588c8796..0eab0982b 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistManga.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistManga.kt @@ -29,13 +29,29 @@ abstract class ZeistManga( open val hasFilters = false protected val json: Json by injectLazy() protected val intl by lazy { ZeistMangaIntl(lang) } + open val chapterFeedRegex = """clwd\.run\('([^']+)'""".toRegex() open val scriptSelector = "#clwd > script" + + open val oldChapterFeedRegex = """([^']+)\?""".toRegex() + open val oldScriptSelector = "#myUL > script" + open val imgSelector = "img[src]" open val imgSelectorAttr = "src" - open fun getChaptersUrl(doc: Document): String { - val script = doc.selectFirst(scriptSelector)!! + open fun getApiUrl(doc: Document): String { + val script = doc.selectFirst(scriptSelector) + + if (script == null) { + val altScript = doc.selectFirst(oldScriptSelector)!!.attr("src") + val feed = oldChapterFeedRegex + .find(altScript) + ?.groupValues?.get(1) + ?: throw Exception("Failed to find chapter feed") + + return "$baseUrl$feed?alt=json&start-index=2&max-results=999999" + } + val feed = chapterFeedRegex .find(script.html()) ?.groupValues?.get(1) @@ -50,7 +66,7 @@ abstract class ZeistManga( override fun chapterListParse(response: Response): List { val document = response.asJsoup() - val url = getChaptersUrl(document) + val url = getApiUrl(document) val req = GET(url, headers) val res = client.newCall(req).execute() @@ -121,10 +137,8 @@ abstract class ZeistManga( override fun mangaDetailsParse(document: Document): SManga { val profileManga = document.selectFirst(".grid.gtc-235fr")!! return SManga.create().apply { - title = profileManga.selectFirst("h1.mt-0.mb-6.fs-20")!!.text() thumbnail_url = profileManga.selectFirst("img")!!.attr("src") description = profileManga.select("#synopsis").text() - status = SManga.UNKNOWN genre = profileManga.select("div.mt-15 > a[rel=tag]") .joinToString { it.text() } } @@ -150,6 +164,7 @@ abstract class ZeistManga( mangalist.removeLast() return MangasPage(mangalist, true) } + return MangasPage(mangalist, false) } @@ -230,20 +245,26 @@ abstract class ZeistManga( // Theme Default Status protected open fun getStatusList(): List = listOf( - Status(intl.statusAll, ""), + Status(intl.all, ""), Status(intl.statusOngoing, "Ongoing"), Status(intl.statusCompleted, "Completed"), Status(intl.statusDropped, "Dropped"), Status(intl.statusUpcoming, "Upcoming"), + Status(intl.statusHiatus, "Hiatus"), + Status(intl.statusCancelled, "Cancelled"), ) // Theme Default Types protected open fun getTypeList(): List = listOf( - Type(intl.typeAll, ""), + Type(intl.all, ""), Type(intl.typeManga, "Manga"), Type(intl.typeManhua, "Manhua"), Type(intl.typeManhwa, "Manhwa"), Type(intl.typeNovel, "Novel"), + Type(intl.typeWebNovelJP, "Web Novel (JP)"), + Type(intl.typeWebNovelKR, "Web Novel (KR)"), + Type(intl.typeWebNovelCN, "Web Novel (CN)"), + Type(intl.typeDoujinshi, "Doujinshi"), ) // Theme Default Genres @@ -290,7 +311,7 @@ abstract class ZeistManga( // Theme Default Languages protected open fun getLanguageList(): List = listOf( - Language(intl.languageAll, ""), + Language(intl.all, ""), Language("Indonesian", "Indonesian"), Language("English", "English"), ) diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaDto.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaDto.kt index 78f5a9af0..fa3eb4ddf 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaDto.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaDto.kt @@ -34,11 +34,16 @@ data class ZeistMangaEntryDto( val category: List? = emptyList(), @SerialName("link") val url: List? = emptyList(), val content: ZeistMangaEntryContentDto? = null, + @SerialName("media\$thumbnail") val thumbnail: ZeistMangaEntryThumbnail? = null, ) { fun toSManga(baseurl: String): SManga = SManga.create().apply { title = this@ZeistMangaEntryDto.title!!.t url = getChapterLink(this@ZeistMangaEntryDto.url!!).substringAfter(baseurl) - thumbnail_url = getThumbnail(this@ZeistMangaEntryDto.content!!) + thumbnail_url = if (this@ZeistMangaEntryDto.thumbnail == null) { + getThumbnailFromContent(this@ZeistMangaEntryDto.content!!) + } else { + getThumbnail(this@ZeistMangaEntryDto.thumbnail) + } } fun toSChapter(baseurl: String): SChapter = SChapter.create().apply { @@ -52,7 +57,12 @@ data class ZeistMangaEntryDto( return list.first { it.rel == "alternate" }.href } - private fun getThumbnail(html: ZeistMangaEntryContentDto): String { + private fun getThumbnail(thumbnail: ZeistMangaEntryThumbnail): String { + return thumbnail.url.replace("""\/s.+?-c\/""".toRegex(), "/w600/") + .replace("""=s(?!.*=s).+?-c$""".toRegex(), "=w600") + } + + private fun getThumbnailFromContent(html: ZeistMangaEntryContentDto): String { val document = Jsoup.parse(html.t) return document.selectFirst("img")!!.attr("src") } @@ -83,3 +93,8 @@ data class ZeistMangaEntryLink( data class ZeistMangaEntryCategory( val term: String, ) + +@Serializable +data class ZeistMangaEntryThumbnail( + val url: String, +) diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaGenerator.kt index 71cabb57f..75207d449 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaGenerator.kt @@ -9,11 +9,18 @@ class ZeistMangaGenerator : ThemeSourceGenerator { override val themeClass = "ZeistManga" - override val baseVersionCode: Int = 4 + override val baseVersionCode: Int = 5 override val sources = listOf( + SingleLang("Asupan Komik", "https://www.asupankomik.my.id", "id"), SingleLang("DatGarScanlation", "https://datgarscanlation.blogspot.com", "es"), + SingleLang("Hijala", "https://hijala.blogspot.com", "ar"), + SingleLang("KLManhua", "https://klmanhua.blogspot.com", "id", isNsfw = true), SingleLang("Manga Ai Land", "https://manga-ai-land.blogspot.com", "ar"), + SingleLang("Muslos No Sekai", "https://muslosnosekai.blogspot.com", "es"), + SingleLang("Noromax", "https://www.noromax.xyz", "id"), + SingleLang("ShiyuraSub", "https://shiyurasub.blogspot.com", "id"), + SingleLang("Tooncubus", "https://www.tooncubus.site", "id", isNsfw = true), ) companion object { diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaIntl.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaIntl.kt index 2f22991b5..a6143a355 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaIntl.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zeistmanga/ZeistMangaIntl.kt @@ -8,46 +8,62 @@ class ZeistMangaIntl(lang: String) { val statusFilterTitle: String = when (availableLang) { SPANISH -> "Estado" + ARAB -> "حالة" + INDONESIAN -> "Status" else -> "Status" } - val statusAll: String = when (availableLang) { - SPANISH -> "Todos" - else -> "All" - } - val statusOngoing: String = when (availableLang) { SPANISH -> "En curso" + ARAB -> "جاري التنفيذ" + INDONESIAN -> "Sedang berlangsung" else -> "Ongoing" } val statusCompleted: String = when (availableLang) { SPANISH -> "Completado" + ARAB -> "مكتمل" + INDONESIAN -> "Lengkap" else -> "Completed" } val statusDropped: String = when (availableLang) { - SPANISH -> "Abandonada" + SPANISH -> "Abandonado" + ARAB -> "إسقاط" + INDONESIAN -> "Menjatuhkan" else -> "Dropped" } val statusUpcoming: String = when (availableLang) { SPANISH -> "Próximos" + ARAB -> "القادمة" + INDONESIAN -> "Mendatang" else -> "Upcoming" } + val statusHiatus: String = when (availableLang) { + SPANISH -> "En hiatus" + ARAB -> "فجوة" + INDONESIAN -> "Hiatus" + else -> "Hiatus" + } + + val statusCancelled: String = when (availableLang) { + SPANISH -> "Cancelado" + ARAB -> "ألغيت" + INDONESIAN -> "Dibatalkan" + else -> "Cancelled" + } + // Type Filter val typeFilterTitle: String = when (availableLang) { SPANISH -> "Tipo" + ARAB -> "يكتب" + INDONESIAN -> "Jenis" else -> "Type" } - val typeAll: String = when (availableLang) { - SPANISH -> "Todos" - else -> "All" - } - val typeManga: String = when (availableLang) { SPANISH -> "Manga" else -> "Manga" @@ -68,35 +84,65 @@ class ZeistMangaIntl(lang: String) { else -> "Novel" } + val typeWebNovelJP: String = when (availableLang) { + SPANISH -> "Web Novel (JP)" + else -> "Web Novel (JP)" + } + + val typeWebNovelKR: String = when (availableLang) { + SPANISH -> "Web Novel (KR)" + else -> "Web Novel (KR)" + } + + val typeWebNovelCN: String = when (availableLang) { + SPANISH -> "Web Novel (CN)" + else -> "Web Novel (CN)" + } + + val typeDoujinshi: String = when (availableLang) { + SPANISH -> "Doujinshi" + else -> "Doujinshi" + } + // Language Filter val languageFilterTitle: String = when (availableLang) { SPANISH -> "Idioma" + ARAB -> "لغة" + INDONESIAN -> "Bahasa" else -> "Language" } - val languageAll: String = when (availableLang) { - SPANISH -> "Todos" - else -> "All" - } - // Genre Filter val genreFilterTitle: String = when (availableLang) { SPANISH -> "Género" + ARAB -> "جينيرو" + INDONESIAN -> "Genre" else -> "Genre" } // Extra val filterWarning: String = when (availableLang) { SPANISH -> "Los filtros serán ignorados si la búsqueda no está vacía." + ARAB -> "سيتم تجاهل عوامل التصفية إذا لم يكن البحث فارغًا" + INDONESIAN -> "Filter akan diabaikan jika pencarian tidak kosong." else -> "Filters will be ignored if the search is not empty." } + val all: String = when (availableLang) { + SPANISH -> "Todos" + ARAB -> "الجميع" + INDONESIAN -> "Semua" + else -> "All" + } + companion object { const val ENGLISH = "en" const val SPANISH = "es" + const val ARAB = "ar" + const val INDONESIAN = "id" - val AVAILABLE_LANGS = arrayOf(ENGLISH, SPANISH) + val AVAILABLE_LANGS = arrayOf(ENGLISH, SPANISH, ARAB, INDONESIAN) } }